代码之家  ›  专栏  ›  技术社区  ›  MTCLMBR

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

  •  0
  • MTCLMBR  · 技术社区  · 8 年前

    因此,由于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.
    

    添加SPSolution-LiteralPath“OurPath/ourFile.wsp”

    安装SPSolution-Identity ourIdentity-WebApplication http://myhost.com/ -GAC部署

    下面是代码的主要部分

    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 回复  |  直到 8 年前
        1
  •  0
  •   Isaac E. Krauss    8 年前

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

        2
  •  0
  •   MTCLMBR    8 年前

    解决了这个问题。我没有在上面的文件代码中包含它们。但是,我们正在对服务器上的文本文件进行StreamWriting,以帮助我们进行调试。问题是,当用户1登录到他们的机器上,而日志文件不存在时,就会生成它们。现在没有其他用户对这些文件具有读/写访问权限,因此其他用户的调试文件出错。但Windows用户可以根据自己的意愿运行它,因为他们是文件的所有者:/