怪异的SharePoint项目更新行为
本文关键字:更新 项目 SharePoint | 更新日期: 2023-09-27 18:02:51
我有一个SharePoint列表,在那里我注册了一个自定义ItemUpdating事件接收器,但我在这个解决方案中看到一些非常奇怪的行为。如果我向事件接收器添加base.ItemUpdating以外的任何代码,则会发生此行为。
发生的是,如果我调试事件接收器,我可以看到属性。AfterProperties具有在字段和属性中输入的所有值。ListItem包含原始项。但是,一旦ER完成运行并重新加载页面,就不会保存任何内容,它只是返回到我更改值之前的状态。更奇怪的是,如果我手动设置类似下面的属性,它会工作,更新被正确保存。基本上,事件接收者让我负责对项目做任何更改,但这不是ItemUpdating的正常行为。有人知道是什么引起的吗?
public override void ItemUpdating(SPItemEventProperties properties)
{
var recurringBefore = properties.ListItem.TryGetValue<bool>(Constants.CommonFields.Recurring_STATIC);
var recurringAfter = Convert.ToBoolean(properties.AfterProperties[Constants.CommonFields.Recurring_STATIC]);
//This loop is the horrible fix I have done to manually update the relevant fields but this shouldn't be necessary
var item = properties.ListItem;
foreach (SPField key in item.Fields)
{
if (item[key.InternalName] != properties.AfterProperties[key.InternalName] && key.CanBeDisplayedInEditForm && properties.AfterProperties[key.InternalName] != null)
{
//looping through and setting the AfterProperties to what they already are makes them save? If I don't do this nothing saves
properties.AfterProperties[key.InternalName] = properties.AfterProperties[key.InternalName].ToString();
}
}
if (!recurringBefore && recurringAfter &&
currWfStatus == Constants.WorkflowStatus.Processed)
{
//do some stuff
}
base.ItemUpdating(properties);
}
是否因为您根本没有保存当前项目,例如:
item.update();