мультиэкземпляр activiti для каждого цикла с пустой коллекцией

В наших рабочих процессах у нас есть несколько действий вызова с несколькими экземплярами, например следующие:

<callActivity id="loopFoos" calledElement="${workflowResolver.resolveWorkflowName(foo)}">
    <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${foos}" activiti:elementVariable="foo" />
</callActivity>

Проблема в том, что некоторые из коллекций пусты, что приводит к исключениям, поскольку activiti предполагает, что в коллекции есть хотя бы один элемент. Мы могли бы принимать решения по всем вызовам вспомогательного рабочего процесса, но это загрязнило бы диаграмму рабочего процесса деталями, не имеющими отношения к бизнесу.

Нам понадобится поведение java для каждого типа

for (Foo foo : foos) {
 // call workflow
}

где пустые коллекции просто не входят в цикл.

Есть ли способ заставить активити вести себя так? Как бы вы смоделировали рабочий процесс, если его нет?


person mio    schedule 11.03.2013    source источник


Ответы (1)


Решить эту проблему стандартными возможностями Activiti невозможно. Таким образом, единственный вариант - использовать шлюзы или Java Service Task с классом, реализующим ActivityBehaviour (не рекомендуется) для управления потоком последовательности. Я предпочитаю использовать exclusiveGateways. Проверьте эти ссылки для получения дополнительной информации:

  1. Обсуждение на официальном форуме Activiti

  2. MultiInstanceActivityBehavior.java - int resolveNrOfInstances (выполнение ActivityExecution) ParallelMultiInstanceBehavior - void createInstances (выполнение ActivityExecution); SequentialMultiInstanceBehavior - void createInstances (выполнение ActivityExecution);

person ATMTA    schedule 12.03.2013