使用PHP EWS删除定期日历项目?

问题描述:

过去几天我一直在学习如何使用PHP-EWS class来读取/更新/删除日历条目。我已经能够创建单个事件,读取一天中的所有日历事件并删除事件。我的问题是,我无法找到有关删除整个系列重复活动的任何信息。当我删除一个事件时,我只删除了1个事件的条目,而不是所有的重复实例。使用PHP EWS删除定期日历项目?

不知道我是否只是将错误的Id和ChangeKey传递给删除代码,或者是否有特殊的代码来处理循环事件。

我删除事件的代码如下:

<?php 
// Define the delete item class 
$request = new EWSType_DeleteItemType(); 
// Send to trash can, or use EWSType_DisposalType::HARD_DELETE instead to bypass the bin directly 
$request->DeleteType = EWSType_DisposalType::MOVE_TO_DELETED_ITEMS; 
$request->SendMeetingCancellations = EWSType_CalendarItemCreateOrDeleteOperationType::SEND_ONLY_TO_ALL; 

$items = new EWSType_NonEmptyArrayOfBaseItemIdsType(); 
foreach ($IDs as $id) { 
// Set the item to be deleted 
    $item = new EWSType_ItemIdType(); 
    $item->Id = $id['Id']; 
    $item->ChangeKey = $id['ChangeKey']; 
    $items->ItemId[] = $item; 
} 
$request->ItemIds = $items; 
// Send the request 
$response = $this->ews->DeleteItem($request); 
?> 

UPDATE:

我创建了一个类来处理我的大部分EWS命令。这是我为处理获取主事件ID而创建的一个函数。

public function GetMasterEventID($EventID) 
{ 
    if (empty($EventID)) { 
     return false; 
    } 


    $types = array('GetItemType', 'ItemQueryTraversalType', 'ItemResponseShapeType', 
        'DefaultShapeNamesType', 'NonEmptyArrayOfPathsToElementType', 'PathToUnindexedFieldType', 
        'NonEmptyArrayOfBaseItemIdsType', 'RecurringMasterItemIdType'); 
    $this->LoadTypes($types); 


    $request = new EWSType_GetItemType(); 
    $request->Traversal = EWSType_ItemQueryTraversalType::SHALLOW; 
    $request->ItemShape = new EWSType_ItemResponseShapeType(); 
    $request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::ID_ONLY; 

    $properties = array('item:Subject', 'item:Categories', 'item:DateTimeCreated', 
         'item:LastModifiedTime', 'item:Sensitivity', 'item:ItemClass', 
         'calendar:Start', 'calendar:End', 'calendar:CalendarItemType', 
         'calendar:IsRecurring', 'calendar:Recurrence', 'calendar:FirstOccurrence', 
         'calendar:LastOccurrence', 'calendar:ModifiedOccurrences', 'calendar:DeletedOccurrences'); 
    $request->ItemShape->AdditionalProperties = new EWSType_NonEmptyArrayOfPathsToElementType(); 
    foreach ($properties as $p) { 
     $entry = new EWSType_PathToUnindexedFieldType(); 
     $entry->FieldURI = $p; 
     $request->ItemShape->AdditionalProperties->FieldURI[] = $entry; 
    } 

    $request->ItemIds = new EWSType_NonEmptyArrayOfBaseItemIdsType(); 
    $request->ItemIds->RecurringMasterItemId = new EWSType_RecurringMasterItemIdType(); 
    $request->ItemIds->RecurringMasterItemId->OccurrenceId = $EventID; 

    $response = $this->ews->GetItem($request); 
    return $response; 
} 

的LoadTypes()函数只是遍历了所需要的EWSType文件,然后包括他们,所以我没有加载所有类型的文件。

您首先需要找到定期系列的主约会的ID,然后删除该主。

我不'做'PHP,但这些是真正的SOAP调用做的伎俩。也许他们帮助你回到正轨:

获得从出现重复的主ID(和一些数据):

<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> 
      <typ:AdditionalProperties> 
       <typ:FieldURI FieldURI="item:Subject" /> 
       <typ:FieldURI FieldURI="item:Categories" /> 
       <typ:FieldURI FieldURI="item:DateTimeCreated" /> 
       <typ:FieldURI FieldURI="item:LastModifiedTime" /> 
       <typ:FieldURI FieldURI="item:Sensitivity" /> 
       <typ:FieldURI FieldURI="item:ItemClass" /> 
       <typ:FieldURI FieldURI="calendar:Start" /> 
       <typ:FieldURI FieldURI="calendar:End" /> 
       <typ:FieldURI FieldURI="calendar:CalendarItemType" /> 
       <typ:FieldURI FieldURI="calendar:IsRecurring" /> 
       <typ:FieldURI FieldURI="calendar:Recurrence" /> 
       <typ:FieldURI FieldURI="calendar:FirstOccurrence" /> 
       <typ:FieldURI FieldURI="calendar:LastOccurrence" /> 
       <typ:FieldURI FieldURI="calendar:ModifiedOccurrences" /> 
       <typ:FieldURI FieldURI="calendar:DeletedOccurrences" /> 
      </typ:AdditionalProperties> 
     </mes:ItemShape> 
     <mes:ItemIds> 
      <typ:RecurringMasterItemId OccurrenceId="AAMkADkyZT[snip]kgAAEA=="/> 
     </mes:ItemIds> 
     </mes:GetItem> 
    </soapenv:Body> 
</soapenv:Envelope> 

删除项目:

<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"/> 
     <typ:MailboxCulture>en-US</typ:MailboxCulture> 
     <typ:TimeZoneContext> 
     <typ:TimeZoneDefinition Id="W. Europe Standard Time"/> 
     </typ:TimeZoneContext> 
    </soapenv:Header> 
    <soapenv:Body> 
     <mes:DeleteItem DeleteType="HardDelete" SendMeetingCancellations="SendToNone"> 
     <mes:ItemIds> 
      <!--You have a CHOICE of the next 3 items at this level--> 
      <typ:ItemId Id="AQMkADkyZTQxNjUzLTcwZTQtNGRlNS04M2VmLWMxYmIBNWJiADUwZTYARgAAA4Kt4mOTlXZJrZx0v5cQm8IHAISmF1hx/2pAhQBTVUBmYgoAAAMhAAAAhKYXWHH/akCFAFNVQGZiCgAB57O2JwAAAA=="/> 
      <!--typ:OccurrenceItemId RecurringMasterId="?" InstanceIndex="?"/> 
      <typ:RecurringMasterItemId OccurrenceId="?"/--> 
     </mes:ItemIds> 
     </mes:DeleteItem> 
    </soapenv:Body> 
</soapenv:Envelope> 
+0

谢谢你的。你让我回到正轨。在做了更多的搜索和看到你在这个相同的主题上做的其他职位后,我正在用天然气做饭! – DanielJay 2013-04-26 15:32:23