我使用Office javascript API构建Outlook加载项。我有一些保存约会然后关闭约会窗口的代码有问题。我希望通过API保存约会后没有未保存的更改,但是运行代码后我仍然会看到“放弃更改”确认对话框。仅在编辑现有约会以及在保存约会之前将自定义属性添加到约会时,才会出现该问题。
这是我(打字稿)代码的重要部分:
private saveAppointmentAndSetProperty(appointment: any): Observable<any> {
const subject = new Subject<any>();
Office.context.mailbox.item.loadCustomPropertiesAsync(
result => {
if (this.isErrorResult(result)) {
subject.error(result.error.message);
} else {
const properties = result.value;
properties.set('MY_PROPERTY', true);
this.saveCustomProperties(properties, subject,
() => this.saveAppointment(appointment, subject));
}
}
);
return subject;
}
private saveCustomProperties(properties: any, subject: Subject<any>, callback: () => void): void {
properties.saveAsync(result => {
if (this.isErrorResult(result)) {
subject.error(result.error.message);
} else {
callback();
}
});
}
private saveAppointment(appointment: any, subject: Subject<any>): void {
appointment.saveAsync((asyncResult) => {
if (this.isErrorResult(asyncResult)) {
subject.error(asyncResult.error.message);
} else {
appointment.close();
subject.next(asyncResult.value);
subject.complete();
}
});
}
saveAppointmentAndSetProperty()是代码的条目。如果我改为在saveAppointment中执行代码,我看不到任何问题。
答案 0 :(得分:0)
这是item.saveAsync
在OWA中的一个已知问题。要重现此问题,需要满足以下条件:
item.saveAsync()
将返回正确的项目ID,但不会将撰写表单中的更改持久保存到服务并清除脏状态。
保存自定义属性应将属性保留在服务中。。如果您不依赖对撰写表单进行其他更改(例如,正文,主题,位置,参加者等的更改)的API。 )以与与会者进行现有约会,您可以在saveAsync
上调用CustomProperties
。假设您之后没有调用item.saveAsync()
,这将持久保留对服务的自定义属性的更改,而不会显示对话框以放弃更改。