[ELMA3] Настройка списка выбора дел в задачах бизнес-процессов
Внимание
Материал статьи поможет в случае, когда в бизнес-процессе необходимо организовать удобную выборку пользователем дела номенклатуры. Если просто разместить контекстную переменную типа Дело на форму задачи, в раскрывающемся списке выбора дел окажутся все дела всех типов документов за все номенклатурные годы.
Рассмотренный пример позволяет реализовать выборку дел документов типа Входящий документ актуальной номенклатуры. Таким образом, пользователь работает с компактным списком дел и не путается в огромном количестве элементов, большая часть которых ему не нужна.
При необходимости изменить выборку дел на документы других типов можно путем замены Guid типа документа.
Создание служебного объекта
Откройте Дизайнер ELMA:
1. На вкладке Объекты в Дизайнере создайте новый объект, назовите его Служебный. Перейдите на вкладку Сценарии данного объекта.
В его модуль сценариев добавьте следующий код, предварительно подключив следующие сборки:
using EleWise.ELMA.ComponentModel; using EleWise.ELMA.Documents.Managers; using EleWise.ELMA.ExtensionPoints; using EleWise.ELMA.Model.Entities.EntityReferences; using EleWise.ELMA.Model.Metadata; using EleWise.ELMA.Model.Services; using NHibernate.Criterion;
Текст сценария:
[Component] public class MyReferenceOnEntityTypeQueryResult : IQueryFunctionResult { public string FunctionName { get { return "MyReferenceOnEntityType"; } } public IProjection GetProjection(EntityMetadata metadata, string propName, object[] parameters) { return Projections.Constant(GetValue(metadata, propName, parameters)); } public object GetValue(EntityMetadata metadata, string propName, object[] parameters) { if (parameters.Length == 1 && parameters[0] is string) return new ReferenceOnEntityType{ TypeUid = new Guid((string)parameters[0])}; throw new ArgumentException(); } }
Подготовка объекта Дело
Далее необходимо выполнить подготовку объекта Дело: добавить в объект ссылку на класс, кэширующий текущую номенклатуру.
2. На вкладке Объекты найдите объект Дело (Документы-Номенклатура-Дело).
3. Создаем новое свойство с именем Опубликованная номенклатура (OpublikovannayaNomenklatura):
- Тип – Класс, кэширующий опубликованную номенклатуру;
- Тип связи – Множественная (1-N);
- Ключевая колонка – Дело.
Сохранение и публикация объектов
4. Сохраняем и публикуем объекты Дело и Служебный.
5. Переходим на вкладку Публикация Дизайнера и нажимаем на кнопку Перезапустить сервер.
Пример использования в пользовательской задаче
В бизнес-процессе создаем пользовательскую задачу. В данной задаче создаем контекстную переменную типа Дело.
Пусть на форме будет раскрывающийся список выбора дел типа Входящий документ текущей номенклатуры (сейчас - 2013 года). Создаем сценарий при загрузке формы – LoadFormSc.
Сценарий при загрузке формы:
var settings = ((EntitySettings)context.GetSettingsFor(c => c.Delo)); settings.FilterQuery = "OpublikovannayaNomenklatura in (DocumentType in (MyReferenceOnEntityType(’C151A3B3-220D-443A-A054-A0345A869961’)))"; settings.Save();
где:
- OpublikovannayaNomenklatura – имя свойства типа Класс, кэширующий опубликованную номенклатуру объекта Дело;
- ’C151A3B3-220D-443A-A054-A0345A869961’ – guid типа документа Входящий документ. Для того, чтобы определить guid необходимого Вам типа документа, перейдите в раздел Администрирование – Документооборот – Типы документов, далее перейдите на страницу необходимого типа документа. Адрес данной странице в адресной строке будет иметь вид: http://адрес_сервера/Documents/DocumentMetadata/Settings?uid=C151A3B3-220D-443A-A054-A0345A869961, где C151A3B3-220D-443A-A054-A0345A869961 - guid типа документа;
- с.Delo– переменная типа Дело из контекста задачи процесса.