在saveAsync回调中,Office.js约会仍被标记为已更改

时间:2018-08-07 13:33:46

标签: api typescript outlook-addin office-js

我使用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中执行代码,我看不到任何问题。

1 个答案:

答案 0 :(得分:0)

这是item.saveAsync在OWA中的一个已知问题。要重现此问题,需要满足以下条件:

  1. 必须是现有约会
  2. 约会必须有参与者

item.saveAsync()将返回正确的项目ID,但不会将撰写表单中的更改持久保存到服务并清除脏状态。

保存自定义属性应将属性保留在服务中。。如果您不依赖对撰写表单进行其他更改(例如,正文,主题,位置,参加者等的更改)的API。 )以与与会者进行现有约会,您可以在saveAsync上调用CustomProperties。假设您之后没有调用item.saveAsync(),这将持久保留对服务的自定义属性的更改,而不会显示对话框以放弃更改。