【问题标题】:SharePoint Event Reciever Works On One Machine/computer/userSharePoint 事件接​​收器在一台机器/计算机/用户上工作
【发布时间】:2016-10-01 07:36:18
【问题描述】:

由于我们从 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 部署之前,我们注意到了同样的问题,但情况正好相反,机器 #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"

安装-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
        }
    }
}

【问题讨论】:

  • 您可以通过添加以下信息来改进这个问题:这3台机器是否在同一网段?机器#1 是您开发解决方案的地方吗?机器#1 是服务器吗?您是否有不同的区域 (URL) 来访问同一个 Web 应用程序?每个用户有什么权限?您是如何部署 WSP(农场或沙盒)的?分享部分代码会很有帮助。
  • 谢谢,上面也添加了。所有机器都在同一个网络上。这些机器都不是服务器,而是各种个人笔记本电脑。开发是在单独的机器上完成的。所有人都通过相同的 URL 访问。所有用户都有相同的访问权限。这目前在我们的测试站点上,一旦发生迁移/升级,它将切换到生产环境。在当前的 .WSP 部署之前,我们注意到了同样的问题,但它是相反的,机器 #2 完成了所有更新,但机器 #1 和 #3 不能。我们唯一能想到的是,那些机器是部署后最先触发事件的。

标签: c# sharepoint sharepoint-2010


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多