Condividi tramite


ISynchronousDataRetriever::LoadChangeData

Recupera dati dell'elemento per una modifica.

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

Parametri

  • pLoadChangeContext
    [in] Metadati che descrivono la modifica per la quale devono essere recuperati i dati.
  • ppUnkData
    [out] Restituisce i dati dell'elemento per la modifica specificata in pLoadChangeContext.

Valore restituito

  • S_OK

  • Codici di errore determinati dal provider

Osservazioni

Il provider di origine determina l'interfaccia di recupero dei dati implementata dall'oggetto restituito in ppUnkData. Il provider di destinazione può acquisire questa interfaccia tramite il metodo QueryInterface di ppUnkData.

Esempio

L'esempio seguente è un'implementazione di LoadChangeData che consente di trovare la modifica specificata in un archivio dati personalizzato e ne restituisce una copia.

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;
}

Vedere anche

Riferimento

Interfaccia ISynchronousDataRetriever