你好 SO 社区,
我没有在 Alfresco 论坛上获得任何帮助,我希望在这里能获得更多帮助。我们正在构建一个基于 Alfresco 和 jBPM 的应用程序,我已经定义了一个工作流,但是我要么定义错误,要么遗漏了某些东西,或者 Alfresco 与 jBPM 的集成存在错误,我需要帮助找出并修复它。这是问题所在:
我有一个高级工作流程,我正在尝试从 JavaScript 启动它。这是我用来启动工作流程的代码:
var nodeId = args.nodeid;
var document = search.findNode("workspace://SpacesStore/" + nodeId);
var workflowAction = actions.create("start-workflow");
workflowAction.parameters.workflowName = "jbpm$nmwf:MyWorkflow";
workflowAction.parameters["bpm:workflowDescription"] = "Please edit: " + document.name;
workflowAction.parameters["bpm:assignees"] = [people.getPerson("admin"), people.getPerson("andyg")];
var futureDate = new Date();
futureDate.setDate(futureDate.getDate() + 7);
workflowAction.parameters["bpm:workflowDueDate"] = futureDate;
workflowAction.execute(document);
这运行良好,从启动节点的默认转换发送的电子邮件也很好。但是,当我在我的任务列表中查找工作流时,它并不存在,但它在我已完成的任务列表中。起始节点的默认转换(唯一转换)指向具有四个转换的任务节点。
工作流程中有 8 个任务和 22 个转换。当我使用工作流控制台启动工作流并结束启动任务时,它正确地遵循默认启动节点转换到下一个任务。新任务显示在“显示任务”中,但未显示在“显示我的任务”中(显然是因为该任务由于某种原因被标记为已完成,尽管它不在“结束”节点中)。任务是:
task id: jbpm$111 , name: nmwf:submitInEditing , properties: 18
如果我“显示过渡”,它看起来就像我期望的那样:
path: jbpm$62-@ , node: In Editing , active: true
task id: jbpm$111 , name: nmwf:submitInEditing, title: submitInEditing title , desc: submitInEditing description , properties: 18
transition id: Submit for Approval , title: Submit for Approval
transition id: Request Copyediting Review , title: Request Copyediting Review
transition id: Request Legal Review , title: Request Legal Review
transition id: Request Review , title: Request Review
我不想发布整个工作流程,因为它很大,但这里是前两个节点:
首先是泳道:
<swimlane name="initiator"></swimlane>
<swimlane name="Content Providers">
<assignment actor-id="Content Providers" class="org.alfresco.repo.workflow.jbpm.AlfrescoAssignment">
<actor>#{bpm_assignees}</actor>
</assignment>
</swimlane>
现在节点:
<start-state name="start">
<task name="nmwf:submitTask" swimlane="initiator"/>
<transition name="" to="In Editing">
<action>
<runas>admin</runas>
<script>
/* Code to send e-mail that a new workflow was started. I get this e-mail. */
</script>
</action>
</transition>
</start-state>
<task-node name="In Editing">
<task name="nmwf:submitInEditing" swimlane="Content Providers" />
<!-- I put e-mail sending code in each of these transitions, but none are firing. -->
<transition to="In Approval" name="Submit for Approval"></transition>
<transition to="In Copyediting" name="Request Copyediting Review"></transition>
<transition to="In Legal Review" name="Request Legal Review"></transition>
<transition to="In Review" name="Request Review"></transition>
</task-node>
这是这两个节点的模型:
<type name="nmwf:submitTask">
<parent>bpm:startTask</parent>
<mandatory-aspects>
<aspect>bpm:assignees</aspect>
</mandatory-aspects>
</type>
<type name="nmwf:submitInEditing">
<parent>bpm:workflowTask</parent>
<mandatory-aspects>
<aspect>bpm:assignees</aspect>
</mandatory-aspects>
</type>
这是在工作流控制台中运行工作流的伪日志:
:: deploy alfresco/extension/workflow/processdefinition.xml
deployed definition id: jbpm$69 , name: jbpm$nmwf:MyWorkflow , title: nmwf:MyWorkflow , version: 28
:: var bpm:assignees* person admin,andyg
set var {http://www.alfresco.org/model/bpm/1.0}assignees = [workspace://SpacesStore/73cf1b28-21aa-40ca-9dde-1cff492d0268, workspace://SpacesStore/03297e91-0b89-4db6-b764-5ada2d167424]
:: var bpm:package package 1
set var {http://www.alfresco.org/model/bpm/1.0}package = workspace://SpacesStore/6e2bbbbd-b728-4403-be37-dfce55a83641
:: start bpm:assignees bpm:package
started workflow id: jbpm$63 , def: nmwf:MyWorkflow
path: jbpm$63-@ , node: start , active: true
task id: jbpm$112 , name: nmwf:submitTask, title: submitTask title , desc: submitTask description , properties: 16
transition id: [default] , title: Task Done
:: show transitions
path: jbpm$63-@ , node: start , active: true
task id: jbpm$112 , name: nmwf:submitTask, title: submitTask title , desc: submitTask description , properties: 17
transition id: [default] , title: Task Done
:: end task jbpm$112
signal sent - path id: jbpm$63-@
path: jbpm$63-@ , node: In Editing , active: true
task id: jbpm$113 , name: nmwf:submitInEditing, title: submitInEditing title , desc: submitInEditing description , properties: 17
transition id: Submit for Approval , title: Submit for Approval
transition id: Request Copyediting Review , title: Request Copyediting Review
transition id: Request Legal Review , title: Request Legal Review
transition id: Request Review , title: Request Review
:: show tasks
task id: jbpm$113 , name: nmwf:submitInEditing , properties: 18
:: show my tasks
admin:
[there is no output here]
我一直在假设我在最初开始工作流之前设置的 bpm:assignees 被传递到第一个任务节点“正在编辑”。显然,受让人在任务对象上,而不是在工作流对象上。我在启动状态任务中添加了受让人方面,以便它可以容纳它们(在我遇到问题之后;最初他们不在那里)并且可能他们仍然坐在那里,但是在我获得控制权之前启动状态已经结束从 Web 脚本返回(如果它没有结束它会有所帮助,我需要它处于“正在编辑”中,因为启动状态仅用于记录工作流已启动)。
一直让我感到困惑的是,在输入任务之前需要请求我需要在每个任务上设置的属性(当您选择转换时,您必须为下一个任务提供数据,然后才能真正移动到下一个任务,因为您必须首先验证您是否拥有所有必需的数据,然后发出转换信号)。但是,启动工作流的代码是异步的,因此不会返回已启动的工作流或当前任务(在我的情况下是“正在编辑”)。因此,无论哪种方式,您都不能设置诸如 bpm:assignees 和 bpm:dueDate 之类的变量。
我想知道这是否是用户任务列表的问题。我在属性列表中设置受让人,但也许那些受让人将进入启动状态任务并且没有被传递给“正在编辑”任务?
请注意,这是我的第一个 jBPM 工作流程,所以请不要假设我知道我在做什么。如果你看到一些看起来不对劲的东西,那可能是,我只是不知道。
提前感谢您的任何建议或帮助,