2009-09-03 7 views
2

J'écris un gestionnaire d'événement pour gérer la mise à jour d'un SPItem particulier dans une liste. L'événement est asynchrone et j'obtiens le SPEvenItemProperties sans problème. Ce que je voudrais savoir, c'est quelle colonne SPItems a réellement déclenché l'événement. Quelqu'un at-il une idée de comment?Gestion des événements Sharepoint .. quelle colonne a changé?

Merci d'avance.

Répondre

3

Je pense que la meilleure façon de le faire serait de regarder à travers les propriétés BeforeProperties et AfterProperties de SPItemEventProperties et de vérifier quels champs ont des valeurs différentes.

Elles contiennent les valeurs de tous les champs de l'élément avant et après l'événement.

+0

En fait, cela ne fonctionnera pas à moins qu'il est une bibliothèque de documents avec versionnage est activée. Les listes régulières, avec ou sans versionnage, ne peupleront pas du tout les BeforeProperties, et toutes les colonnes seront vides. –

+0

Donc, vous devrez peut-être créer deux gestionnaires distincts, un pour ItemUpdating (où vous stockez en quelque sorte le jeu de valeurs de propriété actuel) et un pour ItemUpdated (où vous obtiendriez le nouveau jeu de valeurs de propriété, puis comparez avec sauvegardé par le gestionnaire de mise à jour) ... –

4

Votre réponse dépend un peu du lieu et de la manière dont SPListItem est récupéré. Dans une liste régulière, vous n'avez pas accès aux valeurs précédentes de l'élément. Si vous activez la gestion des versions, vous pouvez accéder aux versions précédentes, en fonction des autorisations, bien sûr.

Pour une bibliothèque de documents, vous pouvez utiliser SPItemEventProperties.BeforeProperties pour obtenir les métadonnées précédentes d'un document.

Pour une bibliothèque de documents, vous pouvez essayer quelque chose comme ceci:

foreach (DictionaryEntry key in properties.BeforeProperties) 
{ 
    string beforeKey = (string)key.Key; 
    string beforeValue = key.Value.ToString(); 

    string afterValue = ""; 
    if (properties.AfterProperties[beforeKey] != null) 
    { 
     afterValue = properties.AfterProperties[beforeKey].ToString(); 
     if (afterValue != beforeValue) 
     { 
      // Changed... 
     } 
    } 
} 

.B

Questions connexes