Récupérer les valeurs de champ dans un évènement.


Bonjour à tous,

Aujourd’hui je vais parler des « event handler » et plus spécifiquement de ceux utilisés sur les éléments de listes et librairies.

3 types d’évènements sont attachés aux listes et librairies : L’ajout, la mise à jour et la suppression.

Chacun de ses évènements pouvant être récupéré de manière synchrone (au moment de l’action) et asynchrone (juste après la fin de l’action).

Il est très facile de repérer si une fonction est synchrone ou asynchrone en se basant sur son nom.

Action

Synchrone

Asynchrone

Ajout

ItemAdding

ItemAdded

Mise à jour

ItemUpdating

ItemUpdated

Suppression

ItemDeleting

ItemDeleted

Comme vous pouvez le voir, les actions synchrones se finissent par « ing » et les asynchrones par « ed ».

Lors de ces actions, nous pouvons savoir les valeurs des champs et parfois même la valeur précédente du champ. Les manières de récupérer les données sont les suivantes :

Properties.ListItem[«FieldName »]

Properties.AfterProperties[«FieldName »]

Properties.BeforeProperties[«FieldName »]

Et oui, 3 possibilités qui, suivant les actions et la synchronicité de l’évènement, peuvent contenir soit la nouvelle valeur, soit l’ancienne valeur, soit rien du tout! Et la où ça se corse vraiment, cela dépend aussi du type de liste, à savoir si la liste courante est une liste ou une librairie.

Vu ce nombre de possibilités un petit tableau récapitulatif me semblait nécessaire, les voici donc.

Pour les listes :

Evénement

ListItem

BeforeProperties

AfterProperties

ItemAdding

X

X

Nouvelle valeur

ItemAdded

Nouvelle valeur

X

Nouvelle valeur

ItemUpdating

Ancienne valeur

X

Nouvelle valeur

ItemUpdated

Nouvelle valeur

X

Nouvelle valeur

ItemDeleting

Ancienne valeur

X

X

ItemDeleted

X

X

X

Pour les librairies :

Evénement

ListItem

BeforeProperties

AfterProperties

ItemAdding

X

X

X

ItemAdded

X

X

Nouvelle valeur

ItemUpdating

Ancienne valeur

Ancienne valeur

Nouvelle valeur

ItemUpdated

Nouvelle valeur

Ancienne valeur

Nouvelle valeur

ItemDeleting

Ancienne valeur

X

X

ItemDeleted

X

X

X

Il est très important de prendre en compte ces informations lorsqu’on planifie un développement.

Autre information importante : lors de l’upload d’un document par un utilisateur dans une librairie, les évènements d’ajout sont déclenchés après l’upload mais avant que l’utilisateur ne puisse remplir les métadonnées! Ce remplissage déclenchant les évènements de mise à jour.

Si vous envisagez de modifier le contenu des propriétés de ce document lors de l’évènement « ItemAdded » , vos utilisateurs risquent de voir une message comme celui-ci lorsqu’ils sauvegarderont leurs métadonnées:

« Le fichier ‘mydoc.pdf’ à été modifié par ‘user’ le ‘date‘ ».

Pour éviter ce genre d’erreur, nous avons la possibilité de définir l’évènement « ItemAdded » comme étant synchrone! En effet , tous les évènements asynchrones peuvent être définis comme synchrones!

Cela nous permettra entre autres de pré-remplir les données de notre document avant que l’utilisateur ne saisisse quoi que ce soit! Vu la nature asynchrone de l’itemadded, si vous modifiez le contenu des données, vous n’êtes pas sûr a 100% que le formulaire affiché à l’utilisateur comprendra les nouvelle données et donc éviter les conflits de sauvegarde.

Pour cela nous devons ajouter dans notre fichier xml de définition le paramètre de synchronisation.

  
<Receiver> 
<Name>EventReceiver1ItemAdded</Name> 
<Type>ItemAdded</Type> 
<Assembly>$SharePoint.Project.AssemblyFullName$</Assembly> 
<Class>TutoTaxonomy.EventReceiver1.EventReceiver1</Class> 
<SequenceNumber>10000</SequenceNumber> 
<Synchronization>Synchronous</Synchronization> 
</Receiver> 

Et ajoutons dans notre code une mise à jour de la colonne « test »

 
public override void ItemAdded(SPItemEventProperties properties) 
{ 
base.ItemAdded(properties); 
properties.ListItem["test"] = "test synchro"; 
properties.ListItem.Update(); 
} 

Et voilà, avec cette petite astuce notre formulaire est pré-rempli à chaque fois!

En espérant que ça aide !

Christopher.

Cet article, publié dans SharePoint 2007, SharePoint 2010, est tagué , . Ajoutez ce permalien à vos favoris.

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s