php ews如何按日历主题搜索日历事件

php ews如何按日历主题搜索日历事件,php,exchangewebservices,exchange-server-2010,php-ews,Php,Exchangewebservices,Exchange Server 2010,Php Ews,我使用的是将php连接到exchange服务器,使用下面的代码到目前为止没有问题。我可以连接到特定的用户邮箱,并可以检索他的所有日历事件。现在它正在拉所有的事件,我想要的是只拉那些在主题行中有“学生申请”的日历事件。有可能吗 require_once('bug/dBug.php'); require_once('EWSType.php'); require_once('ExchangeWebServices.php'); require_once('NTLMSoapClient.php'); r

我使用的是将php连接到exchange服务器,使用下面的代码到目前为止没有问题。我可以连接到特定的用户邮箱,并可以检索他的所有日历事件。现在它正在拉所有的事件,我想要的是只拉那些在主题行中有“学生申请”的日历事件。有可能吗

require_once('bug/dBug.php');
require_once('EWSType.php');
require_once('ExchangeWebServices.php');
require_once('NTLMSoapClient.php');
require_once('NTLMSoapClient/Exchange.php');
require_once('EWS_Exception.php');
require_once('EWSType/FindItemType.php');
require_once('EWSType/ItemQueryTraversalType.php');
require_once('EWSType/ItemResponseShapeType.php');
require_once('EWSType/DefaultShapeNamesType.php');
require_once('EWSType/CalendarViewType.php');
require_once('EWSType/NonEmptyArrayOfBaseFolderIdsType.php');
require_once('EWSType/DistinguishedFolderIdType.php');
require_once('EWSType/DistinguishedFolderIdNameType.php');
require_once('EWSType/EmailAddressType.php');
require_once('EWSType/UserIdType.php');
require_once('EWSType/CalendarEventDetails.php');


$host = 'xxx';
$username = 'xxx';
$password = 'xxx';
$version = 'Exchange2010';

$start = " 2013-04-17T15:18:34+03:00";
$end   = " 2013-04-30T15:18:34+03:00";

$ews = new ExchangeWebServices($host, $username, $password, $version);



//new dBug ($ews);


// Set init class
$request = new EWSType_FindItemType();
// Use this to search only the items in the parent directory in question or use ::SOFT_DELETED
// to identify "soft deleted" items, i.e. not visible and not in the trash can.
$request->Traversal = EWSType_ItemQueryTraversalType::SHALLOW;
// This identifies the set of properties to return in an item or folder response
$request->ItemShape = new EWSType_ItemResponseShapeType();
$request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::DEFAULT_PROPERTIES;

// Define the timeframe to load calendar items
$request->CalendarView = new EWSType_CalendarViewType();
$request->CalendarView->StartDate = $start ;// an ISO8601 date e.g. 2012-06-12T15:18:34+03:00
$request->CalendarView->EndDate = $end ; // an ISO8601 date later than the above

// Only look in the "calendars folder"
$request->ParentFolderIds = new EWSType_NonEmptyArrayOfBaseFolderIdsType();
$request->ParentFolderIds->DistinguishedFolderId = new EWSType_DistinguishedFolderIdType();
$request->ParentFolderIds->DistinguishedFolderId->Id = EWSType_DistinguishedFolderIdNameType::CALENDAR;




