SharePoint 事件接​​收器合二为一 Machine/computer/user

SharePoint Event Reciever Works On One Machine/computer/user

因此,由于我们从 2007 年到 2010 年 migration/update,我们已经为 SharePoint 2010 创建了 WSP 的更新版本。

WSP 是 ItemAdded() 的一个事件 handler/reciever,我们让它按预期工作。问题是该操作似乎只对一个 computer/machine 有效,对其他无效。

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

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

用户 #2 可以在 M1 上登录并创建一个新项目,所有操作都可以正常进行。但是,如果 U1 使用 M2 或 M3 创建项目,则事件不会触发。机器 #1 能够根据需要多次触发事件,但没有其他计算机能够。

如果您能够理解,是本地计算机或 SP 服务器上的代码或某种缓存设置有问题,还是其他?感谢任何帮助。

更新:所有机器都在同一个网络上。这些机器不是服务器,而是各种个人笔记本电脑。开发是在单独的机器上完成的。所有人都通过相同的 URL 访问。所有用户都具有相同的访问权限。这是目前在我们的测试站点上,一旦 migration/upgrade 发生,它将切换为生产。

在当前的 .WSP 部署之前,我们注意到了同样的问题,但它是相反的,机器 #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.

添加-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
        }
    }
}

它可能是硬编码的 path/url,但是没有足够的信息来确定问题,如果您提供更多详细信息或分享一些信息,我很乐意用更详细的理论更新我的答案你的代码。

解决了问题。我没有将它们包含在上面的文件代码中。但是我们正在将 StreamWriting 写入服务器上的文本文件以帮助我们进行调试。问题在于,当用户 1 登录到他们的机器上并且日志文件不存在时,它们就会生成。现在没有其他用户可以 read/write 访问这些文件,因此它在我们的调试文件中为其他任何人都出错了。但是 Windows 用户可以 运行 随心所欲,因为他们是文件的所有者:/