跳转到主要内容
本文档介绍了如何调用日程接口创建日程等流程。首先创建一个企业内部应用,再使用日程提供的API,实现创建日程、修改日程、查询单个日程详情、删除日程流程。

预期效果

创建日程后,效果如下图所示: 预期效果

接入流程简介

本文档展示了创建一个企业内部应用,再使用日程提供的API,实现创建日程、修改日程、查询单个日程详情、删除日程流程。 前提条件:完成应用创建与配置的流程。 步骤一:获取应用凭证信息,获取应用 Client ID 和 Client Secret。 步骤二:申请接口权限,申请日程相关接口的权限。 步骤三:获取应用访问凭证获取企业内部应用的accessToken,调用接口时,通过accessToken鉴权调用者身份。 步骤四:调用服务端日程相关API:
  1. 调用服务端API-创建日程接口,进行创建日程。获取日程id
  2. 根据日程id,调用服务端API-修改日程接口,进行日程信息修改。
  3. 根据日程id,调用服务端API-查询单个日程详情接口,获取日程详情信息。
  4. 根据日程id,调用服务端API-删除日程接口,删除创建的日程。

前提条件

完成应用创建与配置的流程。

步骤一:获取应用凭证

  1. 选择目标应用,进入应用详情页,单击基础信息 > 凭证与基础信息
  2. 获取应用 Client ID 和 Client Secret。

步骤二:添加接口权限

单击开发配置 > 权限管理,在权限搜索框中分别输入Calendar.Event.WriteCalendar.Event.Read,并申请权限。

步骤三:获取应用访问凭证accessToken

服务端API差异详情参见旧版API VS 新版API。以下接口均使用服务端API接口,SDK下载详情参见服务端SDK下载。
根据步骤一中 的 Client ID 和 Client Secret,获取应用访问凭证获取企业内部应用的access_token。
 public void getAccessToken() throws Exception {
        Config config = new Config();
        config.protocol = "https";
        config.regionId = "central";
        com.aliyun.dingtalkoauth2_1_0.Client client = new com.aliyun.dingtalkoauth2_1_0.Client(config);
        GetAccessTokenRequest accessTokenRequest = new GetAccessTokenRequest()
                .setAppKey("ding*********hgn")
                .setAppSecret("9G_O**********xamBkhgGIO");
        GetAccessTokenResponse accessToken = client.getAccessToken(accessTokenRequest);
        System.out.println(JSON.toJSONString(accessToken.getBody()));
    }

