【问题标题】:How to Sync data from SQL database field type(nvarchar) to Dynamics CRM field type (Lookup)如何将数据从 SQL 数据库字段类型(nvarchar)同步到 Dynamics CRM 字段类型(查找)
【发布时间】:2020-02-18 07:54:01
【问题描述】:

我正在尝试将数据从 SQL Server 同步到 Dynamics CRM。

我在 C# 中创建了一个解决方案/项目。在同步 CRM 的帐户实体时,姓名、帐号、发货日期、电话号码等所有详细信息均已成功同步,因为 SQL 形式,数据类型为 nvarcharint,在 CRM 中为一行文字。

但是,当我从 nvarchar 到 CRM 的查找字段进行相同的同步时,它不起作用并且发生了异常。

这里,account 是 CRM 中的实体名称,SalesContact 是 SQL 中的字段名称,数据类型是 nvarchar,ppg_salescontact 是 CRM 中的字段名称,数据类型是查找。

  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'。 "

请建议我为此做些什么。

【问题讨论】:

  • 我的回答是否帮助您解决了问题?如果是这样,请通过勾选左侧的 V 将其标记为已接受。如果没有,请告诉我,我会尽力为您提供进一步的帮助。

标签: c# sql-server synchronization dynamics-crm lookup


【解决方案1】:

您得到的异常说明了一切:您不能将类型为 string 的值分配给类型为 EntityReference 的字段。

因此,要基于该string 获取EntityReference,您必须做的是获取您的string 值,并根据该值查询CRM 以获取相应的CRM 记录。具体来说,您需要查询要查找的ppg_salescontact 的CRM 实体。

此查询的结果将是派生自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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    相关资源
    最近更新 更多