Freigeben über


Erstellen einer neuen Instanz aus alten Eigenschaften

Eine Joinansichtsklasse enthält Eigenschaften aus Quellklasseninstanzen, die durch einen gemeinsamen Eigenschaftswert verbunden sind, z. B.Class1.Prop1 = Class2.Prop2. Jede Instanz einer Joinansichtsklasse besteht aus Teilen unterschiedlicher Klasseninstanzen.

Sie können eine Joinansichtsklasse auf Ungleichheit von Eigenschaftswerten basieren lassen, z. B. Class1.Prop1<>Class2.Prop2, wobei Prop1 und Prop2 nicht derselben Eigenschaft in der Ansichtsklasse zugeordnet sind.

Eine Joinansichtsklasse ist hilfreich, wenn die gesuchten Informationen in separaten, aber verwandten Klassen enthalten sind. Wenn Sie beispielsweise Informationen zu einem Drucker und zur Druckerkonfiguration benötigen, können Sie eine Joinansichtsklasse erstellen, die einige Eigenschaften der Win32_Printer-Klasse und einige der Eigenschaften der Win32_PrinterConfiguration-Klasse enthält. Ohne den Ansichtsanbieter müssen Sie die Eigenschaften der separaten Instanzen abrufen und zusammenführen, um die benötigten Informationen zu erhalten.

Im folgenden Verfahren wird das Erstellen einer Joinansichtsklasse beschrieben.

So erstellen Sie eine Joinansichtsklasse

  1. Beginnen Sie eine Klassendefinition mit dem Zeichenfolgenqualifizierer JoinOn.

    Die Qualifizierer JoinOn, Association und Union schließen sich gegenseitig aus.

  2. Filtern Sie bei Bedarf die in der Joinklasse gewünschten Instanzen, indem Sie den PostJoinFilter-Qualifizierer anwenden.

    Mit dem PostJoinFilter-Anbieter können Sie die Instanzen einer Ansichtsklasse auf Instanzen beschränken, die bestimmte Bedingungen erfüllen.

  3. Erstellen Sie die Abfragen, die Quellinstanzen der Ansichtsklasse mit dem ViewSources-Qualifizierer definieren.

  4. Bestimmen Sie mit dem ViewSpaces-Qualifizierer die Namen und Speicherorte der Namespaces, in denen sich die Quellinstanzen befinden.

  5. Bestimmen Sie mit dem PropertySources-Qualifizierer die gewünschten Eigenschaften in einer Joinansichtsklasse.

    Wenn Eigenschaften basierend auf Gleichheit zur Joinansicht hinzugefügt werden, müssen die beiden Quelleigenschaften in einem PropertySources-Qualifizierer zugeordnet werden.

    Das folgende Codebeispiel zeigt zwei Eigenschaften, die in einem PropertySources-Qualifizierer zugeordnet sind.

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

    Mithilfe des HiddenDefault-Qualifizierers können Sie die Eigenschaften markieren, die zu einer Quellklasse gehören.

Das folgende Codebeispiel zeigt eine Joinansichtsklasse, die aus den Systemmonitor-Anbieterklassen Win32_PerfRawData_PerfProc_Process und Win32_PerfRawData_PerfProc_Thread mit Eigenschaften beider Klassen erstellt wurde, die anhand der ProcessID-Eigenschaft verknüpft sind.

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