使用此代码,我可以在C#中设置CRM实体的状态和状态。
SetStateRequest appointmentRequest = new SetStateRequest
{
State = new OptionSetValue(3), //Scheduled
Status = new OptionSetValue(5), //Busy
EntityMoniker = new EntityReference("appointment", myEntity.Id)
};
crmsvc.Execute(appointmentRequest);
在此前几行我使用
创建同一个实体crmsvc.Create(myEntity);
在两个请求中执行此操作似乎很愚蠢,所以我在一个请求中寻找一种方法。
发现这个问题I need to set the State and StatusCode of a custom entity并且似乎可以在保存之前设置状态代码,但我找不到任何带有状态的样本。
尝试这样做,但它不起作用
myEntity["state"] = new OptionSetValue(3);
它抛出:
实体不包含Name ='state'的属性。 (故障细节等于 Microsoft.Xrm.Sdk.OrganizationServiceFault):'Entity' 实体不包含Name ='state'的属性。
在第一次保存之前,是否可以设置state和statuscode? p>
答案 0 :(得分:4)
正如您在list of attributes中看到的那样,州代码属性对于创建无效。这意味着CRM将忽略您传入的价值。
更改状态始终是一个明确的操作。因此,您无法将其合并为一个单独的呼叫。
但是,您可以在创建调用期间定义statuscode
。
另请注意,表示记录状态的属性为statecode
和statuscode
,且它们的值相互依赖。
答案 1 :(得分:1)
我在这里看不到State
字段http://msdn.microsoft.com/en-us/library/gg334225.aspx
我们使用statuscode
和statecode
,我不认为这会有用,但您可以尝试。
答案 2 :(得分:1)
需要状态码和状态码来通过CRM服务设置实体的状态。这是不直观的,因为状态代码可以从状态代码导出,但它是系统工作的方式。
从更抽象的角度来看,有两种方法可以仅使用状态码进行状态更改:
1)在运行时给定状态代码时,使用元数据服务动态检索实体的状态代码。然后,您可以兑现状态代码值,这样您每个应用程序范围每个实体只需检索一次。
2)生成包含实体状态码/状态码配对的自定义实体类。
对于上述任一选项,您可以为实体创建一个设置状态方法,从您传递的状态代码中获取状态代码。