加入收藏 | 设为首页 |

雷火网站-技能干货:根据Activiti5 定制化中国式工作流架构规划

海外新闻 时间: 浏览:230 次

1. 简介

工作流底层是依据 Activiti 进行开发完结的,易于开发者对现有工作流进行晋级改造。

关于Activiti

Activiti项目是一项新的依据Apache答应的开源BPM渠道,从根底开端构建,旨在供给支撑新的BPMN 2.0规范,包含支撑目标办理组(OMG),面临新技能的机会,比方互操作性和云架构,供给技能完结。 创始人Tom Baeyens是JBoss jBPM的项目架构师,以及雷火网站-技能干货:根据Activiti5 定制化中国式工作流架构规划另一位架构师Joram Barrez,一同参加到创立Alfresco这项初次完结Apache开源答应的BPMN 2.0引擎开发中来。 Activiti是一种轻量级,可嵌入的BPM引擎。 它将供给宽松的Apache答应2.0,以便这个项目能够广泛被运用,一起促进Activiti BPM引擎和的BPMN 2.0的匹配,该项目现正由OMG经过规范审定。 参加Alfresco Activiti项目的是VMware的SpringSource分支,Alfresco的方案把该项目提交给Apache根底架构,期望招引更多方面的BPM专家和促进BPM的立异。

  • Activiti用户手册: http://activiti.org/userguide/index.html
  • Activiti文档下载 : http://activiti.org/download.html

2. 依靠联系

2.1 软件环境

JDK 6+

Activiti需求运转在JDK 6或以上版别上。 进入 Oracle Java SE 下载页面 点击 "下载 JDK"按钮。页面上也供给了装置的办法。 为了验证是否装置成功,能够在命令行中履行 java -version。 它将会打印出装置的JDK的版别。

IDE

Eclipse、IntelliJ IDEA等

IE

由于我司银行用户运用工作流较多,需供给对IE浏览器支撑,除了流程规划器最低版别要求IE9,工作流其他模块兼容IE8、IE9、IE10。

Spring

工作流选用 Spring 注解办法办理资源和Bean目标,与Spring无缝结合。开发者需在项目中集成工作流时,留意Spring版别。

Maven

装置工作流相关开发包

Activiti

工作流是依据Activiti-5.18.0版别开发,所以依靠如下:

 

org.activiti
activiti-engine
5.18.0


org.activiti
activiti-modeler
5.18.0



org.activiti
activiti-spring
5.18.0


org.activiti
activiti-explorer
5.18.0


com.vaadin
vaadin


com.vaadin.addons
dchats-widget


com.vaadin.addons
activiti-simple-workflow



...

2.2 工作流软件包

开发者在运用工作流软件包时,分为两种形式。 如下:

  • 开发形式
  • 开发者需求在项目POM文件中引进工作流依靠项
  • 离线形式
  • 由于客户现场环境约束,需求要手动仿制工作流相关资源。如jar、css、js、数据库脚本、页面等等。

一. 开发形式

首要,在POM中引证工作流jar

把app-workflow-core开发包放在对应的X-X-core工程POM文件中。

 

com.vprisk.workflow
app-workflow-core
3.0.0

...

把app-workflow-mvc放在X-X-mvc工程POM文件中。

  


com.vprisk.workflow
app-workflow-mvc
3.0.0

...

其次,在POM中引证视图资源

把app-workflow-web开发包放在对应的X-X-web工程POM文件中。

    

com.vprisk.workflow
app-workflow-web
3.0.0
war


com.vprisk.workflow
app-workflow-web
3.0.0
warpath

...




org.apache.maven.plugins
maven-war-plugin

WEB-INF/web.xml


com.vprisk.workflow
app-workflow-web


...


...





二. 离线形式: 由开发者直接仿制工作流相关文件

首要,在POM中引证工作流jar

