Разработка
19
Авг
0

IsValidStateTransitionRequest

Допустим, что мы собираемся изменить состояние Возможной сделки с помощью запроса WinOpportunityRequest. Т.к. для ВС предусмотрен некий стандартный функционал, то такой переход не всегда возможен. Например, если попытаться закрытую сделку перевести в выигранное состояние, то получите ошибку: The opportunity is already closed.

Чтобы избежать ошибки, можно выполнить предварительную проверку с помощью запроса IsValidStateTransitionRequest. Запрос IsValidStateTransitionRequest проверяет возможность перехода на конкретный Статус и возвращает true или false.

Пример:

using System;
using System.ServiceModel.Description;

using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Client;
using Microsoft.Crm.Sdk.Messages;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            // Подключаемся к CRM
            ClientCredentials credentials = new ClientCredentials();
            credentials.Windows.ClientCredential = new System.Net.NetworkCredential("Administrator", "1qaz@WSX", "D2012");
            Uri uri = new Uri("http://crm2015/superfirma/XRMServices/2011/Organization.svc");
            OrganizationServiceProxy proxy = new OrganizationServiceProxy(uri, null, credentials, null);
            proxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
            IOrganizationService service = (IOrganizationService)proxy;

            // Ссылка на ВС
            EntityReference opportunityRecord = new EntityReference("opportunity", new Guid("905FF239-7D7C-E711-80BE-000C291AFB9D"));

            // Создаем запрос на проверку
            IsValidStateTransitionRequest checkRecordState = new IsValidStateTransitionRequest();
            checkRecordState.Entity = opportunityRecord;
            // Указываем Состояние и Статус, в который хотим перевести запись
            checkRecordState.NewState = "Won";
            checkRecordState.NewStatus = 3;

            // Выполняем запрос
            IsValidStateTransitionResponse checkStateResponse = (IsValidStateTransitionResponse)service.Execute(checkRecordState);

            // Проверяем результат
            if (checkStateResponse.IsValid)
            {
                Console.WriteLine("Can convert.");
                Console.ReadKey();
            }        
        }
    }
}


Комментарии (0)

*

code