Отмена пользовательской задачи, когда другая пользовательская задача завершена - PullRequest
0 голосов
/ 11 января 2019

Две пользовательские задачи (задачи A и B) создаются параллельно, и когда одна задача завершена, необходимо отменить другую, наоборот. Это можно сделать с помощью прослушивателя задач (событие завершено). Однако проблема в том, если обе задачи выполняются одновременно, как с этим справиться?

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Я рекомендую вам создать пользовательскую задачу с multiple instances. Он может создавать несколько пользовательских задач одновременно и устанавливать различные условия для завершения нескольких экземпляров.

вот правила синтаксиса
<userTask id="userTask1" name="Activiti is awesome!" activiti:assignee="${user}">
    <multiInstanceLoopCharacteristics isSequential="false" activiti:collection="${userList}" activiti:elementVariable="user">
        <completionCondition>${nrOfCompletedInstances == nrOfInstances}</completionCondition>
    </multiInstanceLoopCharacteristics>
</userTask>
  • IsSequential означает параллельное или последовательное создание
  • $ {userList} означает объект списка, полученный извне
  • завершение-условие означает, что все невыполненные пользовательские задачи будут автоматически удалены после выполнения установленных вами условий.

Дополнительную информацию можно найти в Руководство пользователя activiti # Несколько экземпляров

Надеюсь, что может решить вашу проблему!

0 голосов
/ 11 января 2019

Вы пробовали это? Завершение задачи - это транзакционная операция, это означает, что если обе задачи будут выполнены одновременно, «выиграет» только одна транзакция, а другая будет откатана, и вторая транзакция будет повторена. В целом, это должно работать, если у вас есть механизм повторного запуска

...