如何在Outlook加载项代码中获取已取消的日历事件数据?
实现方案:Outlook加载项获取日历取消事件数据
可行性结论
该需求可直接通过Outlook加载项的官方事件API实现,无需额外hack操作。
核心触发事件
你需要监听Office.MailboxEnums.EventType.AppointmentDeleted事件,该事件会在用户删除/取消任意日历事件时主动触发,要求Outlook要求集版本 ≥ 1.11,支持Outlook网页版、365订阅版桌面客户端、Outlook 2021及以上版本。
注册事件的两种方式
1. 动态代码注册(运行时按需注册)
直接在加载项逻辑中调用注册方法即可,示例代码:
Office.context.mailbox.addHandlerAsync( Office.MailboxEnums.EventType.AppointmentDeleted, appointmentDeleteHandler, (asyncResult) => { if (asyncResult.status === Office.AsyncResultStatus.Failed) { // 处理注册失败逻辑 console.log("事件注册失败:" + asyncResult.error.message); } else { console.log("取消事件监听注册成功"); } } );
2. 清单静态注册(加载项启动自动生效)
在加载项的manifest.xml文件的ExtensionPoint节点下添加事件声明即可,适合需要全时段监听的场景。
事件回调中获取取消事件数据
注册完成后,取消事件触发时会自动执行你定义的回调函数,可直接获取事件基础数据,示例回调逻辑:
function appointmentDeleteHandler(eventArgs) { // 可直接获取的取消事件核心字段 const deletedAppointmentData = { itemId: eventArgs.itemId, // 取消事件的唯一ID,可用于后续查询完整数据 subject: eventArgs.subject, // 事件主题 startTime: eventArgs.start, // 原事件开始时间 endTime: eventArgs.end, // 原事件结束时间 organizer: eventArgs.organizer, // 事件组织者信息 operationTime: eventArgs.operationTime, // 取消操作的执行时间 operator: eventArgs.operationUser // 执行取消操作的用户信息 }; // 如需获取更多完整数据(如参会人列表、事件附件、自定义属性等),可通过itemId调用EWS请求或Graph API查询 console.log("获取到的取消事件数据:", deletedAppointmentData); // 事件处理完成后必须调用completed方法通知Outlook eventArgs.completed(); }
额外场景适配
如果你需要监听的是收到其他组织者发送的会议取消通知邮件的场景,可额外监听Office.MailboxEnums.EventType.MessageReceived事件,判断邮件的itemClass为IPM.Schedule.Meeting.Canceled时,即可提取对应取消会议的关联数据。
内容的提问来源于stack exchange,提问作者Tamilarasan Rajamanickam
相关产品推荐
相关产品推荐

