Compartir a través de


Creación de una nueva instancia a partir de propiedades antiguas

Una clase de vista Join contiene propiedades de instancias de clase de origen conectadas por un valor de propiedad común, como Class1.Prop1 = Class2.Prop2. Cada instancia de una clase de vista Join consta de partes de diferentes instancias de clase.

Puede basar una clase de vista Join en la desigualdad de los valores de la propiedad, como Class1.Prop1<>Class2.Prop2, donde Prop1 y Prop2 no están asignados a la misma propiedad de la clase de vista.

Una clase de vista Join resulta útil cuando la información que busca se encuentra en clases diferentes pero relacionadas. Por ejemplo, si desea obtener información sobre una impresora y su configuración, puede crear una clase de vista Join que contenga algunas de las propiedades de la clase Win32_Printer y algunas de las propiedades de la clase Win32_PrinterConfiguration. Sin el proveedor de vistas, debe recuperar y combinar las propiedades de las diferentes instancias para obtener la información que necesita.

En el siguiente procedimiento se describe cómo crear una clase de vista Join.

Para crear una clase de vista Join

  1. Inicie una definición de clase con el calificador de cadena JoinOn.

    Los calificadores JoinOn, Association y Union son mutuamente excluyentes.

  2. Si es necesario, filtre las instancias que desee en la clase Join aplicando el calificador PostJoinFilter.

    El proveedor PostJoinFilter permite restringir las instancias de una clase de vista a instancias que cumplen condiciones específicas.

  3. Cree las consultas que definen las instancias de origen de la clase de vista con el calificador ViewSources.

  4. Defina los nombres y las ubicaciones de los espacios de nombres donde se encuentran las instancias de origen con el calificador ViewSpaces.

  5. Defina las propiedades que desee en una clase de vista Join con el calificador PropertySources.

    Cuando se agregan propiedades a la vista Join en función de la igualdad, las dos propiedades de origen deben asignarse en un calificador PropertySources.

    En el siguiente código de ejemplo se muestran dos propiedades asignadas en un calificador PropertySources.

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

    Usando el calificador HiddenDefault, puede etiquetar las propiedades que pertenecen a una clase de origen.

En el ejemplo de código siguiente se muestra una clase de vista Join creada a partir de las clases de proveedor del Monitor de rendimiento Win32_PerfRawData_PerfProc_Process y Win32_PerfRawData_PerfProc_Thread, con las propiedades de ambas clases unidas por la propiedad 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;    
};