仿制工作流 jar文件

  • app-workflow-core
  • MVC形式下的工作流服务层,担任工作流流程界说、使命批阅、前史查询以及参与人等。
  • app-workflow-mvc
  • MVC形式下的工作流操控层

关于MVC形式了解,参阅MVC

仿制工作流引擎装备类

在app-workflow-web下:

com.vprisk.config.WorkflowApplicationConfig

仿制工作流JSP文件

仿制流程规划器文件

在app-workflow-web工程的/workflow目录下,其间stencilset.json是流程规划器组件装备库。

在app-workflow-web/webapp/flowdesigner目录下是流程规划器的页面、css、javascripts、图片。

2.3 数据库脚本

1. 数据库

现在工作流支撑Oracle和DB2

2. 了解数据库表的命名

工作流的表都以ACT_最初。 第二部分是表明表的用处的两个字母标识。

ACT_ID_*: 'ID'表明identity。 这些表包含身份信息,比方用户,组等等。
ACT_HI_*: 'HI'表明history。 这些表包含前史数据,比方前史流程实例,参数,使命等等。
ACT_GE_*: 通用数据, 用于不同场景下。
ACT_RE_*: 'RE'表明repository。 这个前缀的表包含了流程界说和流程静态资源(图片,规矩,等等)。
ACT_RU_*: 'RU'表明runtime。 这些运转时的表,包含流程实例,使命,参数,异步使命,等运转中的数据。
Activiti只在流程实例履行过程中保存这些数据, 在流程完毕时就会删去这些记载。 这样运转时表能够一向很小速度很快。
ACT_EX_*: 'EX'表明extension。 这个前我是真的爱你缀的表包含了署理人设置、触发器、批阅前史、流程和使命界说扩展特点等。

3. 数据库脚本

分为两部分

  • 一、工作流引擎表
  • 二、工作流扩展表

工作流引擎表在工作流软件开发包中。在体系初始化时,工作流引擎主动初始化数据库脚本,不需求人为干涉。

工作流引擎脚本在activiti-engine-5.18.0.jar中:

而工作流扩展表是针对工作流引擎表做的一些定制化装备的表,需求开发者手动整合到事务体系。

4. 扩展表数据库脚本

扩展的数据库脚本文件存放在工作流app-workflow-web工程的db/mini目录下:

在实践的事务体系开发过程中,依据运用的数据库类型,开发者能够直接把db/mini/db2或许db/mini/oracle目录下的workflow-table.sql和workflow-data.sql文件仿制到事务体系初始化脚本目录下。

创立表

workflow-table.sql

扩展表阐明

署理表 ACT_EX_AGENT 
署理流程列表 ACT_EX_AGENT_SCOPE
流程使命前史扩展表 ACT_EX_HISTORY
流程和使命触发器扩展表 ACT_EX_LISTENER
流程和使命界说扩雷火网站-技能干货:根据Activiti5 定制化中国式工作流架构规划展表 ACT_EX_NODE_VARIABLE

在创立DB2表时,需求指定表空间,如:

CREATE TABLE TEST (
COL1 VARCHAR(20) NOT NULL,
...
)
in 指定表空间名
index in 指定表空间名

初始化数据

workflow-data.sql 

包含字典参数和流程菜单两部分

1、 字典参数

2、 流程菜单

3. 集成工作流

3.1 模块阐明

  • app-workflow-core

工作流中心服务接口,担任流程界说更新与查询、流程实例更新与查询、使命批阅与查询,参与人查询、流程署理更新与查询、流程前史查询等。

  • app-workflow-mvc

担任工作流数据传递,页面地址跳转

  • app-workflow-web

担任数据库装备,事务办理、数据展现以及页面展现。

3.2 工作流引擎装备

工作流引擎选用Spring注解装备类,办理工作流引擎数据源-dataSource装备、数据库事务-transactionManager:

com.vprisk.config.WorkflowApplicationConfig

以及装备Activiti批阅服务接口,如流程界说以及流程相关静态资源RepositoryService:

