Share via


Creazione di una nuova istanza da proprietà precedenti

Una classe di visualizzazione join contiene le proprietà delle istanze della classe di origine connesse da un valore di proprietà comune, ad esempio Class1.Prop1 = Class2.Prop2. Ogni istanza di una classe di visualizzazione join è costituita da parti di istanze di classi diverse.

È possibile basare una classe di visualizzazione join sulla disuguaglianza dei valori delle proprietà, ad esempio Class1.Prop1<>Class2.Prop2 , in cui Prop1 e Prop2 non vengono mappati alla stessa proprietà nella classe di visualizzazione.

Una classe di visualizzazione join è utile quando le informazioni che si stanno cercando sono contenute in classi separate ma correlate. Ad esempio, se si desiderano informazioni su una stampante e sulla configurazione della stampante, è possibile creare una classe di visualizzazione join contenente alcune delle proprietà della classe Win32_Printer e alcune delle proprietà della classe Win32_PrinterConfiguration . Senza il provider di visualizzazioni, è necessario recuperare e unire le proprietà delle istanze separate per ottenere le informazioni necessarie.

La procedura seguente descrive come creare una classe di visualizzazione join.

Per creare una classe di visualizzazione join

  1. Iniziare una definizione di classe con il qualificatore di stringa JoinOn .

    I qualificatori JoinOn, Association e Union si escludono a vicenda.

  2. Se necessario, filtrare le istanze desiderate nella classe join applicando il qualificatore PostJoinFilter .

    Il provider PostJoinFilter consente di limitare le istanze di una classe di visualizzazione a istanze che soddisfano condizioni specifiche.

  3. Creare le query che definiscono le istanze di origine della classe di visualizzazione con il qualificatore ViewSources .

  4. Definire i nomi e i percorsi degli spazi dei nomi in cui si trovano le istanze di origine con il qualificatore ViewSpaces .

  5. Definire le proprietà desiderate in una classe di visualizzazione join con il qualificatore PropertySources .

    Quando le proprietà vengono aggiunte alla visualizzazione join in base all'uguaglianza, è necessario eseguire il mapping delle due proprietà di origine in un qualificatore PropertySources .

    L'esempio di codice seguente mostra due proprietà mappate in un qualificatore PropertySources .

    [PropertySources{"IDProcess", "IDProcess"}] Uint32 ProcessID;
    

    Usando il qualificatore HiddenDefault , è possibile contrassegnare le proprietà che appartengono a una classe di origine.

Nell'esempio di codice seguente viene illustrata una classe di visualizzazione join creata dalle classi del provider Monitor prestazioni Win32_PerfRawData_PerfProc_Process e Win32_PerfRawData_PerfProc_Thread con proprietà di entrambe le classi unite dalla proprietà ProcessID.

#pragma namespace("\\\\.\\root\\cimv2")

instance of __Win32Provider as $DataProv
{
    Name = "MS_VIEW_INSTANCE_PROVIDER";
    ClsId = "{AA70DDF4-E11C-11D1-ABB0-00C04FD9159E}";
    ImpersonationLevel = 1;
    PerUserInitialization = "True";
    
};

instance of __InstanceProviderRegistration
{
    Provider = $DataProv;
    SupportsPut = True;
    SupportsGet = True;
    SupportsDelete = True;
    SupportsEnumeration = True;
    QuerySupportLevels = {"WQL:UnarySelect"};
};

[JoinOn("Win32_PerfRawData_PerfProc_Process.IDProcess = 
    Win32_PerfRawData_PerfProc_Thread.IDProcess"), 
ViewSources{"SELECT Name, IDProcess, PriorityBase 
    FROM Win32_PerfRawData_PerfProc_Process", 
    "SELECT Name, IDProcess, ThreadState, 
    PriorityCurrent FROM Win32_PerfRawData_PerfProc_Thread"},
ViewSpaces{"\\\\.\\root\\cimv2", "\\\\.\\root\\cimv2"},
dynamic: ToInstance, provider("MS_VIEW_INSTANCE_PROVIDER")]

class JoinedProcessThread
{
    [PropertySources{"IDProcess", "IDProcess"}] 
        Uint32 ProcessID;
    [PropertySources{"Name", ""}] 
        String PName;
    [PropertySources{"", "Name"}, key]   
        String TName;
    [PropertySources{"", "ThreadState"}] 
        Uint32 State;
    [PropertySources{"PriorityBase", ""}] 
        Uint32 BasePriority;
    [PropertySources{"", "PriorityCurrent"}] 
        Uint32 CurrentPriority;    
};