Мансарда на взлете

Мансарда на взлете Разработка

25
Ноя

PowerShell – отличное решение для выполнения повторяющихся или административных задач в MS CRM. MS CRM SDK предоставляет готовую библиотеку для взаимодействия с CRM. Но если ее возможностей не достаточно, то ничего не мешает Вам написать свои собственные cmdlet (набор команд для PowerShell).

Рассмотрим, как это можно сделать:

  • Откройте Visual Studio и создайте проект библиотеки классов;
  • Помимо стандартных библиотек для работы с CRM, добавьте ссылку на библиотеку System.Management.Automation.
    Если таковой нет в Вашей системе, то установите ее через NuGET: Install-Package System.Management.Automation
  • Замените код на следующий: using System; using System.ServiceModel.Description; using System.Management.Automation; using Microsoft.Xrm.Client.Services; using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Client; namespace My.Crm.PowerShell { // Команды в PowerShell именуются парой глагол-существительное // В данном случае команда будет называться Add-OrganizationService [Cmdlet(VerbsCommon.Get, "OrganizationService")] // Наследуемся от класса Cmdlet public class Get_OrganizationService : Cmdlet { [Parameter(Mandatory = true, HelpMessage = "CRM URL")] // Определяем параметр как обязательный. [ValidateNotNullOrEmpty] // Проверяем что параметр заполнен public string CRMURL { get; set; } [Parameter(Mandatory = true, HelpMessage = "User Login")] [ValidateNotNullOrEmpty] public string Login { get; set; } [Parameter(Mandatory = true, HelpMessage = "User Password")] [ValidateNotNullOrEmpty] public string Pass { get; set; } protected override void ProcessRecord() { // Подключаемся к CRM ClientCredentials credentials = new ClientCredentials(); credentials.Windows.ClientCredential = new System.Net.NetworkCredential(Login, Pass, "D2012"); Uri uri = new Uri(CRMURL + "/XRMServices/2011/Organization.svc"); OrganizationServiceProxy proxy = new OrganizationServiceProxy(uri, null, credentials, null); proxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior()); IOrganizationService service = (IOrganizationService)proxy; // Выводим сообщение в консоли PowerShell WriteVerbose("Connect to CRM."); // Возвращаем объект в PowerShell WriteObject(service); } } [Cmdlet(VerbsCommon.Add, "Account")] public class Create_Contact: Cmdlet { [Parameter(Mandatory = true, HelpMessage = "CRM Organization service")] [ValidateNotNullOrEmpty] public OrganizationService service { get; set; } [Parameter(Mandatory = true, HelpMessage = "Account Name")] [ValidateNotNullOrEmpty] public string Name { get; set; } [Parameter(Mandatory = true, HelpMessage = "Ownership Type Code")] [ValidateRange(1, 4)] // Проверка на введенный диапазон значений public int OwnerShipCode { get; set; } // Переопределяем метод ProcessRecord, чтобы обеспечить обработку кода PowerShell'ом protected override void ProcessRecord() { Entity acc = new Entity("account"); acc["name"] = Name; // Строка acc["ownershipcode"] = new OptionSetValue(OwnerShipCode); // Пиклист Guid accountId = service.Create(acc); WriteVerbose("Create Account with ID: " + accountId.ToString()); } } }

    Что тут у нас есть:

    • У нас тут два класса, наследуемых от базового класса cmdlet (который обеспечивает минимальный набор зависимостей среды выполнения PowerShell). Над каждым классом определено имя команды PowerShell, посредством которых будет происходить обращение к этим классам. По стандартам PowerShell имя команды рекомендуется задавать в виде «Глагол-Существительное». Например:
      Get-OrganizationService
    • Класс Get_OrganizationService подключается к организации CRM. На входе принимает URL до организации и логин/пароль. Все параметры обязательные. Возвращает в PowerShell объект подключения;
    • Класс Create_Account, к понятно из названия, создает в CRM запись организации. На входе принимает название Организации и код пиклиста Тип собственности. При этом для кода пиклиста установлена проверка введенного диапазона значений.
  • Создайте и запустите в папке, в которой скомпилирован проект, следующий PowerShell-скрипт: # Получаем путь до текущей папки $ScriptPath = $(Split-Path -Path $script:MyInvocation.MyCommand.Path); # Подключем необходимые сборки Add-Type -Path $($ScriptPath + "\microsoft.xrm.sdk.dll"); Import-Module -Name $($ScriptPath + "\My.Crm.PowerShell.dll"); # Определяем параметры подключения к CRM $CrmUrl = "http://crm2015/superfirma"; $login = "Administrator"; $Pass= "[email protected]"; # Подключаемся к CRM $organizationService = Get-OrganizationService -CRMURL $CrmUrl -Login $login -Pass $Pass -Verbose:$true; if($organizationService) { # Значения полей для CRM $Name = "Test123"; $OwnerShipCode = 2; # Создаем запись Add-Account -service $organizationService -Name $Name -OwnerShipCode $OwnerShipCode -Verbose:$true; }

    Код делает следующее:

    • Получает путь до текущей папки;
    • Подключает нужные библиотеки (в том числе скомпилированную текущим проектом);
    • Вызывает Cmdlet Get-OrganizationService, который мы определили в проекте.
      Обратите внимание, что мы возвращаем объект подключения к организации CRM прямо в PowerShell, где можем работать с ним так же как в C# — обращаться к его методам и свойствам. Далее этот объект можно повторно использовать для вызова методов CRM SDK. Это сделано исключительно для примера, потому что создать подключение и выполнить GRUD операцию можно и в одном Cmdlet;
    • Если соединение установлено – вызываем Cmdlet Add-Account для создания записи Организации.

C#, PowerShell

Шапочка для спаниеля своими руками выкройка 353
Мансарда на взлете 200
Колбасные розочки - пошаговый рецепт с фото на Повар
Мансарда на взлете 723
Застряла
Мансарда на взлете 518
Детализация счета - Повод стать ближе
Мансарда на взлете 649
Скоро
Мансарда на взлете 621
Как сделать кормушку: лучшие мастер-классы с фото»
Мансарда на взлете 75
Мансарда на взлете 17
Мансарда на взлете 65
Мансарда на взлете 72
Мансарда на взлете 51
Мансарда на взлете 66
Мансарда на взлете 91
Мансарда на взлете 44
Мансарда на взлете 93
Мансарда на взлете 24