这与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插件时,它会提供上述指定的问题
答案 0 :(得分:1)
我以前见过类似的问题。
CRM插件在沙箱中运行,因此所使用的所有程序集和 .NET库都必须允许部分信任调用者(因为CRM沙箱在部分信任下运行)。它在控制台中工作,因为您在该上下文中将代码作为完全信任用户执行。
这个问题不一定是您的代码,但可能是依赖项或.NET库本身不允许部分信任调用者 - 在您的情况下,听起来像Sharepoint库是罪魁祸首(但错误的堆栈跟踪应该揭示原因的确切位置)。
由于您无法访问导致问题的源库,因此要克服错误,您可能需要创建一个包装器。但是,问题是包装器无法直接引用问题库,否则您将得到相同的问题。因此,为了解决这个问题,您可能需要创建一个充当您的包装器的Web服务,然后在您的CRM插件中调用Web服务。这样,完全信任代码由Web服务(完全信任)执行,然后将结果返回给您的调用CRM插件。
答案 1 :(得分:0)
谢谢杰森。这适合我。 我想在答案中增加几点。 1.我已将sharepoint dll添加到CRM 2011站点的bin文件夹中。 2.还在运行异步作业的文件夹中部署了相同的dll,以使我的Async插件工作。
再次感谢您的合作