15
Глава 8.4 Работа с коллекциями Что такое коллекция? Коллекция – это вид переменной Nintex Workflow типа Коллекция (Collection) для хранения набора данных. В коллекции могут храниться различные типы простых типов данных – числа, строки текста, даты, идентификаторы пользователей, учетные записи. Коллекции необходимы для хранения результатов выборки данных при запросе к списками и базе данных. Например, нам необходимо определить элементы для обновления по определенному критерию. Для этого мы можем сделать запрос к списку, отобрать набор элементов списка в соответствии с заданными критериями. Для того чтобы в процессе далее мы могли обращаться к этим элементам – нам надо сохранить их идентификаторы. Для хранения идентификаторов используется переменная процесса с типом Коллекция. При выводе переменной коллекции в журнал процесса ее значения будут разделены точко с запятой: Рисунок 1 Вывод переменной с типом Коллекция в журнал процесса

94 Коллекции

Embed Size (px)

DESCRIPTION

Глава из книги Nintex Workflow - 9.4 Работа с коллекциями

Citation preview

Page 1: 94 Коллекции

Глава 8.4 Работа с коллекциями

Что такое коллекция?

Коллекция – это вид переменной Nintex Workflow типа Коллекция (Collection) для хранения набора данных. В коллекции могут храниться различные типы простых типов данных – числа, строки текста, даты, идентификаторы пользователей, учетные записи.

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

При выводе переменной коллекции в журнал процесса ее значения будут разделены точко с запятой:

Рисунок 1 Вывод переменной с типом Коллекция в журнал процесса

Создание переменной типа Коллекция

Для создания переменной типа Коллекция перейдите в форму “Переменные рабочего процесса” и добавьте новую переменную. Укажите тип переменной Коллекция.

Page 2: 94 Коллекции

Рисунок 2 Переменная типа Коллекция

Для того чтобы вы легко могли различать переменные с типом Коллекция рекомендую к конце названия переменной указывать в круглых скобках тип переменной – (Коллекция). Так вы легко будете ориентироваться в типах переменных.

Операции с коллекцией

Действие операции с Коллекцией предлагают набор действий с коллекцией.

Тип операции Настройка действия Операция с коллекциейДобавить Добавление в целевую коллекцию нового элмента. Новый элемент

добавляется в конец коллекции.

Если в коллекции не было элементов то данная операция поставить элемент на первую позицию в коллекции.

Удалить Удаляет в целевой коллекции элемент на определенной позиции. Позиция для удаления определяется в параметре действия Индекс.

Необходимо помнить что первый элемент коллекции имеет номер 0. Поэтому, если вы хотите удалить третий элемент – значение

Page 3: 94 Коллекции

индекса должно быть 2.Подсчет Подсчитывает количество элементов в коллекции и сохраняет в

переменную указанную в параметре действия “Сохранять результат в”.

Получить Позвляет извлечь данные хранимые в коллекции в указанном месте. Позиция для извлечения указывается в параметре действия Индекс. Переменная в которой будет сохранено извлекаемое значение указывается в параметре действия “Сохранять результат в”.

Существует Определяет есть ли в указанной целевой коллекции значение равное значению указанному в параметре действия “Значение”.

Если значение найдено – его положение заносится в переменную указанную в параметре действия “Сохранять результат в”.

Если значение не найдено то в переменную указанную в параметре действия “Сохранять результат в” подставится значение -1.

Сортировать Позволяент отсортировать целевую коллекцию по возрастанию или убыванию и сохранить результат в целевую коллекцию, указанную в параметре действия “Сохранять результат в”.

Извлечь Из целевой коллекции извлекается последний элемент. Элемент размещается в перменной процесса указанной в параметре действия “Сохранять результат в”.

В случае если коллекция будет пустой – переменной будет присвоено пустое значение.

Объединить Позволяет сохранить целевую коллекцию в переменную, указанную в параметре действия “Сохранять результат в”.

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

Удалить Все значения в целевой коллекции удаляются. В результаты остается пустая коллекция.

Удалить дубликаты

В целевой коллекции производится поиск и удаление дубликатов. После чего получается коллекция которую надо сохранить в коллекции указанной в параметре действия “Сохранять результат в”. Это может быть как новая коллекция так и целевая коллекция.

Удалить по Указываем какое значение должно быть удалено из целевой

Page 4: 94 Коллекции

значению коллекции.

Создание коллекции

Коллекция может быть создана несколькими способами

Заполнение коллекции при запросе к списку – через действие “Запрос к списку”

Добавление новых элементов в коллекцию – через действие “Операции с коллекцией”

Заполнение коллекции при запросе к списку

Если вам необходимо сделать выборку из списка и сохранять поля из списка вы можете указать коллекции для каждого из сохраняемых полей:

Page 5: 94 Коллекции

Рисунок 3 Запрос к списку с сохранением полей в коллекции

Добавление элемента в коллекцию

Если вам необходимо добавить элементы в коллекцию вручную – формируя значения самостоятельно – вам необходимо воспользоваться действием Операция с коллекцией.

Page 6: 94 Коллекции

Рисунок 4 Добавление в коллекцию значения переменной

В Операции с коллекцией вы указываете следующие параметры:

Целевая коллекция – коллекция в которую будет добавлено новое значение Выбираете тип операции с коллекцией – Добавить Значение – откуда взять значение. Вы можете выбрать как значение из

элемента списка так и переменную процесса.

