定制小程序开发费用flowable工作流所有业务概念

1.定制小程序开发费用什么是工作流审批

定制小程序开发费用根据本人的理解,定制小程序开发费用就是审批流程管理。

2.什么是flowable

1.官方解释

定制小程序开发费用官方解释如下:

Flowable 定制小程序开发费用项目提供了一套核心的定制小程序开发费用开源业务流程引擎,定制小程序开发费用这些引擎紧凑且高效。定制小程序开发费用它们为开发人员、定制小程序开发费用系统管理员和业务用户定制小程序开发费用提供工作流和业务流程管理 (BPM) 平台。

定制小程序开发费用它的核心是一个闪电般快速、定制小程序开发费用久经考验的动态 BPMN 流程引擎,伴随着 DMN 决策表和 CMMN 定制小程序开发费用案例管理引擎,定制小程序开发费用所有这些引擎都是用 Java 编写的。它们是 2.0 定制小程序开发费用许可的开放源代码,定制小程序开发费用拥有一个承诺社区。

定制小程序开发费用所有引擎都可以嵌入在 Java 应用程序中运行,也可以作为服务器、集群和云中的服务运行。它们可以作为独立的引擎或服务运行,也可以集成在一起为业务流程管理提供丰富的套件。它们与 Spring 完美集成。凭借丰富的 Java 和 REST API,它们是编排人工或机器人自动化处理的理想基础。它们启用微服务编排或软连接微服务本身。

这里总结一下:

  1. 目的是管理业务审批工作流。
  2. 使用BPMN技术。
  3. 可方便嵌套在spring体系中。

2.显赫的家室

说起flowable还来自于activiti,因为activiti内部工作人员不合,一大堆小伙伴相约出去创业了。但是锅还是原来的锅,只不过做饭的方式不同了。所以在思想上,flowable与activiti相差不大。只不过功能更加强大了。

3.什么是BPMN

1.解释BPMN

官方解释如下:

标准的业务流程模型和符号 (BPMN) 将为企业提供以图形符号理解其内部业务程序的能力,并使组织能够以标准方式交流这些程序。此外,图形符号将有助于理解组织之间的绩效协作和业务交易。这将确保企业了解自身和业务参与者,并使组织能够快速适应新的内部和 B2B 业务环境。

这里总结一下:

  1. BPMN开发了一套标准的业务流程建模符号。如下图就是建模的符号。

  1. BPMN定义了一个流程图,该流程图使用上述符号编写。如下图就是通过BPMN规则绘画的图。

说白了如上图规则的图就BPMN流程图。

2.BPMN常用符号

1.开始节点

表明从此处开始流程。

2.任务节点

其中包含了很多种任务,如图。其中最常用的就是用户任务。指定审批人都需要此选项。

3.网关组件

网关相当于判断(与,或,非),最常用的三种网关分别是互斥/排他网关,并行网关,相容网关。

  1. 互斥网关:相当于判断,举例说明,如果输入值大于20走A节点,小于20走B节点。

  2. 并行网关:相容网关成对出现,表示网关中的人全部同意才能够进入下一节点。

    3 .相容网关:互斥网关与并行网关的结合体,如果满足A,B都互斥条件,则都需要流转,如果只有一个满足,那么只流转满足条件的。

3.来个例子

说明如下:

  1. 当审批申请人提交完成后进入审批阶段
  2. 两位项目经理进行审批,需要两人都同意后进入下一节点。
  3. 经理进行审批,此处业务为经理职位(manage)的人都可以执行审批。(此处有认领业务此处不描述)
  4. 此处总经理/董事长审批,如果大于20天需要董事长审批,如果小于20天总经理审批。

4.为什么选择flowable

在技术选择上,flowable较activiti更加新,功能更加完善。以用新不用旧的原则,建议使用flowable。但是相比于activiti来说,他的网上文档非常少。入门也更加困难。