流程实例RuntimeService

使命服务TaskService

前史服务HistoryService

等服务接口,更多具体信息请参阅Activiti用户手册。

http://activiti.org/userguide/index.html

3.3 工作流事务办理

工作流经过Spring的注解办法办理事务,一般事务操控在Service服务类的办法等级上,如保存流程界说:

@Transactional
public void saveProcessDefinition(ProcessDefinitionDto dto){
...
}

经过@Transactional来标识需求事务,这时分与Spring事务办理结合起来呢。

3.4 流程引擎的API和服务

1. 流程界说服务接口

流程界说是工作流中心功用之一,流程界说服务供给了办理和操控流程界说的操作。 包含新增、修改、仿制、确定、激活、导入、导出、删去。它包含了一个流程每个环节的结构和行为。

2. 流程实例服务接口

流程实例服务是工作流中心功用之一。 包含发动流程,挂起、激活、删去、复位建议、查询、流程进展图等。

流程实例服务担任发动一个流程界说的新实例。 流程界说界说了流程各个节点的结构和行为。 流程实例便是这样一个流程界说的实例。对每个流程界说来说,同一时刻会有许多实例在履行。 流程实例服务能够用来获取和保存流程参数。 这些数据是特定于某个流程实例的,并会被许多流程中的节点运用 (比方,一个决议计划器常常运用流程参数来决议流通到指定分支走流程)。 流程实例服务也能查询流程实例和履行。 最终,流程实例服务能够在流程实例等候外部触发时运用,这时能够用来持续流程实例。 流程实例能够有暂停状况,而服务供给了激活办法来“激活”实例, 承受外部激活后,流程实例就会持续向下履行。

流程进展图

其间标红的箭头是已走完的,标红使命节点是当时要批阅节点。

3. 使命实例接口

使命实例是由体系中实在人员履行的,它是工作流中心功用之一。包含使命批阅,查询用户使命、使命改派,使命驳回等。

4. 前史查询服务接口

流程前史是一个组件,它能够捕获发生在进程履行中的信息并永久的保存,与运转时数据不同的是,当流程实例运转完结之后它还会存在于数据库中。

前史查询服务供给了工作流的一切前史数据。 在履行流程时,引擎会保存许多数据,比方流程实例发动时刻,使命的参与者, 完结使命的时刻,每个流程实例的履行途径等等。 这个服务首要经过查询功用来取得这些数据。

5. 触发器服务接口

工作流扩展服务接口之一。 基本功用包含新增,修改、删去、查询;

触发器能够了解为流程批阅过程中,中心嵌入的一段小程序,他的首要用处在于能够做一些批阅使命之外的一些工作,如操作事务数据,分配下一节点批阅人、记载日志,音讯提示等等。

  • 在使命批阅前或批阅完结后,开发者可自界说前置触发器或许后置触发器,
  • 在决议计划器走流通分支时,指定流通分支路由

触发器包含前置触发器和后置触发器

触发器分类

  • 使命触发器
  • 决议计划器触发器

7. 流程参与人服务接口

工作流扩展服务接口之一,流程参与人服务能够查询流程批阅相关批阅人,组织、人物。

8. 前史使命扩展服务接口

工作流扩展服务接口之一。 基本功用包含新增,修改、删去、查询;

在使命批阅前或批阅完结后,开发者可自界说前置使命触发器或许后置使命触发器,在触发器中可记载一些与事务相关的日志信息或许批阅使命音讯提示等。

9. 流程署理服务接口

工作流扩展服务接口之一。 基本功用包含新增,修改、删去、查询;

有些时分有的领导在一段时刻内有事不能批阅,比方出差。那问题来了,假如领导不能批阅使命,整个流程将会停滞不前。所以这个时分需求有人代领导批阅使命,流程署理服务就派上用场了。流程署理服务答应领导指定署理人在一段之间内,署理指定流程,批阅使命。

10. 使命界说扩展服务接口

