在实体中插入记录时,如何重现或修复 DCRM 中的字符串截断异常?

How to reproduce or fix the string truncation exception in DCRM when inserting a record in an entity?

在 DCRM 在线实例中使用 c# 代码中的 IOrganizationservice.create() webservice 方法在实体中创建记录时,我们在生产环境中遇到以下异常,尽管字段中的数据长度在DCRM 架构允许的限制..

System.ServiceModel.FaultException`1[Microsoft.Xrm.Sdk.OrganizationServiceFault]:字符串或二进制数据将在 table“{0}”列“{1}”中被截断。截断值:{2} 错误代码:0x80090429.

如果字段中的数据长于 DCRM 模式允许的字段长度,我会收到 StringLengthTooLong 异常,但不会出现截断 exception.Can 有人帮助重现 DCRM 中的字符串截断异常吗?

以下代码用于在实体中创建记录::

public String StoreUnpublishedData(String entityName,String messageName,String data,String listener,String failedInfo)

   {

       try

       {

           String failedInfo2 = String.IsNullOrWhiteSpace(failedInfo) ? "" : failedInfo;

           if (failedInfo2.Length > 4000)//in case it is too long

               failedInfo2 = failedInfo2.Substring(0, 4000);

           Entity LogEntity = new Entity();

           LogEntity.LogicalName = "unpublisheddata";

           LogEntity.Attributes.Add("id",Guid.NewGuid().ToString().Replace("-", ""));

           LogEntity.Attributes.Add("messageName",messageName);

           LogEntity.Attributes.Add("entityname",entityName);

           LogEntity.Attributes.Add("Listener", listener);

           LogEntity.Attributes.Add("Retries", 0);

           LogEntity.Attributes.Add("failedInfo",failedInfo2);

           LogEntity.Attributes.Add("data", data);

           m_ctx.OrganizationService.Create(LogEntity);

           return newId;

       }

       catch (Exception)

       {

           throw;

       }

   }

行 m_ctx.OrganizationService.Create(LogEntity) 抛出异常。

DCRM 中的字段长度:

列名最大长度 实体名称 100 消息名称 100 编号 100 failed_info4000 数据 102400 听众 10240

关于这个的两个快速想法...

  1. 通过排除过程,您应该能够确定是哪个属性导致了问题。尝试注释掉每个属性并查看错误何时消失。

  2. 可能存在某种 Unicode 编码问题?作为测试,可以尝试将 failedInfo2 截断为更短的长度,例如 1500。