Основы разработки для Dynamics CRM 2011/2013: подключение к CRM

В приведенном примере описаны различные варианты подключения к CRM 2011/2013 из внешнего приложения на .NET (в данном случае консольного приложения).

Выбор конкретного варианта подключения зависит от способа развертывания CRM, от параметров подлинности пользователя и от варианта хранения настроек подключения.

Для подключения используются Proxy-библиотеки из поставки Dynamics CRM 2011/2013 SDK.

Суть подключения к CRM сводиться к созданию экземпляра класса OrganizationService, с помощью которого можно выполнять все действия над данными и метаданными системы. В примере приведены различные варианты передачи параметров подключения, в зависимости от способа развертывания сервера CRM и способов аутентификации пользователей.

Необходимые библиотеки:

  • Microsoft.Xrm.Client
  • Microsoft.Xrm.Sdk
  • Microsoft.Crm.Sdk.Proxy
  • System.configuration
  • System.Runtime.Serialization
  • System.ServiceModel
using System;
using System.Configuration;
using System.ServiceModel.Description;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Client;
using Microsoft.Xrm.Client.Services;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;

namespace Samples.MsCrm.Crm2013
{
   class Program
   {
       static void Main()
       {
           #region On-premises


           #region Integrated security


           // On-premises, Integrated security
           // Параметры подключения задаются через класс ConnectionStringSettings.
           {
               var connectionSettings = new ConnectionStringSettings("OnPremisesWindowsIntegrated", "Url=http://server/orgname;");
               // Альтернативный вариант:
               // var connectionSettings = new ConnectionStringSettings
               // {
               //     Name = "OnPremisesWindowsIntegrated",
               //     ConnectionString = "Url=http://server/orgname;"
               // };
               var connection = new CrmConnection(connectionSettings);
               using (var service = new OrganizationService(connection))
               {
                   ShowUserName(service);
               }
           }
           // Примечание
           // Для класса ConnectionStringSettings обязательно должно быть определено значение  
           // свойства Name. При этом Name не должен быть null или пустой строкой.
           

           // On-premises, Integrated security
           // Параметры подключения задаются через файл конфигурации и извлекаются по имени параметра.
           // Строка подключения: Url=http://server/orgname;
           {
               var connection = new CrmConnection("OnPremisesWindowsIntegrated");
               using (var service = new OrganizationService(connection))
               {
                   ShowUserName(service);
               }
           }
            

           // On-premises, Integrated security
           // Параметры подключения задаются вручную.
           {
               var connection = new CrmConnection
               {
                   ServiceUri = new Uri("http://server/orgname")
               };
               using (var service = new OrganizationService(connection))
               {
                   ShowUserName(service);
               }
           }
           

           // On-premises, Integrated security
           // Параметры подключения задаются через файл конфигурации и извлекаются по имени параметра.
           // Строка подключения: Url=http://server/orgname;
           {
               using (var service = new OrganizationService("OnPremisesWindowsIntegrated"))
               {
                   ShowUserName(service);
               }
           }


           #endregion Integrated security


           #region User credentials

           
           // On-premises, User credentials
           // Параметры подключения задаются через класс ConnectionStringSettings.
           {
               var connectionSettings = new ConnectionStringSettings(
                   "OnPremisesUserCredentials",
                   "Url=http://server/orgname; Domain=mydomain; Username=myusername; Password=mypassword;");
               // Альтернативный вариант:
               // var connectionSettings = new ConnectionStringSettings();
               // connectionSettings.Name = "OnPremisesUserCredentials";
               // connectionSettings.ConnectionString = "Url=http://server/orgname; Domain=mydomain; Username=myusername; Password=mypassword;";
               var connection = new CrmConnection(connectionSettings);
               using (var service = new OrganizationService(connection))
               {
                   ShowUserName(service);
               }
           }
           // Примечание
           // Для класса ConnectionStringSettings обязательно должно быть определено значение  
           // свойства Name. При этом Name не должен быть null или пустой строкой.
           
           
           // On-premises, User credentials
           // Параметры подключения задаются через файл конфигурации и извлекаются по имени параметра.
           // Строка подключения: Url=http://server/orgname; Domain=mydomain; Username=myusername; Password=mypassword;
           {
               var connection = new CrmConnection("OnPremisesUserCredentials");
               using (var service = new OrganizationService(connection))
               {
                   ShowUserName(service);
               }
           }


           // On-premises, User credentials
           // Параметры подключения задаются вручную.
           // Для идентификации пользователя используется учетная запись в AD.
           {
               var connection = new CrmConnection();
               connection.ServiceUri = new Uri("http://server/orgname");
               connection.ClientCredentials = new ClientCredentials();
               connection.ClientCredentials.Windows.ClientCredential.Domain = "mydomain";
               connection.ClientCredentials.Windows.ClientCredential.UserName = "myusername";
               connection.ClientCredentials.Windows.ClientCredential.Password = "mypassword";
               using (var service = new OrganizationService(connection))
               {
                   ShowUserName(service);
               }
           }

           
           // On-premises, User credentials
           // Параметры подключения задаются через файл конфигурации и извлекаются по имени параметра.
           // Строка подключения: Url=http://server/orgname; Domain=mydomain; Username=myusername; Password=mypassword;
           {
               using (var service = new OrganizationService("OnPremisesUserCredentials"))
               {
                   ShowUserName(service);
               }
           }


           #endregion Integrated security


           #endregion On-premises


           Console.WriteLine();
           Console.WriteLine("Press any key...");
           Console.ReadKey();
       }


       /// <summary>
       /// Метод определяет текущего пользователя и отображает его имя и фамилию.
       /// </summary>
       /// <param name="service">Ссылка на сервис CRM.</param>
       private static void ShowUserName(IOrganizationService service)
       {
           // Получаем идентификатор текущего пользователя
           var userid = ((WhoAmIResponse) service.Execute(new WhoAmIRequest())).UserId;
           // Получаем имя и фамилию текущего пользователя по его идентификатору
           var user = service.Retrieve("systemuser", userid, new ColumnSet("firstname", "lastname"));
           // Отображаем имя и фамилию пользователя
           Console.WriteLine("Logged on user is {0} {1}.", user["firstname"], user["lastname"]);
       }
   }
}

Файл App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
   <connectionStrings>
       <!-- On-premises using Windows integrated security -->
       <add name="OnPremisesWindowsIntegrated"
           connectionString="Url=http://server/orgname;"/>

       <!-- On-premises with provided user credentials -->
       <add name="OnPremisesUserCredentials"
           connectionString="Url=http://server/orgname; Domain=mydomain; Username=myusername; Password=mypassword;"/>

       <!-- On-Premises (IFD) with claims -->
       <add name="OnPremisesIfd"
           connectionString="Url=https://contoso.litware.com; Username=someone@litware.com; Password=password;"/>

       <!-- Online using Office 365 -->
       <add name="OnlineOffice365"
           connectionString="Url=https://contoso.crm.dynamics.com; Username=someone@contoso.onmicrosoft.com; Password=password;"/>

       <!-- Online using Windows Live ID -->
       <add name="OnlineLiveId"
           connectionString="Url=https://contoso.crm.dynamics.com; Username=someone@hotmail.com; Password=password; DeviceID=11hfn41bbqrg580vyvoea05abc; DevicePassword=fuqNIlx%e$.l*+ax_#8O4abc;"/>
   </connectionStrings>
</configuration>

About the author

Добавить комментарий

Сказать спасибо

Способ платежа:

Подписаться на обновления

Укажите свой e-mail чтобы получать уведомления о новых статьях.

Присоединиться к еще 1 подписчику