过去几天我一直在学习使用PHP-EWS class来阅读/更新/删除日历条目。我已经能够创建单个事件,阅读一天中的所有日历事件并删除事件。我的问题是我找不到任何有关删除整个系列重复事件的信息。当我删除一个事件时,我只删除了1个事件的条目而不是所有重复的实例。
不确定我是否只是将错误的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);
?>
更新
我创建了一个类来处理我的大多数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文件,然后包含它们,因此我不必加载每个类型文件。
答案 0 :(得分:3)
首先需要找到定期系列主控约会的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>