Exchange キャッシュ モードは Microsoft Office Outlook 2003 の新しい機能です。Outlook 2003 では、Exchange キャッシュ モードにより、Microsoft Exchange ユーザーのメールボックスのリモート コピーへのオンライン接続を維持しながら、ユーザーのメールボックスのローカル コピーを使用することができます。拡張 MAPI 開発者は、この機能がソリューションに与える影響や、この機能を利用する方法を理解しておく必要があります。
Outlook 2003 が Exchange キャッシュ モードで実行されている場合、同じセッションにログオンしている拡張 MAPI アプリケーションは、キャッシュされたメッセージ ストアに接続されています。データのアクセスや変更は、メールボックスのローカル コピーに対して行われますが、リモートのメールボックスに直接アクセスする必要が生じる場合があります。Outlook 2003 には、MDB_ONLINE という名前の新しいフラグが含まれています。
#define MDB_ONLINE ((ULONG) 0x00000100)
このフラグは IMAPISession::OpenMsgStore MAPI 関数に渡されます。このフラグにより、ローカルのメッセージ ストアへの接続が無視され、リモート サーバーのストアが開かれます。
注 : このフラグを使用する場合、同じ MAPI セッションにおいて Exchange ストアをキャッシュ モードと非キャッシュ モードで同時に開くことはできません。キャッシュされたメッセージ ストアを既に開いている場合は、そのストアを閉じてからこのフラグを使用して開くか、このフラグを使用して開くことができるリモート サーバー上の Exchange ストアで新しい MAPI セッションを開く必要があります。
以下のコードは、このフラグの使用方法を示しています。
//Obtain the table of all the message stores that are available
hRes = lpMAPISession -> GetMsgStoresTable(0, &pStoresTbl);
//Set up restrictions for the default store
sres.rt = RES_PROPERTY; //Comparing a property
sres.res.resProperty.relop = RELOP_EQ; //Testing equality
sres.res.resProperty.ulPropTag = PR_DEFAULT_STORE; //Tag to compare
sres.res.resProperty.lpProp = &spv; //Prop tag and value to compare against
spv.ulPropTag = PR_DEFAULT_STORE; //Tag type
spv.Value.b = TRUE; //Tag value
//Convert the table to an array that can be stepped through
//Only one message store should have PR_DEFAULT_STORE set to true, so that only one will be returned
hRes = HrQueryAllRows(
pStoresTbl, //Table to query
(LPSPropTagArray) &sptCols, //Which columns to obtain
&sres, //Restriction to use
NULL, //No sort order
0, //Max number of rows (0 means no limit)
&pRow); //Array to return
//Open the first returned (default) message store
hRes = lpMAPISession->OpenMsgStore(
NULL, //Window handle for dialogs
pRow->aRow[0].lpProps[EID].Value.bin.cb, //size and...
(LPENTRYID)pRow->aRow[0].lpProps[EID].Value.bin.lpb, //value of entry to open
NULL, //Use default interface (IMsgStore) to open store
MAPI_BEST_ACCESS | MDB_ONLINE, //Flags
&lpTempMDB); //Pointer to put the store in
また、MAPI_NO_CACHE フラグを IMsgStore::OpenEntry MAPI 関数に渡すことにより、特定の項目またはフォルダのキャッシュが行われないようにすることができます。
#define MAPI_NO_CACHE ((ULONG) 0x00000200)
以下のコードは、このフラグの使用方法を示しています。
// Open the root folder of the message store
hRes = lpMDB->OpenEntry(
0, // size of entry ID
NULL, // Pointer to entry ID
NULL, // Use default interface (IMAPIFolder)
MAPI_BEST_ACCESS | MAPI_NO_CACHE, // Flags
&ulObjType, // Output parameter indicates the type of object that is returned
(LPUNKNOWN *)&lpRootFolder))) // Pointer to put the opened item in 注 : MDB_ONLINE フラグを使用してメッセージ ストアを開いた場合は、MAPI_NO_CACHE フラグを使用する必要はありません。
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID
834496
(http://support.microsoft.com/kb/834496/EN-US/
)
(最終更新日 2005-05-19) を基に作成したものです。
この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。
文書番号: 834496 - 最終更新日: 2005年9月20日 - リビジョン: 2.0
この資料は以下の製品について記述したものです。
- Microsoft Office Outlook 2003
| kbinfo kbmsg kbprogramming kbsample KB834496 |
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"