前言
流程设计历来都是比较繁琐之事,由于公司急需上线流程化的平台,内部系统迫切需要升级,在无产品经理的情况下,我迎难而上,正如《人人都是产品经理》所言“不是每个人都能以产品经理为业,但在我看来,产品经理是一类人,他们做事的思路与方法可以解决很多实际的生活问题。
只要你能够发现问题并描述清楚,转化为一个需求,进而转化为一个任务,争取到支持,发动起一批人,将这个任务完成,并持续不断以主人翁的心态去跟踪、维护这个产物那么,你就是产品经理。
至少,你已经是自己的产品经理了。这才是“人人都是产品经理”的真谛。”
第一次做需求分析、设计、走了很多的弯路,一开始以为用企微审批引擎能节约资源,实际发现会更加浪费资源,且扩展性不强。也调研了像diboot这些成熟的workflow,但阻塞在了收费上,就没再去寻找其他开源替代方案,一心扎到企微流程引擎中无法自拔,浪费了一些资源和时间,以后在这方面要保持警惕,一定要想好,调研好才能开始做。
1、认识审批流
1.1、认识审批流
审批流,是一种工作流,常见于中后台系统,其本质是待审信息的流动方式及决策过程。
即申请者(人或系统)提供待审信息,交由相关审批人进行传递及处理,期间,每个审批者会基于自己的岗位职责与权限分工对待审信息进行核对(检查/确认…)、判断(通过/驳回/转交/挂起…)及协商(反馈意见…),直至抵达最高决策层进行取舍。
1.2、为什么要创建审批流
合规化:帮助管理者规范团队的运转流程、防范决策失误;引导申请者遵循正确的流程规范,避免违规操作。
1.3、审批流的构成要素
- 谁发起审批(申请者):不仅仅指某个用户,也可能是系统或是第三方服务商。
- 谁来审批(审批者):可能是某个审批群组或是特定的审批人,受限于权限与分工。
- 按什么规则审批(审批规则):不同权限与分工的审批者按一个或多个审批条件进行审批。
- 审批什么(待审信息):申请者基于不同的申请事项,按要求提供的信息。
- 各角色可以干嘛(操作动作):可以是审批操作(通过、驳回…),也可以是流程操作(转交、撤回…)。
- 怎么告诉各角色(通知方式):即通知申请者、审批者的渠道(短信、电话、邮件、平台消息提醒…)。
1.4、好的审批流要满足什么条件
- 信息传达准确:能有效并准确传达审批流的相关信息。
- 流程操作高效:能提升组织内部的运转效率。
- 节点可预知:能帮助各角色提前了解审批流程。
- 历史可回溯:对已结束的审批单据能随时回溯。
2、盘点审批流程
2.1、归纳角色类型
用户角色 | 角色描述 | |
---|---|---|
申请者 | 公司员工(包括中干基层、项目经理、采购、研发等) | |
审批者 | 专业组长审批 | 专业组组长岗位员工及其审批链条 |
项目经理审批 | 项目经理岗位员工及其审批链条 | |
部门长审批 | 部门长岗位员工及其审批链条 | |
供应链审批 | 供应链岗位员工及其审批链条 | |
库管审批 | 库房管理岗位员工及其审批链条 |
2.2、理清任务流程
2.3、挖掘产品功能点
2.3.1、用户旅程地图
2.3.2、产品功能列表
主功能 | 子功能 | 子功能 |
---|---|---|
审批管理 | 发起申请 | 发起审评 |
我的申请 | 审批列表 | |
我审批的 | 待处理审批列表 | |
已处理审批列表 | ||
审批设置 | 提醒设置 | |
模板设置 | ||
项目列表 | 发布审批 | 发布审批 |
任务列表 | 发起审批 | 发起审批 |
任务详情 | 发起审批 | 发起审批 |
审批记录 | 审批记录 | |
采购入库 | 发起审批 | 发起审批 |
采购退库出库 | 发起审批 | 发起审批 |
其他入库 | 发起审批 | 发起审批 |
其他出库 | 发起审批 | 发起审批 |
3、审批流页面设计
3.1、搭建信息架构
信息架构推导脑图
角色权限列表
4、链接消息通知
发起审批到相应的节点均有企微通知
5、原型设计
5.1、为什么要和企微结合
1、基于目前场景,如若重新设计BPM,是个很大的工程,企微有现成的产品解决方案,我们系统做对接融合即可
2、企微生态相对成熟,可无缝打通联系人和审批,无缝打通网页和APP端,能做到轻松在企微中审批相关任务
3、会涉及到跨部门的审批和企微结合亦方便进行
和企微审批打通,具体流程如下:
企微相关开发接口:审批流程引擎
6、企微自建应用开发步骤
6.1、创建企业
一个手机号可以创建多个测试企业用做测试使用
6.2、新建自建应用
6.3、应用设置
配置可信域名等:
6.4、获取应用accessToken
6.5、企微审批引擎相关接口
https://developer.work.weixin.qq.com/document/path/97437
6.6、整体思路
整体流程
创建一个模板均是相同的表单控件,唯一不同的是模板名称、模板id,在管理后台创建完模板后,需要去企微修改流程配置,进行跳转
{
"template_name": [
{
"text": "我的api测试模版2",
"lang": "zh_CN"
}
],
"template_content": {
"controls": [
{
"property": {
"control": "Text",
"id": "Text-01",
"title": [
{
"text": "单据类型",
"lang": "zh_CN"
}
],
"placeholder": [
{
"text": "请输入单据类型",
"lang": "zh_CN"
}
],
"require": 1,
"un_print": 0
},
"config": {}
},
{
"property": {
"control": "Text",
"id": "Text-02",
"title": [
{
"text": "单据名称",
"lang": "zh_CN"
}
],
"placeholder": [
{
"text": "请输入单据名称",
"lang": "zh_CN"
}
],
"require": 1,
"un_print": 0
},
"config": {}
},
{
"property": {
"control": "Text",
"id": "Text-03",
"title": [
{
"text": "单据详情",
"lang": "zh_CN"
}
],
"placeholder": [
{
"text": "请输入单据详情",
"lang": "zh_CN"
}
],
"require": 1,
"un_print": 0
},
"config": {}
},
{
"property": {
"control": "Text",
"id": "Text-04",
"title": [
{
"text": "备注",
"lang": "zh_CN"
}
],
"placeholder": [
{
"text": "请输入备注",
"lang": "zh_CN"
}
],
"require": 0,
"un_print": 0
},
"config": {}
}
]
}
}
如有对模板的修改,需调用修改模板接口,但控件不做修改,接口只修改名称,其余参数和新建保持一致,流程修改还是需要到企微,修改后需要更新对应预览截图
传参可如下:
{
"template_id": "C4RdAwFWww7vv3oFEPoX1o4B3Mr9VHjzwbjw1Atwh",
"template_name": [
{
"text": "我的api测试模版3",
"lang": "zh_CN"
}
],
"template_content": {
"controls": [
{
"property": {
"control": "Text",
"id": "Text-01",
"title": [
{
"text": "单据类型",
"lang": "zh_CN"
}
],
"placeholder": [
{
"text": "请输入单据类型",
"lang": "zh_CN"
}
],
"require": 1,
"un_print": 0
},
"config": {}
},
{
"property": {
"control": "Text",
"id": "Text-02",
"title": [
{
"text": "单据名称",
"lang": "zh_CN"
}
],
"placeholder": [
{
"text": "请输入单据名称",
"lang": "zh_CN"
}
],
"require": 1,
"un_print": 0
},
"config": {}
},
{
"property": {
"control": "Text",
"id": "Text-03",
"title": [
{
"text": "单据详情",
"lang": "zh_CN"
}
],
"placeholder": [
{
"text": "请输入单据详情",
"lang": "zh_CN"
}
],
"require": 1,
"un_print": 0
},
"config": {}
},
{
"property": {
"control": "Text",
"id": "Text-04",
"title": [
{
"text": "备注",
"lang": "zh_CN"
}
],
"placeholder": [
{
"text": "请输入备注",
"lang": "zh_CN"
}
],
"require": 0,
"un_print": 0
},
"config": {}
}
]
}
}
2、为单据绑定模板
3、发起审批
3.1、根据模板id获取模板详情
3.2、发起审批
{
"creator_userid": "CangHe",
"template_id": "C4RdAwDkjzZaWDQn9fAoKogTZEAvaMoX42Lo9qgy6",
"use_template_approver": 1,
"apply_data": {
"contents": [
{
"control": "Text",
"id": "Text-1675996804140",
"value": {
"text": "这是自动抓取的单据类型"
}
},
{
"control": "Text",
"id": "Text-1675997969505",
"value": {
"text": "这是自动抓取的单据编码"
}
},
{
"control": "Text",
"id": "Text-1675998042838",
"value": {
"text": "这是自动抓取的单据详情"
}
}
]
},
"summary_list": [
{
"summary_info": [
{
"text": "单据名称:xxxx",
"lang": "zh_CN"
}
]
},
{
"summary_info": [
{
"text": "单据类型:xxxx",
"lang": "zh_CN"
}
]
}
]
}
接口调用成功后,保存单据编号
3.3、更新审批进度
可根据回调单据编号对应更新,点击手动刷新调用获取单据详情接口
7、结合开源flowable自研引擎
经研究发现企微审批接口和审批引擎均有一定的弊端,未能实际满足我们的需求,下面就两种情况的弊端先说明
企微审批接口弊端:
1、必须为自建应用
2、表单模板添加超链接,无法用正常浏览器打开,需求中需要能打开内部系统链接
3、建立模板需现在企微上进行操作
4、无法在自己内部系统进行审批
5、审批状态实时要企微回调接口才可获取,内部获取审批详情接口事实性不高
6、开发成本也高,且无法复用内部其他系统,扩展性不强
企微审批引擎:
1、相对审批接口,引擎主要是给第三方应用提供,但只能在企微内部自建应用通过JS-SDK打开,扩展性不强
2、开发成本较高
3、复用性不强
4、内部系统无法直接审批,当审批流过多时,对审批人需要找很久,无法像内部接口一样可以有处理状态的
5、用户体验不好
综合以上调研,自研一套审批引擎对公司来说迫在眉睫
我们调研了很多开源的引擎,发现大部分都是基于flowable引擎开发的,包括:
1、https://www.diboot.com/
workflow整体将表单和流程进行了完美融合,可惜这部分并不开源
2、http://106.52.168.121:1024/work/create
基于ruoyi和flowable,且开源,对我们来说比较友好
7.1、我的事务和流程管理
第一期,将plus集成到我们系统,我的事务和流程管理暂不做改动,调整相应交互即可
7.2、任务审批
添加任务设置-审批设置
为任务选择审批流程
新建任务-配置审批