استدعاء متكرر لطريقة تحديث سبليستيتم عند استدعاؤها من عنصر استقبال الحدث
-
10-12-2019 - |
سؤال
لقد سقطت في مشكلة خطيرة حول SPListItem
طريقة التحديث.عندما جعل استقبال الحدث لاعتراض SPListItem
تغيير أو تحديث مع SPItemEventReceiver ItemUpdated method
, ، يتم استدعاء الحدث بشكل متكرر.
المصدر:
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();
}
}
المحلول
الحل هو استخدام SPItemEventReceiver.EnableEventFiring
مسن
يمكنك أن تفعل
var eventRecTemp = new SPItemEventReceiver();
eventRecTemp.EnableEventFiring = false;
//update
eventRecTemp.EnableEventFiring = true;
أو كما هذا يتحدث بلوق عن ، وتحويلها إلى نطاق باستخدام IDisposable
.
لقد استخدمت طريقة النطاق في ItemUpdated
مشروع ثقيل وعملت بشكل جيد.
لا تنتمي إلى sharepoint.stackexchange