1、部署流程
可以使用标准的Flowable API(RepositoryService)来部署进程。另外,flowable-cdi提供了自动部署processes.xml类路径顶层文件中列出的进程的可能性。这是一个示例processes.xml文件:
<?xml version="1.0" encoding="utf-8" ?>
<!-- list the processes to be deployed -->
<processes>
<process resource="diagrams/myProcess.bpmn20.xml" />
<process resource="diagrams/myOtherProcess.bpmn20.xml" />
</processes>
===使用CDI的上下文流程执行
在本节中,我们将简要介绍Flowable CDI扩展使用的上下文流程执行模型。BPMN业务流程通常是长时间运行的交互,由用户和系统任务组成。在运行时,一个进程被分成一组由用户和/或应用程序逻辑执行的单个工作单元。在flowable-cdi中,一个流程实例可以和一个cdi scope关联,这个关联表示一个工作单元。如果一个工作单元是复杂的,例如,如果UserTask的实现是一个复杂的不同形式的序列,并且在这个交互过程中需要保持“非进程范围”状态,这是特别有用的。
在默认配置中,流程实例与“最宽”活动范围相关联,从对话开始,如果对话上下文不活跃,则回退到请求。
2、将会话与流程实例相关联
在解析@BusinessProcessScoped bean或注入流程变量时,我们依赖于活动的cdi范围和流程实例之间的现有关联。flowable-cdi提供了org.flowable.cdi.BusinessProcess控制关联的bean,最显着的是:
- startProcessBy(…)方法,镜像由Flowable公开的各个方法,RuntimeService允许启动并随后关联业务流程,
- resumeProcessById(String processInstanceId),允许将流程实例与提供的id相关联,
- resumeTaskById(String taskId),允许将任务与提供的id(以及扩展名,相应的流程实例)相关联,
一旦工作单元(例如UserTask)完成,completeTask()就可以调用该方法来解除与流程实例的对话/请求的关联。这表明当前任务已完成并使流程实例继续进行。
请注意,BusinessProcess-bean是一个@Namedbean,这意味着可以使用表达式语言来调用公开的方法,例如从JSF页面调用。下面的JSF2片段开始一个新的对话,并将它与一个用户任务实例关联起来,这个用户任务实例的ID作为一个请求参数(例如pageName.jsf?taskId=XX)被传递:
<f:metadata>
<f:viewParam name="taskId" />
<f:event type="preRenderView" listener="#{businessProcess.startTask(taskId, true)}" />
</f:metadata>
3、声明性地控制过程
Flowable-cdi允许声明性地启动流程实例并使用注释完成任务。该 @org.flowable.cdi.annotation.StartProcess注释允许无论是“关键”或“名”来启动流程实例。请注意,流程实例在注释的方法返回后启动。例:
@StartProcess("authorizeBusinessTripRequest")
public String submitRequest(BusinessTripRequest request) {
// do some work
return "success";
}
根据Flowable的配置,注释方法的代码和流程实例的启动将被组合在同一事务中。该@org.flowable.cdi.annotation.CompleteTaskannotation作品以同样的方式:
@CompleteTask(endConversation=false)
public String authorizeBusinessTrip() {
// do some work
return "success";
}
该@CompleteTask注释提供以结束当前的对话的可能性。默认行为是在对Flowable返回的调用之后结束对话。结束会话可以被禁用,如上例所示。