Создание класса представления union
Класс представления объединения — это логическое объединение экземпляров исходного класса. Класс представления объединения включает все экземпляры исходных классов, если вы не ограничиваете их, включив предложение WHERE в исходный запрос.
Классы представления "Объединение" полезны, если требуется увидеть экземпляры похожих или идентичных классов, расположенных в разных пространствах имен или на разных компьютерах. Например, можно создать класс union, содержащий экземпляры разных дисков для отслеживания.
Свойства класса представления объединения можно также основывать на свойствах, которые отсутствуют во всех экземплярах исходного класса. Если экземпляры исходного класса имеют не одно и то же свойство, свойства экземпляров класса union имеют значение NULL. Например, если один жесткий диск имеет свойство temperature , а другой — нет, можно создать объединение между ними.
В следующей процедуре описывается создание класса представления объединения.
Создание класса представления объединения
Начните определение класса с квалификатора строки объединения .
Квалификаторы JoinOn, Association и Union являются взаимоисключающими.
Создайте запросы, определяющие исходные классы, используемые в классе представления, с помощью квалификатора ViewSources .
Определите имена и расположение пространств имен, в которых находятся исходные классы, с помощью квалификатора ViewSpaces .
Определите свойства, сопоставляемые со свойствами в исходных классах, с помощью квалификатора PropertySources .
При необходимости можно пометить любое из свойств как принадлежащих исходному классу с помощью квалификатора HiddenDefault .
Определите ключевые свойства исходных классов класса представления объединения.
Каждый исходный класс должен иметь одинаковое количество свойств ключей, соответствующих CIMType. Кроме того, ключи класса представления объединения должны однозначно идентифицировать все исходные экземпляры. В некоторых случаях может потребоваться указать системные свойства, чтобы убедиться, что экземпляры являются уникальными. Например, при создании представления из объединения двух идентичных классов в двух разных пространствах имен можно включить свойство __Namespace в качестве ключа в класс представления, чтобы различать два экземпляра. Если вы используете два похожих класса из одного пространства имен для создания представления, можно использовать свойство __Class , чтобы различать их. Переименуйте все системные свойства в представлении, чтобы избежать конфликта с системными свойствами класса представления.
Определите все нужные методы с помощью квалификатора MethodSource .
В отличие от других классов представлений, можно создавать методы для изменения представления объединения.
В следующем примере кода описывается класс представления объединения.
[Union, ViewSources{"SELECT Description, DeviceID, __Namespace, FileSystem, FreeSpace, VolumeName FROM LocalDisk",
"SELECT Description, DeviceID, __Namespace, FileSystem, FreeSpace, VolumeName FROM RemoteDisk"},
ViewSpaces{"\\\\.\\Root\\LocalNamespace","\\\\.\\Root\\RemoteNamespace"},
dynamic: ToInstance, provider("MS_VIEW_INSTANCE_PROVIDER")]
class UnionOfDrives
{
[PropertySources{"Description", "Description"}] string des;
[PropertySources{"DeviceID", "DeviceID"}, key] String did;
[PropertySources{"__Namespace", "__Namespace"}, key] String KEYID;
[PropertySources{"FileSystem", "FileSystem"}] String fsystem ;
[PropertySources{"FreeSpace", "FreeSpace"}] uint64 fspace;
[PropertySources{"VolumeName", "VolumeName"}] String vname;
};