带有ListItem.Update()的SPItemEventReceiver中的ErrorCode -2130575305(0x81020037)

时间:2011-08-17 14:22:13

标签: sharepoint sharepoint-2007

我是Sharepoint的新手,我目前正在维护一个有bug的既定解决方案。不幸的是我无法解决问题。当我尝试使用properties.ListItem.Update()方法时,我在ItemAdded事件中得到一个带有ErrorCode 2130575305的SPException。

在更新项目后不久更新项目似乎存在问题?

我尝试了我在互联网上找到的所有东西,从使用“ItemAdding”方法而不是使用allowunsafeupdates到禁用防火,但没有任何效果,现在我已经没了蒸汽了

一小段程序代码:

SPListitem itm = list.GetItems(query).Add();
// all single line of text
itm["property"] = anotheritem["property" + "something" + itm["property"]; 
itm.Update();

以及之后在被覆盖的ItemAdded:

SPListItem itm = properties.ListItem;
itm["anotherproperty"] = "something different";
itm.Update(); // <- this throws the error

原始错误消息是德语,所以它对你没什么帮助,但是它说“SPException,请在你的浏览器中按回来再试一次”,这无论如何都没有任何帮助。 另外,我不能在代码中使用try catch,因为它似乎是某种Web异常?


抱歉x0n,我昨天无法回答你的问题。 它不起作用,遗憾的是,属性中没有列表,只有listid,即使我知道哪个列表调用了itemadded事件并通过lists["listname"].getitembyid(properties.listitem.id)导航到它,它也无法工作。 我写的splistitem itm = properties.listitem;已经完全没有“抓住新的副本”了吗? 有没有办法在itemAdded的开头“释放”该项目并在以后重复使用?

public override void ItemAdded(SPItemEventProperties properties)
{
SPListItem itm = properties.ListItem;
itm["somefield"] = "sometext";
itm.Update(); // <- error, itm.SystemUpdate() throws the same error btw.
base.ItemAdded(properties);
}

我也阅读了关于msdn的帮助,它只告诉我错误但不知道如何处理它,所以它没什么用处。

关于brian的回答:如果已经迭代已经是同步调用那么应该没有问题吗?

1 个答案:

答案 0 :(得分:1)

当您收到错误代码时,最佳资源是MSDN或Google。 - http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.client.listitem.update.aspx

错误代码表示该字段是只读的,这可能意味着许多事情。这可能是由于执行帐户的权限或简单的竞争条件。

SharePoint本质上排队了许多更改,因此您肯定会遇到不同执行线程之间的计时问题。如果您要更改同步事件(添加)中的项目,然后再次在异步(添加)事件中更改项目,我将非常倾向于重新思考您尝试实际执行的操作的逻辑。