Freigeben über


ISynchronousDataRetriever::LoadChangeData

Ruft Elementdaten für eine Änderung ab.

HRESULT LoadChangeData(
  ILoadChangeContext * pLoadChangeContext,
  IUnknown ** ppUnkData);

Parameter

  • pLoadChangeContext
    [in] Metadaten, die die Änderung beschreiben, für die Daten abgerufen werden sollen.
  • ppUnkData
    [out] Gibt die Elementdaten für die in pLoadChangeContext angegebene Änderung zurück.

Rückgabewert

  • S_OK

  • Vom Anbieter bestimmte Fehlercodes.

Hinweise

Der Datenanbieter bestimmt die Datenrückrufschnittstelle, die von dem in ppUnkData zurückgegebenen Objekt implementiert wird. Der Zielanbieter kann diese Schnittstelle mit der QueryInterface-Methode von ppUnkData abrufen.

Beispiel

Beim folgenden Beispiel handelt es sich um eine Implementierung von LoadChangeData, die in einem benutzerdefinierten Datenspeicher nach der angegebenen Änderung sucht und eine Kopie zurückgibt.

STDMETHODIMP CItemStore::LoadChangeData(
    ILoadChangeContext * pLoadChangeContext,
    IUnknown ** ppUnkData)
{
    HRESULT hr = E_UNEXPECTED;

    if (NULL == pLoadChangeContext || NULL == ppUnkData)
    {
        hr = E_POINTER;    
    }
    else
    {
        // Find the item in the data store, clone it, and return its IUnknown interface.
        ISyncChange* pChange = NULL;
        hr = pLoadChangeContext->GetSyncChange(&pChange);
        if (SUCCEEDED(hr))
        {
            SYNC_GID gidItem;
            DWORD cbID = sizeof(gidItem);
            hr = pChange->GetRootItemId((BYTE*)&gidItem, &cbID);
            if (SUCCEEDED(hr))
            {
                IXMLDOMNode* pNodeItem = NULL;
                hr = FindItem(&gidItem, &pNodeItem);
                if (SUCCEEDED(hr))
                {
                    IXMLDOMNode* pNodeClone = NULL;
                    hr = pNodeItem->cloneNode(TRUE, &pNodeClone);
                    if (SUCCEEDED(hr))
                    {
                        hr = pNodeClone->QueryInterface(IID_IUnknown, (void**)ppUnkData);

                        pNodeClone->Release();
                    }

                    pNodeItem->Release();                
                }
            }

            pChange->Release();
        }
    }

    return hr;
}

Siehe auch

Verweis

ISynchronousDataRetriever-Schnittstelle