Exchange EWS - 如何在特定日期从主事件中检索事件?

时间:2013-01-02 13:05:01

标签: exchangewebservices exchange-server-2007

我想从特定日期的定期主日历事件中检索事件(ItemID)(我有发生日期和重复主事件数据)。

我尝试使用像这样的限制的FindItem

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:mes="http://schemas.microsoft.com/exchange/services/2006/messages">
   <soapenv:Header>
      <typ:RequestServerVersion Version="Exchange2007_SP1"/>
   </soapenv:Header>
   <soapenv:Body>
      <mes:FindItem Traversal="Shallow">
         <mes:ItemShape>
            <typ:BaseShape>AllProperties</typ:BaseShape>
         </mes:ItemShape>
         <mes:Restriction>
            <typ:IsEqualTo>
               <typ:FieldURI FieldURI="item:RecurringMasterItemId"/>
               <typ:FieldURIOrConstant>
               <typ:Constant Value="AQMkAD[snip]AAAAA=="/>
               </typ:FieldURIOrConstant>
            </typ:IsEqualTo>
         </mes:Restriction>
         <mes:ParentFolderIds>
           <typ:DistinguishedFolderId Id="calendar"/>
         </mes:ParentFolderIds>
      </mes:FindItem>
   </soapenv:Body>
</soapenv:Envelope>

但是这会返回: 'FieldURI'属性无效 - 值'item:RecurringMasterItemId'根据其数据类型无效(类型:UnindexedFieldURIType) - 枚举约束失败。
(我也知道定期约会的ChangeKey并尝试了相同的错误)

如何修复它以使其有效?

顺便说一句。我知道用GetItem检索出现的事情如下:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:typ="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:mes="http://schemas.microsoft.com/exchange/services/2006/messages">
   <soapenv:Header>
      <typ:RequestServerVersion Version="Exchange2007_SP1"/>
   </soapenv:Header>
   <soapenv:Body>
      <mes:GetItem>
         <mes:ItemShape>
            <typ:BaseShape>IdOnly</typ:BaseShape>
         </mes:ItemShape>
         <mes:ItemIds>
            <typ:OccurrenceItemId RecurringMasterId="AQMkAD[snip]AAAA==" InstanceIndex="1"/>
            <typ:OccurrenceItemId RecurringMasterId="AQMkAD[snip]AAAA==" InstanceIndex="2"/>
            <typ:OccurrenceItemId RecurringMasterId="AQMkAD[snip]AAAA==" InstanceIndex="3"/>
         </mes:ItemIds>
      </mes:GetItem>
   </soapenv:Body>
</soapenv:Envelope>

然后,我可以检索StartDate并循环遍历它们,但是我无法预测可能适用的InstanceIndex范围。

提前致谢,

1 个答案:

答案 0 :(得分:0)

看起来这不可能。

我现在使用GetItem,一次检索50次。

这将返回包含以下内容的GetItemResponseMessages列表:

  • 成功发生检索

  • ErrorCalendarOccurrenceIndexIsOutOfRecurrenceRange响应代码,表示我们已到达最后一次出现

  • 其他“真实”错误

  • ErrorCalendarOccurrenceIsDeletedFromRecurrence响应代码,指示事件已被删除

所以我只是循环,直到找到正确的日期,达到ErrorCalendarOccurrenceIndexIsOutOfRecurrenceRange,或达到我的代码中设置的最大调用次数。