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创建个人视图