Exchange Web服务有一个方法GetUserConfiguration,该方法需要UserConfigurationName来确定为文件夹检索哪些设置。
有哪些可用的UserConfigurationNames(特别是DistinguishedFolderId"calendar",但当然可以使用更广泛的列表)。
在遥远的过去,我设法找到了4个,但我不知道我从哪里得到的,也不知道这是否是整个列表。它可能也取决于Exchange版本(这4个版本在2010年下工作)。
以下是我在SOAP调用示例中提出的四个:
<soap:Body>
<mes:GetUserConfiguration>
<mes:UserConfigurationName Name="CategoryList"> // Alternative 1
<mes:UserConfigurationName Name="Calendar"> // Alternative 2
<mes:UserConfigurationName Name="WorkHours"> // Alternative 3
<mes:UserConfigurationName Name="AvailabilityOptions"> // Alternative 4
<typ:DistinguishedFolderId Id="calendar"/>
</mes:UserConfigurationName>
<mes:UserConfigurationProperties>All</mes:UserConfigurationProperties>
</mes:GetUserConfiguration>
</soap:Body>
您需要使用Associated遍历选项(在2010+中可用)执行FindItem调用。这将查找与默认日历文件夹关联的所有用户配置对象(也称为文件夹关联项目)。您想要请求ItemClass,因为我相信它包含EWS用来访问用户配置对象的配置名称。根据创建用户配置对象的内容,您可能需要从ItemClass中解析出用户配置名称。
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types"
xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages">
<soap:Header>
<t:RequestServerVersion Version="Exchange2013" />
<t:MailboxCulture>en-US</t:MailboxCulture>
</soap:Header>
<soap:Body>
<m:FindItem Traversal="Associated">
<m:ItemShape>
<t:BaseShape>IdOnly</t:BaseShape>
<t:AdditionalProperties>
<t:FieldURI FieldURI="item:ItemClass"/>
</t:AdditionalProperties>
</m:ItemShape>
<m:IndexedPageItemView BasePoint="Beginning" MaxEntriesReturned="100" Offset="0"/>
<m:ParentFolderIds>
<t:DistinguishedFolderId Id="calendar"/>
</m:ParentFolderIds>
</m:FindItem>
</soap:Body>
</soap:Envelope>
您可以在以下响应中看到您所知道的用户配置对象(即CategoryList、WorkHours等)和ItemClass之间的关系:
<?xml version="1.0" encoding="utf-8"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<h:ServerVersionInfo MajorVersion="15" />
</s:Header>
<s:Body>
<m:FindItemResponse>
<m:ResponseMessages>
<m:FindItemResponseMessage ResponseClass="Success">
<m:ResponseCode>NoError</m:ResponseCode>
<m:RootFolder IndexedPagingOffset="9" TotalItemsInView="9" IncludesLastItemInRange="true">
<t:Items>
<t:Message>
<t:ItemId Id="AEz=" ChangeKey="CQ"/>
<t:ItemClass>IPM.Configuration.HomeTimeZone</t:ItemClass>
</t:Message>
<t:Message>
<t:ItemId Id="Az=" ChangeKey="CQ"/>
<t:ItemClass>IPM.Configuration.AvailabilityOptions</t:ItemClass>
</t:Message>
<t:Message>
<t:ItemId Id="AMz=" ChangeKey="CQ"/>
<t:ItemClass>IPC.MS.Outlook.AgingProperties</t:ItemClass>
</t:Message>
<t:CalendarItem>
<t:ItemId Id="ADEz=" ChangeKey="CQ"/>
<t:ItemClass>IPM.Appointment</t:ItemClass>
</t:CalendarItem>
<t:Message>
<t:ItemId Id="ADEz=" ChangeKey="CQ"/>
<t:ItemClass>IPM.Configuration.CategoryList</t:ItemClass>
</t:Message>
<t:Message>
<t:ItemId Id="ADEz=" ChangeKey="CQ"/>
<t:ItemClass>IPM.Configuration.WorkHours</t:ItemClass>
</t:Message>
<t:Message>
<t:ItemId Id="ADEz=" ChangeKey="CQ"/>
<t:ItemClass>IPM.Configuration.Calendar</t:ItemClass>
</t:Message>
<t:Message>
<t:ItemId Id="ADEz=" ChangeKey="CQ"/>
<t:ItemClass>IPM.Microsoft.FolderDesign.NamedView</t:ItemClass>
</t:Message>
</t:Items>
</m:RootFolder>
</m:FindItemResponseMessage>
</m:ResponseMessages>
</m:FindItemResponse>
</s:Body>
</s:Envelope>