Sharepoint 2010 通过SharePoint表单和列表项事件接收器更新字段
我很困惑,似乎找不到这个问题的正确答案: 当我在事件接收器中使用ItemUpdate方法更新字段标题时,如下面代码中所示,它可以工作,但我通过“编辑表单”更改的其他字段不会更改。他们保持原样Sharepoint 2010 通过SharePoint表单和列表项事件接收器更新字段,sharepoint-2010,Sharepoint 2010,我很困惑,似乎找不到这个问题的正确答案: 当我在事件接收器中使用ItemUpdate方法更新字段标题时,如下面代码中所示,它可以工作,但我通过“编辑表单”更改的其他字段不会更改。他们保持原样 public override void ItemUpdating(SPItemEventProperties properties) { SPListitem item = properties.ListItem; item["Title"] = "title has been chang
public override void ItemUpdating(SPItemEventProperties properties)
{
SPListitem item = properties.ListItem;
item["Title"] = "title has been changed";
item.Update();
}
如果我将上述代码放入ItemUpdated
中,它将不起作用,但通过UI(编辑表单)所做的更改将生效
有人能帮我解决这个问题吗
多谢各位
编辑
让我简单地这样说:
谁能告诉我如何通过事件接收器更新一个或多个字段,以及如何通过列表的编辑形式更新其他字段
我希望这更清楚。最好使用事件接收器中的ItemUpdated来更新列表中的字段。 还必须注意,使用 item.Update() 启动工作流时可能会导致一些问题。您可以使用以下命令 更新多个字段的方法
base.EventFiringEnabled = false;
try
{
item.SystemUpdate(false);
}
finally
{
base.EventFiringEnabled = true;
}
break;
使用ItemUpdate事件时,请检查
properties
参数的AfterProperties
属性。它是一个包含该项将具有的所有新值的字典。不过,它包含原始值,所有这些值都作为字符串,然后被处理为获取项目属性时将看到的实际值
当您在项目更新
事件中执行代码时,会发生以下情况:
- 用户点击保存李>
被激发,并在调用ItemUpdating
之前执行Update()
- 此时,您对
的调用将向该项触发另一个Update()
事件。在它运行的上下文中,除了ItemUpdating
之外,没有其他字段发生更改标题
- 控件返回到您重写的方法。要持久化到该项的更改不再应用
ItemUpdated
时,用户所做的更改将被持久化,因为这些更改在您执行任何操作之前被保存。然后在ItemUpdated
事件中调用该Update()
。它要么默默地抛出一个堆栈溢出异常,要么做一些完全疯狂的事情,因为您在那里创建了一个无限递归循环——这就是为什么您没有看到它更改标题的原因
如果要向UI保存的项目添加额外更改,请修改
属性
的AfterProperties
属性,而不是直接在项目中更改它们。在代码示例之前的段落中,您说代码示例在项目更新
中起作用。然后在代码示例之后,您说它在项目更新中不起作用。
是哪一个?抱歉,但是在代码之后,我使用了ItemUpdated这个词,而不是ItemUpdated。请再读一遍,很抱歉。你能为你试图设置的1个或2个其他字段发布示例代码吗?我怀疑您可能没有使用正确的字段名。