Creazione di una classe Union View
Una classe di visualizzazione unione è un'unione logica delle istanze della classe di origine. Una classe di visualizzazione unione include tutte le istanze delle classi di origine, a meno che non si limitino le istanze includendo una clausola WHERE nella query di origine.
Le classi di visualizzazione unione sono utili quando si desidera visualizzare istanze di classi simili o identiche che si trovano in spazi dei nomi diversi o in computer diversi. Ad esempio, è possibile creare una classe union contenente istanze di unità disco diverse da monitorare.
È anche possibile basare le proprietà di una classe di visualizzazione unione sulle proprietà non presenti in tutte le istanze della classe di origine. Se le istanze della classe di origine non hanno la stessa proprietà, le proprietà delle istanze della classe union hanno un valore NULL. Ad esempio, se un'unità disco rigido ha una proprietà di temperatura ma un'altra non, è comunque possibile creare un'unione tra i due dischi.
La procedura seguente descrive come creare una classe di visualizzazione unione.
Per creare una classe di visualizzazione unione
Iniziare la definizione della classe con il qualificatore di stringa union .
I qualificatori JoinOn, Association e Union si escludono a vicenda.
Creare le query che definiscono le classi di origine usate nella classe view con il qualificatore ViewSources .
Definire i nomi e la posizione degli spazi dei nomi in cui si trovano le classi di origine con il qualificatore ViewSpaces .
Definire le proprietà che eseguono il mapping alle proprietà nelle classi di origine con il qualificatore PropertySources .
Se necessario, è possibile contrassegnare una delle proprietà come appartenenti a una classe di origine usando il qualificatore HiddenDefault .
Definire le proprietà chiave delle classi di origine della classe di visualizzazione unione.
Ogni classe di origine deve avere lo stesso numero di proprietà chiave corrispondenti a CIMType. Inoltre, le chiavi della classe di visualizzazione unione devono identificare in modo univoco tutte le istanze di origine. In alcuni casi, potrebbe essere necessario specificare le proprietà di sistema per assicurarsi che le istanze siano univoche. Ad esempio, se si crea una vista dall'unione di due classi identiche in due spazi dei nomi diversi, è possibile includere la proprietà __Namespace come chiave nella classe di visualizzazione per distinguere tra le due istanze. Se si usano due classi simili dello stesso spazio dei nomi per creare una vista, è possibile utilizzare la proprietà __Class per distinguere tra i due. Rinominare tutte le proprietà di sistema nella visualizzazione in modo da evitare un conflitto con le proprietà di sistema della classe di visualizzazione.
Definire i metodi desiderati usando il qualificatore MethodSource .
A differenza di altre classi di visualizzazione, è possibile creare metodi per modificare una visualizzazione unione.
Nell'esempio di codice seguente viene descritta una classe di visualizzazione unione.
[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;
};