在实体中插入记录时,如何重现或修复 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
关于这个的两个快速想法...
通过排除过程,您应该能够确定是哪个属性导致了问题。尝试注释掉每个属性并查看错误何时消失。
可能存在某种 Unicode 编码问题?作为测试,可以尝试将 failedInfo2
截断为更短的长度,例如 1500。
在 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
关于这个的两个快速想法...
通过排除过程,您应该能够确定是哪个属性导致了问题。尝试注释掉每个属性并查看错误何时消失。
可能存在某种 Unicode 编码问题?作为测试,可以尝试将
failedInfo2
截断为更短的长度,例如 1500。