1

我们有内部部署的 CRM 2011。在 WCF 服务 (C#) 中,我以编程方式创建合同和合同详细信息。创建合同后,我使用以下代码设置其 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 日,因此它应该已激活 - 确实如此。所以我不理解错误或我需要做些什么来防止它。

感谢所有帮助和建议。

4

1 回答 1

1

首先这行代码

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

应该是这样的

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

或者是生成的Status Reason枚举的名称,这是因为你写的是1+1,所以它减少了早期绑定的功能。

关于合同,看起来 SetStateRequest 根据合同的开始和结束日期采取不同的行动。如果范围在当前日期之内,则请求将合同设置为有效,如果范围在当前日期之外,则对合同开具发票。请检查您的合同日期,看看是否是这种情况。

于 2015-07-02T11:41:47.487 回答