企业自有假勤审批同步到钉钉
本文档介绍企业使用自有OA审批系统如何同步到钉钉的OA审批。
本文档以企业内部应用实现为例,第三方企业应用实现流程与本文档流程一致。
接入流程简介
本文介绍了创建一个企业内部应用,使用假勤审批提供的API,实现企业将自有假勤系统的审批单,同步到钉钉。
前提条件:完成创建应用的流程
步骤一:获取应用凭证信息,获取应用 Client ID 和 Client Secret。
步骤二:申请接口权限,申请考勤相关接口权限。
步骤三:获取应用访问凭证获取企业内部应用的access_token。调用接口时,通过accessToken鉴权调用者身份。
步骤四:调用考勤相关API:
该功能支持企业自研系统的加班、出差和请假信息与钉钉同步。
前提条件
完成创建应用的流程。
步骤一:获取应用凭证
选择目标应用,进入应用详情页,单击基础信息 > 凭证与基础信息。
获取应用 Client ID 和 Client Secret。
步骤二:添加接口权限
单击开发配置 > 权限管理,在权限搜索框中输入qyapi_attendance_group_manage和qyapi_attendance_group_read,并申请权限。
步骤三:获取应用访问凭证accessToken
服务端API差异详情参见旧版服务端API、新版服务端API的区别。以下接口均使用服务端API接口,SDK下载详情参见服务端SDK下载。
根据步骤一中 的 Client ID 和 Client Secret,获取应用访问凭证获取企业内部应用的access_token。
public void getAccessToken() throws ApiException {
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
OapiGettokenRequest req = new OapiGettokenRequest();
req.setAppkey("dingxxxxxxxxxhgn");
req.setAppsecret("9G_xxxxxxxxxxxxxxx1JDf0Qq3nexxxxxxxxGIO");
req.setHttpMethod("GET");
OapiGettokenResponse rsp = client.execute(req);
System.out.println(rsp.getBody());
}步骤四:调用考勤相关API
调用服务端API-预计算时长接口,实现根据考勤系统的排班情况,预计算员工加班、出差及请假的时长信息。
public void durationCalculate() throws ApiException { DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/attendance/approve/duration/calculate"); OapiAttendanceApproveDurationCalculateRequest req = new OapiAttendanceApproveDurationCalculateRequest(); req.setUserid("01472825524039877041"); req.setBizType(2L); req.setFromTime("2022-10-13 09:00"); req.setToTime("2022-10-13 18:00"); req.setDurationUnit("hour"); req.setCalculateModel(1L); OapiAttendanceApproveDurationCalculateResponse rsp = client.execute(req,"access_token"); System.out.println(rsp.getBody()); }在企业自有审批系统提交了假勤申请,审批通过后通过该接口通知钉钉考勤,调用服务端API-通知审批通过接口,实现钉钉考勤同步通过,保存自定义审批单ID
approve_id。说明本步骤不会在钉钉中产生OA审批单。
public void approveFinish() throws ApiException { DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/attendance/approve/finish"); OapiAttendanceApproveFinishRequest req = new OapiAttendanceApproveFinishRequest(); req.setUserid("01472825524039877041"); //本示例使用外出 req.setBizType(2L); req.setFromTime("2022-10-13 09:00"); req.setToTime("2022-10-13 19:00"); req.setDurationUnit("hour"); req.setCalculateModel(1L); req.setTagName("外出"); req.setApproveId("dingTalk"); req.setJumpUrl("https://xxx.xxx"); OapiAttendanceApproveFinishResponse rsp = client.execute(req, "access_token"); System.out.println(rsp.getBody()); }在企业自有审批系统提交了撤销假勤申请,根据自定义审批单ID
approve_id,调用服务端API-通知审批撤销接口,实现钉钉考勤同步撤销。public void approveCancel() throws ApiException { DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/topapi/attendance/approve/cancel"); OapiAttendanceApproveCancelRequest req = new OapiAttendanceApproveCancelRequest(); req.setUserid("01472825524039877041"); req.setApproveId("dingTalk"); OapiAttendanceApproveCancelResponse rsp = client.execute(req, "access_token"); System.out.println(rsp.getBody()); }