2012-04-25 34 views
1

PHPウェブアプリケーションの一部として、私はMySQLコンタクトテーブルを持っています。これはアプリ全体に統合されており、連絡先を追加したり、連絡先を編集したり、連絡先を別のテーブルとの関係として追加することができます。しかし、現在、それは自己完結型です。同社はExchangeと同期して、Exchangeに追加された連絡先がWebアプリケーションに表示され、Webアプリケーションに追加された連絡先がExchangeを介して表示されるようにしたいと考えています。PHP - MySQLコンタクトをExchangeと同期する

私は2つの問題があります:1)Exchangeとの通信2)Exchangeとの同期。

基本的なコミュニケーションが行われる限り、このライブラリはそれを管理できるように見えますhttps://github.com/jamesiarmes/php-ews。しかし、同期を管理する方法についてはかなり失われています。

答えて

3

項目を同期させる方法は、SyncFolderItemsという関数を使用して行います。基本的に連絡先を含むすべてのものをフォルダにするので、CONTACTSDistinguishedFolderIdとして同期要求に渡します。

シンクは、指定されたアカウントのすべてのアイテムを最大512エレメントのバッチでドローロードし、各バッチの後に、Exchangeの参照ポイントとして、中止した箇所を知るために役立ちます。したがって、インクリメンタルな同期を行うことができます。

これはもちろん、Exchange - > Your DBを意味する1つの方法です。あなたがあなたのデータベースを変更/追加/削除する瞬間に、データを同期させるためにExchangeサーバーに適切な要求を発行する必要があります。あなたの次のSyncFolderItemsに上書きされます。あなたがSyncFolderItemsの例を参照したい場合は

あなたはpython version of EWSWrapper @見てみることができSyncFolderItems @ MSDN

によりアップ読むことができ、それが最近に追加されています。それはPythonですが、要求/ハンドルレスポンスをどのように構築するかについての基本的な考え方は引き続き得られます。

希望はこのことができます:)

2

が、私はこのトピックはかなり古いであることを承知しています。しかし、将来的には以下の解決策を見つけるために参考にしてください。上記のライブラリphp-ewsを使用しています。

また、私はちょうど公式のphp-EWSのwikiにこれを追加しました:https://github.com/jamesiarmes/php-ews/wiki/Calendar:-Synchronization

// 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; 
    } 
} 
関連する問題