无法在事件接收器中的ItemAdded上使用SPItemEventProperties ListItem

时间:2012-12-25 10:43:15

标签: event-receiver sharepoint-2013

我正在使用事件接收器修改SharePoint 2013网站中的某些输入。

他们相当直接,这是一个简单的例子

public override void ItemAdded(SPItemEventProperties properties)
{
    base.ItemAdded(properties);

    using (SPSite site = new SPSite(properties.WebUrl))
    {
        using (SPWeb web = site.OpenWeb(properties.RelativeWebUrl))
        {
            //web.AllowUnsafeUpdates = true;
            SPListItem item = properties.ListItem; // Boom!
            var title = item["Title"].ToString();
            item["Title"] = title.Replace(" ", "_");

            //item.Update();
            //item.SystemUpdate(false);
        }
    }
}

这会呈现错误

Message:
    Method not found: 'Microsoft.BusinessData.Runtime.IEntityInstance Microsoft.BusinessData.Runtime.NotificationParser.GetChangedEntityInstance(Microsoft.BusinessData.MetadataModel.IEntity, Microsoft.BusinessData.MetadataModel.ILobSystemInstance)'.

Source:
    Microsoft.SharePoint

StackTrace:
   at Microsoft.SharePoint.SPItemEventProperties.get_ListItem()
   at eventreceivers.Kundregister.PrivateCustomer.PrivateCustomer.<>c__DisplayClass2.<ItemAdded>b__0()
   at Microsoft.SharePoint.SPSecurity.<>c__DisplayClass5.<RunWithElevatedPrivileges>b__3()
   at Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated secureCode)

我确保这些方法在课堂上可用。

非常感谢任何建议,谢谢!

1 个答案:

答案 0 :(得分:2)

我已经面临同样的问题了。

而不是使用

SPListItem item = properties.ListItem; 

使用以下代码获取项目

SPListItem item = properties.Web.Lists.TryGetList(properties.ListTitle).GetItemById(properties.ListItemId);

一切顺利!

此致 Praveen Singh