添加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中的错误的一种解决方法。