Загрузка записей в Dynamics 365 через ADF - PullRequest
3 голосов
/ 28 мая 2020

Я использую коннектор Dynamics в Azure Фабрике данных.

TLDR

Поддерживает ли этот коннектор загрузку дочерних записей, которым необходимо передать ключ родительской записи? Например, если я хочу создать contact и прикрепить его к родительскому account, я добавляю запись с нулевым contactid, действительным parentcustomerid GUID и устанавливаю parentcustomeridtype на 1 (или 2), но Я получаю сообщение об ошибке.

Long Story

Я успешно подключаюсь к Dynamics 365 и извлекаю данные (например, таблицу lead) в SQL таблицу сервера

Чтобы проверить, что я могу передавать данные другим способом, я просто загружаю данные обратно из таблицы lead в сущность lead в Dynamics.

Я получаю эту ошибку:

Ошибка произошла на стороне «Раковина». ErrorCode = DynamicsMissingTargetForMultiTargetLookupField, 'Type = Microsoft.DataTransfer.Common.Shared.HybridDeliveryException, Message =, Source =,' Type = Microsoft.DataTransfer.Common.Shared.HybridDeliveryException, Message = Не удается найти целевой столбец для многоцелевого поля поиска : 'ownerid'.

В качестве теста я удалил ownerid из списка исходных столбцов, которые он загружает ОК.

Это, очевидно, значение внешнего ключа.

Это вызывает у меня два вопроса:

  1. Конкретно в отношении сообщения об ошибке: если бы я знал, какой поиск ему нужно использовать, как я могу указать, по какой таблице поиска он должен проверять ? В соединителе ADF нет настроек, которые позволили бы мне это сделать.

  2. Очевидно, это значение внешнего ключа. Если бы у меня было только имя (или бизнес-ключ) для этой строки, как я могу легко найти значение внешнего ключа?

Как это обычно делается через другие API, то есть через веб-API ?

Есть ли надстройка XRMToolbox, которая поможет прояснить ситуацию?

Я также читал несколько сообщений, которые подразумевают, что вы можете отправлять предварительно подключенные данные в документе XML, так что, возможно, это будет также помогите.

РЕДАКТИРОВАТЬ 1

Я понял, что поле lead.ownertypeid в моем исходном наборе данных - NULL (это то, что было экспортировано). Он также NULL, если я просматриваю его в различных инструментах Xrmtoolbox. Я попытался жестко кодировать его на systemuser (что на самом деле находится в таблице owner против фактической записи владельца), но я все равно получаю ту же ошибку.

Я также заметил, что есть запись с такое же значение PK в systemuser таблице

Таким образом, одна и та же запись находится в двух таблицах, но как мне указать соединителю динамиков, какой из них использовать? и почему это вообще заботит?

EDIT 2

Я получил подобное сообщение для msauto_testdrive для customerid.

Я исключил все записи с customerid=null и получил ту же ошибку.

EDIT 2

Эта ссылка , похоже, указывает, что мне нужно установите customeridtype на 1 (Учетная запись) или 2 (Контакт). Я сделал это, но все равно получил ту же ошибку.

Также я считаю, что у меня та же проблема, что и у этого парня .

Может быть, с разъемом ADF такая же проблема.

Ответы [ 2 ]

4 голосов
/ 15 июня 2020

На момент написания @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. Вы можете применить обычный подход автоматического сопоставления, а именно: создавать наборы данных без схем. Выполнить копирование без сопоставления столбцов

2 голосов
/ 09 июня 2020

Это ограничение ADF в отношении поиска полиморфных c CDS, таких как Клиент и Владелец. Проголосуйте за эту идею ADF

Обходной путь - использовать два временных поля поиска источника (команда владельца и пользователь в случае владельца, учетная запись и контакт в случае клиента) и с параллельной ветвью в MS Поток для решения этой проблемы. Подробнее , также вы можете загрузить образец потока для использования.

  • Сначала создайте два временных поля поиска для объекта, который вы используете. sh, чтобы импортировать в него данные поиска клиентов в сущности Account и Contact соответственно.
  • В потоке конвейера ADF вам нужно будет затем сопоставить значения GUID для полей Account и Contact с соответствующим поиском поля, созданные выше. Самый простой способ сделать это - иметь два отдельных столбца в исходном наборе данных: один содержит GUID учетной записи для сопоставления, а другой - «Контакт».
  • Затем, наконец, вы можете собрать Microsoft Flow, который затем выполнит соответствующее сопоставление временных полей с полем поиска клиента. Во-первых, определите точку срабатывания при создании вашей затронутой записи Entity (в данном случае, Contact) и добавьте несколько параллельных ветвей для проверки значений в любом из этих двух временных полей поиска

enter image description here

  • Затем, если выполняется одно из этих условий, настройте задачу Обновить запись для выполнения обновления одного поля, как указано ниже, если В поле поиска учетной записи ADF есть данные
...