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

问题描述 投票:1回答:1

背景我们已经在SharePoint 2007环境中安装了自定义开发的.WSP,并且已经在升级到2010。在升级后,自定义事件触发器不再起作用,因此尝试在2010年进行更新并使其正常工作。但是我遇到了一个问题。原始开发人员不再在这里,而且我很幸运,不必在SP Dev的背景下就可以解决这个问题。

目标创建新列表项时,触发事件。在事件内,使用“项目名称”创建一个共享文件夹并返回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;  
        }
    }
}

请注意,这是我们升级需要弄清的最后一件事。

c# sharepoint sharepoint-2010
1个回答
0
投票
让它正常工作。我同时完成了这两项操作,因此不确定是这两项的结合还是其中一项的合并。但是我删除了myListItem.UpdateOverwriteVersion();行,并包围了将web.AllowUnsafeUpdates设置为true之前更新的项目,然后将其返回到false

[也请注意,您需要将properties.ListItem保存到自己的SPListItem中,然后将其更新与尝试操作properties.ListItem["Attribute"]处的值,然后更新properties.ListItem.Update。 SharePoint不允许使用后一种选项,因此您必须保存到独立的SPListItem,然后修改和更新该选项。这可能不是最佳的SharePoint术语,但这是需要做的。

© www.soinside.com 2019 - 2024. All rights reserved.