Getting All Objects or Object Keys of a Class
This section shows example code to get all objects or object keys of a class. The example code uses:
///////////////////////////////////////////////////////////////////
// GetClassObjs function
// Reads and prints the objects in a class.
//
// Example of using the CMetaObject::GetClassObjects function
///////////////////////////////////////////////////////////////////
HRESULT GetClassObjs()
{
LLCMetaObject objectList;
HRESULT result = S_OK;
CMetaObject obj;
// Gets all the objects in the Auto Class
if (SUCCEEDED(result = obj.GetClassObjects(objectList,
CLSGUID_Auto)))
{
cout << endl << ">>> All auto class objects" << endl;
PrintObjectList(objectList);
CLEARVECTOR(objectList);
}
DisplayResult(result);
// Gets all the objects in the Auto Division Class which
// have the name AmericanAutos
if (SUCCEEDED(result = obj.GetClassObjects(objectList,
CLSGUID_AutoDiv, 0, _T("AmericanAutos"))))
{
cout << endl;
cout << ">>> All auto division objects with name=AmericanAutos" << endl;
PrintObjectList(objectList);
CLEARVECTOR(objectList);
}
DisplayResult(result);
return (result);
}
//////////////////////////////////////////////////////////////////////////
// GetClassObjKeys function
// Reads and prints the object keys in a class.
//////////////////////////////////////////////////////////////////////////
HRESULT GetClassObjKeys()
{
MetaObjectKeyVector keyList;
HRESULT result = S_OK;
CMetaObject obj;
// Gets all the object keys (name and ObjectID) of all
// objects in the Auto Class
if (SUCCEEDED(result = obj.GetClassObjectKeys(keyList,
CLSGUID_Auto)))
{
cout << endl;
cout << ">>> Object keys (name and ObjectID) of all " << endl;
cout << ">>> objects in the Auto Class" << endl;
PrintKeyList(keyList);
CLEARVECTOR(keyList);
}
DisplayResult(result);
return (result);
}
////////////////////////////////////////////////////////////////////////
// GetClassObjectsByProperty function
//
// Read Auto Object and Get class objects by Property.
//
// Example of using the CMetaObject::GetClassObjectsByProperty function
////////////////////////////////////////////////////////////////////////
HRESULT GetClassObjectsByProperty()
{
HRESULT result = S_OK;
CMetaObject obj;
CMetaObjectKey propID;
LLCMetaObject objectList;
CMetaFilterInfo filterInfo; // one property filter entry
MetaFilterInfoVector propFilter; // property filter specification
MetaObjectKeyVector sortList;
// Setup to search for autos with a vehicletype which
// ends with the value "Cars"
filterInfo.value.SetPropertyID(PID_AUTO_VEHICLETYPE);
filterInfo.SetComparisonOperator(REGEX);
filterInfo.value.SetString(_T("%Cars"));
propFilter.push_back(filterInfo);
// Sort By Autos' CARIDs
propID.SetObjectName(NMCARID);
sortList.push_back(propID);
// Call GetClassObjectsByProperty
result = obj.GetClassObjectsByProperty(objectList, propFilter,
sortList, CLSGUID_Auto);
if (SUCCEEDED(result))
{
cout << endl;
cout << ">>> Auto class objects: VehicleType=%Cars" << endl;
PrintObjectList(objectList);
}
CLEARVECTOR(objectList);
DisplayResult(result);
if(SUCCEEDED(result))
{
// Setup to search for autos with a name beginning with a T
// and a FuelTank less than 12
CLEARVECTOR(propFilter); filterInfo.Initialize();
filterInfo.value.SetPropertyID(PID_CMN_NAME);
filterInfo.SetComparisonOperator(REGEX);
filterInfo.value.SetString(_T("T%"));
filterInfo.SetLogicalOperator(META_AND);
propFilter.push_back(filterInfo);
filterInfo.Initialize();
filterInfo.value.SetName(_TEXT("FuelTank"));
filterInfo.SetComparisonOperator(LESS_THAN);
filterInfo.value.SetDouble(12.0);
propFilter.push_back(filterInfo);
// Sort By Name and ObjectID
CLEARVECTOR(sortList); propID.Initialize();
propID.SetObjectID(PID_CMN_NAME);
sortList.push_back(propID);
propID.SetObjectID(PID_CMN_LOID);
sortList.push_back(propID);
// Call GetClassObjectsByProperty
result = obj.GetClassObjectsByProperty(objectList, propFilter,
sortList, CLSGUID_Auto);
if (SUCCEEDED(result))
{
cout << endl;
cout << ">>> Auto class objects: name beginning with a T ";
cout << endl;
cout << ">>> and a FuelTank less than 12" << endl;
PrintObjectList(objectList);
}
CLEARVECTOR(objectList);
}
if(SUCCEEDED(result))
{
// Setup to search for autos with design date of 1997-03-30
// or have a baseprice >= 18000
CLEARVECTOR(propFilter); filterInfo.Initialize();
filterInfo.value.SetPropertyID(PID_AUTO_DESIGNDATE);
filterInfo.SetComparisonOperator(EQUAL);
filterInfo.value.SetString(_T("1997-03-30"));
filterInfo.SetLogicalOperator(META_OR);
propFilter.push_back(filterInfo);
filterInfo.Initialize();
filterInfo.value.SetPropertyID(PID_AUTO_BASEPRICE);
filterInfo.SetComparisonOperator(GREATER_THAN_OR_EQUAL);
filterInfo.value.SetShort(18000);
propFilter.push_back(filterInfo);
// Sort By BasePrice and Name
CLEARVECTOR(sortList); propID.Initialize();
propID.SetObjectID(PID_AUTO_BASEPRICE);
sortList.push_back(propID);
propID.SetObjectID(PID_CMN_NAME);
sortList.push_back(propID);
// Call GetClassObjectsByProperty
result = obj.GetClassObjectsByProperty(objectList, propFilter,
sortList, CLSGUID_Auto);
if (SUCCEEDED(result))
{
cout << endl;
cout << ">>> Autos with design date of 1997-03-30 " << endl;
cout << ">>> or have a baseprice >= 18000" << endl;
PrintObjectList(objectList);
}
CLEARVECTOR(objectList);
}
if(SUCCEEDED(result))
{
// Using derived class - search for autos with
// division name = Luxury Motors
CLEARVECTOR(propFilter); filterInfo.Initialize();
filterInfo.value.SetName(_T("DivisionName"));
filterInfo.SetComparisonOperator(EQUAL);
filterInfo.value.SetString(_T("LuxuryMotors"));
propFilter.push_back(filterInfo);
// Sort By Name
CLEARVECTOR(sortList); propID.Initialize();
propID.SetObjectID(PID_CMN_NAME);
sortList.push_back(propID);
// Call GetClassObjectsByProperty
result = obj.GetClassObjectsByProperty(objectList, propFilter,
sortList, CLSGUID_AutoEx);
if (SUCCEEDED(result))
{
cout << endl;
cout << ">>> Derived class where division name = LuxuryMotors" << endl;
PrintObjectList(objectList);
}
CLEARVECTOR(objectList);
}
return result;
}