Dynamics crm 2011 将合同状态从活动更改为草稿

Dynamics crm 2011 将合同状态从活动更改为草稿,dynamics-crm-2011,crm,dynamics-crm-4,dynamics-crm-online,Dynamics Crm 2011,Crm,Dynamics Crm 4,Dynamics Crm Online,我试图使用以下代码将合同状态从Active设置为Draft: SetStateRequest setState = new SetStateRequest(); setState.EntityMoniker = new EntityReference(); setState.EntityMoniker.Id = contractId; setState.EntityMoniker.Name = "Contract"; setState.EntityMoniker.LogicalName = "c

我试图使用以下代码将合同状态从Active设置为Draft:

SetStateRequest setState = new SetStateRequest();
setState.EntityMoniker = new EntityReference();
setState.EntityMoniker.Id = contractId;
setState.EntityMoniker.Name = "Contract";
setState.EntityMoniker.LogicalName = "contract";
setState.State = new OptionSetValue(0);
setState.Status = new OptionSetValue(1);
SetStateResponse setStateResponse = (SetStateResponse)service.Execute(setState);
我的目标是更新一个活动的合同,但要做到这一点,我需要让它处于草稿状态来更新它,然后在更新时将它放回活动状态。如果有人能帮我,我会非常感激的


插件当前正在触发以下错误:“目标状态无效。目标状态可能不存在,或者系统不允许从当前状态更改为目标状态。请检查此状态更改请求的文档”

编辑:似乎必须先开具合同发票,然后才能取消合同-可能无法将合同状态设置为从某些状态起草?请参见此处的MSDN示例:

如果只关心状态(而不是状态),则可以将“-1”作为选项集值传递,在执行请求时将忽略该值。我做了一些非常类似的事情,以停用产品记录

//
///停用指定的实体。
/// 
///要停用的实体。
///组织服务。
///可选状态代码。
private static void DeactivateEntity(EntityReference entityRef,IOrganizationService,int status=-1)
{
执行(新的SetStateRequest)
{
EntityMoniker=entityRef,
状态=新选项设置值(1),
状态=新选项设置值(状态)
});
}

Hi-Alec感谢您的回复,但这是否允许我更新合同?此外,您的代码状态为1(合同上的是发票),因此在此您不能更新合同…您可以在停用时更新实体吗?您应该能够对停用的实体运行更新,是的。此代码是为产品编写的,其代码为0表示活动,1表示非活动,这与您所说的合同不同;你需要在我给你的代码中修改它,否则它应该可以工作。谢谢,我的问题仍然存在,因为合同不能被解除。。。