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 ...
随机推荐
- c++中的printf、和cout和cin后面跟指针的问题
printf里面打印指针的问题 而在c语言中,使用printf只需要使用不同的格式就可以区分打印出是字符串还是指针变量的值: cout和cin后面跟指针的问题 cout<<mm 和cin& ...
- 无人驾驶—高精地图和V2X
高精地图将厘米级的静态信息传传递给无人车V2X将路况上的动态信息传递给无人车 高精地图的作用 高精地图与传统地图的对比 高精地图与定位的关系 上图左侧是感知到的区域,右侧是高精地图,之后进行拼接获得车 ...
- Day 19: EmberJS 入门指南
编者注:我们发现了有趣的系列文章<30天学习30种新技术>,正在翻译,一天一篇更新,年终礼包.下面是第19天的内容. 到目前为止,我们这一系列文章涉及了Bower.AngularJS.Gr ...
- 前端基础问题整理-HTML相关
DOCTYPE的作用以及常见的DOCTYPE类型 <!DOCTYPE>声明位于文档中的最前面的位置,处于 <html> 标签之前,用来告知浏览器页面目前的文件是用哪种版本的HT ...
- ubantu系统之 虚拟机不识别usb接口
1. 下载和 virtualbox 同一版本的 Orcale VM VirtualBox Extension Pack 并在ubantu上安装:2. 启动虚拟机,选中菜单栏中"设置" ...
- px,rem,em 通过媒体查询统一的代码
@media only screen and (max-width: 1080px), only screen and (max-device-width:1080px) { html,body { ...
- linux(Ubuntu)安装python
Linux下安装python 提前安装一个依赖环境 (1)ubuntu/Debian: sudo apt-get install -y gcc make cmake build-essential l ...
- python---概述
python的主要应用领域 云计算:云计算的最火的语言,典型应用OpenStack. web开发:众多优秀的web框架,典型地有Django,众多大型网站也是python开发,比如YouTube.豆瓣 ...
- LC-203
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 . 示例 1: 输入:head = [1,2,6,3,4,5, ...
- 1.5 万字 + 40 张图解 HTTP 常见面试题
作者:小林coding 图解计算机基础网站:https://xiaolincoding.com 大家好,我是小林,我最开始写的第一篇图解文章就是这篇: 那时候我也就不到 100 读者,如今这篇阅读都快 ...