我按照this question中提到的相同步骤,根据outlook加载项设置的自定义属性过滤推送通知事件。
以下是订阅推送通知时使用的资源链接。
https://outlook.office.com/api/v2.0/me/events/?$filter=SingleValueExtendedProperties%2FAny(ep%3A%20ep%2FPropertyId%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20cecp-7e248e5e-204e-4e2b-aa0f-788af20fc21c'%20and%20ep%2FValue%20ne%20null)
它正在过滤具有由加载项设置的自定义属性的日历项,而不管它是什么自定义属性。 通过查看此资源链接,我们可以说我们没有提到自定义属性名称。但是我的加载项为日历项设置了多个自定义属性。我想过滤所有具有特定自定义属性的日历项。例如,我的加载项根据业务登录将以下任何一个自定义属性设置为日历。
自定义属性1:
var item = Office.context.mailbox.item;
item.loadCustomPropertiesAsync((result) => {
const props = result.value;
props.set("my_prop_one", "test_value_one");
props.saveAsync((saveResult) => console.log("Successfull"));
});
自定义属性2:
var item = Office.context.mailbox.item;
item.loadCustomPropertiesAsync((result) => {
const props = result.value;
props.set("my_prop_two", "test_value_tw");
props.saveAsync((saveResult) => console.log("Successful"));
});
现在,我想过滤所有具有自定义属性my_prop_one
的日历项目。
编辑1:
正如@Jason Johnston在其中一条评论中所建议的那样,我使用MFCMapi交叉验证了属性名称及其GUID。属性名称和它的GUID值都是正确的。
然后我从MFCMapi收集数据并准备下面的网址来过滤具有自定义属性meetingsetby
且值为webex
的日历项目。
https://outlook.office.com/api/v2.0/Me/Events?$filter=SingleValueExtendedProperties%2FAny(ep%3A%20ep%2FPropertyId%20eq%20'String%20{00020329-0000-0000-C000-000000000046}%20Name%20meetingsetby'%20and%20ep%2FValue%20eq%20'webex')
如您所见,即使有一个包含自定义属性meetingsetby
和值webex
的日历项,响应也会显示空列表。
然后我使用outlook Rest API将SingleValueExtendedProperty
设置为日历项,如this post中所述。以下是样本请求数据,
SingleValueExtendedProperty
的MFCMapi数据
然后我从MFCMapi收集数据并准备下面的网址来过滤在上一步中设置singleValueExtendedProperty
的日历项目。
https://outlook.office.com/api/v2.0/Me/Events?$filter=SingleValueExtendedProperties%2FAny(ep%3A%20ep%2FPropertyId%20eq%20'String%20{6666AA44-4659-4830-9070-00047EC6AC6E}%20Name%20RestApiSingleValueExtendedProperty'%20and%20ep%2FValue%20eq%20'Set this property using REST API')
如您所见,我可以使用singleValueExtendedProperty
成功过滤日历项目。但我的要求是过滤器日历项目具有由我的Outlook Web加载项设置的特定自定义属性。
任何建议/答案都非常受欢迎。
答案 0 :(得分:1)
加载项设置的自定义属性(使用CustomProperties接口)不等同于普通的MAPI命名属性。基本上,附加API所做的是将所有"自定义属性",将它们序列化为JSON有效负载,然后将其保存在单个MAPI命名属性中,其名称为cecp-{some guid}
,以及属性设置GUID PS_PUBLIC_STRINGS {00020329-0000-0000-C000-000000000046}
。名称的{some-guid}
部分等于加载项的Id
。这都在MS-OXCEXT section 2.2.5中指定。
因此,最终结果是您不能对$filter
接口中设置的值使用CustomProperties
,因为没有SingleValueExtendedProperty
具有该名称和值。相反,有一个名为SingleValueExtendedProperty
的{{1}},其字符串值是您通过cecp-{some guid}
界面设置的所有自定义道具的JSON序列化。
那你怎么能做你想要的呢?好吧,回到原始网址,您可以通过
获取加载项设置了任何属性的所有邮件CustomProperties
使用您的加载项的GUID ID替换$filter=SingleValueExtendedProperties/Any
(ep: ep/PropertyId eq 'String {00020329-0000-0000-C000-000000000046}
Name cecp-7e248e5e-204e-4e2b-aa0f-788af20fc21c' and ep/Value ne null)
后的GUID。
但是您当然希望找到具有特定属性(cecp-
)设置为特定值(meetingsetby
)的属性。不幸的是,我们的API在过滤webex
时不支持子字符串搜索。因此,您需要做的是获取具有由加载项设置的任何属性的所有消息,然后执行您自己的过滤逻辑以找到您想要的那些。所以基本上你会把它们加载到内存中,然后自己检查一下这个属性的值,找到你想要的那个。
您可以使用SingleValueExtendedProperties
子句确保属性的值包含在响应中。像这样:
$expand