工作流扩展服务接口之一,流程规划器扩展了流程界说特点,而这些特点不归于工作流引擎自身,需求额外用数据库表存储。首要用处在于流程批阅时,能够把流程界说特点(参数)当作流程批阅权重,影响使命完结。比方回退规矩、批阅人、是否会签、答应改派等。

3.4 流程触发器

1. 触发器触发条件类型(type)

使命等级

  • create 使命实例创立前触发
  • complete 使命实例完结后触发

流程等级

  • start 节点实例创立前触发
  • end 节点实例完结后触发

2. 自界说使命触发器

开发者自界说使命触发器需求完结使命级触发器接口,如:

public class WorkflowTaskListenerA implements WorkflowTaskListener{

public void notify(DelegateTask delegateTask){
//....
}
}

开发者自界说决议计划器触发器需求完结流程级触发器接口,如:

3. 自界说决议计划器触发器

public class WorkflowTaskListenerB implements WorkflowTaskListener{

public void notify(DelegateExecution execution){
//....
}
}

4. 自界说触发器装置

开发者需编写SQL刺进脚本进行手动装置,如:

然后在新建流程界说页面的特点栏显现,如:

3.5 流程规划器

在app-workflow-web工程目录下

其间stencilset.json是流程规划器组件装备库。

webapp/flowdesigner包含网页版流程规划器页面、css、script等资源。

网页版流程规划器

网页版流程规划器首要由Angularjs,SVG矢量图 开发而成。对IE最低版别要求是IE9,请开发者留意。

3.6 示例

假定现已把工作流集成完毕并运转起来,演示公司简略的请假请求流程:

保存请假请求流程界说

在流程规划器界说一条流程编号为VC_1001的请假请求流程

为了让工作流引擎知道这个流程,咱们必须先进行 >创立>激活>发布。 发布意味着引擎会把流程界说解析成能够履行的流程界说文件, 而且该流程界说会被增加到数据库中。 这样,当引擎重启时,该流程界说仍然存在。代码如下:

@Autowired
private ProcessDefinitionService processDefinitionService
ProcessDefinitionDto dto = ...;
processDefinitionService.saveProcessDefinition(dto)

挂起,激活一条流程界说

咱们能够挂起一条流程界说。当挂起流程界说时,就不能创立新流程实例了。

String processDefinitionKey = "VC_1001";
processDefinitionService.suspendProcessDefinition(processDefinitionKey);

要想从头激活一条流程界说,能够调用:

String processDefinitionKey = "VC_1001";
processDefinitionService.activateProcessDefinition(processDefinitionKey)

发动一条流程实例

把流程界说发布到工作流引擎后,咱们能够依据它建议新流程实例。 对每个流程界说,都能够有许多流程实例。 流程界说是“蓝图”,流程实例是它的一个运转的履行实例。

一切与流程运转状况相关的数据都能够经过ProcesInstanceService取得。 有许多办法能够发动一个新流程实例。鄙人面的代码中,咱们运用界说在流程界说文件中的流程编号来发动流程实例。 咱们也能够在流程实例发动时增加一些流程参数,由于第一个用户使命的表达式需求这些参数。 流程参数常常会被用到,由于它们赋予来自同一个流程界说的不同流程实例的特别意义。 简略来说,流程参数是区别流程实例的要害。代码如下:

@Aut雷火网站-技能干货:根据Activiti5 定制化中国式工作流架构规划owired
private ProcessInstanceService processInstanceService
Map variables = new HashMap();
variables.put("employeeName", "duanzhijund");
variables.put("numberOfDays", new Integer(4));
variables.put("descr", "请假四天!");
String processDefinitionKey = "VC_1001"
ProcessInstanceDto dto = processInstanceService.startProcessInstanceByLatestVersionKey(processDefinitionKey, variables);

查询批阅使命

