为什么错误“状态无效”?

时间:2015-07-01 17:57:45

标签: crm microsoft-dynamics contracts

我们拥有CRM 2011,内部部署。在WCF服务(C#)中,我以编程方式创建合同和ContractDetails。创建合同后,我使用以下代码设置其State ='Invoiced':

try
{
   SetStateRequest setStateRequest = new SetStateRequest()
   {
       EntityMoniker = new EntityReference
       {
          Id = gNewContractId,
          LogicalName = Xrm.Contract.EntityLogicalName
       },
       State = new OptionSetValue((int)Xrm.ContractState.Invoiced),
       Status = new OptionSetValue((int)Xrm.ContractState.Invoiced + 1)
   };

   _service.Execute(setStateRequest);


}

这个过程过去常常有效,但有时现在我得到了这个错误,就像我今天所做的那样:

“System.ServiceModel.FaultException`1 [Microsoft.Xrm.Sdk.OrganizationServiceFault]:状态无效,此合约无法设置为发票状态。(故障详细信息等于Microsoft.Xrm.Sdk.OrganizationServiceFault)。 “

执行此代码段时的合同状态(今天失败)是“草稿”。

本合同具有子合同详细信息,其ActiveOn日期为2015年6月1日,因此它应该已激活 - 并且。所以我不理解错误或我需要做些什么来阻止它。

感谢您的所有帮助和建议。

1 个答案:

答案 0 :(得分:1)

首先是代码的这一行

Status = new OptionSetValue((int)Xrm.ContractState.Invoiced + 1)

应该像

Status = new OptionSetValue((int)Xrm.ContractStatus.Invoiced)

或生成的Status Reason枚举的名称,这是因为您正在编写1 + 1,因此它会减少早期绑定的功能。

关于合同,看起来SetStateRequest根据合同的开始和结束日期采取不同的行动。如果范围属于当前日期,则请求将“合同”设置为“活动”,如果范围超出当前日期,则合同将开具发票。请检查您的合同日期,看看是否属实。