在 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 脚本返回。
这是一个老问题,但我有答案。我不确定这是否是您的正确答案。
我遇到了同样的问题,信令不起作用。所以我使用了以下
<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>