我有一个Activiti工作流程,其中包含一个ReceiveTask,我将任务分组。我有一个Listener,它在ReceiveTask的事件开始时触发,我在其中检查新添加的任务的属性,以查看具有相同属性的其他人是否在ReceiveTask中。如果是,那么我想触发它们全部进入下一步。
<receiveTask id="IssuePost" name="Issue Post">
<extensionElements>
<activiti:executionListener event="start" delegateExpression="${IssuePost}"></activiti:executionListener>
</extensionElements>
</receiveTask>
My Java Listener类在任务移动到ReceiveTask时,会调用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中发出任务信号,以便在不触发我的监听器的情况下转移到工作流程的下一步?接收任务只有一个流出工作流程的下一步。
答案 0 :(得分: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的信号。