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入门系列文章47 - 电子邮件任务

Flowable入门系列文章23 - 基本的Flowable概念四

Flowable入门系列文章20 - 基本的Flowable概念一

Flowable入门系列文章7 - 基本配置一

Flowable入门系列文章22 - 基本的Flowable概念三

Flowable入门系列文章10 - 基本配置四