Параметры типовых маршрутов

30 8

В типовых маршрутах есть возможность создавать параметры разных типов, причем их достаточно много. В этой статье предлагаю рассмотреть, какие есть возможности и ограничения по работе с параметрами различных типов через объектную модель IS-Builder.

Примечание: с параметрами можно работать через функции группы «DIRECTUM. Настройка типовых маршрутов», но пользоваться функциями не всегда удобно, поэтому полезно знать и уметь пользоваться ОМ.

Параметры задачи можно получить с помощью свойства WorkflowParams.

Пример:

// Получить список всех параметров задачи
Params = Task.WorkflowParams
// Получить параметр по имени
Param = Params.ValueByName('<Имя параметра>') // получим IWorkflowParams

Все типы параметров я условно поделила на несколько групп. Для каждой группы будем рассматривать следующие операции:

  • Как получить значение параметра.
  • Как присвоить параметру значение.

«Целое число», «Дробное число», «Строка», «Признак», «Дата», «Логическое значение».

1. ParamValue = Param.Value

2. Param.Value = <Значение параметра>

Примечание: если передать в параметр данные неверного типа, то будет сгенерировано исключение, например: «Значение не является датой со временем.»

«Задача», «Задание», «Папка», «Электронный документ», «Запись справочника»

1. ParamValue = Param.Value // получим IObjectInfo

2. Параметру нужно присвоить IObjectInfo.

Пример заполнения параметра типа «Запись справочника»:

// Получить IObjectInfo
RefInfo = References.<Имя типа справочника>.ObjectInfo(<ИД записи справочника>) 
Param.Value = RefInfo

«Пользователь», «Группа пользователей», «Роль».

1. ParamValue = Param.Value // получим IUser

2. Параметру нужно присвоить IUser

Пример заполнения параметр типа «Пользователь»:

User = ServiceFactory.GetUserByID(<ИД пользователя>)
Param.Value = User

«Коллекция целых чисел» «Коллекция дробных чисел», «Коллекция строк», «Коллекция признаков», «Коллекция дат», «Коллекция логических значений»

1. Param.Value - первое значение коллекции. Param.Values(Index) – элемент коллекции  с переданным индексом, нумерация элементов начинается с 0. Param.Count - количество элементов коллекции. Чтобы получить все элементы можно использовать цикл while.

Пример получения всех элементов коллекции целых чисел:

Index = 0
while Index < Param.Count
  ShowMessage(Param.Values(Index))
  Index = Index + 1
endwhile

2. Запись значения в элемент с индексом, равным Count приведет к добавлению нового элемента коллекции. Также можно изменить конкретный элемент коллекции. Но вот удалить элемент коллекции нельзя, его можно очистить, но количество элементов коллекции при этом не изменится.

Пример добавления нового элемента в параметр типа «Коллекция строк»:

Count = Param.Count
Param.Values(Count) = <Значение нового элемента параметра>

«Коллекция задач», «Коллекция заданий», «Коллекция папок», «Коллекция электронных документов», «Коллекция записей справочника»

1. Param.Value возвращает IContents, каждый элемент которого IObjectInfo. Param.Values(Index) – элемент коллекции  с переданным индексом, нумерация элементов начинается с 0. Param.Count или Param.Value.Count - количество элементов коллекции. Чтобы получить все элементы можно использовать циклы while или foreach.

Пример получения всех элементов коллекции записей справочника:

foreach RefInfo in Param.Value
  ShowMessage(RefInfo.Name)
endforeach

2. Аналогично с коллекциями простых типов, в элемент коллекции записываем IObjectInfo.  

«Коллекция пользователей», «Коллекция групп пользователей», «Коллекция ролей» и «Коллекция учетных записей»

1. Param.Value - первое значение коллекции, каждый элемент которого IUser. Param.Values(Index) – элемент коллекции  с переданным индексом, нумерация элементов начинается с 0. Param.Count - количество элементов коллекции. Чтобы получить все элементы можно использовать цикл while.

2. Аналогично с коллекциями простых типов, в элемент коллекции записываем IUser.

«Список пользователей»

1. Param.Value возвращает IUserList, каждый элемент которого IUser. Param.Value.Count - количество элементов в листе (Param.Count возвращает всегда 1 независимо от количества пользователей). Чтобы получить все элементы можно использовать while или foreach, чтобы найти нужного IUser можно воспользоваться методом Find.

2. Добавить можно с помощью метода Add, удалить с помощью метода Delete, очистить параметр Clear. Подробнее см. справку для IUserList.

Пример добавления пользователя в параметр типа «Список пользователей»:

UserList = Param.Value
UserList.Add(ServiceFactory.GetUserByID(<ИД пользователя>))

«Список объектов»

1. Param.Value - возвращает IContents, каждый элемент которого IObjectInfo. Param.Value.Count или Param.Count - количество элементов  коллекции. Чтобы получить все элементы можно использовать циклы while или foreach.

2. Аналогично с коллекциями, в элемент списка записываем IObjectInfo.  

 

И в конце немного статистики.

Иван Середкин

Интересная статья, спасибо за неё, Ксения.

Андрей Литвинов

Да-а-а-а... Помнится намучился я с удалением значений из коллекции... Странно что нет простого удаления как у объекта IList.

Алена Рунова

СПАСИБО, хорошая подборка! smiley

Алексей Немцев

Жизненно! Спасибо, хорошая памятка на каждый день. Анекдот "Дебет слева, кредит - справа" напоминает. Буду регулярно открыть =)

Юрий Яковлев

Спасибо Ваши статьи постоянно спасают меня )

Максим Иванов

Добрый день! Подскажите, пожалуйста, как параметр Признак, при выполнения задания, присвоить карточному реквизиту Признак, связанной записи справочника.

Максим Денисенко

Умничка Ксения, хорошая статья.

Может у Вас есть для всех на просмотр некая DB со всеми интересными примерами. :)  

Иван Мишичев

Благодарю автора за весьма позную информацию.

Авторизуйтесь, чтобы написать комментарий