Pages

Wednesday, November 18, 2009

Guida SharePoint – Gestione degli eventi delle liste

Precedenti post:
 
Gli eventi sono un’altro aspetto interessante di SharePoint 2007.
Già presenti nelle versioni precedenti, erano limitate alle document libraries, vedono la loro espansione in questa versione di SharePoint.

Gli eventi vengono generati per svariarti motivi:
  • Modifica di list items
  • Creazione di una nuova list
  • Nuova list items
  • Rimozione list items
  • etc
Per una lista completa degli eventi gestiti potete fare riferiemnto alle msdn.
Per poter creare un receiver correttamente funzionante dovremo deploiare in GAC una libreria .NET strong-typed e far derivare la nostra classe da una classe EventReceiver sulla quale dovremo lavoare, ad esempio: SPItemEventReceiver o SPListEventReceiver.
Entrambe derivano dalla classe abstract SPEventReceiverBase.

Creazione di un Event Receivers

Creare un event receivers è semplicissimo. Si può riassumere tutto in 4 passi:
  1. Creare una classe che eredita dalla SPListEventReceiver o dalla SPItemEventReceiver
  2. Firmare la libreria con uno strong name
  3. Deploiare la libreria nella Global Assembly Cache
  4. Deploiare l’event receiver tramite una feature, con unc ontent type etc etc
 

Creazione di un event receiver per una lista

Un evento sulla lista viene generato quando un metadato della lista viene modificato.
Ad esempio potremmo creare un receiver che si attiva quando un campo viene aggiunto o rimosso dalla lista.

Possiamo stare in ascolto e ricevere una notifica, sia allo scaturirsi (FieldAdding) dell’evento che subito dopo che l’evento è stato scaturito (FieldAdded).
Tutti gli eventi accettano un parametro che è l’SPListEventProperties fate riferimento alla pagina msdn per l’elenco delle proprietà.
Prima di creare l’event receiver, accertiamoci d’aver installato VSeWSS se lavoriamo con Visual Studio 2008.
Se è installato creiamo un nuovo progetto di tipo Empty.

E inserite il seguente codice:

namespace ListMetaLogger
{
using System;
using System.IO;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;

public class ListMetaLogger : SPListEventReceiver
{
public override void FieldAdded(SPListEventProperties properties)
{
LogEvent(properties, "FieldAdded");
}

public override void FieldAdding(SPListEventProperties properties)
{
LogEvent(properties, "FieldAdding");
}

public override void FieldDeleting(SPListEventProperties properties)
{
LogEvent(properties, "FieldDeleting")
}

public override void FieldDeleted(SPListEventProperties properties)
{
LogEvent(properties, "FieldDeleted");
}

public override void FieldUpdated(SPListEventProperties properties)
{
LogEvent(properties, "FieldUpdated");
}

public override void FieldUpdating(SPListEventProperties properties)
{
LogEvent(properties, "FieldUpdating");
}

private void LogEvent(SPListEventProperties properties, string eventName)
{
StreamWriter sw = File.AppendText(@"C:\listeventlog.txt");
StringBuilder sb = new StringBuilder();
sb.AppendFormat("[{0}] {1} Event Occurred:\n", DateTime.Now.ToString(), eventName);
sb.AppendFormat("\tList : {0}", properties.ListTitle);
sb.AppendFormat("\t{0} - Field {1}", properties.EventType.ToString(), properties.FieldName);
sw.WriteLine(sb.ToString());
sw.Close();
}
}
}


Il codice di sopra genererà un file C:\listeventlog.txt il quale conterrà l’elenco di tutti gli eventi scaturiti dalle liste.


Creazione per un event receivers per gli Items

La gestione degli eventi sugli item è uguale a quella delle liste.
Negli eventi scaturiti la classe con cui lavoreremo sarà la SPItemEventProperties:


namespace EventLogger
{
using System;
using System.IO;
using Microsoft.SharePoint;

public class ListEventLogger : SPItemEventReceiver
{
public override void ItemAdded(SPItemEventProperties properties)
{
WriteTextToLog(string.Format("[{0}] Item Added : {1}", properties.ListItem.Title, DateTime.Now.ToString()));
}

public override void ItemDeleted(SPItemEventProperties properties)
{
WriteTextToLog(string.Format("[{0}] Item Deleted : {1}", properties.ListItem.Title, DateTime.Now.ToString()));
}

public override void ItemUpdated(SPItemEventProperties properties)
{
WriteTextToLog(string.Format("[{0}] Item Updated : {1}", properties.ListItem.Title, DateTime.Now.ToString()));
}

private void WriteTextToLog(string text)
{
StreamWriter logFile = File.AppendText(@"C:\listlog.txt");
logFile.Write(text + "\n");
logFile.Close();
}
}
}
 
Da notare che potremmo bloccare, ad esempio, l’update di un item nella lista settando a true la proprietà Cancel.
 
Nel prossimo post vedremo come effettuare il deploy di queste librerie.

No comments:

Post a Comment