博客
关于我
钉钉审批流的调用(官方推荐审批流)
阅读量:178 次
发布时间:2019-02-28

本文共 5859 字,大约阅读时间需要 19 分钟。

1.定义审批模板

参考https://ding-doc.dingtalk.com/doc#/serverapi2/tvu5f4

使管理员在后台的管理界面中创建一个模板,在浏览器url中查找process_code参数记录下来后面发送钉钉审批时需要用到

2.发送审批

Postman测试钉钉审批流发送

1.获取access_token

https://oapi.dingtalk.com/gettoken?appkey=appkey
&appsecret=appsecret";//在钉钉管理员后台中获取appkey和appsecret
2.发送审批申请
地址:https://oapi.dingtalk.com/topapi/processinstance/create?access_token=access_token

{   	"form_component_values": 		{   			"name": "详细信息",//传入为控件定义的名称,控件详细信息可看官方文档			"value": "所在部门:什么部 \n 所要发布职位名称:java \n 职级:p8 \n 职位要求:会java \n 发布理由:缺人 "		},//内容	"dept_id": "-1",//所在部门根部门为-1	"process_code": "process_code",//url中的process_code	"originator_user_id": "userid"//发起人userid可以通过手机或unionid获取}

钉钉发送请求帮助类

3.需要在maven中导入httpClient坐标

org.apache.httpcomponents
httpclient
4.5.10

4.帮助类代码

public class DDAuthUntil {       public static JSONObject httpGet(String url){           JSONObject jsonrResult = null;        CloseableHttpClient closeableHttpClient = HttpClients.createDefault();        HttpGet httpGet = new HttpGet(url);        try {               CloseableHttpResponse response = closeableHttpClient.execute(httpGet);            HttpEntity entity = response.getEntity();            String result = EntityUtils.toString(entity, "UTF-8");            jsonrResult = JSON.parseObject(result);        } catch (IOException e) {               e.printStackTrace();        }        return jsonrResult;    }    public static JSONObject httpPost(String url,JSONObject json){           CloseableHttpClient httpClient = HttpClients.createDefault();        JSONObject jsonrResult = null;        HttpPost httpPost = new HttpPost(url);        try {               if (null != json){                   StringEntity entity = new StringEntity(json.toString(),"utf-8");                entity.setContentEncoding("UTF-8");                entity.setContentType("application/json");                httpPost.setEntity(entity);                CloseableHttpResponse response = httpClient.execute(httpPost);                if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){                       String result =EntityUtils.toString(response.getEntity(), "utf-8");                    System.out.println("result:"+result);                    jsonrResult = JSONObject.parseObject(result);                }            }        }catch (Exception e){               e.printStackTrace();        }finally {               try {                   httpClient.close();            } catch (IOException e) {                   e.printStackTrace();            }        }        return jsonrResult;    }    //钉钉工作消息发送帮助类    public static String sendMessage(String content,String mobile){           try {               String access_tokenUrl = "https://oapi.dingtalk.com/gettoken?appkey=dingq8p7srlitsx0xjey&appsecret=S1SzCjx3VAAAzrhCehl1UhgCu3WEygyvVWZsyl_mcpIa3R52sZz6WqvrMDBlQmcI";            JSONObject access_token = DDAuthUntil.httpGet(access_tokenUrl);            String accessToken = access_token.getString("access_token");            String getUseridurl = "https://oapi.dingtalk.com/user/get_by_mobile?access_token="+accessToken+"&mobile="+mobile;            JSONObject useridJson = DDAuthUntil.httpGet(getUseridurl);            String userid = useridJson.getString("userid");            //发送通知            String asyncsendurl = "https://oapi.dingtalk.com/topapi/message/corpconversation/asyncsend_v2?access_token="+accessToken;            JSONObject jsonObject = new JSONObject();            jsonObject.put("agent_id","696435982");            jsonObject.put("userid_list",userid);            JSONObject msgtype = new JSONObject();            msgtype.put("msgtype","text");            JSONObject contents = new JSONObject();            contents.put("content",content);            msgtype.put("text",contents);            jsonObject.put("msg",msgtype);            System.out.println(jsonObject);            DDAuthUntil.httpPost(asyncsendurl,jsonObject);            return "发送消息成功";        }catch (Exception e){               e.printStackTrace();            return "发送消息失败";        }    }}

4.审批流发送代码

我们采用的是获取用户的钉钉手机号来获取userid
*第一个参数 mobile 为手机号,第二个参数processCode为process_code,第三个参数deptId为所在部门

//钉钉审批工作流    public static void ddApproval(String mobile,String processCode,String deptId,String content){           //获取accessToken        String access_tokenUrl = "https://oapi.dingtalk.com/gettoken?appkey=appkey&appsecret=appsecret";//在钉钉管理员后台中获取appkey和appsecret        JSONObject access_token = DDAuthUntil.httpGet(access_tokenUrl);        String accessToken = access_token.getString("access_token");        //获取userid        String getUseridurl = "https://oapi.dingtalk.com/user/get_by_mobile?access_token="+accessToken+"&mobile="+mobile;        JSONObject useridJson = DDAuthUntil.httpGet(getUseridurl);        String userid = useridJson.getString("userid");        //发起审批        String createApproval = "https://oapi.dingtalk.com/topapi/processinstance/create?access_token="+accessToken;        //用JSONObject封装参数        JSONObject jsonObject = new JSONObject();        //封装userid        jsonObject.put("originator_user_id",userid);        //url中的process_code        jsonObject.put("process_code",processCode);        //所在部门根部门为-1        jsonObject.put("dept_id",deptId);        //参数拼接        JSONObject form_component_values = new JSONObject();        //组件内容        form_component_values.put("name","详细信息");        form_component_values.put("value",content);        jsonObject.put("form_component_values",form_component_values);        System.out.println(jsonObject);        DDAuthUntil.httpPost(createApproval,jsonObject);    }

该方式采用的是钉钉创建默认的审批流程,如需指定审批人将approvers加入jsonObject 中

参数参考地址:https://ding-doc.dingtalk.com/doc#/serverapi2/cmct1a

6.返回结果

{       "errcode": 0,    "process_instance_id": "3f2e9752-ca89-4c-b7-9,//审批流唯一代码    "request_id": "6inrrnit9" }

转载地址:http://wstj.baihongyu.com/

你可能感兴趣的文章
Mysql join原理
查看>>
MySQL Join算法与调优白皮书(二)
查看>>
Mysql order by与limit混用陷阱
查看>>
Mysql order by与limit混用陷阱
查看>>
mysql order by多个字段排序
查看>>
MySQL Order By实现原理分析和Filesort优化
查看>>
mysql problems
查看>>
mysql replace first,MySQL中处理各种重复的一些方法
查看>>
MySQL replace函数替换字符串语句的用法(mysql字符串替换)
查看>>
mysql replace用法
查看>>
Mysql Row_Format 参数讲解
查看>>
mysql select, from ,join ,on ,where groupby,having ,order by limit的执行顺序和书写顺序
查看>>
MySQL Server 5.5安装记录
查看>>
mysql server has gone away
查看>>
mysql slave 停了_slave 停止。求解决方法
查看>>
MySQL SQL 优化指南:主键、ORDER BY、GROUP BY 和 UPDATE 优化详解
查看>>
MYSQL sql语句针对数据记录时间范围查询的效率对比
查看>>
mysql sum 没返回,如果没有找到任何值,我如何在MySQL中获得SUM函数以返回'0'?
查看>>
mysql Timestamp时间隔了8小时
查看>>
Mysql tinyint(1)与tinyint(4)的区别
查看>>