Настройка списка выбора дел в задачах бизнес-процессов


Внимание
Информация актуальна только для версий ELMA 3.1.6 и старше! 

Материал статьи поможет в случае, когда в бизнес-процессе необходимо организовать удобную выборку пользователем дела номенклатуры. Если просто разместить контекстную переменную типа Дело на форму задачи, в раскрывающемся списке выбора дел окажутся все дела всех типов документов за все номенклатурные годы.

Рассмотренный пример позволяет реализовать выборку дел документов типа Входящий документ актуальной номенклатуры. Таким образом, пользователь работает с компактным списком дел и не путается в огромном количестве элементов, большая часть которых ему не нужна.

При необходимости изменить выборку дел на документы других типов можно путем замены 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– переменная типа Дело из контекста задачи процесса.