Compartir a través de


ISynchronousDataRetriever::LoadChangeData

Recupera datos de elemento para un cambio.

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

Parámetros

  • pLoadChangeContext
    [in] Metadatos que describen el cambio para el que se deben recuperar datos.
  • ppUnkData
    [out] Devuelve los datos de elemento para el cambio especificado en pLoadChangeContext.

Valor devuelto

  • S_OK

  • Códigos de error determinados por el proveedor

Notas

El proveedor de origen determina la interfaz de recuperación de datos que implementa el objeto que se devuelve en ppUnkData. El proveedor de destino puede adquirir esta interfaz usando el método QueryInterface de ppUnkData.

Ejemplo

En el ejemplo siguiente se muestra una implementación de LoadChangeData que busca el cambio especificado en un almacén de datos personalizado y devuelve una copia del mismo.

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

Vea también

Referencia

Interfaz ISynchronousDataRetriever