141_Power Query之获取钉钉审批流自动刷新Power BI报告
博客:www.jiaopengzi.com
一、背景
钉钉办公给很多企业带来了很多方便,比如审批流线上化,通用化。线上化填写后,数据自动获取又是一个硬伤了,虽然数据可以下载,但我们要自动刷新数据怎么办呢?
结合Power BI做一个自动刷新,和Power BI打通,美滋滋。
推荐阅读:Power Query之获取钉钉日志自动刷新Power BI报告
二、数据结构
为了方便演示,新建一个审批流模板。
标题:收款审批
字段:客户姓名、收款方式、收款金额(元)、备注

测试审批流数据


三、上M
1、自定义函数Fxdingding_process
看到这一串不要慌,直接复制到自己的pq中保存为Fxdingding_process即可。
let
fx=(AppKey as text ,AppSecret as text,Month as date,ProcessCode as text ) as table =>
let
token= Json.Document( Text.FromBinary(Web.Contents("https://oapi.dingtalk.com/gettoken?appkey="&AppKey&"&appsecret="&AppSecret)))[access_token],
UnixTimestampStart=Text.From(((Number.From(Month)-70*365-19)*86400-8*3600)*1000),
UnixTimestampEnd=Text.From(((Number.From(Date.EndOfMonth(Month))-70*365-19)*86400-8*3600)*1000+86399999), fxrl=(n as number,process_code as text)=>
let
fx=Json.Document(
Web.Contents("https://oapi.dingtalk.com/topapi/processinstance/listids?"
, [Query=[access_token=token]
,Content=Text.ToBinary("{'start_time':"&UnixTimestampStart&",'end_time':"&UnixTimestampEnd&",'process_code':'"&process_code&"','cursor':"&Text.From(n)&",'size':20}")
]
)
)[result][list]
in
fx, fxrt = (process_instance_id as text)=>
let
Rl=Json.Document(
Web.Contents("https://oapi.dingtalk.com/topapi/processinstance/get?"
, [Query=[access_token=token]
,Content=Text.ToBinary("{'process_instance_id':'"&process_instance_id&"'}")
]
)
),
records_spl=
if
List.Count(Rl[process_instance][operation_records]) >1
then
Rl[process_instance]
[
[business_id],
[create_time],
[originator_dept_name],
[result],
[originator_userid]
]&
Record.FromList(
List.Transform(Rl[process_instance][form_component_values],
(R)=> R[value]),
List.Transform(Rl[process_instance][form_component_values],
(R)=> R[name]) )
&Rl[process_instance][operation_records]{1}[[remark],[date]] else
Rl[process_instance]
[
[business_id],
[create_time],
[originator_dept_name],
[result],
[originator_userid]
]&
Record.FromList(
List.Transform(Rl[process_instance][form_component_values],
(R)=> R[value]),
List.Transform(Rl[process_instance][form_component_values],
(R)=> R[name]) )
&[remark=null,date=null]
in
records_spl, N= List.Count(List.Generate(()=>1,each List.Count( fxrl(_, ProcessCode))>0 ,each _+1)),
process_instance_id_list = List.Combine(List.Transform({1..N},each fxrl(_,ProcessCode))),
result= Table.FromRecords( List.Transform(process_instance_id_list,each fxrt(_)) ) in
result, metadata=[
Documentation.Name="钉钉审批数据获取函数:Fxdingding_process",
Documentation.LongDescription="AppKey:登录钉钉开放平台获得(需要组织管理员权限);AppSecret:登录钉钉开放平台获得(需要组织管理员权限);Month:表示要获取数据的月份的1号填写为:#date(2019,1,1);ProcessCode:表示审批模板的唯一编码,在审批模板编辑页的url中查看。"
] in
Value.ReplaceType(fx,Value.Type(fx) meta metadata)
2、自定义函数Fxdingding_process的说明
function(AppKey as text ,AppSecret as text,Month as date,ProcessCode as text) as table
AppKey:登录钉钉开放平台获得(需要组织管理员权限);
AppSecret:登录钉钉开放平台获得(需要组织管理员权限);
Month:表示要获取数据的月份的1号填写为:#date(2019,1,1),为什么要设置这个参数,因为钉钉api获取数据是由日期限制的,好像是180天,所以数据就按照每月获取的;
ProcessCode:表示审批模板的唯一编码,在审批模板编辑页的url中查看。

3、调用函数得到结果

步骤1:配置《01名称管理》Excel文件表名、ID、表ID、原始名称、统一名称;

步骤2:配置好Power BI文件4个参数;

步骤3:直接一个简单的函数Fxtable得到结果,是不是非常简单。

四、总结
1、直接调用自定函数fxdingding输入四个参数,即可得到结果;
2、注意参数的格式,详见上图《结果》
3、AppKey、AppSecret 获取需要管理员权限并登录钉钉开放平台获得;
4、具体步骤见开发文档;
5、服务器公网出口IP名单要提前设置好,不然数据会跑不出来。

6、ProcessCode参数获取。

