Как синхронизировать данные c из SQL типа поля базы данных (nvarchar) в тип поля Dynamics CRM (поиск) - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь синхронизировать c данные с SQL Сервера в Dynamics CRM.

Я создал решение / проект в C#. При синхронизации сущности учетной записи CRM все данные, такие как имя, номер счета, дата отправки, номер телефона, все данные такого рода успешно синхронизируются, потому что форма SQL, тип данных nvarchar или int и в CRM это одна строка текста.

Но пока я выполняю тот же синтаксис c из nvarchar для поля поиска CRM, он не работает, и возникает исключение.

Здесь account - это имя объекта в CRM, а SalesContact - это имя поля из SQL, а тип данных - nvarchar, а ppg_salescontact - это имя поля в CRM, а тип данных - lookup.

  Entity enAccount = new Entity("account");

 if (!String.IsNullOrEmpty(drRowAccount["SalesContact"] + "")) { enAccount["ppg_salescontact"] = 
 SecurityElement.Escape(drRowAccount["SalesContact"].ToString().Trim()); }

Исключение: «Сообщение: Ошибка преобразования значения атрибута в свойство: атрибут [ppg_salescontact], тип атрибута [lookup] объекта [account] со значением типа [System.String]: [System.InvalidCastException: Невозможно привести объект типа «System.String» к типу «Microsoft.Xrm.Sdk.EntityReference». "

Пожалуйста, предложите мне, что я могу сделать для этого.

1 Ответ

1 голос
/ 18 февраля 2020

Исключение, которое вы получаете, говорит само за себя: вы не можете присвоить значение типа string полю типа EntityReference.

Итак, чтобы получить EntityReference на основе что string, вам нужно принять значение string и, основываясь на этом значении, запросить CRM, чтобы получить соответствующую запись CRM. В частности, вам нужно запросить объект CRM, для которого ppg_salescontact является поиском.

Результатом этого запроса будет тип, производный от Entity, который затем можно преобразовать в EntityReference (вызвав ToEntityReference()).

Например, если ppg_salescontact - это поиск сущности CRM Contact, и если drRowAccount["SalesContact"] дает вам полное имя контакта, вы можете запросить его следующим образом (это синтаксис LINQ):

Contact contact = orgContext
   .ContactSet
   .Where(c => c.FullName == drRowAccount["SalesContact"])
   .FirstOrDefault();
EntityReference contactRef = contact?.ToEntityReference();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...