ELMA API - инструмент для разработки сценариев

Введение

Примечание
Перед началом работы со сценариями рекомендуется ознакомиться со стандартами написания программного кода на языке C#.

ELMA API – это набор методов системы, собранных в понятную иерархическую структуру. ELMA API предназначен для разработки сценариев ELMA. Подробнее о разработке сценариев описано в статье.

По ELMA API сгенерирована справка, в ней приведены примеры и заметки.

Структура ELMA API

Для работы с ELMA API требуется подключить пространство имен EleWise.ELMA.API.

Для того чтобы начать работу, напишите в модуле сценариев PublicAPI. Вы увидите следующее:

PublicAPI – точка доступа к дереву API, функция автокомплита позволяет увидеть все вложенные элементы дерева, и получить доступ к нужным методам.

Все объекты API разбиты на функциональные модули системы:

  • CRM (Работа с клиентами);
  • Docflow (Документооборот);
  • Enums (Перечисления);
  • KPI (Управление показателями);
  • Objects (Объекты);
  • Portal (Содержит объекты модулей Сообщений, Задач(Поручений));
  • Processes (Процессы);
  • Projects (Проекты);
  • Services (Сервисы).

Пример использования ELMA API

Главная цель ELMA API - облегчить разработку сценариев ELMA, за счет уменьшения объемов кода, для решения каких либо рутинных задач.

Рассмотрим пример сценария регистрации документа:

Пример сценария без использования PublicAPI

//определим тип сущности на основе типа документа.
//Вместо "DocType" необходимо ввести имя класса Вашего документа. Обратите внимание что в конструкции используется его интерфейс
var docType =  new ReferenceOnEntityType { TypeUid = InterfaceActivator.UID<IDokType>(false) };
//найдем вариант регистрации
var reg_variant = RegistrationVariantManager.Instance
    .Find(new InstanceOf<IRegistrationVariantFilter>(){New =
    {
        //укажем тип документопотока "Входящие"
        Docflow = DocumentFlowType.Incoming,
        //зададим тип документа
        DocumentType = docType,
        //укажем UID для DepositoryGroup. Как определить его значение описано ниже
        DepositoryGroupUid = new Guid("64AEC71A-D9F3-488E-8E4F-1AD47E31D373"),
        //зададим имя варианта регистрации
        Query = "Name = ’Вариант1’"
        }}.New, new FetchOptions(0, 1))
    .FirstOrDefault();
//если вариант регистрации не найден - выход из сценария
if (reg_variant == null) {
        Console.Write("Variant not found");
        return;
    }
//найдем дело
var depository = (IDepository)DepositoryGroupManager.Instance.GetByGroupUid(reg_variant.DepositoryGroupUid, true)
    .CastAsRealType();
//если дело не найдено - выход из сценария
if (depository == null)
    {
        Console.Write("Depository not found");
        return;
    }
//поиск типа РКК в опубликованной номенклатуре
var filter = InterfaceActivator.Create<INomenclatureCacheFilter>();
filter.Depository = depository;
filter.DocumentType = docType;
filter.Flow = reg_variant.Docflow;
filter.RegistrationPlace = reg_variant.RegistrationPlace;          
//если в опубликованной номенклатуре тип РКК не найден - выход из сценария
var cacheItem = NomenclatureCacheManager.Instance.Find(filter, FetchOptions.All).FirstOrDefault();
if (cacheItem == null)
    {
        Console.Write("Cache item not found");
        return;
    }
//создадим РКК найденного типа
var rkk = (IRegistrationCard)InterfaceActivator.Create(cacheItem.RegistrationCard.EntityType);
//запишем в нее регистрируемый документ
rkk.Document = context.Dok;
//укажем дело, в котором регистрируется документ
rkk.Depository = depository;
//укажем документопоток, в котором регистрируется документ (в данном случае "Входящие")
rkk.Flow = reg_variant.Docflow;
//укажем место регистрации
rkk.RegistrationPlace = reg_variant.RegistrationPlace;
//и укажем в РКК тип регистрируемого документа:
rkk.DocumentType = docType;         
context.Dok.RegistrationCard.Add((RegistrationCard)rkk);
rkk.Save();
//Сама регистрация. Внутри сгенерируется номер
RegistrationCardManager.Instance.Register(rkk, false, null);

Пример сценария с использованием PublicAPI

Примечание
Актуальная документация по PublicAPI доступна по ссылке.
Внимание!
Сценарий, указанный ниже, актуален для версий системы ELMA до 3.12.1 включительно.
var doc = PublicAPI.Docflow.Types.File.Create();
var regVar = PublicAPI.Docflow.Document.LoadRegVariant(2);
PublicAPI.Docflow.Document.Register(doc, regVar);

Как видно, разница очень ощутима, объем кода уменьшился в 3 раза. Но, что немаловажно, данный код гораздо понятен.

Часто задаваемые вопросы (F.A.Q)

Часто задаваемые вопросы (F.A.Q) изложены в статье.

Внимание!
ELMA API доступно только с версии 3.2.9.20379 и выше.

Примеры PublicAPI

  1. Создание портлета для компонента в BPMApps с использованием PublicAPI
  2. Создание модуля в BPMApps с использованием PublicAPI
  3. Создание документа при помощи PublicAPI
  4. Пример сценария отправки SMS сообщения при помощи PublicAPI
  5. Пример создания проекта с использованием PublicaAPI
  6. Отправка документа на согласования с использованием PublicAPI