28

5分钟接入钉钉工作流之模板配置、钉钉接口流程发起

 3 years ago
source link: http://www.cnblogs.com/fulu/p/13737989.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

一、前言

自从上次 水了一篇 写了一篇5分钟快速接入钉钉实现考勤后过了1个多月的时间,我福乐里又和大家见面了,今天我来聊聊工作流的那些事。

2eAN3a.png!mobile

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

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

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

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

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

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

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

优点:

1.统一用户体验。

以前:列如OA系统是有很多业务界面的,不同的流程,用户是需要挑战到系统的不同界面的,用户是需要熟悉每个界面和流程的

现在:统一使用钉钉智能工作流,审批处理流程体验一致

VNrai2v.png!mobile

2.提升办公效率

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

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

EbQZNvB.png!mobile

3.对于开发者价值

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

2.自带移动端,让审批人无需用电脑登录即可一秒审批

说了这么多优点,那没缺点吗?答案肯定是否定的,缺点肯定有,在我们使用的过程中总结了如下几点

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

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

四、我们如何对接进行实现?

byiyEze.png!mobile

首先有2两种方式,方式一为指定审批人,方式二为复用钉钉审批后台设置的审批流程。 这里我讲下指定审批人的方式。

1.打开审批管理后台,地址: https://aflow.dingtalk.com/dingtalk/web/query/dashboard?dinghash=aflowSetting#/aflowSetting

2.创建流程表单:

i2EJ3mQ.png!mobile

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

jmq2Evj.png!mobile

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

Vreyami.png!mobile

流程设计这里不用管,因为这里我用的是直接指定审批人的方式(通过接口传审批人列表)

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);

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

zU3A3m2.png!mobile

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

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

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK