Share via


ISynchronousDataRetriever::LoadChangeData

Récupère des données d'élément pour une modification.

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

Paramètres

  • pLoadChangeContext
    [in] Métadonnées qui décrivent la modification pour laquelle les données doivent être récupérées.
  • ppUnkData
    [out] Retourne les données d'élément pour la modification spécifiée dans pLoadChangeContext.

Valeur de retour

  • S_OK

  • Codes d'erreur déterminés par le fournisseur

Notes

Le fournisseur de source détermine l'interface de récupération des données implémentée par l'objet retourné dans ppUnkData. Le fournisseur de destination peut acquérir cette interface en utilisant la méthode QueryInterface de ppUnkData.

Exemple

L'exemple suivant est une implémentation de LoadChangeData qui recherche la modification spécifiée dans une banque de données personnalisée et en retourne une copie.

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

Voir aussi

Référence

Interface ISynchronousDataRetriever