一、前言
自从上次 写了一篇5分钟快速接入钉钉实现考勤后过了1个多月的时间,我福乐里又和大家见面了,今天我来聊聊工作流的那些事。
想必各位攻城狮都做过或者接触过OA系统,说到OA系统肯定离不开一个技术话题,那就是工作流~实现的手段五花八门,有公司内部自己独立研发、有结合其他三方插件然后编写业务代码实现的、也有直接采购工作流产品的。那我们今天就来聊下钉钉工作流和如何快速接入。我们分为下面几个步骤来逐步讲解。
1.为什么选择钉钉工作流?
2.钉钉工作流的优缺点有哪些?
3.我们如何对接进行实现?
二、为什么选择钉钉工作流
这里就不做长篇描述了,既然你与我能够在这里相见,那就说明你在做技术方案的时候也进行了初步筛选,我们选钉钉的想法很简单,有这样一套产品,又有开放平台文档对接,有钉钉的团队不断的版本升级迭代,而我们又不想重复造轮子所以就选择了相对来说大厂的产品,公司的企业沟通也使用的是钉钉,自带移动端优势,所以就选择了钉钉工作流
三、钉钉工作流的优缺点有哪些?
优点:
1.统一用户体验。
以前:列如OA系统是有很多业务界面的,不同的流程,用户是需要挑战到系统的不同界面的,用户是需要熟悉每个界面和流程的
现在:统一使用钉钉智能工作流,审批处理流程体验一致
2.提升办公效率
以前:如果企业内部有多个系统,而多个系统中都用到了工作流,则到了审批环节时,都需要审批人进入多个系统进行流程审批,操作毕竟繁琐,且非常容易遗漏,有的系统甚至是没有移动端的,导致审批人进行审批的难度加大
现在: 在钉钉工作台待办统一入口,直观查看所有企业待处理事项
3.对于开发者价值
1.无需关注工作流事项内部流程状态同步过程,只需关注产品业务场景,还可以节省企业开发成本
2.自带移动端,让审批人无需用电脑登录即可一秒审批
说了这么多优点,那没缺点吗?答案肯定是否定的,缺点肯定有,在我们使用的过程中总结了如下几点
1.审批的流程节点比较死板,必须发起的时候就要计算全部的流程步骤,中途是不能通过接口进行改变流程的
2.表单因为是钉钉自带,所以如果你想在钉钉上填写表单发起流程的话难度大,因为不能数据联动以及数据关联,所以复杂的表单还是在自己系统发起,钉钉上只做展示
四、我们如何对接进行实现?
首先有2两种方式,方式一为指定审批人,方式二为复用钉钉审批后台设置的审批流程。 这里我讲下指定审批人的方式。
1.打开审批管理后台,地址: https://aflow.dingtalk.com/dingtalk/web/query/dashboard?dinghash=aflowSetting#/aflowSetting
2.创建流程表单:
然后填写表单的基础设置,这里我直接填测试流程
然后进行钉钉表单的配置,随便配了2个文本框,如下
流程设计这里不用管,因为这里我用的是直接指定审批人的方式(通过接口传审批人列表)
3.第三步开始撸代码,先引用钉钉审批sdk,下载地址如下:
C#:https://open-dev.dingtalk.com/download/openSDK/cshap
JAVA:https://open-dev.dingtalk.com/download/openSDK/java
PHP:https://open-dev.dingtalk.com/download/openSDK/php
直接上发起的示例代码:
OapiProcessinstanceCreateRequest request = new OapiProcessinstanceCreateRequest
{
ProcessCode = "PROC-0DAD7345-5F92-42D7-A306-D22ABC13D2DA",//刚才创建的表单模板id
OriginatorUserId = "XXX",//发起人钉钉id
DeptId = Convert.ToInt64("xxx"),//发起人部门id
Approvers = "XXX,XX",//多个审批人用逗号分隔,按传入的顺序依次审批
CcList = "XX,XX",//抄送人列表
CcPosition = "START_FINISH",//开始和结束都提醒抄送人
};
//表单集合
List<OapiProcessinstanceCreateRequest.FormComponentValueVoDomain> list = new List<OapiProcessinstanceCreateRequest.FormComponentValueVoDomain>();
//表单内容
list.Add(new OapiProcessinstanceCreateRequest.FormComponentValueVoDomain() { Name = "标题", Value = "这是一个标题"});
list.Add(new OapiProcessinstanceCreateRequest.FormComponentValueVoDomain() { Name = "内容", Value = "这是一个内容" });
request.FormComponentValues_ = list;
//调用钉钉接口
var _client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/processinstance/create");
var appToken = (await _dingtalkService.GetDingToken()).Access_token;
var result= _client.Execute(request, appToken);
好了,我们的流程就发起成功了,如下图:
文章的最后,顺带分享下几个踩坑问题
1.钉钉上表单配置控件。如果通过接口发起时没传 则报错
2.表单模板id需要url上取,没有直观的地方展示
3.钉钉配置的表单标题名称不能有空格,有空格则报错
下期预告:打造钉钉分发平台,实现审批事件回写和通讯录事件回写