如何查找Outlook共享日历中约会条目的创建人,支持编程实现?
Outlook共享日历获取约会实际创建人解决方案
方案1:通过AppointmentItem.PropertyAccessor读取扩展MAPI属性
Outlook界面显示的创建人信息存储在未直接暴露的MAPI命名属性中,无需调用额外接口,VBA/Office脚本可直接读取:
- 实际创建人显示名称对应属性标识:
http://schemas.microsoft.com/mapi/proptag/0x3FF8001F - 实际创建人邮箱地址对应属性标识:
http://schemas.microsoft.com/mapi/proptag/0x3FFF001F - 最后修改人显示名称对应属性标识:
http://schemas.microsoft.com/mapi/proptag/0x3FFA001F
示例VBA代码:
Sub GetAppointmentCreator(appt As Outlook.AppointmentItem) Dim pa As Outlook.PropertyAccessor Set pa = appt.PropertyAccessor ' 读取创建人名称 Dim creatorName As String creatorName = pa.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3FF8001F") Debug.Print "实际创建人:" & creatorName End Sub
如果约会未被修改,读取到的创建人信息和界面右下角显示的内容完全一致,不受共享日历所有者的Organizer字段干扰。
方案2:Exchange/Office 365环境调用Graph API
如果使用的是云托管的Exchange Online邮箱,直接调用日历接口获取createdBy字段,返回结果包含实际创建用户的ID、名称、邮箱信息,兼容性更强,无需依赖本地Outlook客户端环境。
方案3:主动写入自定义属性(高可靠性场景)
如果需要避免后续MAPI属性规则变更导致读不到数据,可以在约会新建事件触发时,主动给AppointmentItem添加自定义用户属性,写入当前操作人的信息,后续校验时直接读取自定义属性即可,自定义属性会随约会同步到所有共享日历成员的客户端。
校验逻辑补充
你提到的约会未被他人修改的场景,可以对比读取到的创建人和最后修改人属性,如果二者一致即可确认无人修改。
内容的提问来源于stack exchange,提问作者Xiangrui Li
相关产品推荐
相关产品推荐

