2015-07-01 3 views
1

У нас есть CRM 2011, на месте. В службе WCF (C#) я программно создаю Контракты и Контракты. После создания контракта, я поставил его государство = «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]: состояние недействительно, этот контракт не может быть установлен в состояние счета-фактуры. (Fault Detail равен Microsoft.Xrm.Sdk.OrganizationServiceFault). "

Состояние контракта, когда этот фрагмент был выполнен (и который потерпел неудачу сегодня) был «Черновик».

Настоящий Договор имеет детальный контракт, а его дата ActiveOn - 6/1/2015, поэтому его необходимо было сделать активным - и это было. Поэтому я не понимаю ошибку или что мне нужно сделать, чтобы предотвратить ее.

Спасибо за помощь и совет.

ответ

1

Сначала эта строка кода

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

Должно быть что-то вроде

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

или имя для состояния Причина перечисления, который был создан, это потому, что вы пишете 1 + 1, так что это уменьшает функцию ранней оценки.

В отношении контракта, похоже, что SetStateRequest действует по-разному в зависимости от даты начала и окончания контракта. Если диапазон попадает в текущую дату, запрос устанавливает контракт на актив, если диапазон выходит за пределы текущей даты, контракт выставляется счет. Пожалуйста, проверьте даты контрактов и посмотрите, действительно ли это так.

+0

Спасибо за ответ, но я думаю, что вы ошибаетесь. С http://crmbook.powerobjects.com/basics/service-management-overview/contracts/ Статус контракта Черновик. Это первый статус, который контракт назначается после его создания. Контракт может быть отредактирован, но не связан с делом. Invoiced. Изменение контракта с проекта на выставление счета означает, что договор был согласован обеими организациями. Контракт с выставленным счетом не может быть отредактирован или удален. Активные. Контракт с выставленным счетом автоматически активируется после достижения даты начала контракта. – DeveloperM

+0

Я обновил свой ответ, да, можно напрямую установить контракт из черновика. –

Смежные вопросы