Маркировка счета как оплаченного в Dynamics CRM 2011 - PullRequest
3 голосов
/ 14 ноября 2011

По линиям этот вопрос .

Я пытаюсь пометить существующий счет-фактуру как оплаченный в Dynamics CRM 2011 с использованием Silverlight.

Согласно документации все, что мне нужно сделать, это установить код статуса = 100001 и код штата = 2.

Когда я делаю это, я получаю исключение "NotFound".

Guid invoiceID = new Guid("Existing Invoice Guid");
IOrganizationService orgService = OrgServiceFactory.GetInstance();

orgService.BeginRetrieve("invoice", invoiceID, new ColumnSet(new string[] { "invoiceid", "statecode", "statuscode" }), (result) =>
{
    var fetchResp = orgService.EndRetrieve(result);

    var statecodeAttrib = fetchResp.Attributes.Single(a => a.Key == "statecode");
    OptionSetValue statecode = (OptionSetValue)statecodeAttrib.Value;
    statecode.Value = 2; 


    var statuscodeAttrib = fetchResp.Attributes.Single(a => a.Key == "statuscode");
    OptionSetValue statuscode = (OptionSetValue)statuscodeAttrib.Value;
    statuscode.Value = 100001;

    orgService.BeginUpdate(fetchResp, (updateResult) =>
    {
        /* Web Exception thrown here */
        orgService.EndUpdate(updateResult);
        Console.Write("");
    }, orgService);

}, orgService);

Если я удаляю бит «код состояния» и просто пытаюсь установить код состояния на 2 - (частично доставлено) или 4 - (оплачивается), он работает как положено.

Это только когда я пытаюсь установить оба, это терпит неудачу. Сбой также произойдет, если я просто попытаюсь установить статускод = 100001, 100002, 100003 (завершено, частично, отменено)

Есть ли другой способ пометить счет как оплаченный?

Ответы [ 2 ]

5 голосов
/ 14 ноября 2011

Чтобы изменить состояние записи, вам всегда нужно выполнить отдельный запрос SetState, а не просто обновить состояние и код состояния. В вашем случае вы можете сделать запрос SetStateDynamicEntity или SetStateInvoice .

К сожалению, эти сообщения недоступны в службе OData в CRM 2011. Вам необходимо использовать веб-службу SOAP через Silverlight. SDK имеет пошаговое руководство , и, если вы хотите начать работу, библиотека SilverCRMSoap является хорошей быстрой реализацией этого пошагового руководства.

4 голосов
/ 03 декабря 2011

Выполнение стандартного запроса SetState также будет работать, избавляя от необходимости устанавливать SOAP-соединение.

SetStateRequest request = new SetStateRequest();
request.EntityMoniker = new EntityReference(Invoice.EntityLogicalName, invoice.Id);
request.State = new OptionSetValue ((int)InvoiceState.Paid);
request.Status = new OptionSetValue (100001); // Complete
SetStateResponse response = (SetStateResponse)_service.Execute(request);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...