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