流程发动后,第一步便是用户使命。这是必须由体系用户处理的一个环节。 一般,用户会有一个“使命列表”,展现了一切必须由该用户处理的使命。 下面的代码展现了对应的分页查询:

@Autowired
private TaskInstanceService taskInstanceService
// 分页查询
Pageable pageable = ...;
Map params = ...;
params.put("processName", "")
params.put("taskName", "")
params.put("createdTmBegin", "")
params.put("createdTmEnd", "")
Page = taskInstanceService.pageTaskPending(pageable, params)
for (Task task : tasks) {
Log.info("Task available: " + task.getName());
}

完结使命

为了让流程实例持续运转,咱们需求完结整个使命。下面的代码展现了如何做这件事:

@Autowired
private TaskInstanceService taskInstanceService
Map taskVariables = new HashMap();
taskVariables.put("resultFlag", "Y"); // or "N"
taskVariables.put("comment", "批阅定见!");
...
Task task = tasks.get(0);
String nextTaskCode = ...; // 下一使命节点编号
taskInstanceService.pass(task.getId(), nextTaskCode , taskVariables);

流程实例会进入到下一个环节。在这里比方中, 下一环节答应职工经过表单调整原始的请假请求。职工能够从头提交请假请求, 这会使流程从头进入到第一个使命。

挂起,激活一个流程实例

也能够挂起一条流程实例。挂起时,流程批阅不能持续履行。

String processInstanceId = "";
processInstanceService.suspendProcessInstance(processInstanceId);

激活流程实例能够调用:

String processInstanceId = "";
processInstanceService.activateProcessInstance(processInstanceId);

更多具体服务接口雷火网站-技能干货:根据Activiti5 定制化中国式工作流架构规划能够参阅工作流服务接口。

4. 工作流服务接口

4.1 中心服务接口

4.1.1 使命实例服务接口

com.vprisk.workflow.core.TaskInstanceService
@Autowired
public TaskInstanceService taskInstanceService

4.1.1.1 使命具体查询

依据使命实例UUID查询使命实例。

String taskId = ...; // 使命实例UUID
TaskInstanceDto task = taskInstanceService.find(String taskId)

4.1.1.2 待办使命分页查询

待办使命分页

Pageable pageable = ...;
Map params = ...;
params.put("processName", "")
params.put("taskName", "")
params.put("createdTmBegin", "")
params.put("createdTmEnd", "")
public Page = taskInstanceService.pageTaskPending(pageable, params)

4.1.1.3 查询使命提名人

依据流程界说UUID、使命Code以及流程实例UUID,查询使命批阅提名人。

String procDefId = ...; // 流程界说UUID
String nextTaskCode = ...; // 下一个使命界说Code
String procInstId = ...; // 流程实例UUID
String candidates = taskInstanceService.findCandidatesByRollbackRule(procDefId, nextTaskCode , procInstId)

4.1.1.4 依据流程实例id查询待办使命列表

依据流程实例UUID,查询待办使命列表。

String procInstId = ...;
List list = taskInstanceService.findTaskByProcessInstanceId(procInstId)

4.1.1.5 是否改派

依据使命实例UUID,判别批阅使命是否能够改派。

String taskId = ...;
boolean flag = taskInstanceService.isDelegate(taskId)

4.1.1.6 使命改派

依据使命实例UUID以及改派人,完结改派。 改派后,当时使命归于改派雷火网站-技能干货:根据Activiti5 定制化中国式工作流架构规划指定的assignee。只要指定的assignee能再次看到该批阅使命。

String taskId = ...;
String assignee = ...;
taskInstanceService.delegateTask(taskId, assignee)

4.1.1.7 批量使命批阅

依据使命实例UUID列表,使命界说Code以及使命参数批量完结使命。只要流程相同,批阅节点相同才干进行批量批阅

String [] taskIds = ...;
String nextTaskCode = ...;
Map variables = ...;
taskInstanceService.pass(taskIds, nextTaskCode, variables)

4.1.1.8 会签使命批阅

