我需要创建在CRM Online中检索记录的插件。此插件将在Dynamics CRM 365内部部署中注册。我已经尝试了所有我知道的创建这个插件,也在互联网上搜索教程。但是,每次我测试插件。它总是说
"元数据包含无法解析的引用https://office.api.crm5.dynamics.com/XRMServices/2011/Organization.svc" 。
第一次收到此错误后,我检查上面的链接是否可以在我的电脑内找到。并且我确定该链接是可搜索的。通过CRM 365插件连接CRM Online。我使用这段代码:
private static void ConnectToMSCRM()
{
try
{
ClientCredentials credentials = new ClientCredentials();
credentials.UserName.UserName = "admin@office.onmicrosoft.com";
credentials.UserName.Password = "crmpass";
ServicePointManager.ServerCertificateValidationCallback = delegate(object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) { return true; };
Uri serviceUri = new Uri("https://office.api.crm5.dynamics.com/XRMServices/2011/Organization.svc");
OrganizationServiceProxy proxy = new OrganizationServiceProxy(serviceUri, null, credentials, null);
proxy.EnableProxyTypes();
另一方面,我写这个是为了检查我是否可以在线连接到CRM:
IPluginExecutionContext context = (IPluginExecutionContext)serprov.GetService(typeof(IPluginExecutionContext));
IOrganizationServiceFactory serfac = (IOrganizationServiceFactory)serprov.GetService(typeof(IOrganizationServiceFactory));
IOrganizationService service = serfac.CreateOrganizationService(context.UserId);
if (context.InputParameters.Contains("Target") && context.InputParameters["Target"] is Entity)
{
Entity ent = (Entity)context.InputParameters["Target"];
// presaledid = ent.GetAttributeValue<String>("new_presalesid");
try
{
ConnectToMSCRM();
}
catch (Exception ex)
{
throw new InvalidPluginExecutionException(ex.Message);
}
Guid userid = ((WhoAmIResponse)_service.Execute(new WhoAmIRequest())).UserId;
if (userid != Guid.Empty)
return;
那些代码返回错误消息。元数据包含无法解析的引用。奇怪的是,当我在控制台应用程序中使用相同的代码时,我能够与CRM Online连接。我对此有点沮丧。差不多5天仍然没有得到解决方案。如果您有建议我修复错误。请告诉我:))
此外,我在测试此插件时还有另一个条件。我在客户办公室。要访问CRM 365内部部署,他们会为我提供用于连接Wi-Fi的用户名和密码。连接这个Wi-Fi时。我能够访问CRM 365内部部署。但我无法连接CRM Online(无法访问互联网)。同时,在我的插件代码中,我必须连接到CRM Online才能获取记录。因为当我使用控制台应用程序成功连接时,我使用我的个人wifi与互联网连接。这是这个问题的根源吗?
答案 0 :(得分:0)
如果我理解正确,您说本地CRM服务无法访问互联网。在那种情况下,它如何访问CRM Online?
如果您使用的是CRM 2016,我建议使用Microsoft.Xrm.Client库中的简化连接(https://msdn.microsoft.com/library/gg695810(v=crm.7).aspx)或XRM工具(https://msdn.microsoft.com/en-us/library/mt608573.aspx)。有很多不同认证方案。在线连接到CRM是一整套认证,令牌和重定向。这些工具可以处理所有这些,只需提供一个简单的连接字符串即可。
编辑: 示例代码(在CRM 2016上工作,在线与CRM对话)。
为了使用简化的连接Client.dll,您需要将其放入服务器bin(我为快速测试所做的)或ILMerge使用该库的插件。已在帐户创建中注册此示例插件,但可以是任何内容。正确地从远程(CRM Online)系统获取UserId。
public class TestOnlinePlugin : IPlugin
{
public void Execute(IServiceProvider serviceProvider)
{
CrmConnection conn = CrmConnection.Parse("Url=https://***.crm4.dynamics.com; Username=***; Password=***;");
IOrganizationService orgService = new OrganizationService(conn);
WhoAmIRequest req = new WhoAmIRequest();
WhoAmIResponse resp = (WhoAmIResponse) orgService.Execute(req);
throw new InvalidPluginExecutionException($"Remote user ID: {resp.UserId}");
}
}