SharePoint事件接收器在一台计算机/计算机/用户

时间:2016-06-01 19:17:39

标签: c# sharepoint sharepoint-2010

因此,我们已经为2007年至2010年的迁移/更新创建了适用于SharePoint 2010的WSP的更新版本。

WSP是ItemAdded()的事件处理程序/接收者,我们让它按预期工作。问题是该操作似乎只适用于一台计算机/机器而不适用于其他计算机/机器。

当项目被添加到列表中时,WSP在共享文档库中创建一个文件夹,创建一个wiki页面,然后使用指向共享文档和Wiki的链接更新新的列表项。

当机器#1和用户#1触发时,当创建新项目时,机器#2(M2)和用户#2(U2)或M3和U3非任务发生时,所有操作都有效。

用户#2可以登录M1并创建新项目并且所有操作都有效。但是如果U1使用M2或M3创建项目,则事件不会触发。机器#1能够根据需要多次触发事件,但其他计算机无法触及。

如果您能够关注本地计算机或SP服务器上的代码或某种缓存设置,还是其他什么?任何帮助表示赞赏。

更新:所有计算机都在同一网络上。非机器是服务器,但各种个人笔记本电脑。开发是在一台单独的机器上完成的。所有人都通过相同的URL访问。所有用户都有相同的访问权这是在我们的测试站点上,一旦迁移/升级发生,将转换为生产。

在当前.WSP部署之前,我们注意到了同样的问题,但反过来,Machine#2完成了所有更新,但机器#1和#3却没有。我们唯一能想到的是那些机器是第一个在部署后触发事件的机器。

I'm Not doing the .WSP install but our IT guy is(won't let us have access :/ but I understand) but below is the install commands he is running.

Add-SPSolution -LiteralPath“OurPath / ourFile.wsp”

Install-SPSolution -Identity ourIdentity -WebApplication http://myhost.com/ -GACDeployment

以下是代码的主要部分

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
                SPWeb myWeb = properties.ListItem.Web;
                myWeb.AllowUnsafeUpdates = true;

                SPListItem myListItem = properties.ListItem;
                SPFieldUrlValue shareFolderURLValue = new SPFieldUrlValue();
                shareFolderURLValue.Description = "Shared Folder";
                shareFolderURLValue.Url = sUrlOfNewFolder ;
                myListItem["SharedFolder"] = shareFolderURLValue;

                myListItem.Update();

                myWeb.AllowUnsafeUpdates = false;
            }
            base.EventFiringEnabled = true;  
        } 
        catch (Exception e)
        {
         //Currently throwing nothing
        }
    }
}

2 个答案:

答案 0 :(得分:0)

它可能是一个硬编码的路径/网址,但是没有足够的信息来识别问题,如果您提供更多详细信息或者您共享一些代码,我会很高兴用更详细的理论更新我的答案。

答案 1 :(得分:0)

找出问题所在。我没有用上面的文件代码包含它们。但我们将StreamWriting转换为服务器上的文本文件以帮助我们进行调试。问题在于,当用户1登录到他们的机器并且日志文件不存在时,它们将被生成。现在没有其他用户对这些文件具有读/写访问权限,因此它在我们的调试文件中出错了。但是Windows用户可以按照他们想要的那样运行它,因为他们是文件的所有者:/