首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过Dynamics 365插件在线检索CRM记录

如何通过Dynamics 365插件在线检索CRM记录
EN

Stack Overflow用户
提问于 2017-02-16 07:44:15
回答 1查看 2.2K关注 0票数 0

我需要创建插件,在客户关系管理在线检索记录。这个插件将注册在Dynamics 365的前提下.我已经尝试了我所知道的一切来创建这个插件,同时在网上搜索教程。但是每次我测试插件的时候。总是说

https://office.api.crm5.dynamics.com/XRMServices/2011/Organization.svc". ”元数据包含无法解析的引用

在第一次收到这个错误后,我检查上面的链接是否是我的个人电脑内的搜索电缆。我确信这个链接是可搜索的。通过CRM 365插件在线连接CRM。我使用以下代码:

代码语言:javascript
复制
 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:

代码语言:javascript
复制
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。我对此有点吝啬。几乎5天的时间仍然没有得到解决办法。如果你有什么建议让我纠正这个错误。请告诉我:)

此外,我有另一个条件,同时测试这个插件。我在客户办公室。为了在前提下访问CRM 365,他们提供给我一个用户名和密码来连接Wi.同时连接这个无线网络。我能够访问CRM 365的前提.但我无法连接CRM在线(没有互联网接入)。同时,在我的插件代码,我必须连接到客户关系管理在线获得记录。因为当我成功地使用控制台应用程序连接时,我使用我的个人wifi与互联网连接。这就是问题的根源吗?

EN

回答 1

Stack Overflow用户

发布于 2017-02-16 14:16:16

如果我理解正确的话,你会说understand服务没有互联网接入.在这种情况下,它如何能够在线访问CRM?

此外,我建议使用简化的连接(https://msdn.microsoft.com/library/gg695810(v=crm.7).aspx来自Microsoft.Xrm.Client库,或者XRM (https://msdn.microsoft.com/en-us/library/mt608573.aspx),如果您正在使用CRM 2016 )。有许多不同的身份验证方案。连接到CRM联机是一条完整的认证、令牌和重定向链。这些工具可以处理所有这些,只需提供一个简单的连接字符串。

编辑:示例代码(使用CRM 2016 on-prem,在线与CRM对话)。

为了使用简化的连接Client.dll,您要么需要将它放入服务器端(我为快速测试所做的操作),要么将插件与库放在ILMerge中。已注册此示例插件在帐户上创建,但可以是任何东西。正确地从远程(客户关系管理在线)系统获得UserId。

代码语言:javascript
复制
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}");
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42267779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档