Freigeben über


Öffnen eines Speichers auf dem Remoteserver, wenn Outlook sich im Exchange-Cachemodus befindet

Gilt für: Outlook 2013 | Outlook 2016

Dieses Thema enthält ein Codebeispiel in C++, das zeigt, wie sie das MDB_ONLINE-Flag verwenden, um einen Nachrichtenspeicher auf dem Remoteserver zu öffnen, wenn sich Microsoft Outlook 2010 oder Microsoft Outlook 2013 im Exchange-Cachemodus befindet.

Im Exchange-Cachemodus können Outlook 2010 und Outlook 2013 eine lokale Kopie des Postfachs eines Benutzers verwenden, während Outlook 2010 oder Outlook 2013 eine Onlineverbindung mit einer Remotekopie des Postfachs des Benutzers auf dem Exchange-Remoteserver aufrechterhält. Wenn Outlook 2010 oder Outlook 2013 im Exchange-Cachemodus ausgeführt wird, sind standardmäßig alle MAPI-Lösungen, die sich bei derselben Sitzung anmelden, ebenfalls mit dem zwischengespeicherten Nachrichtenspeicher verbunden. Alle Daten, auf die zugegriffen wird, und alle vorgenommenen Änderungen werden an der lokalen Kopie des Postfachs vorgenommen.

Ein Client oder Dienstanbieter kann die Verbindung mit dem lokalen Nachrichtenspeicher überschreiben und den Speicher auf dem Remoteserver öffnen, indem er beim Aufrufen von IMAPISession::OpenMsgStore das Bit für MDB_ONLINE im ulFlags-Parameter festlegt. Nachdem der Speicher auf dem Remoteserver für diese Sitzung erfolgreich geöffnet wurde, können Sie IMAPISession::OpenEntry verwenden, um Elemente oder Ordner im Remotespeicher zu öffnen.

Sie können einen Exchange-Speicher nicht gleichzeitig in derselben MAPI-Sitzung im zwischengespeicherten Modus und im nicht zwischengespeicherten Modus öffnen. Wenn Sie den zwischengespeicherten Nachrichtenspeicher bereits geöffnet haben, müssen Sie entweder den Speicher schließen, bevor Sie ihn mit dieser Kennzeichnung öffnen, oder eine neue MAPI-Sitzung öffnen, in der Sie den Exchange-Speicher auf dem Remoteserver mit dieser Kennzeichnung öffnen können.

Im folgenden Codebeispiel wird gezeigt, wie IMAPISession::OpenMsgStore mit dem imulFlags-Parameter festgelegten MDB_ONLINE-Flag aufgerufen wird, um den Standardspeicher auf dem Remoteserver zu öffnen.

HRESULT HrRemoteMessageStore( 
    LPMAPISESSION lpMAPISession, 
    LPMDB* lppMDB) 
{ 
    HRESULT hRes = S_OK; 
    LPMAPITABLE pStoresTbl = NULL; 
    SRestriction sres = {0}; 
    SPropValue spv = {0}; 
    LPSRowSet pRow = NULL; 
    LPMDB lpTempMDB = NULL; 
    enum {EID,NUM_COLS}; 
    static SizedSPropTagArray(NUM_COLS,sptCols) = {NUM_COLS, 
        PR_ENTRYID, 
    }; 
 
    //Obtain the table of all the message stores that are available 
    hRes = lpMAPISession->GetMsgStoresTable(0, &pStoresTbl); 
     
    if (SUCCEEDED(hRes) && 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 
 
        if (SUCCEEDED(hRes) && pRow && pRow->cRows) 
        {     
            //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 
            if (SUCCEEDED(hRes) && lppMDB) lppMDB* = lpTempMDB; 
        } 
    } 
    FreeProws(pRow); 
    if (pStoresTbl) pStoresTbl->Release(); 
 
    return hRes; 
}

Siehe auch