步骤四:调用服务端日程相关API

  1. 调用服务端API-创建日程接口,进行创建日程。获取日程id
     public void createCalendar() throws Exception {
            Config config = new Config();
            config.protocol = "https";
            config.regionId = "central";
            com.aliyun.dingtalkcalendar_1_0.Client client = new com.aliyun.dingtalkcalendar_1_0.Client(config);
            CreateEventHeaders createEventHeaders = new CreateEventHeaders();
            createEventHeaders.xAcsDingtalkAccessToken = "accessToken";
            java.util.Map<String, String> extra = TeaConverter.buildMap(
                    new TeaPair("noChatNotification", "false"),
                    new TeaPair("noPushNotification","false")
            );
            CreateEventRequest.CreateEventRequestOnlineMeetingInfo onlineMeetingInfo = new CreateEventRequest.CreateEventRequestOnlineMeetingInfo()
                    .setType("dingtalk");
            CreateEventRequest.CreateEventRequestReminders reminders0 = new CreateEventRequest.CreateEventRequestReminders()
                    .setMethod("dingtalk")
                    .setMinutes(15);
            CreateEventRequest.CreateEventRequestLocation location = new CreateEventRequest.CreateEventRequestLocation()
                    .setDisplayName("********A座9F");
            CreateEventRequest.CreateEventRequestAttendees attendees0 = new CreateEventRequest.CreateEventRequestAttendees()
                    .setId("日程参与人unionId")
                    .setIsOptional(false);
            CreateEventRequest.CreateEventRequestAttendees attendees1 = new CreateEventRequest.CreateEventRequestAttendees()
                    .setId("日程参与人unionId")
                    .setIsOptional(false);
            CreateEventRequest.CreateEventRequestAttendees attendees2 = new CreateEventRequest.CreateEventRequestAttendees()
                    .setId("日程参与人unionId")
                    .setIsOptional(false);
            CreateEventRequest.CreateEventRequestRecurrenceRange recurrenceRange = new CreateEventRequest.CreateEventRequestRecurrenceRange()
                    .setType("numbered")
                    .setNumberOfOccurrences(2);
            CreateEventRequest.CreateEventRequestRecurrencePattern recurrencePattern = new CreateEventRequest.CreateEventRequestRecurrencePattern()
                    .setType("daily")
                    .setInterval(1);
            CreateEventRequest.CreateEventRequestRecurrence recurrence = new CreateEventRequest.CreateEventRequestRecurrence()
                    .setPattern(recurrencePattern)
                    .setRange(recurrenceRange);
            CreateEventRequest.CreateEventRequestEnd end = new CreateEventRequest.CreateEventRequestEnd()
                    .setDate("2022-09-03");
    //                .setDateTime("2021-09-20T10:15:30+08:00")
    //                .setTimeZone("Asia/Shanghai");
            CreateEventRequest.CreateEventRequestStart start = new CreateEventRequest.CreateEventRequestStart()
                    .setDate("2022-09-02");
    //                .setDateTime("2021-09-20T10:15:30+08:00")
    //                .setTimeZone("Asia/Shanghai");
            CreateEventRequest createEventRequest = new CreateEventRequest()
                    .setSummary("0902创建日程")
                    .setDescription("这是0902创建的一个日程")
                    .setStart(start)
                    .setEnd(end)
                    .setIsAllDay(true)
                    .setRecurrence(recurrence)
                    .setAttendees(java.util.Arrays.asList(
                            attendees0,
                            attendees1,
                            attendees2
                    ))
                    .setLocation(location)
                    .setReminders(java.util.Arrays.asList(
                            reminders0
                    ))
                    .setOnlineMeetingInfo(onlineMeetingInfo)
                    .setExtra(extra);
            try {
                CreateEventResponse eventWithOptions = client.createEventWithOptions("日程组织人unionId", "primary", createEventRequest, createEventHeaders, new RuntimeOptions());
                System.out.println(JSON.toJSONString(eventWithOptions.getBody()));
            } catch (TeaException err) {
                if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                    // err 中含有 code 和 message 属性,可帮助开发定位问题
                    System.out.println(err.code);
                    System.out.println(err.message);
                }
            } catch (Exception _err) {
                TeaException err = new TeaException(_err.getMessage(), _err);
                if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                    // err 中含有 code 和 message 属性,可帮助开发定位问题
                    System.out.println(err.code);
                    System.out.println(err.message);
                }
            }
        }
    
  2. 根据日程id,调用服务端API-修改日程接口,进行日程信息修改。
    public void  updateCalendar() throws Exception {
            Config config = new Config();
            config.protocol = "https";
            config.regionId = "central";
            com.aliyun.dingtalkcalendar_1_0.Client client = new com.aliyun.dingtalkcalendar_1_0.Client(config);
            PatchEventHeaders patchEventHeaders = new PatchEventHeaders();
            patchEventHeaders.xAcsDingtalkAccessToken = "accessToken";
            PatchEventRequest.PatchEventRequestReminders reminders0 = new PatchEventRequest.PatchEventRequestReminders()
                    .setMethod("dingtalk")
                    .setMinutes(15);
            java.util.Map<String, String> extra = TeaConverter.buildMap(
                    new TeaPair("noChatNotification", "false"),
                    new TeaPair("noPushNotification","false")
            );
            PatchEventRequest.PatchEventRequestLocation location = new PatchEventRequest.PatchEventRequestLocation()
                    .setDisplayName("room 1-2-3");
            PatchEventRequest.PatchEventRequestAttendees attendees0 = new PatchEventRequest.PatchEventRequestAttendees()
                    .setId("日程参与人unionId")
                    .setIsOptional(false);
            PatchEventRequest.PatchEventRequestRecurrenceRange recurrenceRange = new PatchEventRequest.PatchEventRequestRecurrenceRange()
                    .setType("numbered")
                    .setNumberOfOccurrences(1);
            PatchEventRequest.PatchEventRequestRecurrencePattern recurrencePattern = new PatchEventRequest.PatchEventRequestRecurrencePattern()
                    .setType("daily")
                    .setInterval(1);
            PatchEventRequest.PatchEventRequestRecurrence recurrence = new PatchEventRequest.PatchEventRequestRecurrence()
                    .setPattern(recurrencePattern)
                    .setRange(recurrenceRange);
            PatchEventRequest.PatchEventRequestEnd end = new PatchEventRequest.PatchEventRequestEnd()
                    .setDate("2022-09-02");
            PatchEventRequest.PatchEventRequestStart start = new PatchEventRequest.PatchEventRequestStart()
                    .setDate("2022-09-02");
            PatchEventRequest patchEventRequest = new PatchEventRequest()
                    .setSummary("0902修改日程内容")
                    .setId("日程id")
                    .setDescription("这是一个0902修改的日程")
                    .setStart(start)
                    .setEnd(end)
                    .setIsAllDay(true)
                    .setRecurrence(recurrence)
                    .setAttendees(java.util.Arrays.asList(
                            attendees0
                    ))
                    .setLocation(location)
                    .setExtra(extra)
                    .setReminders(java.util.Arrays.asList(
                            reminders0
                    ));
            try {
                PatchEventResponse patchEventResponse = client.patchEventWithOptions("日程组织者unionId", "primary", "日程id", patchEventRequest, patchEventHeaders, new RuntimeOptions());
                System.out.println(JSON.toJSONString(patchEventResponse.getBody()));
            } catch (TeaException err) {
                if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                    // err 中含有 code 和 message 属性,可帮助开发定位问题
                    System.out.println(err.code);
                    System.out.println(err.message);
                }
            } catch (Exception _err) {
                TeaException err = new TeaException(_err.getMessage(), _err);
                if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                    // err 中含有 code 和 message 属性,可帮助开发定位问题
                    System.out.println(err.code);
                    System.out.println(err.message);
                }
            }
        }
    
  3. 根据日程id,调用服务端API-查询单个日程详情接口,获取日程详情信息。
     public void calendarInfo() throws Exception {
            Config config = new Config();
            config.protocol = "https";
            config.regionId = "central";
            com.aliyun.dingtalkcalendar_1_0.Client client = new com.aliyun.dingtalkcalendar_1_0.Client(config);
            GetEventHeaders getEventHeaders = new GetEventHeaders();
            getEventHeaders.xAcsDingtalkAccessToken = "accessToken";
            GetEventRequest getEventRequest = new GetEventRequest()
                    .setMaxAttendees(100L);
            try {
                GetEventResponse eventWithOptions = client.getEventWithOptions("日程组织者unionId", "primary", "日程id", getEventRequest, getEventHeaders, new RuntimeOptions());
                System.out.println(JSON.toJSONString(eventWithOptions.getBody()));
            } catch (TeaException err) {
                if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                    // err 中含有 code 和 message 属性,可帮助开发定位问题
                    System.out.println(err.code);
                    System.out.println(err.message);
                }
            } catch (Exception _err) {
                TeaException err = new TeaException(_err.getMessage(), _err);
                if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                    // err 中含有 code 和 message 属性,可帮助开发定位问题
                    System.out.println(err.code);
                    System.out.println(err.message);
                }
            }
        }
    
  4. 根据日程id,调用服务端API-删除日程接口,删除创建的日程。
    public void  deleteCalendar() throws Exception {
            Config config = new Config();
            config.protocol = "https";
            config.regionId = "central";
            com.aliyun.dingtalkcalendar_1_0.Client client = new com.aliyun.dingtalkcalendar_1_0.Client(config);
            DeleteEventHeaders deleteEventHeaders = new DeleteEventHeaders();
            deleteEventHeaders.xAcsDingtalkAccessToken = "accessToken";
            try {
                client.deleteEventWithOptions("日程组织者unionId", "primary", "日程id", deleteEventHeaders, new RuntimeOptions());
            } catch (TeaException err) {
                if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                    // err 中含有 code 和 message 属性,可帮助开发定位问题
                    System.out.println(err.code);
                    System.out.println(err.message);
                }
            } catch (Exception _err) {
                TeaException err = new TeaException(_err.getMessage(), _err);
                if (!com.aliyun.teautil.Common.empty(err.code) && !com.aliyun.teautil.Common.empty(err.message)) {
                    // err 中含有 code 和 message 属性,可帮助开发定位问题
                    System.out.println(err.code);
                    System.out.println(err.message);
                }
            }
        }
    
支持以下2种删除场景:
  • 当组织者删除日程时(Path参数中的userId参数使用组织者uninoId),所有参与者会收到日程取消通知,同时日程将从所有参与者的日历中删除。
  • 当参与者删除日程时(Path参数中的userId参数使用参与者uninoId),仅将日程从自己的日历中删除,其他日程参与者不受影响。