同上

String [] taskIds = ...;
String nextTaskCode = ...;
Map variables = ...;
taskInstanceService.ass雷火网站-技能干货:根据Activiti5 定制化中国式工作流架构规划ign(taskIds, nextTaskCode, variables);

4.1.1.9 批量使命批阅驳回

依据使命实例UUID列表,使命界说Code以及使命参数批量驳回使命。只要流程相同,批阅节点相同才干进行批量批阅驳回

String [] taskIds = ...;
String nextTaskCode = ...;
Map variables = ...;
taskInstanceService.rollbackTask(taskIds, nextTaskCode, variables);

4.1.1.10 保存流程参数

依据使命实例,使命界说Code以及使命参数保存流程参数。

Task task = ...;
String nextTaskCode = ...;
Map variables = ...;
taskInstanceService.saveTaskVariable(task, nextTaskCode, variables);

该保存办法有事务操控。

4.1.1.11 保存使命私有参数

依据使命实例UUID以及使命参数保存使命私有参数。

String taskId = ...;
Map variables = ...;
taskInstanceService.saveTaskVariableLocal(taskId, variables);

4.1.2 流程实例接口

com.vprisk.workflow.core.ProcessInstanceService
@Autowired
public ProcessInstanceService processInstanceService;

4.1.2.1 流程复位建议

依据已完结的流程实例UUID来建议新的流程,新老流程实例树立绑定联系。

String procInstId = ...;
ProcessInstanceDto p = processInstanceService.restartProcessInstance(procInstId);

4.1.2.2 流程发动

依据流程界说UUID以及流程参数发动流程实例。

String processDefinitionId = ...;
Map variables = ...;
variables.put("applyUser", "") // 流程建议人
variables.put("bizUrl", "") // 事务表单地址
variables.put("process_biz_key", "") // 事务主键UUID
ProcessInstanceDto p = processInstanceService.startProcessInstanceById(processDefinitionId, variables)

4.1.2.3 流程发动

依据流程界说编号、版别以及流程参数发动流程实例。

String processDefinitionKey = ...;
String processDefinitionVersion = ...;
Map variables = ...;
variables.put("applyUser", "") // 流程建议人
variables.put("bizUrl", "") // 事务表单地址
variables.put("process_biz_key", "") // 事务主键UUID
ProcessInstanceDto p = processInstanceService.startProcessInstanceByKeyAndVersion(processDefinitionKey, processDefinitionVersion,variables)

4.1.2.4 流程发动

依据最新的流程界说版别、编号、流程参数发动流程实例。

String processDefinitionKey = ...;
Map variables = ...;
variables.put("applyUser", "") // 流程建议人
variables.put("bizUrl", "") // 事务表单地址
variables.put("process_biz_key", "") // 事务主键UUID
ProcessInstanceDto p = processInstanceService.startProcessInstanceByLatestVersionKey(processDefinitionKey, variables)

4.1.2.5 流程实例具体

依据流程实例UUID查询流程实例目标。

String procInstId = ...;
ProcessInstanceDto p = processInstanceService.findProcessInstanceById(procInstId)

4.1.2.5 流程实例进展图

依据流程实例UUID生成流程进展图。

String procInstId = ...;
InputStream in = processInstanceService.generateTrace(procInstId)

4.1.2.5 流程实例挂起

依据流程实例UUID挂起流程实例,挂起的流程实例不能进行使命批阅。

@Transactional

String procInstId = ...;
processInstanceService.suspendProcessInstance(procInstId)

4.1.2.6 流程实例激活

依据流程实例UUID激活流程实例,只要运转中的流程实例才干进行使命批阅。

String procInstId = ...;
processInstanceService.activateProcessInstance(procInstId)

4.1.2.6 流程实例停止

依据流程实例UUID强制停止流程实例,流程实例运转强制完毕,状况变为已停止。

String procInstId = ...;
processInstanceService.terminateProcessInstance(procInstId)

