Pubblicato da: maverick | giugno 19, 2009

DBDesigner4 e MySql Problem

I had a problem connecting mysql from DBDesigner4. Error occurs :

Connection to database failed.

dbExpress Error: Invalid
Username/Password

Username/Password spelled correctly. The problem is because DBDesigner4 was designed for MySQL 3.x.x. For MySQL 4 and higher we have to do the old password trick. This is the solution which is works fine for me. In your terminal, connect to your database:

mysql -u root -p
SET PASSWORD FOR 'root'@'localhost' = OLD_PASSWORD('r00tp45sw0rd');
UPDATE mysql.user SET Password = OLD_PASSWORD('r00tp45sw0rd') WHERE Host = 'localhost' AND User = 'root';
FLUSH PRIVILEGES;

Then you should have no problem connecting to your MySQL servers. You may change the username (root), password (r00tp45sw0rd) & host (localhost) with your own.

Pubblicato da: maverick | marzo 5, 2009

Esempio dell’utilizzo di “ValidationOption”

 public static DependencyProperty __ListItemProperty = DependencyProperty.Register("__ListItem", typeof(int), typeof(AddSPWeb));

        [Description("Id of the list")]
        [Category("Custom")]
        [Browsable(true)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)]
        [ValidationOption(ValidationOption.Required)]
        public string __ListId
        {
            get
            {
                return ((string)(base.GetValue(__ListIdProperty)));
            }
            set
            {
                base.SetValue(__ListIdProperty, value);
            }
        }
Pubblicato da: maverick | marzo 5, 2009

Validare una Custom Workflow Activity

Validation component is a good way to avoid some predictable exceptions which come from wrong inputs and cause unexpected state for your application.  Using validator component you can avoid these exceptions and give appropriate error texts before compilation to correct your input parameters.

Adding a validator component to a custom workflow is very simple and consists of two steps:

  • Create a validator component for custom activity by inheriting from ActivityValidator base class.
  • Add an ActivityValidator attribute to custom workflow class.

Ok, most things will be done in first step.

There is a ActivityValidator class in System.Workflow.ComponentModel.Compiler.  To build a validator you need to create a new class and derive it from this base class and override its Validate() method.  Validate() returns a ValidationErrorCollection object which consists of all validation errors for the activity.  This method also has two parameters: a ValidationManager and an object.  Later you can use this second parameter (object) to convert it to the type of your custom activity and get access to your activity components.

I want to extend the custom workflow activity that I used in my previous post to validate its Path property and use a regular expression to make sure user enters a valid path with .txt file extension.

I add a CustomActivityValidator class to my Class Library project (created in my previous post) and derive it from ActivityValidator then override Validate() method.  After that I convert object parameter to my custom activity type (named CustomActivity) and use this newly created object to get access to its Path property and validate its value.  In next step I use a regular expression to check if given Path property is valid otherwise I add a new ValidationError to my ValidationErrorCollection and finally returns this ValidationErrorCollection.

using System;

using System.Text.RegularExpressions;

using System.Workflow.ComponentModel.Compiler;

namespace CustomActivitySample

{

internal sealed class CustomActivityValidator : ActivityValidator

{

public override ValidationErrorCollection Validate(ValidationManager manager, object obj)

{

CustomActivity customActivity = obj as CustomActivity;

ValidationErrorCollection errorCollection = new ValidationErrorCollection();

if (customActivity != null)

{

// Regular Expression inspired from Steve’s RegExLib.Com

Regex regEx = new Regex(“([a-zA-Z]:(\\w+)*\\[a-zA-Z0_9]+)?.txt”,

RegexOptions.IgnoreCase | RegexOptions.Multiline);

if (!regEx.IsMatch(customActivity.Path))

errorCollection.Add(new ValidationError

(“String value provided for Path property is not valid!”, 1984));

}

return errorCollection;

}

}

}

Now that I have a validator component in hand, I can simply add an ActivityValidator attribute to my custom workflow class and pass the type of this validator class to it.  Do not forget to add a reference to System.Workflow.ComponentModel.Compiler before adding this attribute.

using System;

using System.Collections.Generic;

using System.Text;

using System.Workflow;

using System.Workflow.Activities;

using System.Workflow.Runtime;

using System.Workflow.ComponentModel;

using System.Workflow.ComponentModel.Design;

