前一段时间由于业务的需求,需要在项目中接入钉钉中的审批功能,于是哼哧哼哧的看了一波,难免会有磕磕碰碰,这里对自己的学习和使用过程做一个记录。
先说一下,我们这里是企业内部使用。下边提供一下常用的一些资源(其实自己多点点都能找到,记录一下这不是方便嘛!):
钉钉快速接入的介绍页面:钉钉quickstart;
回调管理:回调管理的API;
内外网穿透工具:内外网穿透工具;
钉钉也提供了demo:在这里;
下边就开始吧,直接上代码。先从参数开始:
至于这些参数去哪找,来这里--->钉钉quickstart。
下边就正儿八经的开始接入了,就是我开发的时候的一些心得,可能有的地方考虑的不是那么周全。
首先去发起一个审批流程,这里我封装了一下,看一看:
这里解释一下,这个审批流程中所有需要的东西,都被封装到OapiProcessinstanceCreateRequest这个对象里去了:
这里有必要说一下都是什么东西了:
agentId:是微应用的ID
processCode:钉钉审批模板的ID(你需要钉钉的企业管理员的权限,去创建一个模板,创建好以后去地址栏中找)
formComponentValues:这个就是审批的表单(这里后台中控件的Name属性要和你创建表单时的控件名称要一致)
originatorUserId:发起流程的用户(这里看看你们项目中的用户和钉钉的用户是怎么关联的,一般应该是电话吧)
deptId:发起人所在部门的ID
我这里是通过手机号管理的用户,封装了一个查询用户的方法,拿到这个用户的详情,上边的俩个参数就都解决了
至于表单,你来这里看看吧 --- >钉钉审批表单。
到这里钉钉审批就发起了,可以从返回值中获取到这个审批实例的id,要记录哦,这个还是比较重要的。
调试回调的时候应该是我在集成钉钉的时候遇到麻烦最多的地方。先去看看怎么注册回调,这里如果你有多个审批模板,反正我是分开写的,一个模板,一个回调,好管理嘛,哈哈哈!
先去封装一个回调所需url的方法:
下边是注册回调:
上边的注册回调是基于demo,在正式环境中,不能保留删除回调那一部分代码,如果保留的话,会造成回调部分失效。发起A流程之后,回调地址是A的回调地址,之后再发起B流程,回调地址是B流程的,如果在发起B流程的时候删除所有回调,那么A流程回调就会失效,大家要注意。大家也可以在接口注册回调之后进行记录,再一次发起该流程时进行判断是否已经注册,避免重复注册(或者保留所有的注册接口,即删除删除回调部分的代码)。
上边看到的参数都是常规的参数,新出现的bpms_instance_change和bpms_task_change这俩东西后边说一下。
注册回调用到的工具在这里:内外网穿透工具。
你从github中把项目搞到本地之后(我是windows):
1、打开DOS命令窗口,进入ding.exe所在的目录
然后一个回车下去,如果出来下边这样的,就说明你成功了。
成功之后别关了哈,关了可就不行了。
启动完客户端后,你访问http://liyu.vaiwan.com/xxxxx都会映射到 http://127.0.0.1:8080/xxxxx。别写错!
我说说我在调试的时候遇到的问题。注册回调的方法和控制层中回调函数的业务这俩个地方不要同时打断点;控制层中想要打断点一定要在我们手机上收到审批后再打断点。
我控制层中的回调是这么处理的
这里说一下bpms_instance_change和bpms_task_change,这俩个参数代表的是回调事件的类型。官网看了半天糊里糊涂的,下边是我调试过程中发现的:
bpms_task_change:如果你发起的审批通过和拒绝,返回的事件类型是这个。
bpms_instance_change:如果你发起的审批撤销了,返回的事件类型是这个。
再说一下,我们如果有多个审批人,只要通过一个,他都会进回调,我们这里只关心结果,所以前边不管通过了几个,都不能去操作数据库,更改审批的状态。可是它这个接口我找了半天,返回值中没法去判断是不是最终的审批用户,怎么办呢?先去通过钉钉实例的id获取这个实例的详情,详情里边有状态,通过详情中的状态才能判断这个流程有没有结束,再去操作数据库。
唠叨了半天,这里就是我接入钉钉时的一些想法。不足的地方还有很多,大家多多交流吧!