我有一个应用程序可以在Outlook和我的应用程序之间同步约会。同步代码使用Redemption来更新Outlook中的约会。
当在Outlook中添加约会时,我的代码捕获项目添加的事件,在我的应用程序中生成一个等效的约会,并将我的约会ID作为Outlook约会的用户属性添加,然后保存它。
我遇到的奇怪问题是:
- 点击月中的某一天查看
- 文本框显示在日期块中,输入主题,然后按Enter
- 双击新约会立即打开
- 做一些修改,比如设置提醒
- 点击保存键
此时,Outlook将显示一个消息框,说"该项目无法保存,因为它被另一个用户或在另一个窗口更改了。"
如果我启用了约会同步插件,我发现这种情况经常发生,但如果我禁用它,就不会发生。
它几乎看起来像Outlook检测到我的代码通过Redemption保存用户属性的变化,并不喜欢它。
这是因为Redemption直接访问MAPI表以保存数据,而当我打开它太快时,Outlook仍然缓存约会COM对象吗?所以我打开的预约在我想再次保存的时候已经"过期"了?
我测试的Outlook版本是Outlook 2016。
如果发生以下情况,则返回此错误:
- 您的代码(或Outlook)打开项
- Redemption打开物品
- 兑换修改物品
- Redemption保存
- Outlook(或您的代码)修改并保存Outlook项目
你可以确保Outlook不打开#1中的项目,或者(如果它已经打开)你可以在Outlook项目上使用RDOSession打开它。