添加 DynamicPropertyInstance 不会将 SalesOrderDetail 标记为有效
Adding DynamicPropertyInstance doesn't mark the SalesOrderDetail as valid
我有以下代码:
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
returns 为空(这是错误的)。所有其他属性匹配或具有相关值(例如日期、对象 ID 等)
我可能缺少重新计算实例是否有效的方法调用,但我在文档中找不到任何支持它的内容。如果做不到这一点,则可能是 CRM
中的错误
向 Microsoft 支持提出案例,并获得了一些解决方法代码:
//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 中的错误的解决方法
我有以下代码:
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
returns 为空(这是错误的)。所有其他属性匹配或具有相关值(例如日期、对象 ID 等)
我可能缺少重新计算实例是否有效的方法调用,但我在文档中找不到任何支持它的内容。如果做不到这一点,则可能是 CRM
中的错误向 Microsoft 支持提出案例,并获得了一些解决方法代码:
//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 中的错误的解决方法