4.1.2.6 流程实例删去

依据流程实例UUID删去流程实例。

String procInstId = ...;
processInstanceService.deleteProcessInstance(procInstId)

4.1.3 流程界说接口

com.vprisk.workflow.core.ProcessDefinitionService
@Autowired
public ProcessDefinitionService processDefinitionService;

4.1.3.1 流程界说分页查询

Pageable pageable = ...;
Map params = ...;
params.put("defineName", "")
params.put("defineCode", "")
params.put("status", "")
Page page = processDefinitionService.pageProcessDefinition(pageable, params)

4.1.3.2 流程界说列表查询

依据流程界说参数查询流程界说列表

Map params = ...;
params.put("defineName", "")
params.put("defineCode", "")
params.put("status", "")
List list = processDefinitionService.selectProcessDefinition(params);

4.1.3.3 查询流程界说最新版别

依据流程界说编号最新流程界说。

String processDefinitionKey = ...;
ProcessDefinitionDto p = processDefinitionService.findLatestProcessDefinitionByCode(processDefinitionKey) ;

4.1.3.4 查询未批阅节点

依据使命实例UUID查询未批阅的使命节点。

String taskId = ...;
List list = processDefinitionService.findUnApprovedActivitiesByTaskId(taskId);

4.1.3.5 查询已批阅过的节点

依据使命实例UUID查询已批阅过的使命节点。

String taskId = ...;
List list = processDefinitionService.findApprovedPreviousActivitiesByTaskId(taskId);

4.1.3.6 批量导入流程界说

从页面导入“workflow.zip”,完结流程界说批量导入。适合于体系间的流程界说数据搬迁。zip包含后缀为.json的流程界说文件。 一个json文件对应一条流程界说。

String zipName = ...;
InputStream inputStream = ...;
processDefinitionService.impProcessDefinitionZip(inputStream, zipName)

4.1.3.6 批量导出流程界说

批量导出流程界说后会生成ZIP包“workflow.zip”,供页面下载。 ZIP包含后缀为.json的流程界说文件,一个json文件对应一条流程界说。

OutputStream outputStream = ...;
Map params = ...;
ZipOutputStream out = processDefinitionService.expProcessDefinitionZip(params, outputStream);

4.1.3.7 判别流程界说编号是否存在

判别流程界说编号是否存在

String processDefinitionKey = ...;
boolean flag = processDefinitionService.existDefinitionKey(processDefinitionKey);

4.1.3.7 删去流程界说

能够批量删去流程界说,假如其间的某条流程存在运转的流程实例,则会提示删去失利的错误信息。

String [] processDefinitionIds = ...;
processDefinitionService.deleteProcessDefinition(processDefinitionIds);

4.1.3.7 确定流程界说

当需求挂起流程界说时,就不能创立新流程实例了。

String processDefinitionId = ...;
processDefinitionService.suspendProcessDefinition(processDefinitionId);

4.1.3.7 激活流程界说

当有挂起流程界说时,工作流供给激活流程界说功用。

String processDefinitionId = ...;
processDefinitionService.activateProcessDefinition(processDefinitionId);

4.1.3.7 保存流程界说

保存一条流程界说。

ProcessDefinitionDto processDefinitionDto = ...;
processDefinitionService.saveProcessDefinition(processDefinitionDto);

4.1.3.7 仿制流程界说

仿制相似的流程界说。

ProcessDefinitionDto processDefinitionDto = ...;
processDefinitionService.copyProcessDefinition(processDefinitionDto);

4.1.4 流程参数接口

com.vprisk.workflow.core.VariableService

流程参数包含

  1. 流程实例运转和前史参数
  2. 使命实例运转和前史参数

前史使命实例服务接口、使命实例服务接口、流程实例接口都承继了流程参数接口,便于查询流程和使命参数。

查询流程实例或使命实例共有参数列表

public Map getVariables(String tartgetId) 