// if you want to get to someones folder 
while($info = mysql_fetch_array( $call_pri_result )){

    $EmailAddy = 'abc@exchangeserver.com';    
    $mailBox = new EWSType_EmailAddressType();
    $mailBox->EmailAddress = $EmailAddy;
    $request->ParentFolderIds->DistinguishedFolderId->Mailbox = $mailBox;

    echo 'Now Looping for Consular ID '.$EmailAddy.'<br>' ;


// Send request
    $response = $ews->FindItem($request);

    // Loop through each item if event(s) were found in the timeframe specified
    if ($response->ResponseMessages->FindItemResponseMessage->RootFolder->TotalItemsInView > 0){
        $events = $response->ResponseMessages->FindItemResponseMessage->RootFolder->Items->CalendarItem;
        foreach ($events as $event){
            $id = $event->ItemId->Id;
            $change_key = $event->ItemId->ChangeKey;
            $start = $event->Start;
            $end = $event->End;
            $subject = $event->Subject;
            //$location = $event->Location;
        }
    }
    else {
        // No items returned
    }



}
require_once('bug/dBug.php');
一次需要_('EWSType.php');
只需要一次(ExchangeWebServices.php);
一次需要_('NTLMSoapClient.php');
一次需要_('NTLMSoapClient/Exchange.php');
require_once('EWS_Exception.php');
一次需要_('EWSType/FindItemType.php');
require_once('EWSType/ItemQueryTraversalType.php');
一次需要_('EWSType/itemsresponseshapetype.php');
只需要一次('EWSType/DefaultShapeNamesType.php');
一次需要_('EWSType/CalendarViewType.php');
一次需要_('EWSType/nonemptyarrayofbasefolderidtype.php');
只需_一次('EWSType/differentiedfolderidtype.php');
只需要一次('EWSType/distrignedfolderidnametype.php');
一次性要求_('EWSType/EmailAddressType.php');
一次需要_('EWSType/UserIdType.php');
require_once('EWSType/CalendarEventDetails.php');
$host='xxx';
$username='xxx';
$password='xxx';
$version='Exchange2010';
$start=“2013-04-17T15:18:34+03:00”;
$end=“2013-04-30T15:18:34+03:00”;
$ews=新的ExchangeWebServices($host、$username、$password、$version);
//新的dBug($ews);
//设置初始化类
$request=新的EWSType_FindItemType();
//使用此选项仅搜索相关父目录中的项目,或使用::SOFT\u DELETED
//识别“软删除”项目,即不可见且不在垃圾桶中。
$request->Traversal=EWSType\u ItemQueryTraversalType::SHALLOW;
//这标识要在项目或文件夹响应中返回的属性集
$request->ItemShape=new-EWSType\u itemsresponseshapetype();
$request->ItemShape->BaseShape=EWSType\u DefaultShapeNamesType::DEFAULT\u属性;
//定义加载日历项的时间范围
$request->CalendarView=新的EWSType_CalendarViewType();
$request->CalendarView->StartDate=$start;//ISO8601日期,例如2012-06-12T15:18:34+03:00
$request->CalendarView->EndDate=$end;//ISO8601日期晚于上述日期
//仅查看“日历文件夹”
$request->ParentFolderIds=new-EWSType_nonemptyarrayofbasefolderidtype();
$request->ParentFolderIds->differentiedfolderid=new-EWSType_differentiedfolderidtype();
$request->ParentFolderIds->differentiedfolderid->Id=EWSType\u differentiedfolderidnametype::CALENDAR;
//如果你想进入某人的文件夹
而($info=mysql\u fetch\u数组($call\u pri\u result)){
$EmailAddy=abc@exchangeserver.com';    
$mailBox=new-EWSType_-EmailAddressType();
$mailBox->EmailAddy=$EmailAddy;
$request->parentFolderId->distincidencedFolderId->Mailbox=$Mailbox;
echo“正在循环查找领事ID”。$EmailAddy.
; //发送请求 $response=$ews->FindItem($request); //如果在指定的时间范围内发现事件,则循环检查每个项目 如果($response->ResponseMessages->FindItemResponseMessage->RootFolder->TotalItemsInView>0){ $events=$response->ResponseMessages->FindItemResponseMessage->RootFolder->Items->CalendarItem; foreach($events作为$event){ $id=$event->ItemId->id; $change\u key=$event->ItemId->ChangeKey; $start=$event->start; $end=$event->end; $subject=$event->subject; //$location=$event->location; } } 否则{ //没有退回任何物品 } }
根据我的建议,您不能向日历视图添加限制或排序顺序。我将找到的代码添加到我的代码中以获取日历项目,并获得以下消息文本:

Restrictions and sort order may not be specified for a CalendarView.
这里似乎列出了FieldURI变量的完整列表


在您的例子中,我要做的是在事件的foreach()循环中放入一个正则表达式、strps()或类似的内容。然后,如果案例匹配,则执行您的功能。是的,您将有额外的活动,您将不做任何事情,但您至少能够过滤掉您想要的活动。

非常感谢Daniel,这就是我最终要做的,但nu需要我将所有日历活动与性能成本一起拉出来,在ColdFusion chexchangecalendar标签中,我们可以添加尽可能多的过滤器,就像这样,或者您是否碰巧知道是否有任何方法可以让用户为特定的exchangeID设置日历事件?我本人是EWS新手,刚刚开始深入研究。如果我发现了什么,我会试着回复。