0

タスクをグループ化する ReceiveTask を含む Activiti ワークフローがあります。ReceiveTask のイベント開始時にトリガーするリスナーがあり、新しく追加されたタスクのプロパティをチェックして、同じプロパティを持つ他のタスクが ReceiveTask にあるかどうかを確認します。はいの場合は、次のステップに進むようにすべてをトリガーしたいと思います。

<receiveTask id="IssuePost" name="Issue Post">
  <extensionElements>
    <activiti:executionListener event="start" delegateExpression="${IssuePost}"></activiti:executionListener>
  </extensionElements>
</receiveTask>

タスクが ReceiveTask に問題なく移動すると、私の Java Listener クラス IssuePost が呼び出されます。その ReceiveTask にある他のタスクのリストを取得できます。タスクをトリガーしてワークフローの次のステップに進むのに問題があります。タスクで「シグナル」を呼び出すと、ループに陥ります。IssuePost リスナーは、Alfresco/Activiti があきらめて例外をスローするまで、無限ループでトリガーされ続けます。

List<NodeRef> siblingNodes = searchService.selectNodes( parent, xpath, null, namespacePrefixResolver, false );
if( siblingNodes.size() == batchCount )
{
    for( int i=0; i < siblingNodes.size(); i++ )
    {
        List<WorkflowInstance> workflows = workflowService.getWorkflowsForContent( siblingNodes.get( i ), true );
        // this line causes the loop.
        workflowService.signal( workflows.get(0).getId(), null );

リスナーをトリガーせずに、ワークフローの次のステップに進むように ReceiveTask のタスクに信号を送るにはどうすればよいですか? ワークフローの次のステップへの ReceiveTask からのフローは 1 つだけです。

4

1 に答える 1

1

InvitationServiceImplを見ると、次の便利なスニペットが表示されます。

    List<WorkflowTask> tasks = workflowService.getTasksForWorkflowPath(startTask.getPath().getId());
    if(tasks.size()==1)
    {
        WorkflowTask task = tasks.get(0);
        if(taskTypeMatches(task, taskTypes))
        {
            if(properties != null)
            {
                workflowService.updateTask(task.getId(), properties, null, null);
            }
            workflowService.endTask(task.getId(), transition);
            return;
        }
    }

そのため、タスク自体を更新、終了、または開始する必要があります。

または、あなたの場合、開始後の次の遷移を検索し、null の代わりにその遷移を通知します。

于 2013-04-03T09:10:19.707 に答える