Appel récursif pour SPListItem méthode de mise à Jour lorsqu'il est appelé à partir d'un récepteur d'événements ItemUpdated
-
10-12-2019 - |
Question
Je suis tombé dans un problème sérieux au sujet de la SPListItem
Méthode de mise à jour.Quand je fais un récepteur d'événement à intercepter SPListItem
modifier ou mettre à jour avec SPItemEventReceiver ItemUpdated method
, l'événement est appelée récursivement.
source:
public override void ItemUpdated(SPItemEventProperties properties)
{
base.ItemUpdated(properties);
SPList list = properties.List;
SPListItem item = properties.ListItem;
if ("Oui" == properties.ListItem["Envoyé vers le Directeur"].ToString())
{
SPListItem copyItem = item;
MoveItemsToFolder(properties, list, "Dossiers envoyés Rédaction", copyItem);
item["Service"] = "direction";
item.Update();
string[] cols = { "Envoyé vers le Directeur", "Archivé" };
HideColumns(list, cols);
}
else if ("Oui" == properties.ListItem["Validé par le Directeur"].ToString())
{
SPListItem copyItem = item;
MoveItemsToFolder(properties, list, "Direction", copyItem);
item["Service"] = "bureauOrdre";
item.Update();
string[] cols = { "Validé par le Directeur", "Envoyé vers le Directeur" };
HideColumns(list, cols);
}
else if ("Oui" == properties.ListItem["Archivé"].ToString())
{
SPListItem copyItem = item;
MoveItemsToFolder(properties, list, "Archives", copyItem);
item["Service"] = "Archive";
item.Update();
string[] cols = { "Validé par le Directeur", "Envoyé vers le Directeur" };
HideColumns(list, cols);
}
else
{
item["Service"] = "redaction";
item.Update();
}
}
La solution
La solution est d'utiliser SPItemEventReceiver.EnableEventFiring
MSDN
Vous pouvez le faire
var eventRecTemp = new SPItemEventReceiver();
eventRecTemp.EnableEventFiring = false;
//update
eventRecTemp.EnableEventFiring = true;
ou comme cette blog en parle, de le transformer en un champ d'application à l'aide de IDisposable
.
J'ai utilisé le champ d'application de la méthode dans un ItemUpdated
lourd projet et cela a bien fonctionné.
Licencié sous: CC-BY-SA avec attribution
Non affilié à sharepoint.stackexchange