Зачем использовать IOrganizationService вместо CrmServiceClient в SDK инструментария Dynamics 365 XRM? - PullRequest
0 голосов
/ 04 января 2019

Пример кода Microsoft для доступа к Dynamics часто выглядит следующим образом:

    static void Main(string[] args)
    {
        try
        {
            string connectionString =
                "Url=https://myorg.crm.dynamics.com; Username=me@myorg.com; Password=******; authtype=Office365";

            using (CrmServiceClient conn = new CrmServiceClient(connectionString))
            {
                // Cast the proxy client to the IOrganizationService interface.
                IOrganizationService orgService = (IOrganizationService)conn.OrganizationWebProxyClient ??
                                                  conn.OrganizationServiceProxy;

                Console.WriteLine("Microsoft Dynamics CRM version {0}.", ((RetrieveVersionResponse)orgService.Execute(new RetrieveVersionRequest())).Version);
            }
        }
        catch (FaultException<OrganizationServiceFault> osFaultException)
        {
            Console.WriteLine("Fault Exception caught");
            Console.WriteLine(osFaultException.Detail.Message);
        }
        catch (Exception e)
        {
            Console.WriteLine("Uncaught Exception");
            Console.WriteLine(e);
        }
    }
}

Но в равной степени возможно (и проще) напрямую использовать Crm Service Client, например:

class Program
{
    static void Main(string[] args)
    {
        try
        {
            string connectionString =
                "Url=https://myorg.crm.dynamics.com; Username=me@myorg.com; Password=******; authtype=Office365";

            using (CrmServiceClient conn = new CrmServiceClient(connectionString))
            {
                Console.WriteLine("Microsoft Dynamics CRM version {0}.", ((RetrieveVersionResponse)conn.Execute(new RetrieveVersionRequest())).Version);
            }
        }
        catch (FaultException<OrganizationServiceFault> osFaultException)
        {
            Console.WriteLine("Fault Exception caught");
            Console.WriteLine(osFaultException.Detail.Message);
        }
        catch (Exception e)
        {
            Console.WriteLine("Uncaught Exception");
            Console.WriteLine(e);
        }
    }
}

Мой вопрос: зачем когда-либо использовать это свойство IOrganizationService?Кажется, что он имеет только подмножество функциональных возможностей CrmServiceClient.А непосредственно используемый CrmServiceClient кажется более быстрым, простым, более эффективным и более функциональным.

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

Спасибо.

1 Ответ

0 голосов
/ 07 января 2019

IOrganizationService - это interface, который определяет самые основные методы, необходимые для доступа ко всем функциям Dynamics.Существует ряд общих преимуществ в использовании интерфейсов.

IOrganizationService существует с CRM 2011, тогда как CrmServiceClient была введена в CRM 2016. AПростая причина использования IOrganizationService заключается в том, что он существует намного дольше и присутствует в существующих базах кода.

CrmServiceClient реализует IOrganizationService, а также предоставляет ряд других методов, например, аутентификацию с помощью CRM.До появления CrmServiceClient мы использовали CrmConnection для аутентификации в CRM.Когда нам пришлось перейти с CrmConnection на CrmServiceClient, нам нужно было только изменить на CrmServiceClient, извлечь IOrganizationService, а остальная часть кода осталась прежней.

Программирование на IOrganizationService интерфейс делает ваш код гораздо более переносимым и многократно используемым.Например;когда вы не знаете, что ваш сервисный объект будет создан.

IOrganizationService orgService = IOrganizationService)conn.OrganizationWebProxyClient ?? conn.OrganizationServiceProxy;

В целях тестирования, когда вы хотите смоделировать IOrganizationService с новым классом MockOrganizationService.

КогдаВы хотите переместить код между внешним приложением и плагином.В плагине CrmServiceClient не предоставляется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...