Compartilhar via


Como criar uma classe de exibição de união

Uma classe de exibição de união é uma união lógica de instâncias de classe de origem. Uma classe de exibição de união inclui todas as instâncias das classes de origem, a menos que você limite as instâncias incluindo uma cláusula WHERE na consulta de origem.

As classes de exibição de união são úteis quando você deseja ver as instâncias de classes semelhantes ou idênticas localizadas em namespaces diferentes ou em computadores diferentes. Por exemplo, você pode criar uma classe de união que contém instâncias de unidades de disco diferentes para monitorar.

Você também pode basear as propriedades de uma classe de exibição de união em propriedades não presentes em todas as instâncias da classe de origem. Se as instâncias da classe de origem não tiverem a mesma propriedade, as propriedades das instâncias de classe de união terão um valor NULL. Por exemplo, se uma unidade de disco rígido tiver uma propriedade de temperatura, mas outra não, você ainda poderá criar uma união entre os dois.

O procedimento a seguir descreve como criar uma classe de exibição de união.

Para criar uma classe de exibição de união

  1. Inicie sua definição de classe com o qualificador de cadeia de caracteres Union.

    Os qualificadores JoinOn, Association e Union são mutuamente exclusivos.

  2. Crie as consultas que definem as classes de origem usadas na classe de exibição com o qualificador ViewSources.

  3. Defina os nomes e os locais dos namespaces nos quais as classes de origem estão localizadas com o qualificador ViewSpaces.

  4. Defina as propriedades que são mapeadas para as propriedades nas classes de origem com o qualificador PropertySources.

    Se necessário, você pode marcar qualquer uma das propriedades como pertencentes a uma classe de origem usando o qualificador HiddenDefault.

  5. Defina as principais propriedades das classes de origem da classe de exibição de união.

    Cada classe de origem deve ter o mesmo número de propriedades de chave correspondentes do CIMType. Além disso, as chaves da classe de exibição de união devem identificar exclusivamente todas as instâncias de origem. Em alguns casos, talvez seja necessário especificar as propriedades do sistema para garantir que as instâncias sejam exclusivas. Por exemplo, se você criar uma exibição da união de duas classes idênticas em dois namespaces diferentes, poderá incluir a propriedade __Namespace como uma chave na classe de exibição para diferenciar entre as duas instâncias. Se você usar duas classes semelhantes do mesmo namespace para criar uma exibição, poderá usar a propriedade __Class para distinguir entre as duas. Renomeie todas as propriedades do sistema na exibição para que você possa evitar um conflito com as propriedades do sistema da classe de exibição.

  6. Defina os métodos desejados usando o qualificador MethodSource.

    Ao contrário de outras classes de exibição, você pode criar métodos para modificar uma exibição de união.

O exemplo de código a seguir descreve uma classe de exibição de união.

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