Разработка
28
Сен
1

Действия процесса (Actions) как механизм хранение конфигураций

В CRM 2011, если Вам нужно было хранить в системе какие-либо конфигурационные данные (например, URL сервера), обычно для этих целей создавался отдельный объект. А тем временем в CRM 2013 появилась новая интересная функциональность – Действия процессов – которые отлично подходят для реализации той же задачи. Преимущества их очевидны – Действия процессов переносятся в Решениях. Конечно не обошлось без недостатков – нельзя будет оперативно поменять значения на Проде (для этого нужно будет деактивировать Действие процесса).

Посмотрим, как это сделать:

  • Создайте новое Действие процесса (с именем, new_GetConfig, например). При этом укажите, что он будет глобальным;
  • Создайте два параметра:
    • input: Тип — строка, Направление — входящее. В него на входе мы будем передавать название переменной, которую хотим вернуть из Действие процесса;
    • output: Тип строка, Направление — исходящее. Как понятно из названия, в нем будет возвращаться необходимое значение.

    З.Ы. Можете использовать другие необходимые Вам типы и имена параметров;

  • Далее с помощью шагов проверки условии и шагов присвоения значений задайте для параметра output необходимые значения в зависимости от входного параметра input;
  • Сохраните и активируйте Действие процесса;
  • Далее для примера создадим простой консольное приложение, которое будет обращаться к Действию процесса и передавать ему входящий параметра, а Действие процесса, в свою очередь, в зависимости от входящего параметра, будет возвращать соответствующий исходящий:
    using System;
    using System.Collections.Generic;
    
    using Microsoft.Xrm.Sdk;
    using Microsoft.Xrm.Sdk.Query;
    using Microsoft.Xrm.Sdk.Client;
    using Microsoft.Crm.Sdk.Messages;
    
    using System.ServiceModel;
    using System.ServiceModel.Description;
    using System.Runtime.Serialization;
    
    namespace ActionConfig
    {
        class Program
        {
            static void Main(string[] args)
            {
                ClientCredentials credentials = new ClientCredentials();
                credentials.Windows.ClientCredential = new System.Net.NetworkCredential("Administrator", "1qaz@WSX", "D2012");
                Uri uri = new Uri("http://win-ebu0m4kvf06/superfirma/XRMServices/2011/Organization.svc");
                OrganizationServiceProxy proxy = new OrganizationServiceProxy(uri, null, credentials, null);
                proxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior());
                IOrganizationService service = (IOrganizationService)proxy;
    
                // Формируем запрос к Действию процесса            
                OrganizationRequest request = new OrganizationRequest("new_GetConfig");
                request["input"] = "Test"; // Задаем входящий параметр
                
                // Выполняем запрос и получаем ответ
                OrganizationResponse response = service.Execute(request);
                string server_url = (string)response.Results["output"];
    
                Console.WriteLine("URL сервера: " + server_url);
                Console.WriteLine("Press <Enter> to exit.");
                Console.ReadLine();
            }
        }
    }
    



Комментарии (1)
  • g.naukovych 28.09.2014

    Как мне кажется, этот способ не будет работать в offline.

    Может я ошибаюсь конечно, но все таки.
    А так интересное решение безусловно, и переносимое.

*

code