当然可以自己开发审批流系统,设计提交人与审批人字段,通过sql查询可以完成。这种是最费时费力的方法,同时在功能上与开源架构完全没有可比性。而且开源的flowable/activiti已经形成了自己的体系,当与客户侃大山时,更加凸显系统的专业

5.通用的业务流程

标准的审批流系统都有一套标准化的业务流程下文,介绍如何操作审批流系统。

1.整体流程

业务流程主要分以下步骤:

一般在系统中的模块名如下,请各自对应。

这里的任务管理可以查看到一个流程每个审批节点的具体信息。非必要业务。

1.编辑流程

这部分主要是制作流程。

1.自定义表单

在申请人进行审批时,需要填写申请的项目和申请数据。如请假审批需要填写请假时间和请假原因。所以这个表单我们希望可以定制。

2.编辑流程模型

也就是使用BPMN绘制流程图,在图中会指定该审批流程的表单,下一审批节点人员与进入流程的流转条件。

当然也可以导入流程图。同时可以指定申请人在申请时需要填写的表单。(审批人如果需要添加审批表单也可以在此处配置)

3.部署成流程定义

流程模型在编辑/导入后,并不会生效。之后发布生成流程定义后才能够使用并发起审批。当然流程定义模块还有导出激活等功能。

2.执行审批

1.功能列表

当设计完流程之后,就可以发起审批和进行审批了,用户拥有以下功能。

2.功能解释

驳回:将审批重置发送给某节点,重新审批。

转办:A转给其B审批,B审批后,进入下一节点。

委派:A转给其B审批,B审批后,转给A,A审批后进入下一节点。

3.查询流程实例与任务

根据上图可见,当发起审批后,就会生成流程实例了。流程实例和任务管理就可以查看到已经发起的审批了。

  1. 每一套审批信息生成一条流程实例信息。
  2. 一条流程实例有多个审批节点(流程图中已画),每一个审批节点是一条任务管理信息。

请注意流程定义和流程实例概念。

6.如何开发

flowable其实很简单,但是因为市面上的资料比较少,说明白的更加的少,所以该技术栈流通的比较困难。

flowable为我们提供了47张表和7个常用api。

1.提供的表

Flowable的所有数据库表都以ACT_开头。第二部分是说明表用途的两字符标示符。服务API的命名也大略符合这个规则。

  1. ACT_RE_*: 'RE’代表repository。带有这个前缀的表包含“静态”信息,例如流程定义与流程资源(图片、规则等)。
  2. ACT_RU_*: 'RU’代表runtime。这些表存储运行时信息,例如流程实例(process instance)、用户任务(user task)、变量(variable)、作业(job)等。Flowable只在流程实例运行中保存运行时数据,并在流程实例结束时删除记录。这样保证运行时表小和快。
  3. ACT_HI_*: 'HI’代表history。这些表存储历史数据,例如已完成的流程实例、变量、任务等。
  4. ACT_GE_*: 通用数据。在多处使用。
  5. ACT_ID_*: 表示组织信息,如用户,用户组,等等。(很少使用)
  6. FLW_*.未找到官方描述,且表中都为空。

1.ACT_GE_*

ACT_GE_BYTEARRAY:保存流程的bpmn的xml以及流程的Image缩略图等信息
ACT_GE_PROPERTY:Flowable相关的基本信息。比如各个module使用的版本信息。

2.ACT_RE_*

ACT_RE_DEPLOYMENT: 部署对象,存储流程名称
ACT_RE_MODEL:基于流程的模型信息
ACT_RE_PROCDEF:流程定义表

3.ACT_RU_*

