IModelKeyReference2::GetKey 方法 (dbgmodel.h)
索引鍵參考上的 GetKey 方法的行為就像 IModelObject 上的 GetKey 方法一樣。 它會傳回基礎索引鍵的值,以及與索引鍵相關聯的任何元數據。 如果索引鍵的值是屬性存取子,這會傳回屬性存取子 (IModelPropertyAccessor) Boxed 到 IModelObject 中。 這個方法不會在屬性存取子上呼叫基礎 GetValue 或 SetValue 方法。
語法
HRESULT GetKey(
_COM_Errorptr_opt_ IModelObject **object,
IKeyStore **metadata
);
參數
object
此處會傳回索引鍵的值。
metadata
此處會傳回與金鑰相關聯的選擇性元數據。
傳回值
這個方法會傳回 HRESULT,指出成功或失敗。
備註
程式碼範例
ComPtr<IModelObject> spObject; /* get an object */
ComPtr<IModelKeyReference> spKeyRef;
if (SUCCEEDED(spObject->GetKeyReference(L"Id", &spKeyRef, nullptr)))
{
ComPtr<IModelObject> spKey;
if (SUCCEEDED(spKeyRef->GetKey(&spKey, nullptr)))
{
// spKey contains the equivalent of spObject->GetKey(L"Id", &spKey, nullptr)
// This may be a property accessor since this was not a GetKeyValue.
// Check and fetch. Note that GetKeyValue would do this for you.
ModelObjectKind kind;
if (SUCCEEDED(spKey->GetKind(&kind)))
{
if (kind == ObjectPropertyAccessor)
{
VARIANT vtProp;
if (SUCCEEDED(spKey->GetIntrinsicValue(&vtProp)))
{
// We are guaranteed *in-process* that the IUnknown is
// an IModelPropertyAccessor via the ObjectPropertyAccessor
IModelPropertyAccessor *pProperty =
static_cast<IModelPropertyAccessor *>(vtProp.punkVal);
// In order to fetch, we need to know the context object and
// the key name. Fetch it from the key reference.
ComPtr<IModelObject> spContextObject;
if (SUCCEEDED(spKeyRef->GetContextObject(&spContextObject)))
{
BSTR keyName;
if (SUCCEEDED(spKeyRef->GetName(&keyName)))
{
ComPtr<IModelObject> spKeyValue;
if (SUCCEEDED(pProperty->GetValue(keyName,
spContextObject.Get(),
&spKeyValue)))
{
// spKeyValue contains the value of the "Id" key.
}
SysFreeString(keyName);
}
}
VariantFree(&vtProp);
}
}
else
{
// spKey contains the value of the "Id" key.
}
}
}
}
規格需求
需求 | 值 |
---|---|
標頭 | dbgmodel.h |