Dynamics 365 通过Virtual Entity和第三方的数据源集成二

Posted Vic.Tang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dynamics 365 通过Virtual Entity和第三方的数据源集成二相关的知识,希望对你有一定的参考价值。

      接上篇,实际的项目过程中肯定不会像上篇这么简单, 本篇就从实际项目出发,介绍下如何使用自定义的Data Source Provider, 数据的读取需要使用Token, 只能通过自定义的方式来实现。

      首先自定义数据源,因为我需要定义数据源实体的字段

      打开插件注册工具,点击注册一个New Data Provider

   

     你会看到如下界面,第二项设置需要你提前建好solution

    第三项设置就是创建Data Source Entity了,这个Enitty也是Virtual Entity

    设置完前面三项就可以点击Register注册了,后面三项可以后续再更新

    进实体列表看就会看到如下Virtual Entity已经通过插件注册器创建好了

    然后我们创建一些自定义属性字段,为的是存储向第三方数据源请求数据的接口参数

    再回到设置-系统管理中新建一个新的Data Source就能看到我们创建的自定义Data Source了,把需要的参数都维护好

    我的这个示例里是在查看Guest的时候,显示当前guest下的Entitlement的数据,而这个数据是在第三方系统里,我们通过接口实时去拉取

    代码会涉及两部分,一个是RetrieveMultiple,一个是Retrieve, 分别对应列表的显示和详情页的显示,当你的代码写完发布后,就把Data Provider中的下图部分设置对应上即可

   RetrieveMultiple示例代码如下,关于代码中伪造PrimaryId这块,你也可以借鉴这篇博文,根据第三方数据的唯一id来构造一个D365的PrimaryId

public void Execute(IServiceProvider serviceProvider)
{
IPluginExecutionContext executionContext= (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
  QueryExpression query = (QueryExpression)executionContext.InputParameters["Query"];
  //通过query自定义的Data Provider实体取到配置的参数来请求接口数据
    QueryExpression queryHourlyAttractionInfo = new 
    QueryExpression("new_testdatasource")
            {
                ColumnSet = new ColumnSet(true)
            };
  //根据retrievemultiple的query来获得接口查询的condition
  //这里可以写你的逻辑,比如我下面这段从接口中获取到数据集后(foreach中的results)
  //再将获取到的数据集赋值给虚拟实体
  var guestEntitlements = new EntityCollection();
  guestEntitlements.EntityName = EntitlementEntity.LogicalName;
  foreach (var item in results)
  {
      Entity record = new Entity(EntitlementEntity.LogicalName);
      record[EntitlementEntity.PrimaryKey] = Guid.NewGuid();//虚拟实体记录必须有一个唯一id,如果记录里没有,这边就伪造一个
      record["new_entitlementstatus"]=item.EntitlementStatus ;//给虚拟实体中的对应属性字段赋值
      record["new_Channel"] = item.Channel;
  }
//最后把要显示的EntityCollection返回到前端
executionContext.OutputParameters["BusinessEntityCollection"] = guestEntitlements;
}

   我这里的详情页面显示的字段和列表页是一样的所以就没有写Retrieve的逻辑,只是放了一个空的placeholder,你可以参考博文中的例子再次向第三方数据源发出请求,获取到值后才赋给虚拟实体的字段。

   下图就是UI的显示效果,点击任意一条就可查看详情

    

以上是关于Dynamics 365 通过Virtual Entity和第三方的数据源集成二的主要内容,如果未能解决你的问题,请参考以下文章

创建一个dynamics 365 CRM online plugin - Asynchronous Plugins

如何通过 Dynamics 365 CRM 中的 C# 插件填充查找字段

利用Fiddler修改请求信息通过Web API执行Dynamics 365操作(Action)实例

Dynamics 365 通过Advanced Filtering创建个人视图

升级微软 dyanamics软件到 dynamics 365有啥好处

Dynamics 365-关于Activity定制的一个细节