React/Redux应用中ews-javascript-api监听通讯录网络侧变更问题
关于ews-javascript-api联系人变更监听的问题解答
问题二:OnChange数组的函数添加写法是否正确?
语法上你的写法是没问题的,但这个回调的作用和你预期的完全不同。
在ews-javascript-api中,Item.OnChange数组里的回调函数,只会在你通过代码修改本地Item对象的属性时触发——比如你在代码里执行item.DisplayName = "新名称"这种操作,才会触发这个回调打印日志。它完全不负责监听Exchange服务器端(比如Outlook网页端修改)的联系人变更。
举个本地修改触发回调的示例:
// 假设你已经获取到目标contactItem contactItem.OnChange.push(function(data) { console.log(data); // 当你修改contactItem的属性时,这里会打印变更信息 }); // 本地修改属性,触发回调 contactItem.DisplayName = "Updated Contact Name";
问题一:当联系人从网络侧被修改时,能否在我的应用中触发对应函数?
默认情况下无法直接触发,但可以通过两种方式实现类似的实时感知效果:
1. 定时轮询检查变更
这是最简单的落地方案:定期调用FindItems方法拉取联系人文件夹内容,对比本地缓存的联系人数据,发现变更后执行你的处理函数。
优化建议:
- 使用
FindItems的SearchFilter配合LastModifiedTime,只拉取上次检查后修改过的联系人,减少无效请求 - 根据业务实时性需求设置合理的轮询间隔(比如5-15分钟)
2. 使用EWS推送通知(Push Notifications)
这是更高效的实时方案:向Exchange服务器订阅推送通知,当联系人文件夹有变更时,服务器会主动向你指定的公网端点发送通知,你再在端点内处理变更逻辑,触发应用内的函数。
大致实现步骤:
- 创建
PushSubscription,指定要监控的联系人文件夹ID,以及你应用的公网回调URL - 在你的回调端点中处理Exchange发送的通知请求,解析出变更的联系人ID
- 调用
BindToItems获取最新的联系人数据,再执行对应的业务逻辑
注意:推送通知要求你的应用有一个公网可访问的HTTPS端点,因为Exchange服务器需要能POST通知到这个地址。
内容的提问来源于stack exchange,提问作者brockoli
相关产品推荐
相关产品推荐

