【问题标题】:How to retrieve records in CRM Online through plugin in Dynamics CRM 365 On-Premise如何通过 Dynamics CRM 365 On-Premise 中的插件检索 CRM Online 中的记录
【发布时间】:2017-07-05 04:48:01
【问题描述】:

我需要创建在 CRM Online 中检索记录的插件。此插件将在 Dynamics CRM 365 On-Premise 上注册。我已经尽我所能来创建这个插件,也在互联网上搜索教程。但是,每次我测试插件时。它总是说

“元数据包含无法解析的引用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 On-Premise,他们为我提供了连接 Wi-fi 的用户名和密码。连接此 Wi-Fi 时。我能够访问 CRM 365 On-premise。但我无法连接 CRM Online(无法访问互联网)。同时,在我的插件代码中,我必须连接到 CRM Online 以获取记录。因为当我使用控制台应用程序成功连接时,我使用我的个人 wifi 和互联网连接。这是这个问题的根源吗?

【问题讨论】:

    标签: c# dynamics-crm dynamics-crm-online dynamics-crm-365


    【解决方案1】:

    如果我理解正确,您说本地 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 on-prem 上工作,与 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}");
        }
    }
    

    【讨论】:

    • 那么没有互联网接入的 On-Prem 怎么样?这不会导致问题吗?
    • 最近我尝试使用简化连接。它需要 Microsoft.Xrm.Client.dll。但我在 CRM 365 SDK 中找不到它。我该怎么办?
    • 如果不能上网,你想怎么和CRM在线对话?如果不是直接来自服务器,那么至少您需要能够在另一台机器上托管服务,该机器既可以访问 Internet,又可以连接到内部 CRM。 Xrm.Client 不再是 2016/365 SDK 的一部分。它已被 Microsoft.Xrm.Tooling.Connector.dll 取代,其使用方式基本相同。在大多数情况下,您还可以继续使用 Microsoft.Xrm.Client 以及较新的 SDK。最简单的方法是使用 nuget 包,开始。
    • 嗨,我使用具有 Internet 访问权限的帐户测试了我的插件。但仍然返回错误。我也使用了没有运气的简化连接。您是否曾经尝试通过插件连接到其他 CRM?我担心在尝试从插头连接时我错过了一些东西
    猜你喜欢
    • 2017-07-09
    • 1970-01-01
    • 2019-08-12
    • 2018-02-07
    • 2021-05-23
    • 1970-01-01
    • 2019-04-30
    • 2021-11-18
    • 1970-01-01
    相关资源
    最近更新 更多