通过 Microsoft Graph 在 Outlook 加载项中获取自定义 属性 集
Get custom property set in Outlook Add-In via Microsoft Graph
假设我在我的 Outlook 加载项(使用 Office.js)中有以下代码 运行 在约会的撰写表单上:
const item = Office.context.mailbox.item;
item.loadCustomPropertiesAsync((result) => {
const props = result.value;
const testProp = props.get("my_prop");
console.log("CUSTOM_PROP", testProp);
props.set("my_prop", "test_value");
props.saveAsync((saveResult) =>
console.log("SAVE_CUSTOM_PROP", saveResult));
});
我明白了,它实际上是在活动中保存的。
现在有一堆关于这些自定义属性的问题:
但这些是否与扩展属性有某种关联?
是否可以通过 Outlook REST API 或 Microsoft Graph 以某种方式访问这些属性?
我可以使用带有基于这些属性的筛选器的 Microsoft Graph 创建推送通知订阅吗? (我知道我可以基于扩展属性)
如果上述问题的答案是 "no",并且自定义属性只能通过创建它们的加载项访问,有没有办法创建扩展的 属性 到加载项中的事件,即使它没有保存?
解释我为什么要问 - 我正在创建一个加载项,它允许 "connect" 与我们的第 3 方系统进行约会,并使该约会与我们的对象保持同步。
所以当点击撰写表单上的按钮时,我:
- 保存约会并获取
event-id
、
- 将其存储在我们的系统中,以便从我们的系统同步到约会。
- 在我们的系统中使用 Microsoft Graph 为该约会添加扩展 属性
第一次使用加载项时,用户进行身份验证,我使用我们的扩展 属性 为事件创建推送通知订阅,以便从 Outlook 同步到我们的系统。
它在 OWA 上运行良好,但现在我们确实需要支持桌面,因此出现了两个主要问题:
Mac 的 Outlook:没有 saveAsync
方法,因此无法获取事件的 id
,我正在考虑添加一些自定义 属性,然后让推送通知通知我们的系统,创建了一个需要与系统同步的事件。
Outlook for PC:有saveAsync
方法,但回调是在本地保存约会时执行的,而不是在服务器上,所以我不知道具体什么时候事件已创建,我可以对该事件执行一些 Microsoft Graph 调用。
回答我的第一个问题,and/or欢迎任何关于我的用例的提示。
- 根据 MS-OXCEXT,有关加载项如何在 Outlook 中存储内容的互操作性文档,自定义属性作为 JSON 字典存储在 MAPI 扩展 属性(血淋淋的细节 link)。这意味着您应该能够通过 Graph 扩展属性访问它们,您只需要自己解析值。
- 应该使用 extended properties 和
"{type} {guid} Name {name}"
格式。
- 我不明白为什么不。
- 答案不是没有,但无论如何我都会回答你的后续问题:)。如果您使用加载项中的 REST API,当然可以做到这一点。
TL;DR;
是的,可以使用 REST APIs 读取由 Office.js
api loadCustomPropertiesAsync
设置的自定义属性
您需要创建一个类似于
的 REST 调用查询
string addinManifestId = "<your manifest guid here>";//lower cases
string prop = @"String {00020329-0000-0000-C000-000000000046} Name"+ string.Format(" cecp-{0}", addinManifestId );
var url = $"<apiEndpoint>/messages/<youritemid>?$expand=SingleValueExtendedProperties($filter=PropertyId eq '{propertyname}')";
更多信息
文档可在此处获得https://msdn.microsoft.com/en-us/library/hh968549(v=exchg.80).aspx
当我需要为我的加载项 Keluro 处理 "sent mail" 时,我遇到了类似的问题。
我使用 REST API 上的 Web 挂钩实现了与您的方法非常接近的东西。据我所知,这是处理已发送物品的唯一方法。
考虑对此进行投票
https://officespdev.uservoice.com/forums/224641-feature-requests-and-feedback/suggestions/10964871-add-itemsend-event-so-add-in-can-cancel-email
假设我在我的 Outlook 加载项(使用 Office.js)中有以下代码 运行 在约会的撰写表单上:
const item = Office.context.mailbox.item;
item.loadCustomPropertiesAsync((result) => {
const props = result.value;
const testProp = props.get("my_prop");
console.log("CUSTOM_PROP", testProp);
props.set("my_prop", "test_value");
props.saveAsync((saveResult) =>
console.log("SAVE_CUSTOM_PROP", saveResult));
});
我明白了,它实际上是在活动中保存的。
现在有一堆关于这些自定义属性的问题:
但这些是否与扩展属性有某种关联?
是否可以通过 Outlook REST API 或 Microsoft Graph 以某种方式访问这些属性?
我可以使用带有基于这些属性的筛选器的 Microsoft Graph 创建推送通知订阅吗? (我知道我可以基于扩展属性)
如果上述问题的答案是 "no",并且自定义属性只能通过创建它们的加载项访问,有没有办法创建扩展的 属性 到加载项中的事件,即使它没有保存?
解释我为什么要问 - 我正在创建一个加载项,它允许 "connect" 与我们的第 3 方系统进行约会,并使该约会与我们的对象保持同步。
所以当点击撰写表单上的按钮时,我:
- 保存约会并获取
event-id
、 - 将其存储在我们的系统中,以便从我们的系统同步到约会。
- 在我们的系统中使用 Microsoft Graph 为该约会添加扩展 属性
第一次使用加载项时,用户进行身份验证,我使用我们的扩展 属性 为事件创建推送通知订阅,以便从 Outlook 同步到我们的系统。
它在 OWA 上运行良好,但现在我们确实需要支持桌面,因此出现了两个主要问题:
Mac 的 Outlook:没有
saveAsync
方法,因此无法获取事件的id
,我正在考虑添加一些自定义 属性,然后让推送通知通知我们的系统,创建了一个需要与系统同步的事件。Outlook for PC:有
saveAsync
方法,但回调是在本地保存约会时执行的,而不是在服务器上,所以我不知道具体什么时候事件已创建,我可以对该事件执行一些 Microsoft Graph 调用。
回答我的第一个问题,and/or欢迎任何关于我的用例的提示。
- 根据 MS-OXCEXT,有关加载项如何在 Outlook 中存储内容的互操作性文档,自定义属性作为 JSON 字典存储在 MAPI 扩展 属性(血淋淋的细节 link)。这意味着您应该能够通过 Graph 扩展属性访问它们,您只需要自己解析值。
- 应该使用 extended properties 和
"{type} {guid} Name {name}"
格式。 - 我不明白为什么不。
- 答案不是没有,但无论如何我都会回答你的后续问题:)。如果您使用加载项中的 REST API,当然可以做到这一点。
TL;DR;
是的,可以使用 REST APIs 读取由 Office.js
api loadCustomPropertiesAsync
设置的自定义属性
您需要创建一个类似于
string addinManifestId = "<your manifest guid here>";//lower cases
string prop = @"String {00020329-0000-0000-C000-000000000046} Name"+ string.Format(" cecp-{0}", addinManifestId );
var url = $"<apiEndpoint>/messages/<youritemid>?$expand=SingleValueExtendedProperties($filter=PropertyId eq '{propertyname}')";
更多信息
文档可在此处获得https://msdn.microsoft.com/en-us/library/hh968549(v=exchg.80).aspx
当我需要为我的加载项 Keluro 处理 "sent mail" 时,我遇到了类似的问题。 我使用 REST API 上的 Web 挂钩实现了与您的方法非常接近的东西。据我所知,这是处理已发送物品的唯一方法。 考虑对此进行投票 https://officespdev.uservoice.com/forums/224641-feature-requests-and-feedback/suggestions/10964871-add-itemsend-event-so-add-in-can-cancel-email