Dynamics crm 通过ADF将记录加载到Dynamics 365

Dynamics crm 通过ADF将记录加载到Dynamics 365,dynamics-crm,azure-data-factory,common-data-service,xrmtoolbox,Dynamics Crm,Azure Data Factory,Common Data Service,Xrmtoolbox,我正在Azure数据工厂中使用Dynamics连接器 太长,读不下去了 此连接器是否支持加载需要传入父记录键的子记录?例如,如果我想创建一个联系人并将其附加到父帐户,我将插入一个带有空联系人ID、有效的父客户IDGUID的记录,并将父客户类型设置为1(或2),但我得到一个错误 长话短说 我已成功连接到Dynamics 365并将数据(例如,lead表)提取到SQL Server表中 为了测试我是否可以以另一种方式传输数据,我只需将数据从lead表加载回Dynamics中的lead实体 我得到了这

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

太长,读不下去了 此连接器是否支持加载需要传入父记录键的子记录?例如,如果我想创建一个
联系人
并将其附加到父
帐户
,我将插入一个带有空
联系人ID
、有效的
父客户ID
GUID的记录,并将
父客户类型
设置为1(或2),但我得到一个错误

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

为了测试我是否可以以另一种方式传输数据,我只需将数据从
lead
表加载回Dynamics中的
lead
实体

我得到了这个错误:

故障发生在“水槽”侧。ErrorCode=DynamicMissingTargetForMultiTargetLookupField,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=,Source=,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=找不到多目标查找字段的目标列:“ownerid”

作为测试,我从它加载的源列列表中删除了
ownerid

这显然是一个外键值

这给我提出了两个问题:

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

  • 这显然是一个外键值。如果我只有此行的名称(或业务密钥),如何轻松查找外键值

  • 这通常是如何通过其他API(即web API)实现的

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

    我还读过一些帖子,其中暗示可以在XML文档中发送预连接的数据,所以这可能也会有所帮助

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

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

    两个表中有相同的记录,但如何告诉dynamics connector使用哪一个?为什么它会在乎呢

    编辑2 我在
    msauto\u testdrive
    中收到了一条类似的消息,用于
    customerid

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

    编辑2 似乎表示我需要将
    customeridtype
    设置为1(帐户)或2(联系人)。我这样做了,但还是犯了同样的错误

    我也相信我有能力


    可能ADF连接器也有同样的问题。

    这是ADF对CD多态查找(如客户和所有者)的限制

    解决方法是使用两个临时源查找字段(所有者为所有者团队和用户,客户为账户和联系人)和MS流程中的并行分支来解决此问题,你也可以使用

    • 首先,在要将客户查找数据导入到其中的实体上创建两个临时查找字段,分别为帐户实体和联系人实体
    • 在ADF管道流中,然后需要将帐户和联系人字段的GUID值映射到上面创建的相应查找字段。最简单的方法是在源数据集中有两个单独的列—一个包含要映射的帐户GUID,另一个包含联系人
    • 最后,您可以组合一个Microsoft流,然后执行从临时字段到客户查找字段的适当映射。首先,定义创建受影响实体记录时的触发点(在本例中为Contact),并添加一些并行分支以检查这两个临时查找字段中的值

    • 然后,如果达到上述任一条件,则设置更新记录任务以执行单个字段更新,如下文所示,前提是ADF帐户查找字段中包含数据

    在撰写本文时,@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中应用正常的自动映射方法


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

    ownerid是特殊字段,可以引用多个表。这就是为什么有自己的类型看,我真的很感谢你的答复。这个错误当然表明它需要更多的信息来消除歧义。不过,ADF dynamics连接器似乎不允许这样做。我将创建microsoft票证。也许这是一个“特征”,我认为更多的是缺乏特征。我开始意识到动力学积分远比加载表复杂。我不认为ADF连接器的功能足以发挥任何作用。我非常感谢您的回复。我在doco页面上提出了一个github请求,以明确此连接器对于核心CDM实体(如contact)基本上是不可用的。我在这方面浪费了很多时间,现在我需要找到一种新的方法。@Nick.McDermaid,MS docs大部分时间都需要改进。在这种情况下,它可以比