添加DynamicPropertyInstance并不会将SalesOrderDetail标记为有效

时间:2017-10-17 10:17:32

标签: dynamics-crm dynamics-crm-online

我有以下代码:

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为真(即使它不是),而且我还有validationstatus在UI中创建的ValueString private void addFilmDetailFragment(Movie movie){ android.support.v4.app.FragmentManager fragmentManager = getFragmentManager(); android.support.v4.app.FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); FilmDetailFragment fragment = new FilmDetailFragment(); Bundle bundle = new Bundle(); bundle.putParcelable("movie", movie); // Key, value fragment.setArguments(bundle); fragmentTransaction.replace(R.id.mainContentStore, fragment); // fragmentTransaction.replace(R.id.mainContent, fragment, Config.TAG_FILM_DETAIL); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } <?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/mainContentStore" android:layout_width="match_parent" android:layout_gravity="center" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/recyclerFilm" android:layout_gravity="center" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout> 返回null(这是错误的)。所有其他属性都匹配或具有相关值(例如日期,对象ID等)

我可能错过了重新计算实例是否有效的方法调用,但我无法在文档中找到支持该实例的任何内容。如果做不到这一点,它可能是CRM中的一个错误

1 个答案:

答案 0 :(得分:0)

在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中的错误的解决方法