共用方式為


ISynchronousDataRetriever::LoadChangeData

擷取變更的項目資料。

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

參數

  • pLoadChangeContext
    [in] 用來描述應該擷取資料之變更的中繼資料。
  • ppUnkData
    [out] 傳回 pLoadChangeContext 中所指定變更的項目資料。

傳回值

  • S_OK

  • 提供者決定的錯誤碼

備註

來源提供者會決定由 ppUnkData 中所傳回物件實作的資料擷取介面。目的地提供者可以使用 ppUnkData 的 QueryInterface 方法取得這個介面。

範例

以下範例是 LoadChangeData 的實作,可在自訂資料存放區中找出指定的變更,然後傳回一份複本。

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

請參閱

參考

ISynchronousDataRetriever 介面