一、前言

自从上次 水了一篇




钉钉java工作流 钉钉流程接口_大数据


想必各位攻城狮都做过或者接触过OA系统,说到OA系统肯定离不开一个技术话题,那就是工作流~实现的手段五花八门,有公司内部自己独立研发、有结合其他三方插件然后编写业务代码实现的、也有直接采购工作流产品的。那我们今天就来聊下钉钉工作流和如何快速接入。我们分为下面几个步骤来逐步讲解。

1.为什么选择钉钉工作流?

2.钉钉工作流的优缺点有哪些?

3.我们如何对接进行实现?

二、为什么选择钉钉工作流

这里就不做长篇描述了,既然你与我能够在这里相见,那就说明你在做技术方案的时候也进行了初步筛选,我们选钉钉的想法很简单,有这样一套产品,又有开放平台文档对接,有钉钉的团队不断的版本升级迭代,而我们又不想重复造轮子所以就选择了相对来说大厂的产品,公司的企业沟通也使用的是钉钉,自带移动端优势,所以就选择了钉钉工作流

三、钉钉工作流的优缺点有哪些?

优点:

1.统一用户体验。

以前:列如OA系统是有很多业务界面的,不同的流程,用户是需要挑战到系统的不同界面的,用户是需要熟悉每个界面和流程的
现在:统一使用钉钉智能工作流,审批处理流程体验一致


钉钉java工作流 钉钉流程接口_钉钉java工作流_02

2.提升办公效率

以前:如果企业内部有多个系统,而多个系统中都用到了工作流,则到了审批环节时,都需要审批人进入多个系统进行流程审批,操作毕竟繁琐,且非常容易遗漏,有的系统甚至是没有移动端的,导致审批人进行审批的难度加大

现在: 在钉钉工作台待办统一入口,直观查看所有企业待处理事项

钉钉java工作流 钉钉流程接口_python_03

3.对于开发者价值

1.无需关注工作流事项内部流程状态同步过程,只需关注产品业务场景,还可以节省企业开发成本

2.自带移动端,让审批人无需用电脑登录即可一秒审批 说了这么多优点,那没缺点吗?答案肯定是否定的,缺点肯定有,在我们使用的过程中总结了如下几点

1.审批的流程节点比较死板,必须发起的时候就要计算全部的流程步骤,中途是不能通过接口进行改变流程的

2.表单因为是钉钉自带,所以如果你想在钉钉上填写表单发起流程的话难度大,因为不能数据联动以及数据关联,所以复杂的表单还是在自己系统发起,钉钉上只做展示 四、我们如何对接进行实现?

钉钉java工作流 钉钉流程接口_钉钉java工作流_04


首先有2两种方式,方式一为指定审批人,方式二为复用钉钉审批后台设置的审批流程。 这里我讲下指定审批人的方式。 1.打开审批管理后台,地址: https://aflow.dingtalk.com/dingtalk/web/query/dashboard?dinghash=aflowSetting#/aflowSetting 2.创建流程表单:

钉钉java工作流 钉钉流程接口_python_05


然后填写表单的基础设置,这里我直接填测试流程

钉钉java工作流 钉钉流程接口_大数据_06


然后进行钉钉表单的配置,随便配了2个文本框,如下

钉钉java工作流 钉钉流程接口_钉钉java工作流_07


流程设计这里不用管,因为这里我用的是直接指定审批人的方式(通过接口传审批人列表) 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);

好了,我们的流程就发起成功了,如下图:


钉钉java工作流 钉钉流程接口_编程语言_08

文章的最后,顺带分享下几个踩坑问题

1.钉钉上表单配置控件。如果通过接口发起时没传 则报错

2.表单模板id需要url上取,没有直观的地方展示

3.钉钉配置的表单标题名称不能有空格,有空格则报错

下期预告:打造钉钉分发平台,实现审批事件回写和通讯录事件回写

福禄ICH·ERP项目部 福乐里