如何让Microsoft Graph API返回事件的所有singleValueExtendedProperties?
解决Microsoft Graph API获取事件singleValueExtendedProperties的问题
核心原因
Graph API不会默认返回事件的扩展属性——不管有没有筛选器,你都需要显式指定要获取的singleValueExtendedProperties的匹配规则,否则响应里不会包含这些属性。
具体解决方案
1. 获取所有事件的所有singleValueExtendedProperties
如果要获取所有事件及其所有单值扩展属性,在expand参数中添加匹配所有属性的筛选条件即可:
const events = await client.api(`/users/${sharedMailbox}/calendars/${calendarId}/events`) .select('id,subject,body') .expand('singleValueExtendedProperties($filter=id eq \'*\')') .get();
这里$filter=id eq '*'表示匹配所有单值扩展属性,配合expand就能让每个事件的所有扩展属性出现在响应里。
2. 按特定扩展属性筛选事件并返回所有扩展属性
如果需要根据某个特定扩展属性筛选事件,同时返回该事件的所有扩展属性,需要把筛选逻辑拆到API的全局$filter和expand的子筛选里:
// 替换成你要筛选的目标扩展属性ID和对应值 const targetPropertyId = "String {00000000-0000-0000-0000-000000000000} Name MyProperty"; const targetValue = "NeedThisValue"; const events = await client.api(`/users/${sharedMailbox}/calendars/${calendarId}/events`) .select('id,subject,body') .filter(`singleValueExtendedProperties/any(ep: ep/id eq '${targetPropertyId}' and ep/value eq '${targetValue}')`) .expand('singleValueExtendedProperties($filter=id eq \'*\')') .get();
关键注意点
- 扩展属性的ID格式必须严格匹配创建时的定义:
{数据类型} {GUID} Name {属性名},比如字符串类型的属性ID格式为String {guid} Name MyProperty,查询时的ID要和创建时完全一致。 - 如果只需要特定几个扩展属性,建议把
$filter=id eq '*'换成具体的ID列表(比如$filter=id eq 'String {guid} Name Prop1' or id eq 'String {guid} Name Prop2'),能提升请求性能。
内容的提问来源于stack exchange,提问作者Kyle T
相关产品推荐
相关产品推荐

