IModelKeyReference::GetKey 메서드(dbgmodel.h)
키 참조의 GetKey 메서드는 IModelObject 의 GetKey 메서드처럼 동작합니다. 기본 키의 값과 키와 연결된 메타데이터를 반환합니다. 키 값이 속성 접근자인 경우 IModelObject에 상자가 있는 속성 접근자(IModelPropertyAccessor)를 반환합니다. 이 메서드는 속성 접근자에서 기본 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 |