ACT_RU_ACTINST:运行中实例的活动表
ACT_RU_DEADLETTER_JOB:当JOB执行很多次都无法执行,就会被记录在此表
ACT_RU_ENTITYLINK:还没使用到。后续更新此表。
ACT_RU_EVENT_SUBSCR:运行时的事件
ACT_RU_EXECUTION:运行的实例表
ACT_RU_HISTORY_JOB; 运行中的定时任务历史表
ACT_RU_IDENTITYLINK: 当前任务执行人的信息
ACT_RU_JOB:运行中的异步任务
ACT_RU_SUSPENDED_JOB:暂停的任务表。如果一个异步任务在运行中,被暂停。就会记录在词表
ACT_RU_TASK:运行中的正常节点任务
ACT_RU_TIMER_JOB:定时作业表
ACT_RU_VARIABLE:运行中的流程实例变量

4.ACT_ID_*

ACT_ID_BYTEARRAY:
ACT_ID_GROUP:用户组信息
ACT_ID_INFO:用户详情
ACT_ID_MEMBERSHIP:用户组和用户的关系
ACT_ID_PRIV:权限
ACT_ID_PRIV_MAPPING:用户组和权限之间的关系
ACT_ID_PROPERTY:用户或者用户组属性拓展表
ACT_ID_TOKEN:登录相关日志
ACT_ID_USER:用户

5.ACT_HI_*

ACT_HI_ACTINST: 流程实例历史
ACT_HI_ATTACHMENT:实例的历史附件,几乎不会使用,会加大数据库很大的一个loading
ACT_HI_COMMENT:实例的历史备注
ACT_HI_DETAIL:实例流程详细信息
ACT_HI_IDENTITYLINK: 实例节点中,如果指定了目标人,产生的历史
ACT_HI_PROCINST:流程实例历史
ACT_HI_TASKINST:流程实例的任务历史
ACT_HI_VARINST:流程实例的变量历史

6.FLW_*

FLW_CHANNEL_DEFINITION: 泳池管道定义表
FLW_EVENT_DEFINITION:事件定义
FLW_EVENT_DEPLOYMENT:事件必输
FLW_EVENT_RESOURCE:事件所需资源
FLW_EV_DATABASECHANGELOG:Liquibase执行的记录
FLW_EV_DATABASECHANGELOGLOCK:Liquibase执行锁
FLW_RU_BATCH:暂时未知
FLW_RU_BATCH_PART:暂时未知

2.提供的接口api

flowable提供了7个常见的api,这些api就对应着上文的所有逻辑,所以只要掌握这些api就可以完成审批业务的开发了。

1.FormService

表单数据的管理。

formService.getStartFormKey()  获取表单keyformService.getRenderedStartForm()查询表单json(无数据)
  • 1
  • 2

2.RepositoryService

提供了在编辑和发布审批流程的api。主要是模型管理和流程定义的业务api。

1.提供了带条件的查询模型流程定义的apirepositoryService.createXXXQuery()例如:repositoryService.createModelQuery().list() 模型查询 repositoryService.createProcessDefinitionQuery().list() 流程定义查询repositoryService.createXXXXQuery().XXXKey(XXX) (查询该key是否存在)2.提供一大波模型与流程定义的通用方法模型相关repositoryService.getModel()  (获取模型)repositoryService.saveModel()  (保存模型)repositoryService.deleteModel() (删除模型)repositoryService.createDeployment().deploy(); (部署模型)repositoryService.getModelEditorSource()  (获得模型JSON数据的UTF8字符串)repositoryService.getModelEditorSourceExtra()  (获取PNG格式图像)3.流程定义相关repositoryService.getProcessDefinition(ProcessDefinitionId);  获取流程定义具体信息repositoryService.activateProcessDefinitionById() 激活流程定义repositoryService.suspendProcessDefinitionById()  挂起流程定义repositoryService.deleteDeployment()  删除流程定义repositoryService.getProcessDiagram()获取流程定义图片流repositoryService.getResourceAsStream()获取流程定义xml流repositoryService.getBpmnModel(pde.getId()) 获取bpmn对象(当前进行到的那个节点的流程图使用)4.流程定义授权相关repositoryService.getIdentityLinksForProcessDefinition() 流程定义授权列表repositoryService.addCandidateStarterGroup()新增组流程授权repositoryService.addCandidateStarterUser()新增用户流程授权repositoryService.deleteCandidateStarterGroup() 删除组流程授权repositoryService.deleteCandidateStarterUser()  删除用户流程授权
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

