添加DynamicPropertyInstance没有标注的SalesOrderDetail为有效

问题描述:

我有以下代码:添加DynamicPropertyInstance没有标注的SalesOrderDetail为有效

var propertyInstance = new DynamicPropertyInstance() 
{ 
    DynamicPropertyId = new EntityReference(DynamicProperty.EntityLogicalName, Guid.Parse("0ceedfcc-68b2-e711-8168-e0071b658ea1")), 
    ValueString = jobId.ToString(), 
    RegardingObjectId = line.ToEntityReference(), 
}; 

crmContext.AddObject(dynamicPropertyInstance); 
crmContext.SaveChanges(); 

它成功添加DynamicPropertyInstance到SalesOrderLine,但在CRM UI查看订单时,不通过验证(因为它是必需的属性)。我还没有设法找到使这个属性有效的方法。编辑我在UI中添加的属性(重置值)也无法将该实例标记为有效。通过UI 添加完全相同的属性,将其标记为有效。

DynamicProperty的Id是正确的,通过通过SDK加载2个实例记录和比较属性进行验证。奇怪的是,当我通过SDK加载2条记录时,我在代码中创建的记录的validationstatus为真(即使不是这样),我在UI中创建的记录有validationstatus为假,ValueString返回null(这是错误的)。所有其他属性匹配或有相关的值(如日期,对象ID等)

我可能缺少一个方法调用来重新计算实例是否有效,但我找不到任何东西文档来支持。如果做不到这一点,这可能引发与微软支持的情况下,在CRM

的错误,并给出了一些解决方法代码:

//Get DynamicPropertyInstance 

UpdateProductPropertiesRequest UpdateRequest = new UpdateProductPropertiesRequest(); 
UpdateRequest.PropertyInstanceList = new EntityCollection(); 
UpdateRequest.PropertyInstanceList.EntityName = DynamicPropertyInstance.EntityLogicalName; 
Entity dpInstance = new Entity(DynamicPropertyInstance.EntityLogicalName, Dpi.Id); 
dpInstance.Attributes.Add(nameof(Dpi.ValueString).ToLower(), "Blarg"); 
dpInstance.Attributes.Add(nameof(Dpi.DynamicPropertyInstanceid).ToLower(), Dpi.Id); 
dpInstance.Attributes.Add(nameof(Dpi.RegardingObjectId).ToLower(), new EntityReference(SalesOrderDetail.EntityLogicalName, line.Id)); 
dpInstance.Attributes.Add(nameof(Dpi.DynamicPropertyId).ToLower(), new EntityReference(DynamicProperty.EntityLogicalName, dpId)); 

UpdateRequest.PropertyInstanceList.Entities.Add(dpInstance); 

crmContext.Execute(UpdateRequest); 

基本上,它看起来像你必须重新设置或重新连接CRM的实体将其提供,因此这是解决CRM中的错误的一种解决方法。