查询流程实例或使命实例私有参数列表

public Map getVariablesLocal(String tartgetId) 

设置流程实例或使命实例共有参数

@Transactional
public Object setVariable(String tartgetId,String variableName)

设置流程实例或使命实例私有参数

@Transactional
public Object setVariableLocal(String tartgetId,String variableName)

删去流程实例或使命实例私有参数

@Transactional
public Object removeVariableLocal(String tartgetId,String variableName)

删去流程实例或使命实例共有参数

@Transactional
public Object removeVariable(String tartgetId,String variableName)

4.2 前史查询服务接口

前史查询服务供给了工作流的一切前史数据。 在履行流程时,引擎会保存许多数据,比方流程实例发动时刻,使命的参与者, 完结使命的时刻,每个流程实例的履行途径等等。 这个服务首要经过查询功用来取得这些数据。

4.2.1 前史使命实例服务接口

com.vprisk.workflow.core.HistoricTaskInstanceService

工作流前史服务接口之一,查询与使命相关的前史数据。

@Autowired
public HistoricTaskInstanceService historicTaskInstanceService;

4.2.1.1 查询指定流程已批阅使命

Strubg processInstanceId = ...;
List list = historicTaskInstanceService.findListByProcessInstanceId(processInstanceId);

4.2.1.2 分页查询批阅使命

Pageable pageable = ...;
Map params = ...;
params.put("processName", "")
params.put("applyUser", "")
params.put("taskName", "")
Page page = historicTaskInstanceService.pageTaskApproved(pageable,params);

4.2.1.1 查询流程参数

String processInstanceId = ...;
Map map = historicTaskInstanceService.getVariablesByProcessInstanceId(processInstanceId);

4.2.2 前史流程实例服务接口

com.vprisk.workflow.core.HistoricProcessInstanceService

工作流前史服务接口之一,查询与流程实例相关的前史数据。

@Autowired
public HistoricProcessInstanceService historicProcessInstanceService;

4.2.2.1 查询指定流程实例具体

Strubg processInstanceId = ...;
ProcessInstanceDto dto = historicProcessInstanceService.findProcessInstanceById(processInstanceId);

4.2.2.1 分页查询流程实例

Pageable pageable = ...;
Map params = ...;
params.put("processName", "")
params.put("applyUser", "")
params.put("status", "")
Page page = historicProcessInstanceService.pageProcess(pageable,params);

4.3 扩展服务接口

4.3.1 触发器服务接口

com.vprisk.workflow.core.ListenerService

工作流扩展服务接口之一。

基本功用包含新增,修改、删去、查询。

@Autowired
public ListenerService listenerService;

4.3.2 流程参与人服务接口

com.vprisk.workflow.core.ParticipantService
@Autowired
public ParticipantService participantService;

4.3.3 前史使命扩展服务接口

com.vprisk.workflow.core.TaskHistoryService

工作流扩展服务接口之一。 基本功用包含新增,修改、删去、查询。

@Autowired
public TaskHistoryService taskHistoryService;

4.3.4 流程署理服务接口

com.vprisk.workflow.core.ProcessAgentService

工作流扩展服务接口之一。

基本功用包含新增,修改、删去、查询。

@Autowired
public ProcessAgentService processAgentService;

4.3.5 使命界说扩展服务接口

com.vprisk.workflow.core.NodeVariableService

工作流扩展服务接口之一。

基本功用包含新增,修改、删去、查询。

@Autowired
public NodeVariableService nodeVariableService;

约束场景

  1. 流程界说不支撑子流程
  2. 流程界说第二个节点不支撑会签
  3. 使命批阅不支撑数据粒度权限
  4. 使命不支撑撤回
  5. 不支撑事务表单,相似于form,需求与实践的体系相结合,现在不在工作流考虑规模之内
  6. 决议计划器需求自界说触发器,完结分支流通

转发 + 重视之后,私信“材料”能够收取工作流表规划以及相关源代码。