我们拥有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日,因此它应该已激活 - 并且是。所以我不理解错误或我需要做些什么来阻止它。
感谢您的所有帮助和建议。
答案 0 :(得分:1)
首先是代码的这一行
Status = new OptionSetValue((int)Xrm.ContractState.Invoiced + 1)
应该像
Status = new OptionSetValue((int)Xrm.ContractStatus.Invoiced)
或生成的Status Reason枚举的名称,这是因为您正在编写1 + 1,因此它会减少早期绑定的功能。
关于合同,看起来SetStateRequest根据合同的开始和结束日期采取不同的行动。如果范围属于当前日期,则请求将“合同”设置为“活动”,如果范围超出当前日期,则合同将开具发票。请检查您的合同日期,看看是否属实。