首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP -与交换同步MySQL联系人

PHP -与交换同步MySQL联系人
EN

Stack Overflow用户
提问于 2012-04-25 21:55:26
回答 2查看 3.8K关注 0票数 1

作为PHP的一部分,我有一个MySQL联系人表。它集成在整个应用程序中,允许您添加联系人、编辑联系人或将联系人作为关系添加到另一个表中。然而,目前它是自包含的。该公司希望它与Exchange同步,以便添加到Exchange的联系人将显示在webapp上,并且添加到webapp上的联系人将通过Exchange显示。

因此,我有两个问题: 1)与Exchange通信2)与Exchange同步。

就基本的通信而言,看起来这个库将能够对其进行https://github.com/jamesiarmes/php-ews管理。然而,我完全不知道如何管理同步,也不知道从哪里开始。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-27 14:55:58

同步项目的内置方法是通过名为SyncFolderItems的函数。基本上,交换包括联系人在内的所有内容都是一个文件夹,因此您只需在同步请求中将CONTACTS作为DistinguishedFolderId传递即可。

同步的工作方式是以最大512个元素为一批为给定帐户卸载所有项目,并在每批之后提供SyncState作为交换的参考点,以了解您离开的位置。因此,它使您能够执行增量同步。

当然,这是一种方式,意思是Exchange ->你的数据库。另一方面,你应该执行原子更新/请求-当你改变/添加/删除数据库中的项目时,你应该向交换服务器发出足够的请求来保持数据同步,因为它会在你的下一个SyncFolderItems上被覆盖。

您可以在SyncFolderItems @ MSDN上阅读更多信息

如果你想看看SyncFolderItems的例子,你可以看看@ python version of EWSWrapper,它是最近添加的。尽管它是python,但您仍然可以了解如何构造请求/处理响应的基本思路。

希望这能有所帮助:)

票数 3
EN

Stack Overflow用户

发布于 2014-11-04 21:21:30

我知道这个话题已经相当陈旧了。但是,为了将来参考,请在下面找到解决方案。它正在使用上面提到的库php-ews。

我刚刚在官方的php-ews wiki上添加了这个:https://github.com/jamesiarmes/php-ews/wiki/Calendar:-Synchronization

代码语言:javascript
复制
// Define EWS
$ews = new ExchangeWebServices($host, $username, $password, $version);

// fill with string from last sync
$sync_state = null;

$request = new EWSType_SyncFolderItemsType;
$request->SyncState = $sync_state;
$request->MaxChangesReturned = 512;
$request->ItemShape = new EWSType_ItemResponseShapeType;
$request->ItemShape->BaseShape = EWSType_DefaultShapeNamesType::ALL_PROPERTIES;

$request->SyncFolderId = new EWSType_NonEmptyArrayOfBaseFolderIdsType;
$request->SyncFolderId->DistinguishedFolderId = new EWSType_DistinguishedFolderIdType;
$request->SyncFolderId->DistinguishedFolderId->Id = EWSType_DistinguishedFolderIdNameType::CALENDAR;

$response = $ews->SyncFolderItems($request);

$sync_state = $response->ResponseMessages->SyncFolderItemsResponseMessage->SyncState;
$changes = $response->ResponseMessages->SyncFolderItemsResponseMessage->Changes;

// created events
if(property_exists($changes, 'Create')) {
    foreach($changes->Create as $event) {
        $id = $event->CalendarItem->ItemId->Id;
        $change_key = $event->CalendarItem->ItemId->ChangeKey;
        $start = $event->CalendarItem->Start;
        $end = $event->CalendarItem->End;
        $subject = $event->CalendarItem->Subject;
    }
}

// updated events
if(property_exists($changes, 'Update')) {
    foreach($changes->Update as $event) {
        $id = $event->CalendarItem->ItemId->Id;
        $change_key = $event->CalendarItem->ItemId->ChangeKey;
        $start = $event->CalendarItem->Start;
        $end = $event->CalendarItem->End;
        $subject = $event->CalendarItem->Subject;
    }
}

// deleted events
if(property_exists($changes, 'Delete')) {
    foreach($changes->Delete as $event) {
        $id = $event->CalendarItem->ItemId->Id;
        $change_key = $event->CalendarItem->ItemId->ChangeKey;
        $start = $event->CalendarItem->Start;
        $end = $event->CalendarItem->End;
        $subject = $event->CalendarItem->Subject;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10317212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档