Microsoft graph api Outlook Rest API推送通知:根据Outlook加载项设置的特定自定义属性筛选通知

Microsoft graph api Outlook Rest API推送通知:根据Outlook加载项设置的特定自定义属性筛选通知,microsoft-graph-api,outlook-restapi,Microsoft Graph Api,Outlook Restapi,我按照中提到的相同步骤,根据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-7e248

我按照中提到的相同步骤,根据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\u prop\u one

编辑1:


正如@Jason Johnston在其中一条评论中所建议的,我使用MFCMapi交叉验证了属性名及其GUID。属性名及其GUID值都正确

自定义属性的MFCMapi数据
meetingsetby

然后我从MFCMapi收集数据,并准备下面的url来过滤具有自定义属性
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')
下面是当我使用上面的url进行get调用时,
postman
的响应。

正如您所看到的,即使有一个日历项具有自定义属性
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')
然后我使用outlook Rest API将
SingleValueExtendedProperty
设置为日历项,如中所述。下面是示例请求数据,

SingleValueExtendedProperty的MFCMapi数据

然后,我从MFCMapi收集数据,并准备下面的url来过滤在上述步骤中设置了
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')
下面是当我使用上面的url进行get调用时,
postman
的响应。

如您所见,我可以使用
singleValueExtendedProperty
成功筛选日历项。但我的要求是筛选由outlook web加载项设置了特定自定义属性的日历项


欢迎提供任何建议/答案。

由外接程序(使用接口)设置的自定义属性与普通MAPI命名属性不等效。基本上,外接程序API所做的是获取所有“自定义属性”,将它们序列化为JSON负载,然后将其保存在单个MAPI命名的属性中,该属性的名称为
cecp-{some guid}
,属性集guid
PS_PUBLIC_STRINGS{00020329-0000-C000-0000000000 46}
。名称的
{some guid}
部分等于外接程序的
Id
。这都是在中指定的

因此,这里的最终结果是,您不能对在
CustomProperties
界面中设置的值使用
$filter
,因为没有具有该名称和值的
SingleValueExtendedProperty
。相反,有一个名为
cecp-{some guid}
SingleValueExtendedProperty
,字符串值是通过
CustomProperties
接口设置的所有自定义道具的JSON序列化

那你怎么能做你想做的呢?好的,回到您的原始URL,您可以通过执行以下操作来获取具有外接程序设置的任何属性的所有消息

$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)
cecp-
后面的GUID替换为外接程序的GUID ID

但是,您当然只想找到那些将特定属性(
meetingsetby
)设置为特定值(
webex
)的对象。不幸的是,我们的API在过滤
SingleValueExtendedProperties
时不支持子字符串搜索。因此,您需要做的是获取具有外接程序设置的任何属性的所有消息,然后执行您自己的筛选逻辑以找到您想要的消息。所以基本上你会把它们加载到内存中,然后自己检查属性的值,找到你想要的

您可以使用
$expand
子句确保响应中包含属性值。大概是这样的:

?$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)
  &$expand=SingleValueExtendedProperties($filter=PropertyId eq 'String
  {00020329-0000-0000-C000-000000000046} Name cecp-7e248e5e-204e-4e2b-aa0f-788af20fc21c')

谢谢你的回答。我试过上面的过滤器。之后,我根本没有收到推送通知。下面是新的过滤器
https://outlook.office.com/api/v2.0/Me/Events?$filter=SingleValueExtendedProperties%2FAny(ep%3A%20ep%2PropertyId%20eq%20'String%20{00020329-0000-0000-C000-0000000000 46}%20Name%20my\u属性一“%20和%20ep%2FValue%20ne%20null)
。当我向上面的url发出get请求时,我收到的是空数组,即使有多个日历项具有
my\u prop\u one
自定义属性。GUID可能是错误的。我本周在Ignite,无法运行测试,但您应该能够使用MFCMapi找到属性并确定GUID。我使用MFCMapi交叉验证了属性名称及其GUID。属性名和它的GUID值都是正确的。@Johnston我用我的观察结果更新了这个问题。确定。我忘记了外接程序自定义属性不仅仅是常规自定义属性,所以我正在更新我的答案。