Transition JBPM任务实例是;“正在进行中”;工作流实例结束时

Transition JBPM任务实例是;“正在进行中”;工作流实例结束时,transition,alfresco,jbpm,Transition,Alfresco,Jbpm,在alfresco 4.1中,我使用JBPM定义了以下工作流: <?xml version="1.0" encoding="UTF-8"?> <process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="dswf:testworkflow"> <swimlane name="initiator" /> <start-state name="start"> <t

在alfresco 4.1中,我使用JBPM定义了以下工作流:

<?xml version="1.0" encoding="UTF-8"?>
<process-definition xmlns="urn:jbpm.org:jpdl-3.1" name="dswf:testworkflow">
    <swimlane name="initiator" />

    <start-state name="start">
        <task name="dswf:startTask" swimlane="initiator"/>
        <transition name="" to="wait" />
    </start-state>

    <task-node name="wait">
        <task name="dswf:waitCompletion">
            <event type="task-create">
                <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
                    <script>
                        logger.log("Waiting");
                    </script>
                </action>
            </event>
        </task>
        <transition name="complete" to="completed" />
    </task-node>

    <node name="completed">
        <event type="node-enter">
            <action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
                <script>
                    logger.log("Completed");
                </script>
            </action>
        </event>
        <transition name="" to="end" />
    </node>

    <end-state name="end" />
</process-definition>

logger.log(“等待”);
logger.log(“已完成”);
使用以下java代码,我启动了从等待到完成的转换:

/* Suppose that workflowInstanceId is the id of an instance of this workflow */
List<WorkflowPath> paths = workflowService.getWorkflowPaths(workflowInstanceId);
if (paths != null && paths.size() != 0) {
    for (WorkflowPath wp : paths) {
        try {
            /* checkTransition() returns true if the path contains the transition "complete" */
            boolean hasComplete = checkTransition(wp, "complete");
            if (hasComplete) {
                workflowService.signal(wp.getId(), "complete");
            }
        }
        catch (WorkflowException ex) {
            ex.printStackTrace();
        }
    }
}
/*假设workflowInstanceId是此工作流实例的id*/
列表路径=workflowService.GetWorkflowPath(workflowInstanceId);
if(paths!=null&&paths.size()!=0){
对于(工作流程wp:paths){
试一试{
/*如果路径包含转换“complete”,则checkTransition()返回true*/
布尔hasComplete=checkTransition(wp,“complete”);
如果(已完成){
workflowService.signal(wp.getId(),“complete”);
}
}
捕获(WorkflowException-ex){
例如printStackTrace();
}
}
}
在执行代码之前,我可以在工作流控制台中看到工作流实例位于正确的任务中,并且存在“完成”转换

执行代码时,命令:

显示所有工作流

不返回任何工作流

一切似乎都很好,但似乎有问题。
任务实例“wait”仍处于“进行中”,因此它由webscript返回,即使工作流实例不再存在。

这是一个老问题,但我已经得到了答案。我不确定这是否适合你

我也有同样的问题,信号也不起作用。所以我用了下面的

<action class="org.alfresco.repo.workflow.jbpm.AlfrescoJavaScript">
                <script>
                    <variable name="wf_ended" access="read,write" />
                    <expression>wf_ended = true;</expression>
                </script>
            </action>
            <script>
                executionContext.getTaskMgmtInstance().endAll();
            </script>

wf_end=true;
executionContext.getTaskMgmtInstance().endAll();

您使用jbpm是因为您应该这样做吗?使用activiti如果你被允许做soHi,那么你是在试图回避这个问题吗?:)是的,我必须使用jbpm。谢谢你的帮助!不,我只是不太熟悉alfresco中的jbpm和jbpm集成,因为自从alfresco 3.4Thank you Tahir之后就有了activiti。我不记得我是如何解决这个问题的。我忘了更新这个问题。我没有时间核实你的问题是否正确。你认为我的代码有什么错误?信号的问题是,它会进入下一步。但是如果该步骤结束,它不会结束任务,因此您会看到状态正在进行中。所以通过结束它,它真的结束并完成了它。