Flowable入门系列文章21 - 基本的Flowable概念二
Posted 分享牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flowable入门系列文章21 - 基本的Flowable概念二相关的知识,希望对你有一定的参考价值。
1、启动一个流程实例
我们现在已经为我们的业务流程创建了流程定义。从这样的流程定义中,我们可以创建流程实例。在这种情况下,一个流程实例对应于创建和验证特定月份的单个财务报告。任何月份的所有流程实例共享相同的流程定义。
为了能够从给定的流程定义创建流程实例,我们必须首先部署流程定义。部署流程定义意味着两件事:
- 流程定义将存储在为Flowable引擎配置的持久数据存储中。所以通过部署我们的业务流程,我们确保引擎在引擎重启后能够找到流程定义。
- BPMN 2.0流程XML将被解析为可通过Flowable API进行操作的内存中对象模型。
有关部署的更多信息,请参阅部署的专用部分。
如该节所述,部署可以通过多种方式进行。一种方法是通过API如下。请注意,与Flowable引擎的所有交互都通过其服务发生。
Deployment deployment = repositoryService.createDeployment()
.addClasspathResource("FinancialReportProcess.bpmn20.xml")
.deploy();
现在我们可以使用id在流程定义中定义的新流程实例(请参阅XML中的流程元素)。请注意,id流动术语中的这一点被称为关键。
ProcessInstance processInstance = runtimeService.startProcessInstanceByKey("financialReport");
这将创建一个流程实例,将首先通过启动事件。在启动事件之后,它遵循所有外发顺序流程(在这种情况下只有一个)和第一个任务(写月财务报告)。Flowable引擎现在将一个任务存储在持久数据库中。此时,附加到该任务的用户或组分配被解析并存储在数据库中。需要注意的是,Flowable引擎将继续执行处理执行步骤,直到达到等待状态,比如用户任务。在这样的等待状态下,过程实例的当前状态被存储在数据库中。在用户决定完成任务之前,它一直处于这种状态。此时,引擎会一直持续到新的等待状态或过程结束。如果引擎在此期间重启或崩溃,则进程的状态在数据库中是安全的和安全的。
任务创建后,该startProcessInstanceByKey方法将返回,因为用户任务活动是一个等待状态。在我们的场景中,任务被分配到一个组,这意味着该组的每个成员都是执行任务的候选人。
现在我们可以把它们全部结合起来,创建一个简单的Java程序。创建一个新的Eclipse项目,并将Flowable JAR和依赖关系添加到其类路径中(这些可以在Flowable发行版的libs文件夹中找到)。在我们可以调用Flowable服务之前,我们必须首先构造一个ProcessEngine让我们访问服务的方法。在这里,我们使用“standalone”配置,它构建了一个ProcessEngine使用演示设置中也使用的数据库。
您可以在这里下载流程定义XML 。该文件包含上面显示的XML,但也包含必要的BPMN 图交换信息,以在Flowable工具中对流程进行可视化。
public static void main(String[] args) {
// Create Flowable process engine
ProcessEngine processEngine = ProcessEngineConfiguration
.createStandaloneProcessEngineConfiguration()
.buildProcessEngine();
// Get Flowable services
RepositoryService repositoryService = processEngine.getRepositoryService();
RuntimeService runtimeService = processEngine.getRuntimeService();
// Deploy the process definition
repositoryService.createDeployment()
.addClasspathResource("FinancialReportProcess.bpmn20.xml")
.deploy();
// Start a process instance
runtimeService.startProcessInstanceByKey("financialReport");
}
2、任务列表
我们现在可以TaskService通过添加以下逻辑来检索这个任务:
List<Task> tasks = taskService.createTaskQuery().taskCandidateUser("kermit").list();
请注意,我们传递给此操作的用户需要是会计组的成员,如同在流程定义中声明的那样:
<potentialOwner>
<resourceAssignmentExpression>
<formalExpression>accountancy</formalExpression>
</resourceAssignmentExpression>
</potentialOwner>
我们还可以使用任务查询API使用组的名称获得相同的结果。我们现在可以将以下逻辑添加到我们的代码中:
TaskService taskService = processEngine.getTaskService();
List<Task> tasks = taskService.createTaskQuery().taskCandidateGroup("accountancy").list();
正如我们已经配置我们ProcessEngine使用演示设置使用的相同数据库,我们现在可以登录到Flowable IDM。以admin / test身份登录,并创建2个新用户kermit和fozzie,并给他们两个访问工作流应用程序的权限。然后创建2个新的组织组,名为会计和管理,并添加fozzie到新的会计组,并添加kermit到管理组。现在用fozzie登录到Flowable 任务应用程序,我们会发现我们可以通过选择任务应用程序,然后选择进程页面并选择“每月财务报告”来启动我们的业务流程 处理。
该过程将执行直到达到第一个用户任务。当我们以fozzie身份登录时,我们可以看到在启动流程实例之后,有一个新的候选任务可供他使用。选择任务页面查看这个新的任务。请注意,即使该流程是由其他人启动的,该任务对于会计组中的每个人仍然是可见的,作为候选任务。
上面文章来自盘古BPM研究院:http://vue.pangubpm.com/
文章翻译提交:https://github.com/qiudaoke/flowable-userguide
了解更多文章可以关注微信公众号:
以上是关于Flowable入门系列文章21 - 基本的Flowable概念二的主要内容,如果未能解决你的问题,请参考以下文章
Flowable入门系列文章23 - 基本的Flowable概念四
Flowable入门系列文章20 - 基本的Flowable概念一