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 ...
随机推荐
- PCB布线总的原则
转自张飞实战电子公众号 PCB布线总的原则 最短路径和减少干扰 PCB布线的总的流程大致如下: 1了解制造厂商的制造规范-线宽,线间距,过孔要求及层数要求: 2确定层数并定义各层的功能: 3设计布线规 ...
- web移动开发中如何实现图标点击态的蒙层效果
webapp开发中经常需要加入点击二态,即用户点击(tap)页面某个部分时该部分的样式进行相应的变化来相应用户的点击操作,这样能够带来更好的用户体验,今天我们要讨论的是如何给图标加上点击的二态效果. ...
- zx-editor 移动端(HTML5)富文本编辑器,可与原生App混合(hybrid)开发
ZxEditor 移动端HTML文档(富文本)编辑器,支持图文混排.引用.大标题.无序列表,字体颜色.加粗.斜体. 可用于独立web项目开发,也可以用于与原生App混合(hybrid)开发. 源码地址 ...
- prometheus之查询语言
PromQL(Prometheus Query Language)是 Prometheus 自己开发的表达式语言,语言表现力很丰富,内置函数也很多.使用它可以对时序数据进行筛选和聚合. 一.PromQ ...
- Linux 0.11源码阅读笔记-中断过程
Linux 0.11源码阅读笔记-中断过程 是什么中断 中断发生时,计算机会停止当前运行的程序,转而执行中断处理程序,然后再返回原被中断的程序继续运行.中断包括硬件中断和软件中断,硬中断是由外设自动产 ...
- java中自动插入一个默认的构造函数,这到底怎么回事?
1.2 当没有任何构造函数,java编译器,会插入一个默认的构造函数 见下面的例子: class Line { double x = 0.02; double y; } publ ...
- 解决vue-cli项目在运行时控制台出现 [WDS] Disconnected! 错误
在项目运行时 控制台输入 npm run dev 后浏览器出现该项目页面,但是出现了[WDS] Disconnected!错误 虽然有时并不影响,但是作为一名合格的程序员 我们还是尽量将其修复,以免将 ...
- nginx负载均衡的五种方式
文章目录 前言 :负载均衡是什么 一.方式1:轮询 二.方式2:权重 方式3:iphash 方式4:最小连接 方式5:fair 总结:根据这几种方式可以猜测处nginx的底层使用了计数器,从而可以将海 ...
- 『忘了再学』Shell基础 — 9、Bash中的特殊符号(一)
目录 1.双单引号 2.双引号 3.$符号 4.反引号 5.$()符号 6.#符号 7.\符号 1.双单引号 '':单引号.在单引号中所有的特殊符号,如$和"`"(反引号)都没有特 ...
- 1.5 万字 + 40 张图解 HTTP 常见面试题
作者:小林coding 图解计算机基础网站:https://xiaolincoding.com 大家好,我是小林,我最开始写的第一篇图解文章就是这篇: 那时候我也就不到 100 读者,如今这篇阅读都快 ...