首页 > 解决方案 > 通过 ADF 将记录加载到 Dynamics 365

问题描述

我在 Azure 数据工厂中使用 Dynamics 连接器。

TLDR

此连接器是否支持加载需要传入父记录键的子记录?例如,如果我想创建 acontact并将其附加到 parent account,我会插入一条带有 null contactid、有效parentcustomeridGUID 并设置parentcustomeridtype为 1(或 2)的记录,但出现错误。

很长的故事

我成功连接到 Dynamics 365 并将数据(例如,lead表)提取到 SQL Server 表中

为了测试我是否可以通过其他方式传输数据,我只是将数据从lead表中加载回leadDynamics 中的实体。

我收到此错误:

失败发生在“Sink”端。ErrorCode=DynamicsMissingTargetForMultiTargetLookupField,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=,Source=,''Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=找不到多目标查找字段的目标列:'所有者'。

作为测试,我ownerid从源列列表中删除它加载正常。

这显然是一个外键值。

它向我提出了两个问题:

  1. 特别是关于错误消息:如果我知道它需要使用哪个查找,我如何指定它应该验证哪个查找表?ADF 连接器中没有允许我执行此操作的设置。

  2. 这显然是一个外键值。如果我只有该行的名称(或业务键),我如何轻松查找外键值?

这通常是如何通过其他 API 完成的,即 Web API?

是否有 XRMToolbox 插件可以帮助澄清?

我还阅读了一些帖子,暗示您可以在 XML 文档中发送预先连接的数据,所以也许这也会有所帮助。

编辑 1

我意识到lead.ownertypeid我的源数据集中的字段是NULL(这就是导出的)。如果我在各种 Xrmtoolbox 工具中浏览它,它也是 NULL。我尝试将其硬编码systemuser(这实际上是owner表中与实际所有者记录相对应的内容),但我仍然遇到相同的错误。

systemuser我还注意到表中有一条具有相同 PK 值的记录

所以相同的记录在两个表中,但是我如何告诉动态连接器使用哪一个呢?为什么它甚至在乎?

编辑 2

我收到了类似的消息msauto_testdrivefor customerid

我排除了所有记录customerid=null,并得到了同样的错误。

编辑 2

此链接似乎表明我需要设置customeridtype为 1(帐户)或 2(联系人)。我这样做了,但仍然遇到同样的错误。

我也相信我和这个人有同样的问题

也许 ADF 连接器也存在同样的问题。

标签: dynamics-crmazure-data-factorycommon-data-servicexrmtoolbox

解决方案


在撰写本文时,@Arun Vinoth 是 100% 正确的。然而不久之后有一个文档更新(作为对我提出的 GitHub 的回应)解释了如何做到这一点。

我将在这里记录我是如何做到的。

要针对父帐户填充联系人,您需要父帐户 GUID。然后你准备一个这样的数据集:

SELECT 
-- a NULL contactid means this is a new record
CAST(NULL as uniqueidentifier) as contactid,
-- the GUID of the parent account
CAST('A7070AE2-D7A6-EA11-A812-000D3A79983B' as uniqueidentifier) parentcustomerid,
-- customer id is an account
'account' [parentcustomerid@EntityReference],
'Joe' as firstname,
'Bloggs' lastname,

现在您可以在 ADF 中应用正常的自动映射方法。

现在您可以从此数据集中进行选择并加载到contact. 您可以应用通常的自动映射方法,即:创建没有模式的数据集。在不映射列的情况下执行复制活动


推荐阅读