0

我有一个 Activiti 工作流,其中包含一个 ReceiveTask,我在其中对任务进行分组。我有一个侦听器,它在 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 流出到工作流的下一步。

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;
        }
    }

因此,您需要让任务本身更新或结束甚至开始。

或者在您的情况下,查找启动之后的下一个转换并发出信号而不是空值。

于 2013-04-03T09:10:19.707 回答