# CrazyWorkflowHandoutsActiviti6 **Repository Path**: livecsharp/CrazyWorkflowHandoutsActiviti6 ## Basic Information - **Project Name**: CrazyWorkflowHandoutsActiviti6 - **Description**: 《疯狂工作流讲义(第 2 版)基于 Activiti6.X》作者:杨恩雄 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2023-12-05 - **Last Updated**: 2023-12-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CrazyWorkflowHandoutsActiviti6 《疯狂工作流讲义(第 2 版)基于 Activiti6.X》作者:杨恩雄 ## 课程资源 配套源码地址:http://pan.baidu.com/s/1eRHYf1C 提取密码: 06o2 教学视频地址:https://pan.baidu.com/s/12YjylKeDxKQtbV6uMf7TPQ 提取密码: r6pc ## 内容简介    工作流引擎Activiti经过多年的发展,已经变成一个成熟的工作流框架,在2017年,Activiti推出了全新的6.0版本,除了完善对BPMN规范的支持外,还加入了对DMN规范的支持。为了能让广大的程序开发者一探新版本Activiti的功能,笔者在第一版的基础上,编写了本书的第二版。 书中会对Activiti的知识进行全面讲解,并从源码角度对Activiti进行深度剖析。本书会以Activiti为基础,讲述该框架的API使用、BPMN规范,除了这些工作流的基本知识外,还讲解了新的DMN规范引擎、Activiti整合SpringBoot等内容。在本书的第18章,深入Activiti的源代码,展示舍弃流程虚拟机(PVM)之后的Activiti,如何对流程进行控制,让读者能一窥Activiti的庐山真面目。zui后一章,以一个案例结束本书的内容,案例中整合Spring、Struts2等主流框架,目的是让读者在学习的过程中更贴近实际案例。    ## 作者简介 杨恩雄,从事十多年JavaEE企业应用开发,曾任中企动力系统设计师、中企开源项目经理、数码辰星科技公司项目经理,参与过多个企业级项目的设计与架构工作,曾负责辰星“电影票网络销售系统”的整体架构。精通Activiti、Drools、ESB等开源技术,在SOA、SaaS、大数据应用、互联网系统架构方面有着丰富的经验,曾出版《疯狂Java实战演义》《疯狂Workflow讲义》《疯狂SpringCloud微服务架构实战》等书籍。 ## 目录 ### 第1章 Activiti介绍 1 - 1.1 工作流介绍 2 - 1.2 BPMN 2.0规范简述 2 - 1.2.1 BPMN 2.0概述 3 - 1.2.2 BPMN 2.0元素 3 - 1.2.3 BPMN 2.0的XML结构 5 - 1.3 Activiti介绍 5 - 1.3.1 Activiti的出现 5 - 1.3.2 Activiti的发展 5 - 1.3.3 选择Activiti还是jBPM 5 - 1.4 本章小结 6 ### [第2章 安装与运行Activiti](Chapter02/) - 2.1 下载与运行Activiti 8 - 2.1.1 下载和安装JDK 8 - 2.1.2 下载和安装MySQL 9 - 2.1.3 下载和安装Activiti 10 - 2.2 运行官方的Activiti示例 11 - 2.2.1 请假流程概述 11 - 2.2.2 新建用户 11 - 2.2.3 定义流程 12 - 2.2.4 发布流程 14 - 2.2.5 启动与完成流程 15 - 2.2.6 流程引擎管理 16 - 2.3 安装开发环境 17 - 2.3.1 下载Eclipse 17 - 2.3.2 安装Activiti插件 18 - 2.4 编写第一个Activiti程序 19 - 2.4.1 如何运行本书示例 19 - 2.4.2 建立工程环境 19 - 2.4.3 创建配置文件 20 - 2.4.4 创建流程文件 20 - 2.4.5 加载流程文件与启动流程 21 - 2.5 本章小结 22 ### 第3章 Activiti数据库设计 23 - 3.1 通用数据表 24 - 3.1.1 资源表 24 - 3.1.2 属性表 24 - 3.2 流程存储表 25 - 3.2.1 部署数据表 25 - 3.2.2 流程定义表 25 - 3.3 身份数据表 25 - 3.3.1 用户表 25 - 3.3.2 用户账号(信息)表 26 - 3.3.3 用户组表 26 - 3.3.4 关系表 26 - 3.4 运行时数据表 26 - 3.4.1 流程实例(执行流)表 26 - 3.4.2 流程任务表 27 - 3.4.3 流程参数表 27 - 3.4.4 流程与身份关系表 27 - 3.4.5 工作数据表 28 - 3.4.6 事件描述表 28 - 3.5 历史数据表 28 - 3.5.1 流程实例表 28 - 3.5.2 流程明细表 29 - 3.5.3 历史任务表和历史行为表 29 - 3.5.4 附件表和评论表 29 - 3.6 DMN规则引擎表 30 - 3.6.1 决策部署表 30 - 3.6.2 决策表 30 - 3.6.3 部署资源表 30 - 3.7 本章小结 30 ### 第4章 Activiti流程引擎配置 31 - 4.1 流程引擎配置对象 32 - 4.1.1 读取默认的配置文件 32 - 4.1.2 读取自定义的配置文件 33 - 4.1.3 读取输入流的配置 33 - 4.1.4 使用createStandaloneInMemProcess- EngineConfiguration方法 34 - 4.1.5 使用createStandaloneProcessEngine- Configuration方法 34 - 4.2 数据源配置 35 - 4.2.1 Activiti支持的数据库 35 - 4.2.2 Activiti与Spring 35 - 4.2.3 JDBC配置 35 - 4.2.4 DBCP数据源配置 36 - 4.2.5 C3P0数据源配置 37 - 4.2.6 Activiti其他数据源配置 38 - 4.2.7 数据库策略配置 38 - 4.2.8 databaseType配置 39 - 4.3 其他属性配置 40 - 4.3.1 history配置 40 - 4.3.2 asyncExecutorActivate配置 41 - 4.3.3 邮件服务器配置 41 - 4.4 ProcessEngineConfiguration bean 41 - 4.4.1 ProcessEngineConfiguration及其子类 41 - 4.4.2 自定义ProcessEngineConfiguration 42 - 4.5 Activiti的命令拦截器 43 - 4.5.1 命令模式 44 - 4.5.2 责任链模式 45 - 4.5.3 编写自定义拦截器 47 - 4.6 本章小结 49 ### 第5章 流程引擎的创建 50 - 5.1 ProcessEngineConfiguration的buildProcessEngine方法 51 - 5.2 ProcessEngines对象 51 - 5.2.1 init方法与getDefaultProcessEngine方法 51 - 5.2.2 registerProcessEngine方向和unregister方法 52 - 5.2.3 retry方法 53 - 5.2.4 destroy方法 53 - 5.3 ProcessEngine对象 54 - 5.3.1 服务组件 54 - 5.3.2 关闭流程引擎 55 - 5.3.3 流程引擎名称 56 - 5.4 本章小结 56 ### [第6章 用户组与用户](Chapter06/) - 6.1 用户组管理 58 - 6.1.1 Group对象 58 - 6.1.2 创建用户组 58 - 6.1.3 修改用户组 59 - 6.1.4 删除用户组 60 - 6.2 Activiti数据查询 61 - 6.2.1 查询对象 61 - 6.2.2 list方法 61 - 6.2.3 listPage方法 62 - 6.2.4 count方法 63 - 6.2.5 排序方法 63 - 6.2.6 ID排序问题 64 - 6.2.7 多字段排序 66 - 6.2.8 singleResult方法 67 - 6.2.9 用户组数据查询 68 - 6.2.10 原生SQL查询 69 - 6.3 用户管理 71 - 6.3.1 User对象 71 - 6.3.2 添加用户 71 - 6.3.3 修改用户 72 - 6.3.4 删除用户 72 - 6.3.5 验证用户密码 73 - 6.3.6 用户数据查询 74 - 6.3.7 设置认证用户 75 - 6.4 用户信息管理 77 - 6.4.1 添加和删除用户信息 77 - 6.4.2 查询用户信息 78 - 6.4.3 设置用户图片 78 - 6.5 用户组与用户的关系 80 - 6.5.1 绑定关系 80 - 6.5.2 解除绑定 81 - 6.5.3 查询用户组下的用户 81 - 6.5.4 查询用户所属的用户组 82 - 6.6 本章小结 83 ### [第7章 流程存储](Chapter07/) - 7.1 流程文件部署 85 - 7.1.1 Deployment对象 85 - 7.1.2 DeploymentBuilder对象 85 - 7.1.3 添加输入流资源 86 - 7.1.4 添加classpath资源 87 - 7.1.5 添加字符串资源 88 - 7.1.6 添加压缩包资源 88 - 7.1.7 添加BPMN模型资源 89 - 7.1.8 修改部署信息 90 - 7.1.9 过滤重复部署 90 - 7.1.10 取消部署时的验证 92 - 7.2 流程定义的管理 93 - 7.2.1 ProcessDefinition对象 93 - 7.2.2 流程部署 93 - 7.2.3 流程图部署 95 - 7.2.4 流程图自动生成 95 - 7.2.5 中止与激活流程定义 96 - 7.2.6 流程定义缓存配置 97 - 7.2.7 自定义缓存 98 - 7.3 流程定义权限 100 - 7.3.1 设置流程定义的用户权限 100 - 7.3.2 设置流程定义的用户组权限 101 - 7.3.3 IdentityLink对象 102 - 7.3.4 查询权限数据 102 - 7.4 RepositoryService数据查询与删除 104 - 7.4.1 查询部署资源 104 - 7.4.2 查询流程文件 105 - 7.4.3 查询流程图 106 - 7.4.4 查询部署资源名称 107 - 7.4.5 删除部署资源 107 - 7.4.6 DeploymentQuery对象 108 - 7.4.7 ProcessDefinitionQuery对象 109 - 7.5 本章小结 109 ### 第8章 流程任务管理 110 - 8.1 任务的创建与删除 111 - 8.1.1 Task接口 111 - 8.1.2 创建与保存Task实例 112 - 8.1.3 删除任务 112 - 8.2 任务权限 113 - 8.2.1 设置候选用户组 114 - 8.2.2 设置候选用户 115 - 8.2.3 权限数据查询 116 - 8.2.4 设置任务持有人 118 - 8.2.5 设置任务代理人 119 - 8.2.6 添加任务权限数据 119 - 8.2.7 删除用户组权限 121 - 8.2.8 删除用户权限 122 - 8.3 任务参数 123 - 8.3.1 基本类型参数设置 124 - 8.3.2 序列化参数 125 - 8.3.3 获取参数 126 - 8.3.4 参数作用域 127 - 8.3.5 设置多个参数 128 - 8.3.6 数据对象 129 - 8.4 任务附件管理 130 - 8.4.1 Attachment对象 130 - 8.4.2 创建任务附件 130 - 8.4.3 附件查询 132 - 8.4.4 删除附件 133 - 8.5 任务评论与事件记录 133 - 8.5.1 Comment对象 133 - 8.5.2 新增任务评论 134 - 8.5.3 事件的记录 135 - 8.5.4 数据查询 136 - 8.6 任务声明与完成 137 - 8.6.1 任务声明 137 - 8.6.2 任务完成 138 - 8.7 本章小结 139 ### 第9章 流程控制 140 - 9.1 流程实例与执行流 141 - 9.1.1 流程实例与执行流概念 141 - 9.1.2 流程实例和执行流对象(ProcessInstance与Execution) 141 - 9.2 启动流程 142 - 9.2.1 startProcessInstanceById方法 142 - 9.2.2 startProcessInstanceByKey方法 144 - 9.2.3 startProcessInstanceByMessage 145 - 9.3 流程参数 146 - 9.3.1 设置与查询流程参数 147 - 9.3.2 流程参数的作用域 147 - 9.3.3 其他设置参数的方法 149 - 9.4 流程操作 149 - 9.4.1 流程触发 149 - 9.4.2 触发信号事件 150 - 9.4.3 触发消息事件 152 - 9.4.4 中断与激活流程 153 - 9.4.5 删除流程 154 - 9.5 流程数据查询 155 - 9.5.1 执行流查询 155 - 9.5.2 流程实例查询 157 - 9.6 本章小结 158 ### 第10章 历史数据管理和流程引擎管理 159 - 10.1 历史数据管理 160 - 10.1.1 历史流程实例查询 160 - 10.1.2 历史任务查询 161 - 10.1.3 历史行为查询 163 - 10.1.4 历史流程明细查询 165 - 10.1.5 删除历史流程实例和历史任务 166 - 10.2 工作的产生 167 - 10.2.1 异步任务产生的工作 168 - 10.2.2 定时中间事件产生的工作 169 - 10.2.3 定时边界事件产生的工作 170 - 10.2.4 定时开始事件产生的工作 171 - 10.2.5 流程抛出事件产生的工作 172 - 10.2.6 暂停工作的产生 174 - 10.2.7 无法执行的工作 175 - 10.3 工作管理 176 - 10.3.1 工作查询对象 176 - 10.3.2 获取工作异常信息 176 - 10.3.3 转移与删除工作 177 - 10.4 数据库管理 178 - 10.4.1 查询引擎属性 178 - 10.4.2 数据表信息查询 179 - 10.4.3 数据库操作 180 - 10.4.4 数据表查询 180 - 10.5 本章小结 181 ### 第11章 流程事件 182 - 11.1 事件分类 183 - 11.1.1 按照事件的位置分类 183 - 11.1.2 按照事件的特性分类 183 - 11.2 事件定义 183 - 11.2.1 定时器事件定义 184 - 11.2.2 cron表达式 184 - 11.2.3 错误事件定义 186 - 11.2.4 信号事件定义 186 - 11.2.5 消息事件定义 187 - 11.2.6 取消事件定义 187 - 11.2.7 补偿事件定义 188 - 11.2.8 其他事件定义 188 - 11.3 开始事件 188 - 11.3.1 无指定开始事件 188 - 11.3.2 定时器开始事件 189 - 11.3.3 消息开始事件 190 - 11.3.4 错误开始事件 191 - 11.4 结束事件 193 - 11.4.1 无指定结束事件 193 - 11.4.2 错误结束事件 194 - 11.4.3 取消结束事件和取消边界事件 196 - 11.4.4 终止结束事件 199 - 11. 5 边界事件 200 - 11.5.1 定时器边界事件 201 - 11.5.2 错误边界事件 203 - 11.5.3 信号边界事件 204 - 11.5.4 补偿边界事件 206 - 11.6 中间事件 209 - 11.6.1 中间事件分类 209 - 11.6.2 定时器中间事件 210 - 11.6.3 信号中间Catching事件 211 - 11.6.4 信号中间Throwing事件 213 - 11.6.5 消息中间事件 215 - 11.6.6 无指定中间事件 215 - 11.7 补偿中间事件 215 - 11.7.1 补偿执行次数 215 - 11.7.2 补偿的执行顺序 217 - 11.7.3 补偿的参数设置 220 - 11.8 本章小结 221 ### 第12章 流程任务 222 - 12.1 BPMN 2.0任务 223 - 12.1.1 任务的继承 223 - 12.1.2 XML约束 223 - 12.1.3 任务的类型 225 - 12.2 用户任务 226 - 12.2.1 分配任务候选人 226 - 12.2.2 分配任务代理人 228 - 12.2.3 权限分配扩展 228 - 12.2.4 使用任务监听器进行权限分配 229 - 12.2.5 使用JUEL分配权限 230 - 12.3 脚本任务 232 - 12.3.1 脚本任务 232 - 12.3.2 JavaScript脚本 233 - 12.3.3 Groovy脚本 234 - 12.3.4 设置返回值 235 - 12.3.5 JUEL脚本 236 - 12.4 服务任务 237 - 12.4.1 Java服务任务 238 - 12.4.2 实现JavaDelegate 238 - 12.4.3 使用普通Java Bean 240 - 12.4.4 在Activiti中调用Web Service 241 - 12.4.5 import元素 242 - 12.4.6 itemDefinition和message元素 242 - 12.4.7 interface与operation元素 243 - 12.4.8 设置Web Service参数与返回值 243 - 12.4.9 发布Web Service 243 - 12.4.10 使用Web Service Task 245 - 12.4.11 JavaDelegate属性注入 248 - 12.4.12 在JavaDelegate中调用Web Service 251 - 12.4.13 Shell任务 253 - 12.5 其他任务 255 - 12.5.1 手动任务和接收任务 255 - 12.5.2 邮件任务 257 - 12.5.3 Mule任务和业务规则任务 258 - 12.6 任务监听器 259 - 12.6.1 使用class指定监听器 259 - 12.6.2 使用expression指定监听器 260 - 12.6.3 使用delegateExpression指定监听器 261 - 12.6.4 监听器的触发 262 - 12.6.5 属性注入 263 - 12.7 流程监听器 263 - 12.7.1 配置流程监听器 263 - 12.7.2 触发流程监听器的事件 264 - 12.8 本章小结 267 ### 第13章 其他流程元素 268 - 13.1 子流程 269 - 13.1.1 嵌入式子流程 269 - 13.1.2 调用式子流程 271 - 13.1.3 调用式子流程的参数传递 273 - 13.1.4 事件子流程 275 - 13.1.5 事务子流程 277 - 13.1.6 特别子流程 280 - 13.2 顺序流 282 - 13.2.1 条件顺序流 282 - 13.2.2 默认顺序流 284 - 13.3 流程网关 286 - 13.3.1 单向网关 286 - 13.3.2 并行网关 288 - 13.3.3 兼容网关 291 - 13.3.4 事件网关 293 - 13.4 流程活动特性 295 - 13.4.1 多实例活动 295 - 13.4.2 设置循环数据 297 - 13.4.3 获取循环元素 298 - 13.4.4 循环的内置参数 300 - 13.4.5 循环结束条件 302 - 13.4.6 补偿处理者 304 - 13.5 本章小结 304 ### 第14章 Activiti与规则引擎 305 - 14.1 概述 306 - 14.1.1 规则引擎Drools 306 - 14.1.2 Drools下载与安装 306 - 14.2 开发第一个Drools应用 307 - 14.2.1 建立Drools环境 307 - 14.2.2 编写规则 308 - 14.2.3 加载与运行 308 - 14.3 Drools规则语法概述 309 - 14.3.1 规则文件结构 309 - 14.3.2 关键字 310 - 14.3.3 规则编译 310 - 14.4 类型声明 311 - 14.4.1 声明新类型 312 - 14.4.2 使用ASM操作字节码 313 - 14.4.3 类型声明的使用 314 - 14.4.4 类型的继承 316 - 14.4.5 声明元数据 317 - 14.5 函数和查询 317 - 14.5.1 函数定义和使用 318 - 14.5.2 查询的定义和使用 320 - 14.6 规则语法 321 - 14.6.1 全局变量 322 - 14.6.2 规则属性 323 - 14.6.3 条件语法 327 - 14.6.4 行为语法 330 - 14.7 Activiti调用规则 331 - 14.7.1 业务规则任务 332 - 14.7.2 制定销售单优惠规则 333 - 14.7.3 实现销售流程 336 - 14.8 本章小结 339 ### 第15章 基于DMN的Activiti规则引擎 340 - 15.1 DMN规范概述 341 - 15.1.1 DMN的出现背景 341 - 15.1.2 Activiti与Drools 341 - 15.1.3 DMN的XML样例 341 - 15.2 DMN的XML规范 342 - 15.2.1 决策 342 - 15.2.2 决策表 343 - 15.2.3 输入参数 343 - 15.2.4 输出结果 344 - 15.2.5 规则 344 - 15.3 运行第一个应用 345 - 15.3.1 建立项目 345 - 15.3.2 规则引擎配置文件 346 - 15.3.3 编写DMN文件 346 - 15.3.4 加载与运行DMN文件 347 - 15.4 规则引擎API简述 348 - 15.4.1 创建规则引擎 348 - 15.4.2 配置规则引擎 349 - 15.4.3 数据查询 350 - 15.4.4 执行DMN文件 350 - 15.5 规则匹配 351 - 15.5.1 MVEL表达式简介 351 - 15.5.2 执行第一个表达式 351 - 15.5.3 使用对象执行表达式 352 - 15.5.4 规则引擎规则匹配逻辑 353 - 15.5.5 自定义表达式函数 354 - 15.5.6 Activiti中的自定义表达式函数 355 - 15.5.7 销售打折案例 357 - 15.6 本章小结 360 ### 第16章 整合第三方框架 361 - 16.1 Spring Framework 362 - 16.1.1 Spring的IoC 362 - 16.1.2 Spring的AOP 362 - 16.1.3 使用IoC 363 - 16.1.4 使用AOP 364 - 16.2 Activiti整合Spring 365 - 16.2.1 SpringProcessEngineConfiguration 365 - 16.2.2 资源的部署模式 367 - 16.2.3 ProcessEngineFactoryBean 367 - 16.2.4 在bean中注入Activiti服务 368 - 16.2.5 在Activiti中使用Spring的bean 369 - 16.3 Activiti整合Web项目 371 - 16.3.1 安装Tomcat插件 371 - 16.3.2 加入Spring 373 - 16.3.3 整合Hibernate 375 - 16.3.4 配置声明式事务 377 - 16.3.5 添加Struts配置 378 - 16.3.6 实现一个最简单的逻辑 378 - 16.3.7 测试事务 380 - 16.3.8 添加Activiti 380 - 16.4 Activiti与Spring Boot 381 - 16.4.1 Spring Boot项目简介 381 - 16.4.2 下载与安装Maven 382 - 16.4.3 开发第一个Web应用 383 - 16.4.4 Activiti与Spring Boot的整合 386 - 16.5 Activiti与JPA 388 - 16.5.1 建立与运行JPA项目 388 - 16.5.2 在Activiti中使用JPA 390 - 16.5.3 Activiti、Spring与JPA的整合 391 - 16.5.4 基于JPA的例子 393 - 16.6 本章小结 395 ### 第17章 Activiti开放的Web Service 396 - 17.1 Web Service简介 397 - 17.1.1 Web Service 397 - 17.1.2 SOAP协议 397 - 17.1.3 REST架构 397 - 17.1.4 REST的设计准则 398 - 17.1.5 REST的主要特性 398 - 17.1.6 SOAP RPC与REST的区别 399 - 17.2 使用Sping MVC发布REST 399 - 17.2.1 在Web项目中加入Spring MVC 400 - 17.2.2 发布REST的Web Service 401 - 17.2.3 使用Restlet编写客户端 402 - 17.2.4 使用CXF编写客户端 402 - 17.2.5 使用HttpClient编写客户端 403 - 17.2.6 准备测试数据 403 - 17.2.7 部署Activiti的Web Service 403 - 17.2.8 接口访问权限 404 - 17.2.9 访问Activiti接口 404 - 17.3 流程存储服务 405 - 17.3.1 上传部署文件 405 - 17.3.2 部署数据查询 406 - 17.3.3 部署资源查询 406 - 17.3.4 查询单个部署资源 407 - 17.3.5 删除部署 408 - 17.4 本章小结 409 ### 第18章 Activiti功能进阶 410 - 18.1 流程控制逻辑 411 - 18.1.1 概述 411 - 18.1.2 设计流程对象 411 - 18.1.3 创建流程节点行为类 413 - 18.1.4 编写业务处理类 414 - 18.1.5 将流程XML转换为Java对象 414 - 18.1.6 编写客户端代码 416 - 18.2 Activiti的表单 416 - 18.2.1 概述 416 - 18.2.2 表单属性 417 - 18.2.3 外部表单 418 - 18.2.4 关于动态工作流和动态表单 419 - 18.3 流程图XML 419 - 18.3.1 节点元素 419 - 18.3.2 衔接元素 420 - 18.3.3 流程图与流程文件的转换 420 - 18.4 流程操作 421 - 18.4.1 流程回退 421 - 18.4.2 会签 422 - 18.5 本章小结 424 ### 第19章 办公自动化系统 425 - 19.1 使用技术 426 - 19.1.1 表现层技术 426 - 19.1.2 MVC框架 426 - 19.1.3 Spring和Hibernate 426 - 19.2 功能简述 427 - 19.2.1 系统的角色管理 427 - 19.2.2 薪资计算流程 427 - 19.2.3 请假流程 427 - 19.2.4 薪资调整流程 427 - 19.2.5 报销流程 428 - 19.3 框架整合 428 - 19.3.1 创建Web项目 428 - 19.3.2 整合Spring 429 - 19.3.3 整合Hibernate 430 - 19.3.4 整合Struts2 432 - 19.3.5 整合Activiti 433 - 19.4 数据库设计 434 - 19.4.1 薪资表 434 - 19.4.2 请假记录表 434 - 19.4.3 薪资调整记录表 435 - 19.4.4 报销记录表 436 - 19.5 初始化数据 437 - 19.5.1 初始化角色数据 437 - 19.5.2 薪资计算流程 438 - 19.5.3 请假流程 439 - 19.5.4 报销流程 439 - 19.5.5 薪资调整流程 440 - 19.6 角色管理 441 - 19.6.1 用户组管理 442 - 19.6.2 用户列表 443 - 19.6.3 新建用户 445 - 19.6.4 用户登录 446 - 19.7 流程启动 447 - 19.7.1 启动请假流程 447 - 19.7.2 启动报销流程 450 - 19.7.3 启动薪资调整流程 452 - 19.8 申请列表 453 - 19.8.1 申请列表的实现 453 - 19.8.2 请假申请列表 454 - 19.8.3 报销申请列表 455 - 19.8.4 薪资调整列表 455 - 19.8.5 查看流程图 456 - 19.9 流程任务 457 - 19.9.1 待办任务列表 457 - 19.9.2 领取任务与受理任务列表 459 - 19.9.3 查询任务信息 460 - 19.9.4 任务审批 462 - 19.9.5 运行OA的流程 463 - 19.10 本章小结 463