工作流实例结束时,JBPM 任务实例为“IN_PROGRESS”

问题描述 投票:0回答:1

在 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>

使用以下 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();
        }
    }
}

在执行代码之前,我可以在工作流控制台中看到工作流实例位于正确的任务中,并且存在转换

complete

当代码执行时,命令:

显示全部工作流程

不返回任何工作流程。

一切看似正常,但似乎有问题。 任务实例

wait
仍在
IN_PROGRESS
中,因此即使工作流实例不再存在,它也会由 Web 脚本返回。

transition alfresco jbpm
1个回答
0
投票

这是一个老问题,但我有答案。我不确定这是否是您的正确答案。

我遇到了同样的问题,信令不起作用。所以我使用了以下

<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>
© www.soinside.com 2019 - 2024. All rights reserved.