Для примера заполним коллекцию набором чисел от 1 до 7. Наш процесс будет содержать две переменных: Итератор с текущим значением числа и Коллекцию чисел для хранения набора числел. В цикле выполняется инкрементное увеличение Итератора и добавление его значения в коллекцию. После того как внутри цикла было получено новое значение Итератора с помощью действия “Выполнение математической операции” вы можете добавить его в коллекцию.

Page 7: 94 Коллекции

Рисунок 5 Добавление чисел в коллекцию

Перебор значений коллекции

Перебор в действии “Для каждого”

Действие “Для каждого” является основным инструментом для последовательного перебора значений. В качестве параметров действия “Для каждого” указывается:

Целевая коллекция – коллекция, которую вам необходимо последовательно пройти

Сохранять результат в – переменная процесса, куда будет подставляться текущее значение коллекции – с каждым проходом будет выбираться следующее значение в коллекции пока вся коллекция не будет пройдена.

Например, если вам необходимо для каждого заказа отправленного на комплектацию расписать со склада необходимый доклад для комплектации – вам необходимо запросить все новые заказаы поставленные на комплектацию и создать для каждого такого заказа запись в журнале комплектации заказов на складе. Для

Page 8: 94 Коллекции

этого вы выполняете запрос к списку Заказов, получаете результат в виде коллекции и затем выполняете проход по коллекции с помощью действия “Для каждого”.

Рисунок 6 Запрос к списку с сохранением данных в Коллекции и проход по коллекции в действии Для каждого

В настройках действия “Для каждого” указывается коллекция по которой будет осуществлен последовательный проход и переменная в поле “Сохранять результат в” для размещение значения из коллекции.

Рисунок 7 Последовательный проход по коллекции в действии Для каждого

Перебор элемент посредством операций

Кроме прохода по коллекции с помощью действия “Для каждого” есть альтернативный способ – использование цикла с определением условия

Page 9: 94 Коллекции

прохождения всех элементов. Ниже будет приведен пример полного прохода коллекции.

Рисунок 8 Проход коллекции в цикле

Данный способ реализации прохода по коллекции не рекомендуется как основной в виду его громоздкости и наличия более простого подхода описанного выше - с помощью действия “Для каждого”. Данный способ реализации может рассматриваться скорее как пример использования отдельных операций коллекции или как пример способа обработки коллекции в рамках Цикла используемого для других целей.

Для того чтобы цикл сработал вам необходимо определить две переменных, получить значение количетсва элементов в коллекции с помощью действия “Операция с коллекцией” с типом операции Подсчет и далее в цикле увеличивать значение на единицу для текущей позиции. В цикле вы получите данные нужного вам элемента с помощью “Операция с коллекцией” с типом операции Получить.

Page 10: 94 Коллекции

Перебор элементов методом “выталкивания”

Вы можете перебрать в цикл коллекцию методом выталкивания. Эта операция полезна в тех случаях когда вы хотите осуществить проход коллекции с конца в начало и очистить ее после выполнения прохода.

В данной схеме вы обрабатываете полученную коллекцию с помощью действия “Операция с коллекцией” с типом Извлечь (поп). В данном действии последний элемент коллекции

Рисунок 9 Обработка коллекции в обратном порядке

В результате каждой такой операции из коллекции будет изыматься последний элемент до тех пор пока коллекция не будет пустая.

Рисунок 10 Результат обработки коллекции

Для того чтобы остановить цикл вам необходимо определить когда коллекция пустая. Существует несколько подходов для выполнения данной задачи.

Можно воспользоваться условием проверки на не пустое значение переменной “Заказ” – в нашем примере в нее помещается значение из коллекции. При таком подходе будет выполнен один не результативный проход когда на пустой коллекции будет выполнена операция извлечания элементов.

Page 11: 94 Коллекции

Более правильный способ – определение размера коллекции. Это в свою очередь можно сделать двумя спосами:

Определяя с помощью действия “Операции с коллекцией” с типом Подсчет размер текущей коллекции. В этом способе вам надо определить дополнительную переменную и вызвать в цикле операцию подсчета.

Используя функцию измерения длины строки подставляя в нее в виде параметра коллекцию. Это самый короткий способ с точки зрения проектирования процесса.

Рисунок 11 Определение условия Цикла для прохода коллекции в обратном порядке

Конвертация поля с нексколькими значениями в коллекцию

Если в вашем списке есть поле с несколькими значениями – то вы можете перенести эти значения в коллекцию.

Page 12: 94 Коллекции

Рисунок 12 Поле с несколькими значениями

Обратите внимание на то что если вы присвоите поле коллекции напрямую – вы получите заполнение первого элемента коллекции этим значеним. При выводе в журнал процесса это будет выглядеть так как будто вы вывели коллекцию элементов – но это не так.

Для того чтобы значения поля были расставлены по коллекции вам необходимо корректно сделать их перемещение.

Рисунок 13 Поле Участники с несколькими значениями

Page 13: 94 Коллекции

Если нам необходимо перенести несколько значений, например, из поля с типом “Пользователь или группа” мы должны воспользоваться действием “Регулярное выражение”.

Рисунок 14 Конвертация поля с несколькими значениями пользователей в коллекцию

В параметрах действия “Регулярное выражение” мы указываем следующее:

Шаблон – какой разделитель между элементами используется Операция – Разделить Исходный текст – указываем через действие “Добавить ссылку” свойство

элемента списка (поле) которое будем разбирать. В данном примере выбранно поле с пользователями.

Сохранять результат в – указываем целевую коллекцию. В данную коллекцию будут размещены результаты разбора значений поля.

В результате выполнения действия “Регулярное выражение” вы получите правильно разбитую коллекцию.