using System.IO;

using System.Workflow.ComponentModel.Compiler;

namespace CustomActivitySample

{

[ActivityValidator(typeof(CustomActivityValidator))]

public class CustomActivity : Activity

{

Alright, now my custom activity has a validator component and I can test it.  After compiling this custom activity to an assembly and replacing my previous custom activity in Toolbox with this new one and add it to a Sequential Workflow, I can set its properties.

If I put an invalid value for Path property (for example a path with .jpg extension), I can see that an error icon appears on top right corner of my activity.  If I click on it then it shows an error text (provided in validator component code).

It also shows this error in Error List window.

Heh, do you want to escape and build?!  Just do that to see what will happen!

Articolo preso dal seguente link:

http://nayyeri.net/blog/how-to-write-a-validator-for-custom-workflow-activity/

Pubblicato da: maverick | dicembre 3, 2008

Metodo per l’invio di e-mail in C#

public static bool SendMail(string fromName, string fromAddress, string toName, string toAddress, string body, string subject, bool sslEnabled)
        {
           string pswd = ConfigurationManager.AppSettings["SmtpPwd"];
            string userName = ConfigurationManager.AppSettings["SmtpUser"];
            string host = ConfigurationManager.AppSettings["SmtpServer"];
            int port = Convert.ToInt32(ConfigurationManager.AppSettings["SmtpPort"]);
         
   if (string.IsNullOrEmpty(pswd) || string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(host))
            {
                string s = “Configuration error”;
                return false;
            }
            else
            {
                bool inviato = false;
                MailMessage msg = new MailMessage(new MailAddress(fromAddress), new MailAddress(toAddress));
                msg.Subject = string.Format(“Messaggio per {0} da parte di {1} <{2}>”, toName, fromName, fromAddress);  
                msg.SubjectEncoding = System.Text.Encoding.UTF8;
                msg.Body = body;  
                msg.BodyEncoding = System.Text.Encoding.UTF8;
                msg.IsBodyHtml = false;
                SmtpClient client = new SmtpClient(host, port);
                client.Credentials = new NetworkCredential(userName, pswd);
                client.EnableSsl = sslEnabled;  

               try
                {
                    client.Send(msg);  
                    inviato = true;
                }
                catch (SmtpException ex)
                {
                    string message = ex.Message;
                    inviato = false;
                }
                return inviato;
            }
        }

Pubblicato da: maverick | novembre 10, 2008

Programming SharePoint List Data

Data Insertion

using (SPSite spsite = new SPSite(http://SPS01))
{
    using (SPWeb spweb = spsite.OpenWeb())
    {
     spweb.AllowUnsafeUpdates = true;
     SPList splist = spweb.Lists["Custom List"];
     SPListItem splistitem = splist.Items.Add();
     splistitem["Title"] = “Paul Joseph Adame”;
     splistitem["First_x0020_Name"] = “Luke Martin”;
     splistitem["Last_x0020_Name"] = “Adame”;
     splistitem.Update();
     }
}

Data Retrieval

using (SPSite spsite = new SPSite(“http://SPS01″))
{
    using (SPWeb spweb = spsite.OpenWeb())
    {
     spweb.AllowUnsafeUpdates = true;
     SPSiteDataQuery spsitedataquery = new SPSiteDataQuery();
     spsitedataquery.Lists = “<Lists BaseType=’0′/>”;
     spsitedataquery.Query = “<Where><Gt><FieldRef Name=’ID’ /><Value Type=’Number’>0</Value></Gt></Where>”;
     spsitedataquery.Webs = “<Webs Scope=’SiteCollection’ />”;
     spsitedataquery.ViewFields = “<FieldRef Name=’Title’ /><FieldRef Name=’First_x0020_Name’    /><FieldRef Name=’Last_x0020_Name’ />”;
     spsitedataquery.RowLimit = 10;
     DataTable datatable = spweb.GetSiteData(spsitedataquery);
     gvwList.DataSource = datatable;
     gvwList.DataBind();
     }
}

Pubblicato da: maverick | novembre 6, 2008

Modificare la password di Mediawiki da Mysql

Mediawiki non memorizza la password in chiaro ma tramite l’algoritmo MD5. I passi che ho effettuato per modificare una password sono stati i seguenti:

  1. installazione nel sistema il tool “Mysql query browser”
  2. accesso tramite le credenziali di root del database
  3. esecuzione della seguenti query:

    update user set user_password = md5(concat(user_id,’-’,md5(’new_password’))) where user_name=someone

Pubblicato da: maverick | novembre 5, 2008

MySQL Root Password Recovery

 Seguono le istruzioni per resettare una password di root di mysql:
# stoppare mysqld
#killall mysqld

# lanciare mysqld con l’opzione skip-grant-tables, che evita di caricare le tabelle di sistema (tra cui anche quella degli accessi) fornendo libero accesso al servizio mysqld
# mysqld_safe (o mysql_safe) –skip-grant-tables –user=mysql &

/usr/libexec/mysqld: ready for connections

# entrare in modalità client
# mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 3.23.56
Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the buffer.

#collegarsi al db mysql e inserire la query di update di cambio password
mysql> USE mysql

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

mysql> UPDATE user SET password=password(“mianuovapassword”)WHERE user=”root”;

Query OK, 2 rows affected (0.00 sec)
Rows matched: 2  Changed: 2  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

mysql> exit
poi
#mysqladmin flush-privileges

Pubblicato da: maverick | ottobre 21, 2008

Export/Import Spreadsheet

Problema: durante l’importazione di una lista da Excel 2007 viene restituito in output l’errore ” Method ‘Post’ of object ‘IOWSPostData’ failed”

Soluzione: posizionarsi nella cartella C:\Program Files\Microsoft Office\Office12\1033 ed eseguire il file ‘EXPTOOWS’ con Excel. Premere ALT+F11 ed aggiungere lVer=2 alla seguente riga lVer=Application.SharePointVersion(URL) per poi salvare il tutto. Provare l’operazione di importazione su SharePoint, se non funziona rimpiazzare la riga precedente con lVer=3 e riavviare la macchina.

p.s. Nella macchina deve essere installato Microsoft Office 2007.

Riusare più volte, ed in contesti diversi un workflow, occorre create un workflow template da Visual Studio e pubblicarlo sul server SharePoint. Normalmente, un workflow creato semplicemente da SharePoint Designer è utilizzabile solo nel contesto del sito e della lista (o document library) su cui è stato creato. Nel blog ufficiale del team di SharePoint Designer viene spiegato come fare per creare un workflow template partendo dal Designer: 

  1. Crea un nuovo workflow project in Visual Studio
  2. Copia i file .xoml e .rules da da SharePoint Designer al progetto Visual Studio
  3. Genera in file .cs se desideri aggiungere altro codice al di sotto dello .xoml
  4. Fai il deploy ed il debug del workflow

dal blog di Igor Macori

Pubblicato da: maverick | ottobre 15, 2008

Accesso anonimo su SharePoint

Attivando l’accesso anonimo a un sito Web, si consente agli utenti anonimi, nonché agli utenti autenticati ai quali non è stato concesso l’accesso al sito, di esplorare l’intero sito, compresi elenchi, raccolte, cartelle all’interno di un elenco o una raccolta, voci di elenco o documenti che ereditano le relative autorizzazioni dal sito Web. Se l’amministratore del server ha attivato l’accesso anonimo, i membri del gruppo di SharePoint Proprietari di Nome sito possono eseguire le operazioni seguenti:

  • Concedere l’accesso anonimo a un sito.
  • Concedere l’accesso anonimo solo a elenchi e raccolte.
  • Bloccare l’accesso anonimo a un sito.

 

 ATTENZIONE   L’attivazione dell’accesso anonimo riduce inevitabilmente il livello di protezione di un server Web, poiché gli utenti anonimi e gli utenti autenticati ai quali non è stato concesso l’accesso al sito possono potenzialmente modificarne le impostazioni o il contenuto, oppure lanciare un attacco Denial of Service ai danni del server e non sarà possibile risalire a un account utente reale.

Considerazioni sull’accesso anonimo:

Quando si concede agli utenti anonimi di visualizzare il sito, gli elenchi o le raccolte, gli utenti anonimi possono inoltre individuare informazioni del sito, ad esempio gli indirizzi di posta elettronica e i contenuti inviati agli elenchi, alle raccolte e alle discussioni. Quando si concedono agli utenti anonimi autorizzazioni diverse dall’autorizzazione di lettura per elenchi e raccolte, gli utenti anonimi possono collaborare agli elenchi, partecipare alle discussioni, rispondere ai sondaggi e modificare i documenti, e quindi utilizzare una grande quantità di spazio su disco del server e altre risorse. Per garantire un livello di protezione più elevato per un sito, un elenco o una raccolta, non è consigliabile attivare l’accesso anonimo. Gli utenti anonimi non possono aprire siti per la modifica in programmi compatibili con Microsoft Windows SharePoint Services, ad esempio Microsoft Office SharePoint Designer 2007 né utilizzare il protocollo Cartelle Web in Windows, ovvero non possono visualizzare il sito in Risorse di rete.

SUGGERIMENTO   Invece di concedere l’accesso anonimo, è possibile aggiungere il gruppo di protezione di Windows Authenticated Users al gruppo di SharePoint Visitatori di Nome sito. In questo modo, l’accesso in lettura al sito Web viene concesso a tutti i membri autenticati del dominio di Windows. A differenza di quelle degli utenti anonimi, le azioni degli utenti autenticati possono essere ricondotte all’esecutore. Per ulteriori informazioni sull’aggiunta di utenti ai gruppi di SharePoint, vedere Gestire i gruppi di SharePoint.

Come avviene per altre impostazioni delle autorizzazioni, quando si concede l’accesso anonimo a un sito, lo si concede anche ai siti secondari che ereditano le autorizzazioni da tale sito.

Attivare l’accesso anonimo a un sito:

Per eseguire questa procedura è necessario che un amministratore abbia attivato l’accesso anonimo per l’applicazione Web. In caso contrario, l’opzione Accesso anonimo non verrà visualizzata.

  1. Aprire il sito per il quale si desidera attivare l’accesso anonimo.
  2. Scegliere Impostazioni sito dal menu Azioni sito. In un sito nel quale il menu Azioni sito è stato personalizzato, scegliere Impostazioni sito, quindi fare clic sulle impostazioni che si desidera visualizzare.
  3. Nella colonna Utenti e autorizzazioni della pagina Impostazioni sito fare clic su Autorizzazioni avanzate.
  4. Nella pagina Autorizzazioni scegliere Accesso anonimo dal menuImpostazioni.
  5. Nella pagina Modifica impostazioni accesso anonimo selezionare le parti del sito Web alle quali gli utenti anonimi devono avere accesso.
  6.  NOTA   Per ulteriori informazioni sulle opzioni disponibili in questa pagina, fare riferimento alla tabella precedente.

Attivare l’accesso anonimo a un elenco o una raccolta:

 NOTE 

  • Utilizzare questa procedura solo se si è attivato l’accesso anonimo a un sito come descritto in precedenza e si è concesso l’accesso all’intero sito Web oppure solo a determinati elenchi e raccolte nel passaggio 5 precedente.
  • I passaggi successivi possono essere eseguiti solo su elenchi o raccolte che utilizzano autorizzazioni esclusive.
  1. Aprire l’elenco o la raccolta per il quale si desidera attivare l’accesso anonimo.
  2. Scegliere Impostazioni elenco o Impostazioni raccolta dal menuImpostazioni.
  3. Nella colonna Autorizzazioni e gestione fare clic su Autorizzazioni per questo elenco oppure su Autorizzazioni per questa raccolta.
  4.  NOTA   Se l’elenco o la raccolta eredita le autorizzazioni dal relativo sito padre, il menu Impostazioni non sarà disponibile nella pagina Autorizzazioni.

  5. Se l’elenco o la raccolta eredita le autorizzazioni dal sito, è necessario interrompere prima l’ereditarietà dal sito. A tale scopo, scegliere Modifica autorizzazioni dal menu Azioni e quindi fare clic su OK per continuare. In caso contrario, andare al passaggio 5.
  6. Nella pagina Autorizzazioni scegliere Accesso anonimo dal menu Impostazioni.
  7. Nella pagina Modifica impostazioni accesso anonimo selezionare le autorizzazioni che si desidera concedere agli utenti anonimi per l’elenco o la raccolta.
  8.  NOTA   Per le raccolte è disponibile solo l’autorizzazione Visualizzazione elementi. Ciò consente di proteggere il sito da potenziali attacchi intrusivi nel codice script.

fonte articolo: Microsoft Office Online

Articoli precedenti »

Categorie

Follow

Get every new post delivered to your Inbox.