Sharepoint 2010以编程方式更新事件处理程序中的列表项

时间:2016-05-24 17:47:57

标签: c# sharepoint sharepoint-2010

背景
我们在SharePoint 2007环境中安装了自定义开发的.WSP,并且一直在升级到2010年。随着升级,自定义事件触发器不再有效,因此尝试更新并使其在2010年工作。但我遇到了一个问题。原始的开发人员不再在这里,而且我很幸运能够在没有SP Dev背景的情况下解决这个问题。

目标
创建新列表项时触发事件。在事件中,使用Item Name创建一个共享文件夹并返回url,使用项目名称创建一个wiki页面,并包含共享文档链接并将url返回到Wiki页面。第三部分是使用新文件夹URL和Wiki页面URL更新新创建的列表项。

问题
我已经让前两个部分工作,但到目前为止还无法使用新的链接更新新创建的列表项。我能够得到链接。我已经尝试了所有基本的东西来更新我能够在网上找到的没有运气的列表。没什么好复杂的(或者我认为)。但代码包含在下面。 VS未安装在服务器上,因此无法运行调试模式,我没有直接访问服务器。创建项目时,没有客户端/用户端错误。找不到任何日志文件,即如果脚本失败则会收集错误。

启动活动

public class CreateWikiAndFolder : Microsoft.SharePoint.SPItemEventReceiver
{
    public override void ItemAdded(SPItemEventProperties properties)
    {
        try
        {
            //this.DisableEventFiring();
            base.EventFiringEnabled = false;
            string sUrlOfWikiPage = string.Empty;
            string sUrlOfNewFolder = string.Empty;
            string sSubsiteRUL = string.Empty;
            string sCurrentItemTitle = properties.ListItem["Title"].ToString();
            string sWikiListName = "TR Wikis";
            string sDocLibName = "Shared Documents";
            string sTRListID = "TR Status";

            if (sTRListID.ToUpper().Equals(properties.ListTitle.ToString().ToUpper()))
            {
                //Create the Folder
                sUrlOfNewFolder = CreateFolder(properties.ListItem.Web, sDocLibName, sCurrentItemTitle);

                //Create the Wiki
                string ItemDispFormUrl = String.Concat(properties.ListItem.Web.Url, "/", properties.ListItem.ParentList.Forms[PAGETYPE.PAGE_DISPLAYFORM].Url, "?ID=", properties.ListItem.ID.ToString());
                sUrlOfWikiPage = CreateWiki(properties.ListItem.Web, sWikiListName, sCurrentItemTitle, ItemDispFormUrl, sUrlOfNewFolder);


                //Update the current TR Item
                //Have tried. properties.ListItem["WikiURL"] = sUrlOfWikiPage + ", " + "Wiki";
                SPListItem myListItem = properties.ListItem;
                SPFieldUrlValue shareFolderURLValue = new SPFieldUrlValue();
                shareFolderURLValue.Description = "Shared Folder";
                shareFolderURLValue.Url = sUrlOfNewFolder ;
                myListItem["SharedFolder"] = shareFolderURLValue;

                //I've tried each one separate and together to no luck
                myListItem.UpdateOverwriteVersion();
                myListItem.Update();
                //properties.ListItem.UpdateOverwriteVersion();

            }
            base.EventFiringEnabled = true;  
        }
    }
}

非常感谢任何帮助,因为这是我们升级所需的最后一件事。感谢。

1 个答案:

答案 0 :(得分:0)

搞定了。我同时做了这两件事,所以我不确定它是两者的组合还是仅仅是其中一项。但我删除了myListItem.UpdateOverwriteVersion();一行,并将web.AllowUnsafeUpdates更新后的项目设置为true,之后又返回false

另外,作为对其他人的说明,您需要将properties.ListItem保存到自己的SPListItem,然后将其更新,而不是尝试操纵properties.ListItem["Attribute"]上的值,然后更新properties.ListItem.Update。 SharePoint不允许后一个选项,因此您必须保存到独立的SPListItem,然后修改并更新该选项。这可能不是最好的SharePoint术语,但这是需要做的。