Flowable的能力调研

1,077 阅读4分钟

应用场景

修改模型

提供了REST API的实现

PUT repository/models/{modelId}

请求体格式:

{
   "name":"Model name",
   "key":"Model key",
   "category":"Model category",
   "version":2,
   "metaInfo":"Model metainfo",
   "deploymentId":"2",
   "tenantId":"updatedTenant"
}

请求体中所有的值都是可选的,比如只传入name参数,那么就是只更新模型的名称,不会影响其他属性,但是要注意如果传入的是null值,原值也会被覆盖成null

响应:

Response code描述

200

表示找到并且更新了模型

404

表示对应的模型没有找到

修改成功后,返回的内容格式如下:

{
   "id":"5",
   "url":"http://localhost:8182/repository/models/5",
   "name":"Model name",
   "key":"Model key",
   "category":"Model category",
   "version":2,
   "metaInfo":"Model metainfo",
   "deploymentId":"2",
   "deploymentUrl":"http://localhost:8182/repository/deployments/2",
   "createTime":"2013-06-12T12:31:19.861+0000",
   "lastUpdateTime":"2013-06-12T12:31:19.861+0000",
   "tenantId":""updatedTenant"
}

启动流程

提供了REST API的实现

POST runtime/process-instances

请求体格式有多种

使用流程定义ID启动:

{
   "processDefinitionId":"oneTaskProcess:1:158",
   "businessKey":"myBusinessKey",
   "returnVariables":true,
   "variables": [
      {
        "name":"myVar",
        "value":"This is a variable"
      }
   ]
}

使用流程定义的KEY启动:

{
   "processDefinitionKey":"oneTaskProcess",
   "businessKey":"myBusinessKey",
   "returnVariables":false,
   "tenantId": "tenant1",
   "variables": [
      {
        "name":"myVar",
        "value":"This is a variable"
      }
   ]
}

使用消息启动:

{
   "message":"newOrderMessage",
   "businessKey":"myBusinessKey",
   "tenantId": "tenant1",
   "variables": [
      {
        "name":"myVar",
        "value":"This is a variable"
      }
   ]
}

returnVariables属性用来在响应中获取流程实例上下文中的变量,默认情况下,这些变量不会被返回。

请求体中只能使用processDefinitionId,processDefinitionKey,message三者中的一个。

businessKey,variables 还有tenantId都是可选参数,如果省略了tenantId,就会使用一个默认的tenant。

响应:

Response code描述

201

表示流程实例创建成功

400

表示依据传入的ID或者KEY没能找到对应的流程实例,或者通过给定的消息没有启动成功,参数有误等等

成功后的返回:

{
   "id":"7",
   "url":"http://localhost:8182/runtime/process-instances/7",
   "businessKey":"myBusinessKey",
   "suspended":false,
   "processDefinitionUrl":"http://localhost:8182/repository/process-definitions/processOne%3A1%3A4",
   "activityId":"processTask",
   "tenantId" : null
}

查询活动节点

提供了REST API的实现

GET runtime/executions/{executionId}/activities

在一个给定的执行路径中查询所有活跃的活动节点以及它们的子节点。(Execution即执行路径,可通过query/executions接口和runtime/executions接口获取集合)

参数必选类型描述

executionId

String

execution的ID

响应:

Response code描述

200

表示Execution以及它的活动节点查询成功

404

表示没有找到Execution

成功后的返回:

[  "userTaskForManager",  "receiveTask"]

流程跳转

Flowable提供了一些API来实现节点之间的跳转,如:

moveSingleActivityIdToActivityIdsChangeActivityStateBuilder moveSingleActivityIdToActivityIds​(String currentActivityId,
List<String> newActivityIds)把单节点的ID改成复数节点ID,可用于并行执行路径,比如并行/兼容关口,多实例,事件子进程等moveActivityIdToParentActivityIdChangeActivityStateBuilder moveActivityIdToParentActivityId​(String currentActivityId,
String newActivityId)通过当前活动ID将执行路径移动到父流程实例中的活动ID,子流程实例这时候会被终止,所以所有子流程实例的执行路径都需要移动。moveActivityIdToSubProcessInstanceActivityIdChangeActivityStateBuilder moveActivityIdToSubProcessInstanceActivityId​(String currentActivityId,
String newActivityId,
String callActivityId)通过当前活动ID,将执行路径移动到一个新的子流程实例moveActivityIdToSubProcessInstanceActivityIdChangeActivityStateBuilder moveActivityIdToSubProcessInstanceActivityId​(String currentActivityId,
String newActivityId,
String callActivityId,
Integer subProcessDefinitionVersion)同上,但是多了一个子流程定义的版本属性

在ChangeActivityStateBuilder接口下面,还有很多的实现,不一一例举

Flowable在节点跳转这方面提供的支持还是不少的,即便实际生产中偶尔出现无法支持的情况,应当也可以通过定义事件的方式去变相实现。

查询流程轨迹

有提供REST API查询当前流程执行轨迹

GET runtime/process-instances/{processInstanceId}/diagram

请求参数:

参数必选类型描述

processInstanceId

String

流程实例的ID

返回:

Response code描述

200

成功查询到流程实例,并且返回图表

400

表示流程实例存在,但是无法生成图表

404

表示没找到指定的流程实例

对于已经结束的流程,也可以通过HistoryService接口下的创建查询方法来获取,再通过BpmnModelService接口下的findFlowNodes方法获取到所有节点信息,并通过递归的方式添加高亮线生产即可。