ELMA API - инструмент для разработки сценариев
Введение
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
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) изложены в статье.
Примеры PublicAPI
- Создание портлета для компонента в BPMApps с использованием PublicAPI
- Создание модуля в BPMApps с использованием PublicAPI
- Создание документа при помощи PublicAPI
- Пример сценария отправки SMS сообщения при помощи PublicAPI
- Пример создания проекта с использованием PublicaAPI
- Отправка документа на согласования с использованием PublicAPI