OA流程图绘制指南
必填与非必填参数
![fe13460dca4b572a24ad78b086e1aa3f.png](https://i-blog.csdnimg.cn/blog_migrate/10bdef68afe38191511fb71c3b21e7b3.png)
![5c514c514efd0a7cb7d9c8614eff287b.png](https://i-blog.csdnimg.cn/blog_migrate/371ca7a28e89b1da86c36f152e0c88e6.png)
自下而上查询时是否允许下级查看
![7900e01eacb18daae8d39684fdb39644.png](https://i-blog.csdnimg.cn/blog_migrate/db06043af11345d8cff6099a227a9ebf.png)
当前流程属于哪个部门 可不填默认使用添加人部门
业务流程除了审核分组不用填其余都是必填项
指定流程申请人或部门
点击空白处 → 右下角 就会出现如下
![596919c93c6ec3b852f3e38e21a3385a.png](https://i-blog.csdnimg.cn/blog_migrate/81a2c326b7c1fcc437cf9297c38f319a.png)
分别用于设置部门和用户都可以设置多个
指定任务审核人
把任务节点设置为用户节点 右侧便会出现如下 可设置审核人和部门都可以设置多个
![7b552f48212602303e1440731b1f5fe6.png](https://i-blog.csdnimg.cn/blog_migrate/80ad99b7efb46aacb55726b6dadbad42.png)
节点
会签配置
![14b80f6fa4e1c6cb6a0a04add67b9f2c.png](https://i-blog.csdnimg.cn/blog_migrate/31ba4c46965a1827c1bf4116476109d1.png)
isSequential=false时,表示的并行执行,即该节点下的多条任务可以同时执行。
activiti:collection:执行该会签环节的参与人,此处是使用的一个名叫publicityList的流程变量
activiti:elementVariable:表示的是每一个分支都有一个名叫publicity的流程变量,和上方的activiti:assignee结合
![a31e0d809053dc60ea57634ef0a157ab.png](https://i-blog.csdnimg.cn/blog_migrate/f2c7d3adcda6448a5b7c5d025133d33c.png)
![0b123ebef769d36c9e08ef1386f9691e.png](https://i-blog.csdnimg.cn/blog_migrate/d8434b2db7953d6be4d41cae336119d8.png)
根据规范的要求,每个上级流程为每个实例创建分支时都要提供如下变量:
nrOfInstances:实例总数 会签人数
nrOfActiveInstances:当前活动的,比如,还没完成的,实例数量。 对于顺序执行的多实例,值一直为1。
nrOfCompletedInstances:已经完成实例的数目。
设置会签受理人
![5160f0f7d0cc50e1504cd2e84d15072e.png](https://i-blog.csdnimg.cn/blog_migrate/748b79f7652233f1f05dcd6c4b6a0122.png)
![7c9cfb18e4ef01cc4e5e2bc27197842f.png](https://i-blog.csdnimg.cn/blog_migrate/9bddec67bf5bf2a29194c8e4592af880.png)
需要注意的是当流程的变量名称不能重名否则会被覆盖
回调
![d7080726a166d9d725bad04a92f160fc.png](https://i-blog.csdnimg.cn/blog_migrate/62573bbac58c73935816fc2308650d37.png)
![d479afb0f006377893df2ea54f5a9124.png](https://i-blog.csdnimg.cn/blog_migrate/7edad11b6232dd5b464f7be22f9feac1.png)
注意一下:提供给oa模块获取业务申请数据的控制器和提供给oa模块做审核完成后回调的控制器 类的命名和接口uri都用上图中的那种
AppInfoController @RequestMapping("/api/v1/app_info")
ProcessCallBackController @RequestMapping("/api/v1/process_call_back")
接口uri调用实现接口里面的 path常量就行了
添加对应流程的路由
![8ce144468f10dda4c4816edec0bd945d.png](https://i-blog.csdnimg.cn/blog_migrate/6df7247322610b5990ed6ef69ab34674.png)
添加新类型审核
添加常量
增加流程前缀在OA的接口项目中BusinessProcessKey常量类 增加模块名在 ModuleName常量类如我要给用户配置一个审核如下
![8baba156b288d590eddc702c915efcf6.png](https://i-blog.csdnimg.cn/blog_migrate/05445f095a4d4def942a4086e2f0d02a.jpeg)
![c8f3750a9a2771443095166f2e92ba78.png](https://i-blog.csdnimg.cn/blog_migrate/f93a3d2733aab7e7452b4a6a9f55a9ab.jpeg)
之后再按上面添加相应的用户流程
在OA创建相应的接口
![764c4682be3b379105fa72d34e301b0b.png](https://i-blog.csdnimg.cn/blog_migrate/64729f985e860f7f2e791ca36b562831.jpeg)
命名统一加上模块名前缀 后缀统一使用AppInfoClient,CallbackClient
再到OA的ProcessHandle类中的 getApi方法增加对应的case即可
![6317408626f369dd7cf667307f54047f.png](https://i-blog.csdnimg.cn/blog_migrate/1886c728aa2c4dd6af0227f59bd6591e.jpeg)
启动自动完成流程注意事项
- 启动自动完成流程时会执行回调 但是调用方启动流程方法还没执行完 使用了事务话那么会导致数据没有提交 会导致执行回调查询时查不到数据,
- 保存数据需要放在启动申请之前 防止自动流程申请时回调查询不到数据以及申请时就流程结束了触发的回调
正确做法如下:把执行保存的代码再放到一个方法中 再在上面加上事务 不要直接与逻辑代码写在一起加事务
![a9652cb41df875ea797f47f36dca3687.png](https://i-blog.csdnimg.cn/blog_migrate/0c753c2f638829049092396c6edb7fef.jpeg)
启动和回调的事务处理
回调Callback接口
实现回调接口 如果回调执行异常则直接抛出异常即可,OA这边会捕获异常记录后
抛出进行回滚
![7a81aae766b8f1e4fd9a30be8578584c.png](https://i-blog.csdnimg.cn/blog_migrate/53921effb81572566d211578b68bc24a.jpeg)
启动流程
启动流程中如果出现了异常OA则会回滚抛出 因此只需要捕获是否有异常如果没有异常则正常提交
![8846ffc772c0cb965574a798943bdff8.png](https://i-blog.csdnimg.cn/blog_migrate/8a2c0e6d52c02587a0ad68b757695d63.jpeg)
如果是批量启动则不会抛出异常 需通过isSuccessfulStartup字段进行判断是否启动成功