从Outlook加载项中读取ExtendedProperties

时间:2016-08-16 19:24:29

标签: javascript outlook-addin exchangewebservices extended-properties

我目前正使用EWS托管API(C#)在ExtendedProperties上设置自定义CalendarFolder

myCalendar.SetExtendedProperty(customExtendedProperty, true);

我绑定CalendarFolder时可以使用托管API加载这些设置:

var myCalendar = CalendarFolder.Bind(service, folderId, requestedPropertySet);

我接下来想要阅读这些ExtendedProperties,但是使用Office JavaScript库从Outlook加载项中读取。

从Outlook库的外观中,不会显示Office.context.item之外的任何方法来访问ExtendedProperties

库中是否有允许我访问它的方法?如果没有,我可以使用URL路径("http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/yourProp")中具有GUID的架构方法吗?

2 个答案:

答案 0 :(得分:3)

要在Addin中的文件夹上访问您自己的自定义属性,您需要使用makeEwsRequestAsync https://dev.outlook.com/reference/add-ins/Office.context.mailbox.html#makeEwsRequestAsync在Addin中执行GetFolder。要获得正确的SOAP消息,只需在您的EWS托管API代码中启用跟踪,该代码将输出您可以使用的https://msdn.microsoft.com/en-us/library/office/dn495632(v=exchg.150).aspx转置的SOAP。要注意的一件事是在应用程序中制作makeEwsRequestAsync的安全要求,例如ReadWriteMailbox http://dev.office.com/docs/add-ins/outlook/understanding-outlook-add-in-permissions

答案 1 :(得分:1)

截至目前(2018年7月),编写Outlook加载项时访问自定义ExtendedProperty的首选方法是使用ExtendedProperties REST API

有一些示例代码显示了如何将API与Office外接JavaScript库一起使用,可从Office Dev Center获得。

要使用API​​,您需要从当前的Outlook邮箱中获取身份验证令牌。可以使用Office.context.mailbox.getCallbackTokenAsync()方法和关键字参数{isRest: true}来完成。您还应该使用Office.context.mailbox.restUrl属性来获取API调用的正确基本URL。

有几种方法可以从JavaScript实际进行REST API调用,但是最简单的客户端方法是使用AJAX调用。在您的示例中,它看起来像:

const getMessageUrl = Office.context.mailbox.restUrl
  + "/v2.0/me/mailFolders/" + <folder id> + "?"
  + "$expand=singleValueExtendedProperties"
  + "($filter=PropertyId eq '<property id>')";

$.ajax({
  url: getMessageUrl,
  datatype: 'json',
  headers: {'Authorization': 'Bearer ' + <auth token>}
}).then(item => {
  // your code here
})

如果您的媒体资源具有GUID,则如下所示:

"String {00020329-0000-0000-C000-000000000046} Name yourProp"

如果您像我一样,并且试图访问GUID规则之前的属性,那么您的可能看起来像这样:

"String 0x007D"