在一个请求中创建和设置CRM实体的状态

时间:2014-04-04 14:21:36

标签: c# dynamics-crm-2011 dynamics-crm

使用此代码,我可以在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?

3 个答案:

答案 0 :(得分:4)

正如您在list of attributes中看到的那样,州代码属性对于创建无效。这意味着CRM将忽略您传入的价值。

更改状态始终是一个明确的操作。因此,您无法将其合并为一个单独的呼叫。

但是,您可以在创建调用期间定义statuscode

另请注意,表示记录状态的属性为statecodestatuscode,且它们的值相互依赖。

答案 1 :(得分:1)

我在这里看不到State字段http://msdn.microsoft.com/en-us/library/gg334225.aspx

我们使用statuscodestatecode,我不认为这会有用,但您可以尝试。

答案 2 :(得分:1)

需要状态码和状态码来通过CRM服务设置实体的状态。这是不直观的,因为状态代码可以从状态代码导出,但它是系统工作的方式。

从更抽象的角度来看,有两种方法可以仅使用状态码进行状态更改:

1)在运行时给定状态代码时,使用元数据服务动态检索实体的状态代码。然后,您可以兑现状态代码值,这样您每个应用程序范围每个实体只需检索一次。

2)生成包含实体状态码/状态码配对的自定义实体类。

对于上述任一选项,您可以为实体创建一个设置状态方法,从您传递的状态代码中获取状态代码。