3.RuntimeService

处理正在运行的流程。

runtimeService.createProcessInstanceBuilder().start() 发起流程runtimeService.deleteProcessInstance() 删除正在运行的流程runtimeService.suspendProcessInstanceById() 挂起流程定义runtimeService.activateProcessInstanceById() 激活流程实例runtimeService.getVariables(processInstanceId); 获取表单中填写的值runtimeService.getActiveActivityIds(processInstanceId)获取以进行的流程图节点 (当前进行到的那个节点的流程图使用)runtimeService.createChangeActivityStateBuilder().moveExecutionsToSingleActivityId(executionIds, endId).changeState(); 终止流程
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

4.HistoryService

在用户发起审批后,会生成流程实例。historyService为处理流程实例的api,但是其中包括了已经完成的和未完成的流程实例。

historyService.createHistoricProcessInstanceQuery().list() 查询流程实例列表(历史流程,包括未完成的)historyService.createHistoricProcessInstanceQuery().list().foreach().getValue() 可以获取历史中表单的信息historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); 根绝id查询流程实例historyService.deleteHistoricProcessInstance() 删除历史流程historyService.deleteHistoricTaskInstance(taskid); 删除任务实例historyService.createHistoricActivityInstanceQuery().processInstanceId(processInstanceId).list()  流程实例节点列表 (当前进行到的那个节点的流程图使用)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

如果处理正在运行的流程实例,请使用runtimeService。

5.TaskService

对流程实例的各个节点的审批处理。

流转的节点审批taskService.createTaskQuery().list() 待办任务列表taskService.createTaskQuery().taskId(taskId).singleResult();  待办任务详情taskService.saveTask(task); 修改任务taskService.setAssignee() 设置审批人taskService.addComment() 设置审批备注taskService.complete() 完成当前审批taskService.getProcessInstanceComments(processInstanceId); 查看任务详情(也就是都经过哪些人的审批,意见是什么)taskService.delegateTask(taskId, delegater); 委派任务taskService.claim(taskId, userId);认领任务taskService.unclaim(taskId); 取消认领taskService.complete(taskId, completeVariables); 完成任务任务授权taskService.addGroupIdentityLink()新增组任务授权taskService.addUserIdentityLink() 新增人员任务授权taskService.deleteGroupIdentityLink() 删除组任务授权taskService.deleteUserIdentityLink() 删除人员任务授权
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

6.ManagementService

主要是执行自定义命令。

managementService.executeCommand(new classA())  执行classA的内部方法 
  • 1

在自定义的方法中可以使用以下方法获取repositoryService。

ProcessEngineConfiguration processEngineConfiguration =            CommandContextUtil.getProcessEngineConfiguration(commandContext);RepositoryService repositoryService = processEngineConfiguration.getRepositoryService();
  • 1
  • 2
  • 3

也可以获取流程定义方法集合 。

ProcessEngineConfigurationImpl processEngineConfiguration =            CommandContextUtil.getProcessEngineConfiguration(commandContext);        ProcessDefinitionEntityManager processDefinitionEntityManager =            processEngineConfiguration.getProcessDefinitionEntityManager();如findById/findLatestProcessDefinitionByKey/findLatestProcessDefinitionByKeyAndTenantId等。
  • 1
  • 2
  • 3
  • 4
  • 5

7.IdentityService

用于身份信息获取和保存,这里主要是获取身份信息。

identityService.createUserQuery().userId(userId).singleResult();  获取审批用户的具体信息identityService.createGroupQuery().groupId(groupId).singleResult(); 获取审批组的具体信息
  • 1
  • 2
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发