服务端开发指南

willian fu 2022 ~

服务端开发指南

目前只开源了前端设计器部分,大家配套后端使用的话,需要自行开发服务端应用,可以参考如下说明

基本要求

组织机构选择器

组织机构选择器由于在项目很多地方引用了,如果在不修改组件代码的情况下,建议按如下规则适配

该组件存在于 src\components\common\organizationPicker.vue,对应API接口在 src/api/org.js,有2个接口,分别如下

获取组织架构列表

方法: getOrgTree

URL:/oa/org/tree

请求类型:GET

参数:

  • deptId: 当前选中的部门ID
  • type:user - 返回部门和部门内的人员 dept-只返回部门 role-只返回系统角色

返回结果:(部门和人员结构一致,注意部门应当排序在前)

[
	{
		"id": "部门/人员ID",
		"name": "部门/人员名",
		"avatar":"人员的头像的 base64 / url",
        "type": "本数据对象的类型,user/dept"
	}
]

按拼音/姓名搜索人员

当在搜索框直接输入拼音/姓名时,将会发起搜索请求,后端应当根据参数内容匹配用户的姓名或者姓名拼音

方法: getUserByName

URL:oa/org/tree/user/search

请求类型:GET

参数:

  • userName:搜索参数

返回结果:(人员列表)

[
	{
		"id": "人员ID",
		"name": "人员名",
		"avatar":"人员的头像的 base64 / url",
        "type": "本数据对象的类型,user"
	}
]

流程解析

流程的数据存储在 vuex的 state.design.process中,由于序列化后是json结构,非标准 Bpmn,因此需要在后端做转换,也建议在后端进行转换。

最常用的Java开源流程引擎有 activitiFlowable ,两者同源,差不多用法,都提供了使用代码Api来构建Xml的功能。

wflow节点与Bpmn概念对应关系

发起人

发起人 可以映射为startEvent,也可以忽略,发起人主要是为了设置哪些人可以发起该流程,也就是该流程的权限,并且也是默认的候选条件

审批人

审批人对应 UserTask ,该节点是需要审批人对发起人提交的表单进行处理,以及如果有需要的话也可以修改提交的表单(要设置表单可编辑权限)

审批意味着主要是做两件事,同意/驳回 ,同意就进入下一任务, 而驳回的策略有两种,默认直接驳回到EndEvent ,如果设置了则驳回到指定节点,因为有2种结果分流,所以此处应该设置条件顺序流。

抄送人

抄送人对应 ServiceTask,应当掉用java指定的功能类,传入参数执行发送通知的功能

延时处理

延时处理对应 intermediateCatchEvent,设置为定时器类型的中间事件,根据配置解析

触发器

触发器对应 ServiceTask,应当掉用java指定的功能类,传入参数执行Http请求或者发邮件,由于触发器支持脚本,因此要完全支持触发器功能的话需要引入js执行器

务必设置运行资源限制,防止用户上传恶意脚本搞崩服务器。

<!-- https://mvnrepository.com/artifact/org.openjdk.nashorn/nashorn-core -->
<dependency>
    <groupId>org.openjdk.nashorn</groupId>
    <artifactId>nashorn-core</artifactId>
    <version>15.3</version>
</dependency>

条件分支

条件节点对应 exclusive gateway ,这与普通节点有所不同

image-20220720145227591

如上图所示,实际上外部还有一个看不到的节点对象,将这几个子分支条件包裹起来,这个红色部分才是条件节点,也就是排他网关,绿色条件块应当解析为带条件的sequenceFlow连接线,该节点内设置的条件应该作为sequenceFlow的条件

并行分支

并行分支对应parallelGateway ,与条件分支一样,外部也有一个对象包裹内部的并行分支,外部这个对象应该解析为并行网关,但是它的分支节点首部应当看做普通顺序流,由于并行网关成对存在,因此需要注意创建合流的分支,将每个子分支末端连接到合流点

image-20220720150019350