结合企业实际需求,对接钉钉考勤,得到考勤统计报表,对接人事管理系统,自动得到薪资报表。
- 启用智能统计报表流程
- 接口调用
- 是否启用智能统计报表
- 获取报表列定义
- 获取报表列值
- 获取报表假期数据
考勤智能统计报表,是考勤为了满足企业个性化的统计需求,提供的一套智能可编程的报表系统。企业可以通过简单勾选或者高级编程模式来定制企业的统计规则,非常便捷地提供便于计算薪酬结果的统计数据。本文介绍如何使用统计报表API,获取企业的统计报表数据。
启用智能统计报表流程
开发者登录钉钉管理后台,点击工作台-考勤打卡-进入,打开考勤打卡后台。
点击月度汇总,查看是否开启智能统计报表:
如果右上角是“切换新版”,那么是未启用智能报表状态。需要点击切换新版,即可启用智能统计报表。
如果右上角是“返回旧版”,那么无需进行其他操作,当前已启用新版智能统计报表。
接口调用
是否启用智能统计报表
判断企业是否开启了考勤智能报表,如果企业未启用智能报表,无法调用统计报表其他的接口。
请求方式:POST(HTTPS)
请求地址:https://oapi.dingtalk.com/topapi/attendance/isopensmartreport?access_token=ACCESS_TOKEN
参数说明:无需入参
SDK请求示例(JAVA):
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/attendance/isopensmartreport");
OapiAttendanceIsopensmartreportRequest req = new OapiAttendanceIsopensmartreportRequest();
OapiAttendanceIsopensmartreportResponse rsp = client.execute(req, access_token);
System.out.println(rsp.getBody());
返回结果:
{
"result": {
"smart_report": true
},
"errmsg": "ok",
"errcode": 0
}
| 参数 |
类型 |
示例值 |
说明 |
| errcode |
Number |
0 |
返回码。0表示成功,其他表示失败 |
| errmsg |
String |
ok |
对返回码的文本描述内容 |
| result |
|
|
|
| └smart_report |
boolen |
true |
true:开启,false:未开启 |
获取报表列定义
获取企业智能考勤报表中的列信息,通过获取列信息中的id值,可以根据列的id查询考勤智能报表中该列的统计数据,企业可以自主选择需要哪些列值来参与薪酬的计算。
注意:如果是获取假期相关字段信息,不返回id。如果希望获取假期相关信息,请调用本文-“获取报表假期数据”接口。
请求方式:POST(HTTPS)
请求地址:https://oapi.dingtalk.com/topapi/attendance/getattcolumns?access_token=ACCESS_TOKEN
参数说明:无需入参
SDK请求示例(JAVA):
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/attendance/getattcolumns");
OapiAttendanceGetattcolumnsRequest req = new OapiAttendanceGetattcolumnsRequest();
OapiAttendanceGetattcolumnsResponse rsp = client.execute(req, access_token);
System.out.println(rsp.getBody());
返回结果:
{
"errmsg": "ok",
"errcode": 0,
"result": {
"columns": [{
"id": 123,
"name": "工时"
}]
}
}
| 参数 |
类型 |
示例值 |
说明 |
| errcode |
Number |
0 |
返回码。0表示成功,其他表示失败 |
| errmsg |
String |
ok |
对返回码的文本描述内容 |
| result |
|
|
|
| └columns |
|
|
|
| └└id |
Number |
123 |
列id |
| └└name |
String |
工时 |
列名称 |
获取报表列值
获取钉钉智能考勤报表的列值数据,其中包含了一定时间段内报表某些列的所有数据,以及相关的列信息,企业可以基于该接口的返回值计算员工薪酬。
注意:不支持获取离职人员的考勤信息,离职人员的考勤数据可以在OA管理后台查询。
请求方式:POST(HTTPS)
请求地址:https://oapi.dingtalk.com/topapi/attendance/getcolumnval?access_token=ACCESS_TOKEN
参数说明:
| 参数 |
类型 |
必须 |
示例值 |
说明 |
| userid |
String |
是 |
zhangsan |
员工id |
| column_id_list |
String |
是 |
1,2,3 |
报表列id列表,多个用英文逗号分隔,最大长度20 |
| from_date | Date
|
是 |
2018-07-11 12:12:12 |
开始时间 |
| to_date | Date |
是 |
2018-07-12 12:12:12
|
结束时间,结束时间减去开始时间必须在31天以内 |
SDK请求示例(JAVA):
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/attendance/getcolumnval");
OapiAttendanceGetcolumnvalRequest req = new OapiAttendanceGetcolumnvalRequest();
req.setUserid("zhangsan");
req.setColumnIdList("1,2,3");
req.setFromDate(StringUtils.parseDateTime("2018-07-11 12:12:12"));
req.setToDate(StringUtils.parseDateTime("2018-07-12 12:12:12"));
OapiAttendanceGetcolumnvalResponse rsp = client.execute(req, access_token);
System.out.println(rsp.getBody());
返回结果:
{
"errmsg": "ok",
"errcode": 0,
"result": {
"column_vals": [{
"column_vals": [{
"date": "2019-07-11",
"value": "1.0"
}],
"column_vo": {
"id": 123
},
"fixed_value": "0"
}]
}
}
| 参数 |
类型 |
示例值 |
说明 |
| errcode |
Number |
0 |
返回码。0表示成功,其他表示失败 |
| errmsg |
String |
ok |
对返回码的文本描述内容 |
| result |
|
|
|
| └column_vals |
|
|
|
| └└column_vals |
|
|
|
| └└└date |
String |
2019-08-15 |
日期 |
| └└└value |
String |
1.0 |
每天的值 |
| └└column_vo |
|
|
|
| └└└id |
Number |
123 |
报表列id |
| └└fixed_value | String |
2.0 |
固定值,某些报表列是固定列值的,那么仅会在这个字段返回,不会在column_vals中返回 |
获取报表假期数据
根据假期名称和用户id获取钉钉智能考勤报表的假期数据,其中包含了一定时间段内报表假期列的所有数据,由于假期列是一个动态列,因此需要根据假期名称获取数据。
请求方式:POST(HTTPS)
请求地址:https://oapi.dingtalk.com/topapi/attendance/getleavetimebynames?access_token=ACCESS_TOKEN
参数说明:
| 参数 |
类型 |
必须 |
示例值 |
说明 |
| userid |
String |
是 |
zhangsan |
员工id |
| leave_names |
String | 是 |
年假 |
假期名称,多个用英文逗号分隔,最大长度20 |
| from_date | Date
|
是 |
2018-07-11 12:12:12 |
开始时间 |
| to_date | Date |
是 |
2018-07-12 12:12:12 |
结束时间,结束时间减去开始时间必须在31天以内 |
SDK请求示例(JAVA)
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/attendance/getleavetimebynames");
OapiAttendanceGetleavetimebynamesRequest req = new OapiAttendanceGetleavetimebynamesRequest();
req.setUserid("zhangsan");
req.setLeaveNames("年假");
req.setFromDate(StringUtils.parseDateTime("2018-07-11 12:12:12"));
req.setToDate(StringUtils.parseDateTime("2018-07-12 12:12:12"));
OapiAttendanceGetleavetimebynamesResponse rsp = client.execute(req, access_token);
System.out.println(rsp.getBody());
返回结果
{
"result": {
"columns": [{
"columnvo": {
"name": "年假",
"id": 1
},
"columnvals": [{
"value": "1.0",
"date": "2018-08-09"
}]
}]
},
"errcode": 0,
"errmsg": "ok"
}
| 参数 |
类型 |
示例值 |
说明 |
| errcode |
Number |
0 |
返回码。0表示成功,其他表示失败 |
| errmsg |
String |
ok |
对返回码的文本描述内容 |
| result |
|
|
|
| └columns |
|
|
|
| └└columnvals |
|
|
|
| └└└date |
String |
2018-08-09 |
日期 |
| └└└value |
String |
1.0 |
每天的值 |
| └└columnvo |
|
|
|
| └└└id |
Number |
123 |
报表列id |
| └└└name |
String |
年假 |
假期类型 |