Понятно. Вот как раз этом я говорила - про то, что переменные должны быть типа List<String>
Вы передаете свою переменную performer, которая, судя по всему, есть переменная типа String вида "ivanov, petrov, sidorov" или еще какого-то другого типа. А это не сработает.
Я выше в комментарии написала, как я решила эту проблему.
У меня в модели на старте определяются bpm_assignes - все необходимые мне юзеры. Или же это моя кастомная переменная, которая есть multiple person.
Что я делаю, чтобы вытащить список userName-ов из переменной? В процессе на старте я собираю в цикле строку из userName-ов, отдельнных друг от друга запятыми (выглядеть это будет как "ivanov, petrov, sidorov").
Затем я пишу свой js scoped object (java-код и часть контекста я также привела в комментарии выше) converter, чем метод принимает в виде параметра строку с userName-ами и возвращает их уже в виде переменной типа Collеction:
И уже в месте <loopDataInputRef>performer</loopDataInputRef> вместо performer я указываю вот ту самую переменную.
на что получаю "Variable performer' is not a Collection". В какую сторону копать? В Activiti я практически полный ноль...
Аспект dir:performer в модели описан полностью аналогично аспекту bpm:assignees в bpmModel.xml
Это можно сделать несколькими способами, в зависимости от того, какой сценарий Вам нужно имплементировать.
К примеру, Вам нужно задачу скидывать в пул некоей группе исполнителей. Задача создается одна и попадает в пул, владелец задачи пока не определен. Каждый юзер из обозначенной группы может взять на себя задачу (и вернуть в пул, соответственно). И только тогда, когда задача взята, у нее появляется owner. В данном случае вместо humanPerformer используется следующая конструкция:
Или же используйте атрибут activiti:candidateUsers в элементе userTask
В данном случае надо помнить, что значение formalExpression - это переменная типа List. Т е если у вас есть predefined список юзеров, то указываются они так:
<formalExpression>petrov, sidorov, ivanov</formalExpression>
Если же Вы хотите брать список юзеров из bmp_assignes, динамически определяя список юзеров, то нужно создать из bpm_assignes список.
Это можно сделать так. К примеру, у вас есть созданный Вами js scoped object converter с методом convert, который принимает в качестве параметра строку типа "ivanov, petorv, sidorov" и делает из нее List Код в джаве конвертора выглядит так:
import java.util.*;
import org.alfresco.repo.processor.BaseProcessorExtension;
public class StringConverter extends BaseProcessorExtension {
public List convert(String s) {
List list = new ArrayList(Arrays.asList(s.split(",")));
return list;
}
}
На стартовом ивенте в процессе Вы делаете что-то примерно такое:
var coordinators = "";
coordinatorsCount = bpm_assignes.size();
for (var i=0; i<coordinatorsCount; i++ ) {
coordinators += bpm_assignes.get(i).properties.userName+",";
}
var userList = converter.convert(coordinators);
execution.setVariable('userList', userList);
И уже пул Вы определяете атрибутом activiti:candidateUsers="${userList}" в нужном userTask-е.
Если же у Вас задача, выбрав несколько юзеров, создать целенаправленный список задач с определенными owner-ами, то можете использовать элемент активити multiInstanceLoopCharacteristics Пример его использования можно увидеть в parallel-review.bpmn20.xml, который лежит в alfresco/tomcat/webapps/alfresco/WEB_INF/classes/alfresco/workflow. Обратите внимание на конструкию в примере, именно она и создает список задач с определенными владельцами:
Добрый день! А каким образом нужно будет изменить описание процесса, если предусмотреть выбор нескольких исполнителей (на этапе inspection запускать что-то типа activitiParallelReview)?
День день. Нет, Alfresco не предоставляем таких возможностей из коробки. Но Вы можете интегрировать ее с Ephesoft, Kofax или Abbyy для этих целей. Готовые модули для интеграции с Kofax и Ephesoft есть, с Abbyy чуть сложнее.
Основная трудность в том что бы перебрать все поля на форме не соображу как это сделать
Дуже дякую!
При просмотре бизнес-процесса пустая страница.
День день. Нет, Alfresco не предоставляем таких возможностей из коробки. Но Вы можете интегрировать ее с Ephesoft, Kofax или Abbyy для этих целей. Готовые модули для интеграции с Kofax и Ephesoft есть, с Abbyy чуть сложнее.