by焦棚子
141_Power Query之获取钉钉审批流自动刷新Power BI报告的更多相关文章
- 131_Power Query之获取钉钉日志自动刷新Power BI报告
博客:www.jiaopengzi.com 焦棚子的文章目录 请点击下载附件 一.背景 最近在玩钉钉日志,企业填写简单数据后方便汇总到一起比较实用的工具,但数据填写以后还是需要下载日志报表,比较麻烦. ...
- 150_1秒获取Power BI Pro帐号
博客:www.jiaopengzi.com 请点击[阅读原文]获取帐号 一.背景 当你来到这篇文章的时候,我想你已经在网上搜索了一圈了.网上有一大把教你如何注册Power BI帐号的方法,我们这里就不 ...
- 149_1秒获取Power BI Pro帐号
一.背景 当你来到这篇文章的时候,我想你已经在网上搜索了一圈了.网上有一大把教你如何注册Power BI帐号的方法,我们这里就不在赘述了.因为各种因素的限制确实比较麻烦.我们直接提供Power BI ...
- 钉钉开发获取APPKEY, APPSECRET, CorpId和SSOSecret
首先用自己的钉钉账号注册一个企业: https://oa.dingtalk.com/index.htm 一.获取应用APPKEY及APPSECRET方法: 1.登录钉钉开放平台创建应用: https: ...
- npm钉钉脚手架,支持考勤信息获取
钉钉官方并未提供nodejs包,第一次调用接口的时候非常费事,而且尝试去寻找相关的钉钉考勤数据模块的时候只找到了一些消息啊,只能办公啊,免登啊之类的模块,有关考勤数据的似乎没有 关于dd的npm包中一 ...
- 钉钉相关功能介入开发系列一:获取access_token
获取access_token的基本代码,与微信不同的是钉钉的token正常情况下有效期为7200秒,有效期内重复获取返回相同结果,并自动续期,比微信方便多了 //基本信息 string appkey ...
- WinForm调用钉钉获取考勤结果
关注点: 1.钉钉AccessToken的获取和防止过期 2.使用TPL并行编程调用钉钉接口 需求详解 公司前台有个大屏,领导想显示全部员工的考勤结果统计情况和车间的实时监控视频,还有车间的看板.简单 ...
- 钉钉开发入门,微应用识别用户身份,获取用户免登授权码code,获取用户userid,获取用户详细信息
最近有个需求,在钉钉内,点击微应用,获取用户身份,根据获取到的用户身份去企业内部的用户中心做校验,校验通过,相关子系统直接登陆; 就是在获取这个用户身份的时候,网上的资料七零八落的,找的人烦躁的很,所 ...
- 钉钉接口:获取accessToken和打卡记录【分享】
post和get方法工具类:HttpUtils package weaver.dingtalk.utils; import com.alibaba.fastjson.JSONObject; impor ...
随机推荐
- PAT B1042 字符统计
请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过 1000 的字符串.字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母, ...
- ubantu之Git使用
本文讲述在Ubuntu 14.04 x64环境下,如何安装Git,配置连接GitHub,并且上传本地代码到github. 一. 注册Git账户以及创建仓库 要想使用github第一步当然是注册gith ...
- 这道javascript 面试题 你必须会
实现一个函数,运算结果可以满足如下预期结果: add(1)(2) // 3 add(1, 2, 3)(10) // 16 add(1)(2)(3)(4)(5) // 15 话不多说,实现如下: fun ...
- 微信小程序支付框样式以及功能
1.页面代码 <view catchtap='showInputLayer' class="btn_pay">立即支付</view> <!-- 密码输 ...
- 将本地项目上传到gitLab操作
在设置好SSH之后,执行下面的操作即可完成: git init // 初始化git status //查看提交文件状态git remote add origin git地址 // 连接 ...
- API管理工具介绍
时间都去哪里了 敏捷迭代和团队协作,前后端分离的工作模式几乎是每个互联网公司的常规工作模式. 前后端分离,各自开发的优点很多,其中一项是它只需要提供一个统一的API接口,即可被web,iOS,An ...
- 7.Arrays类
1. Arrays类 数组的工具类java.util.Arrays Arrays类中的方法都是static修饰的静态方法,使用的时候可以直接使用类名进行调用 (而不是使用对象)(是"不用&q ...
- C++五子棋(二)——游戏界面与棋子渲染
准备 我们首先要在程序中定义一个名为drawPNG的函数,用于输出png格式图片并使背景透明 引入头文件(需要提前安装EasyX) #include <graphics.h> 定义函数 d ...
- 学习打卡day12&构建之法阅读笔记第一篇
今天浅读了<构建之法>的前四章,稍微有一些个人的见解与感受 第一点即是开篇提及到的算法与数据结构这门学科开设的必要,大二上学期学习了这门课程,就我个人目前接触到的层面来看,几乎可以说用不太 ...
- 可怕!CPU暗藏了这些未公开的指令!
大家好,我是轩辕. 我们知道,我们平时编程写的高级语言,是经过编译器编译以后,变成了CPU可以执行的机器指令: 而CPU能支持的指令,都在它的指令集里面了. 很久以来,我都在思考一个问题: CPU有没 ...