在MSCRM 2011插件中实例化SharePoint 2010方法时出现问题

时间:2014-12-25 05:29:16

标签: dynamics-crm-2011 dynamics-crm dynamics-crm-2013

这与SharePoint 2010与MSCRM 2011集成有关。 在CRM中创建记录时,尝试为该记录和sharepoint中的类似文件夹创建自定义文档位置,这样当用户单击实体记录中的文档链接时,它不会提示用户在Sharpoint中创建文件夹(尽量避免共享点噪音以获得更好的用户体验)

我已经通过post实现了异步插件。 (我通过控制台程序正常工作)。构建插件enter code here - 并将其部署到CRM。

创建记录时,它会显示错误消息,例如“内部服务器500错误 - 无法使用公钥令牌加载程序集等等... blab bla bla ...”

但是当我调试插件时,它在第一行命令失败,我在实例化sharePoint方法创建sharepoint的客户端上下文,它说[System.Security.SecurityException] = {“该程序集不允许部分可信赖的来电者“。}

根据谷歌的说法,根据这个问题,它应该在程序集信息文件中有一个属性“允许部分用户”。根据我的理解,这应该是因为请求从CRM插件到SharePoint dll。我的意思是共享点dll不允许来自我的程序集的请求。我们怎样才能改变它?

我引用了Microsoft.SharePoint.client.dll和Microsoft.SharePoint.Client.Runtime.dll 克服这个问题的替代方法是什么?

感谢有人可以帮助我..谢谢提前。

这是我的SharePoint代码

ClientContext clientContext = new ClientContext(siteUrl)
CredentialCache cc = new CredentialCache();
 Cc.Add(new Uri(siteUrl), "NTLM", CredentialCache.DefaultNetworkCredentials);
                clientContext.Credentials = cc;
                clientContext.AuthenticationMode = ClientAuthenticationMode.Default;

                Web web = clientContext.Web;
                SP.List list = web.Lists.GetByTitle(listName);
                ListItemCreationInformation newItem = new ListItemCreationInformation();
                newItem.UnderlyingObjectType = FileSystemObjectType.Folder;
                newItem.FolderUrl = siteUrl + "/" + folderlogicalName;

                if (!relativePath.Equals(string.Empty))
                    newItem.FolderUrl += "/" + relativePath;


                newItem.LeafName = newfolderName; 
                SP.ListItem item = list.AddItem(newItem);
                item.Update();
                clientContext.ExecuteQuery();

我将siteurl,folderlogicalname,relativepath和new foldername作为参数传递。

这可以从我的控制台应用程序中正常工作。但是当转换为CRM插件时,它会提供上述指定的问题

2 个答案:

答案 0 :(得分:1)

我以前见过类似的问题。

CRM插件在沙箱中运行,因此所使用的所有程序集 .NET库都必须允许部分信任调用者(因为CRM沙箱在部分信任下运行)。它在控制台中工作,因为您在该上下文中将代码作为完全信任用户执行。

这个问题不一定是您的代码,但可能是依赖项或.NET库本身不允许部分信任调用者 - 在您的情况下,听起来像Sharepoint库是罪魁祸首(但错误的堆栈跟踪应该揭示原因的确切位置)。

由于您无法访问导致问题的源库,因此要克服错误,您可能需要创建一个包装器。但是,问题是包装器无法直接引用问题库,否则您将得到相同的问题。因此,为了解决这个问题,您可能需要创建一个充当您的包装器的Web服务,然后在您的CRM插件中调用Web服务。这样,完全信任代码由Web服务(完全信任)执行,然后将结果返回给您的调用CRM插件。

这是more info on the error

答案 1 :(得分:0)

谢谢杰森。这适合我。 我想在答案中增加几点。 1.我已将sharepoint dll添加到CRM 2011站点的bin文件夹中。 2.还在运行异步作业的文件夹中部署了相同的dll,以使我的Async插件工作。

再次感谢您的合作