Udostępnij przez


Tworzenie nowego obiektu na podstawie starych właściwości

Klasa widoku połączenia zawiera właściwości z instancji klas źródłowych, które są połączone wspólną wartością właściwości, takich jak Class1.Prop1 = Class2.Prop2. Każde wystąpienie w klasie widoku sprzężenia składa się z części różnych wystąpień klasy.

Możesz oprzeć klasę widoku sprzężenia na nierówności wartości właściwości, takich jak Class1.Prop1<>Class2.Prop2, w których Prop1 i Prop2 nie są mapowane na tę samą właściwość w klasie widoku.

Klasa widoku sprzężenia jest przydatna, gdy informacje, których szukasz, są zawarte w osobnych, ale powiązanych klasach. Jeśli na przykład chcesz uzyskać informacje o drukarce i konfiguracji drukarki, możesz utworzyć klasę widoku sprzężenia, która zawiera niektóre właściwości klasy Win32_Printer i niektóre właściwości klasy Win32_PrinterConfiguration. Bez View Providera, musisz pobrać i scalić właściwości oddzielnych instancji, aby uzyskać potrzebne informacje.

Poniższa procedura opisuje sposób tworzenia klasy widoku połączeń.

Aby utworzyć klasę widoku łączenia

  1. Rozpocznij definicję klasy za pomocą kwalifikatora ciągu znaków JoinOn.

    JoinOn, Associationi Union kwalifikatory wzajemnie się wykluczają.

  2. W razie potrzeby przefiltruj wystąpienia, które mają być do klasy połączenia, stosując kwalifikator PostJoinFilter.

    Dostawca PostJoinFilter umożliwia ograniczenie wystąpień klasy widoku do wystąpień spełniających określone warunki.

  3. Utwórz zapytania definiujące wystąpienia źródłowe klasy widoku za pomocą kwalifikatora ViewSources.

  4. Zdefiniuj nazwy i lokalizacje przestrzeni nazw, w których znajdują się wystąpienia źródłowe z ViewSpaces jako kwalifikatorem.

  5. Określ właściwości, które chcesz mieć w klasie łączonego widoku z kwalifikatorem PropertySources.

    Gdy właściwości są dodawane do widoku połączenia na podstawie równości, dwie właściwości źródłowe muszą być mapowane w jednym PropertySources kwalifikatorze.

    Poniższy przykład kodu przedstawia dwie właściwości, które są mapowane w jednym kwalifikatorze PropertySources.

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

    Używając kwalifikatora HiddenDefault, można oznaczyć właściwości należące do klasy źródłowej.

Poniższy przykład kodu przedstawia klasę widoku sprzężenia utworzoną na podstawie klas dostawcy monitora wydajności Win32_PerfRawData_PerfProc_Process i Win32_PerfRawData_PerfProc_Thread z właściwościami obu klas połączonych przez właściwość 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;    
};