Share via


Közvetlen szerzői műveletek végrehajtása a felügyeleticsomag-fájlon kivetítők kezeléséhez

 

Közzétéve: 2016. július

Hatókör: System Center 2012 SP1 - Service Manager, System Center 2012 R2 Service Manager, System Center 2012 - Service Manager

A felügyeleti csomagok használatával irányíthatók és bővíthetők a System Center 2012 – Service Manager funkciói. A jelen témakör a kivetítőket használja példaként, és ezen keresztül mutatja be a felügyeleti csomagok különböző részeit, valamint meghatározza azokat a különféle objektumokat, amelyekre szükség lehet egy szervezet kivetítőinek a kezeléséhez.

A témakör egy teljes körű felügyeleticsomag-mintát tartalmaz, a szervezeten belüli kivetítőkezeléshez szükséges kiterjesztésekkel. Emellett bemutatja, hogyan lehet felügyeleti csomagokat importálni Windows PowerShell-parancsmagok használatával.

A témakör a felügyeleti csomagok alábbi szakaszait mutatja be:

  • Manifest

  • TypeDefinitions az osztályenumerálások és -kapcsolatok létrehozásához

  • Űrlapok

Továbbá a témakör ismerteti a felügyeleti csomag alábbi szakaszait is, amelyek a felhasználói felület (UI) és a honosítás elemeire vonatkozó deklarált és definiált értékeket tartalmazza:

  • Categories

  • Presentation

  • Osztálykiterjesztések

A Manifest szakasz

A felügyeleti csomag első szakasza a jegyzék (manifest). A jegyzék azonosítja be a felügyeleti csomagot, valamint deklarálja a többi felügyeleti csomagra mutató esetleges hivatkozásokat.

Az alábbi példa egy olyan felügyeleti csomag Manifest szakaszát mutatja, amelyet a szervezet kivetítőinek (projectors) nyomon követésére terveztek.

  
<Manifest>  
  <Identity>  
    <ID>ServiceManager.Projector_Authoring</ID>  
    <Version>7.0.3707.0</Version>  
  </Identity>  
  <Name>Projector Library</Name>  
  <References>  
    <Reference Alias="System">  
      <ID>System.Library</ID>  
      <Version>7.0.3707.0</Version>  
      <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>  
    </Reference>  
    <Reference Alias="SMConsole">  
      <ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Console</ID>  
      <Version>7.0.3707.0</Version>  
      <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>  
    </Reference>  
    <Reference Alias="Authoring">  
      <ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring</ID>  
      <Version>7.0.3707.0</Version>  
      <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>  
    </Reference>  
    <Reference Alias="SMConfig">  
      <ID>ServiceManager.ConfigurationManagement.Library</ID>  
      <Version>7.0.3707.0</Version>  
      <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>  
    </Reference>  
  </References>  
</Manifest>  
System_CAPS_ICON_important.jpg Fontos!


A References szakaszban ne használjon nem alfanumerikus értékeket, például egy „.” karaktert a hivatkozás Alias paraméterében.

A TypeDefinitions szakasz – osztály létrehozása

A felügyeleti csomag következő szakasz a típusdefiníciókat tartalmazza. A felügyeleti csomag TypeDefinitions szakasza a felügyeleti csomag által használt osztályok, enumerálások és kapcsolatok definícióit tartalmazza.

Az alábbi példában egy olyan osztály látható, amely a kivetítők adatait tartalmazza:

  
<TypeDefinitions>  
    <EntityTypes>  
      <ClassTypes>  
        <ClassType ID="System.ConfigItem.Projector" Base="System!System.ConfigItem" Hosted="false" Accessibility="Public" Abstract="false">  
          <Property ID="SerialNumber" Type="int" Key="true" />  
          <Property ID="Make" Type="string" />  
          <Property ID="Model" Type="string"  />  
          <Property ID="Location" Type="string" />  
          <Property ID="Condition" Type="enum" EnumType="ProjectorCondition"  />  
        </ClassType>  
      </ClassTypes>  
      <RelationshipTypes>  
      </RelationshipTypes>  
      <EnumerationTypes>  
        <EnumerationValue ID="ProjectorCondition" Accessibility="Public"/>  
        <EnumerationValue ID="ProjectorCondition.Working" Parent="ProjectorCondition" Accessibility="Public"/>  
        <EnumerationValue ID="ProjectorCondition.BeingRepaired" Parent="ProjectorCondition" Accessibility="Public"/>  
        <EnumerationValue ID="ProjectorCondition.New" Parent="ProjectorCondition" Accessibility="Public"/>  
        <EnumerationValue ID="ProjectorCondition.Broken" Parent="ProjectorCondition" Accessibility="Public"/>  
        <EnumerationValue ID="ProjectorViewTasksEnumeration" Accessibility="Public"/>  
      </EnumerationTypes>  
    </EntityTypes>  
  </TypeDefinitions>  
  

Alább olvasható az egyes típusdefiníciós szakaszok tartalmának részletes leírása.

A ClassTypes szakasz

A ClassType elem definiálja a kivetítő (projector) osztályt:

<ClassType ID="System.ConfigItem.Projector" Base="System!System.ConfigItem" Hosted="false" Accessibility="Public" Abstract="false">

Az ID attribútum ezen osztály egyedi azonosítója. Ennek beállítása:

ID="System.ConfigItem.Projector"

A Base attribútum annak az osztálynak az azonosítója, amelyből ez az osztály származtatható. Mivel az egyes kivetítők konfigurációelemnek minősülhetnek, ennek beállítása:

Base="System!System.ConfigItem"

A System! jelölésmód azt fejezi ki, hogy a System.ConfigItem osztály a System alias által hivatkozott felügyeleti csomagban található.

A Hosted attribútum adja meg, hogy az adott osztályt egy másik osztály birtokolja-e. Ilyen esetben az osztálypéldány csak akkor létezhet, ha létezik egy azt tartalmazó birtoklópéldány. A kivetítőket például semmi sem birtokolja, ezért a Hosted attribútum értéke false (hamis):

Hosted="false"

A Hosted attribútum true (igaz) értékűre állítása azt jelzi, hogy az osztályt egy másik osztály birtokolja. A birtoklási kapcsolatot deklarálni kell a RelationshipTypes szakaszban.

Az Accessibility attribútum adja meg, hogy az adott osztályból származtathatók-e más osztályok. Ha szeretné engedélyezni másoknak, hogy az osztályból konkrétabb változatokat hozzanak létre, akkor állítsa ezt az attribútumot public (nyilvános) értékűre; például:

Accessibility="Public"

Ha az Accessibility attribútum számára az Internal (Belső) értéket állítja be, azzal megakadályozza, hogy más osztályok származtathatók legyenek ebből az osztályból.

Az Abstract attribútum meghatározza, hogy létre lehessen-e hozni példányokat az osztályról, vagy inkább csak szülőosztályként működjön, amelyből az egyéb osztályok származtathatók. Ebben a példában ennek az attribútumnak az értéke false. Ha az attribútum értéke true lenne, az azt jelentené, hogy nem hozhatók létre példányok az osztályról közvetlenül, és hogy ez az osztály kizárólag szülőosztályként használható.

Az osztálydefiníció következő szakasza az osztály tulajdonságait tartalmazza. A jelen példa osztálytulajdonságait definiáló XML-kód az alábbi példában látható:

  
<Property ID="SerialNumber" Type="int" Key="true" />  
<Property ID="Make" Type="string" />  
<Property ID="Model" Type="string"  />  
<Property ID="Location" Type="string" />  
<Property ID="Condition" Type="enum" EnumType="ProjectorCondition"  />  
  

Mindegyik Property elemhez az alábbi attribútumok tartoznak:

  • Az ID attribútum a tulajdonság egyedi azonosítóját jelzi.

  • A Type attribútum a tulajdonság adattípusát jelöli.

  • A Key attribútum. Ha ezt az attribútumot true értékűre állítja, az azt jelenti, hogy ezt a tulajdonságot kívánja használni az osztály egyedi azonosítására.

Enumerálástípusok létrehozása

Az enum adattípus enumerálásai egy különleges adattípust alkotnak. Az enumerálások használatával megkötések állíthatók be arra vonatkozóan, hogy egy adott tulajdonságnál mely konkrét értékek engedélyezettek. Az enumerálások lehetnek hierarchikusak; egy enumerálás szolgálhat egy másik alapjául.

Az enumerálásokat a megoldáscsomag EnumertionTypes szakaszában lehet definiálni. Az enumerálások definíciója a gyökérenumerálást, majd utána a tényleges enumerálási értékeket tartalmazza.

Az egyes EnumerationValue címkékhez több attribútum is tartozhat:

Ebben a példában definiálva van egy enumerálás a kivetítők állapotának nyomon követése céljából. Az alábbi attribútumok definiálják ezt az enumerálást:

  • Az ID az enumerálás vagy az enumerálásérték azonosítója.

  • Az Accessibility meghatározza, hogy ez az enumeráló tartalmazhat-e egyéb enumerálókat.

  • A ParentName attribútum az enumerálóérték szülőjének ID azonosítóját határozza meg.

  
<EnumerationTypes>  
   <EnumerationValue ID="ProjectorCondition" Accessibility="Public"/>  
   <EnumerationValue ID="ProjectorCondition.Working" Parent="ProjectorCondition" Accessibility="Public"/>  
   <EnumerationValue ID="ProjectorCondition.BeingRepaired" Parent="ProjectorCondition" Accessibility="Public"/>  
   <EnumerationValue ID="ProjectorCondition.New" Parent="ProjectorCondition" Accessibility="Public"/>  
   <EnumerationValue ID="ProjectorCondition.Broken" Parent="ProjectorCondition" Accessibility="Public"/>  
   <EnumerationValue ID="ProjectorViewTasksEnumeration" Accessibility="Public"/>  
</EnumerationTypes>  
  

Űrlap létrehozása

A Service Manager űrlapjai a Windows Presentation Framework (WPF) keretrendszer űrlapjain alapulnak. A Service Manager egyszerű (az XML-definícióhoz hozzáadott) attribútumokkal terjeszti ki a WPF keretrendszert, amelyek lehetővé teszik a Service Manager számára, hogy az űrlaphoz kösse a felügyeleti csomag adatait.

A Service Manager űrlapjai számos különböző eszközzel létrehozhatók, beleértve a Microsoft Visual Studio és a Microsoft Expression Blend termékeket. Az űrlapok XML-alapúak, ezért bármilyen XML-szerkesztő használatával is lehetőség van a definiálásukra.

Az alábbi példában egy olyan űrlap-definíció látható, amely a Microsoft Expression Blend használatával lett létrehozva. Az űrlap négy vezérlőt tartalmaz: három szövegmezőt és egy kombinált listát. A vezérlők a Projector osztály korábban definiált tulajdonságaihoz vannak kötve:

  
<UserControl xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:SMFormsDemo" x:Class="SMFormsDemo.TestControl" x:Name="Control" Width="574" Height="390" Opacity="1" xmlns:d="https://schemas.microsoft.com/expression/blend/2008" xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">  
   <UserControl.Resources>  
      <ObjectDataProvider ObjectType="{x:Type local:helper}" MethodName="GetStatusValues" x:Key="getStatusValues"/>  
   </UserControl.Resources>  
   <Grid x:Name="LayoutRoot">  
      <Label Margin="70,20,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" Content="Serial Number:"/>  
      <TextBox Margin="180,20,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" d:IsStaticText="True" Text="{Binding Path=SerialNumber, Mode=TwoWay}"/>  
      <Label Margin="70,60,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" Content="Make:"/>  
      <TextBox Margin="180,60,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" d:IsStaticText="True" Text="{Binding Path=Make, Mode=TwoWay}"/>  
      <Label Margin="70,100,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" Content="Model:"/>  
      <TextBox Margin="180,100,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" d:IsStaticText="True" Text="{Binding Path=Model, Mode=TwoWay}"/>  
      <Label Margin="70,140,80,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" Content="Location:"/>  
      <TextBox Margin="180,140,80,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" d:IsStaticText="True" Text="{Binding Path=Location, Mode=TwoWay}"/>  
      <Label Margin="70,180,80,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" Content="Condition:"/>  
      <ComboBox Margin="180,180,80,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" ItemsSource="{Binding Source={StaticResource getStatusValues}, Mode=OneWay }" IsSynchronizedWithCurrentItem="True">  
         <ComboBox.SelectedItem>  
            <Binding Path="Condition" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/>  
         </ComboBox.SelectedItem>  
         <ComboBox.ItemTemplate>  
            <DataTemplate>  
               <StackPanel>  
                  <TextBlock Text="{Binding Path=DisplayName}"/>  
               </StackPanel>  
            </DataTemplate>  
         </ComboBox.ItemTemplate>  
      </ComboBox>  
   </Grid>  
</UserControl>  
  

Ahhoz, hogy az űrlap vezérlőit a felügyeleti csomagban definiált osztálytulajdonságokhoz lehessen kötni, meg kell határozni néhány elemet.

Szöveges vezérlők kötése

Ha szövegmezőket szeretne a felügyeleti csomagban található osztálytulajdonságokhoz kötni, adja hozzá a Binding Path címkét a szövegdoboz-vezérlő Text tulajdonságához; például:

{Binding Path=SerialNumber, Mode=TwoWay}  

Ez a címke a felügyeleti csomagban definiált Projector osztály SerialNumber (Sorozatszám) tulajdonságához köti a szövegmező-vezérlőt, valamint azt is meghatározza, hogy ez egy kétirányú kötés legyen. A tulajdonság értéke lekérésre kerül az adatbázisból és az űrlap betöltődésekor megjelenik a szövegmezőben. Ha a felhasználó módosítást végez, akkor a tulajdonság értéke visszakerül az adatbázisba, és ott tárolódik.

Kombinált listák kötése

Ahhoz, hogy az űrlap lekérhesse az enumerálási adatokat a mögöttes felügyeleti csomagból és az űrlapon található vezérlőhöz köthesse azokat, definiálni kell egy segítőosztályt az űrlaphoz tartó code-behind háttérkódban. A segítőosztálynak tartalmaznia kell egy olyan metódust, amely a felügyeleti csomagban definiált enumerálást ad vissza. Az enumerálás visszaadásához használja az aktuális felügyeleti csomag GetEnumerations metódusát. A példány elérése a Service Manager szoftverfejlesztői készletének (SDK) ConsoleContextHelper osztályával történik. Az alábbi példában egy segítőosztály egy olyan GetStatusValues metódust definiál, amely lekéri a felügyeleti csomagban definiált ProjectorCondition (Kivetítő állapota) enumerálás értékeit:

  
public class helper  
{  
   public static ICollection<IDataItem> GetStatusValues()  
   {  
      return ConsoleContextHelper.Instance.GetEnumerations("ProjectorCondition",true);  
   }  
}  
  

A metódus eléréséhez definiálni kell néhány dolgot a felügyeleti csomag űrlap-definíciójában.

Először is hozzá kell adni az űrlap-definícióhoz egy olyan névteret, amely az űrlap code behind háttérkódjának névterére mutat. Az alábbi példában a következő a névtér: SMFormsDemo:

xmlns:local="clr-namespace:SMFormsDemo"  

Ezután definiálni kell egy ObjectDataProvider adatszolgáltatót, amely a kivetítő állapotát megjelenítő kombinált lista értékeit biztosítja. Ez az ObjectDataProvider erőforrásként van definiálva:

  
<UserControl.Resources>  
   <ObjectDataProvider   
      ObjectType="{x:Type local:helper}"    
      MethodName="GetStatusValues"   
      x:Key="getStatusValues" />  
</UserControl.Resources>  
  

Ez az adatszolgáltató meghatározza annak az objektumnak és metódusnak a nevét, amely lekéri az enumerálási adatokat a felügyeleti csomagból.

Végül a kombinált listának a felügyeleti csomagban definiált enumerálásértékekhez való kötéséhez hozzá kell adni az ItemsSource attribútumot a kombinált lista definíciójához. Ez az attribútum meghatározza a lekért enumerálásértékek helyét; például:

ItemsSource="{Binding Source={StaticResource getStatusValues}, Mode=OneWay }"  

Ezután a kombinált lista vezérlőjének Extensible Application Markup Language (XAML)-definíciójához hozzá kell adni a SelectedItem és a ItemTemplate elemet. Az alábbi példában a kombinált lista kötési XAML-kódot tartalmazó definíciója látható:

  
<ComboBox Margin="180,180,80,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" ItemsSource="{Binding Source={StaticResource getStatusValues}, Mode=OneWay }" IsSynchronizedWithCurrentItem="True">  
   <ComboBox.SelectedItem>  
      <Binding Path="Condition" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/>  
   </ComboBox.SelectedItem>  
   <ComboBox.ItemTemplate>  
      <DataTemplate>  
         <StackPanel>  
            <TextBlock Text="{Binding Path=DisplayName}"/>  
         </StackPanel>  
      </DataTemplate>  
   </ComboBox.ItemTemplate>  
</ComboBox>  
  

A Category szakasz

A felügyeleti csomag Category szakasza egybe csoportosítja a felügyeleti csomag elemeit a könnyebb navigálás érdekében.

A példa első két <Category> eleme a Projectors nézet Új és Szerkesztés feladatainak megjelenítését irányítja.

<Category ID="ProjectorViewHasTasks.View" Target="AllProjectorsView" Value="ProjectorViewTasksEnumeration" />  
<Category ID="ProjectorViewHasTasks.CreateTask" Target="CreateProjector" Value="ProjectorViewTasksEnumeration" />  

A példa felügyeleti csomag ez utáni két Category eleme azt a célt szolgálja, hogy a kivetítők állapotának enumerálása megjelenhessen a Service Manager konzolSzerzői műveletek ablaktáblájának Lista nézetében. Ez lehetővé teszi a felhasználó számára az értékek személyre szabását:

<Category ID="Project.ProjectorConditionEnumVisibleCategory" Target="ProjectorCondition" Value="System!VisibleToUser"/>  

Az alábbi példában lévő katalógus felvételével megjelenik a Target attribútum által hivatkozott EnumerationValue érték Listák nézetben a Szerkesztés feladat.

<Category ID="Projector.ProjectorConditionCategory" Target="ProjectorCondition" Value="Authoring!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.EnumerationViewTasks"/>  

A Presentation szakasz

A felügyeleti csomag Presentation szakasza a felhasználói felülettel kapcsolatos elemeket deklarálja és definiálja. Ezek közé tartoznak az űrlap-deklarációk, a kategóriák, valamint a konzolfeladatok.

A Forms szakasz

A felügyeleti csomag által használt űrlapok a Forms (Űrlapok) szakaszban vannak deklarálva. Az alábbi példa meghatározza, hogy hol található a Projector osztály példányainak megjelenítése és szerkesztése céljából definiált űrlap. Ez a felügyeleti csomagban definiált Projector osztályhoz köti az űrlapot:

  
<Forms>  
   <Form TypeName="SMFormsDemo.TestControl"  
      ID="TestForm"  
      Target="System.ConfigItem.Projector"  
      Assembly="ProjectorFormsAssembly"  
      Accessibility="Public">  
   <Category>Form</Category>  
   </Form>  
</Forms>  
  

Az előző példában a következő attribútumok szerepeltek:

  • A TypeName attribútum az űrlap névterét és osztályának nevét tartalmazza.

  • Az ID attribútum az űrlappéldány egyedi azonosítója.

  • A Target attribútum annak az osztálynak a nevét tartalmazza, amellyel az űrlap kötést alakít ki.

  • Az Assembly attribútum az űrlapot tartalmazó külső erőforrásra hivatkozik.

  • Az Accessibility attribútum azt definiálja, hogy az űrlap személyre szabható-e.

Nézet definiálása

A felügyeleti csomag Views szakasza a felhasználói felület (UI) nézeteinek definícióit tartalmazza. Ezek a nézetek a felügyeleti csomag objektumainak szűrésére és megjelenítésére használhatók.

<View Target="System.ConfigItem.Projector"   
Enabled="true"  
TypeID="SMConsole!GridViewType"  
ID="AllProjectorsView"  
Accessibility="Public">  
<Category>NotUsed</Category>  
<Data>  
<Adapters>  
      <Adapter AdapterName="dataportal:EnterpriseManagementObjectAdaptor">  
                <AdapterAssembly>Microsoft.EnterpriseManagement.UI.SdkDataAccess</AdapterAssembly>  
   <AdapterType>  
Microsoft.EnterpriseManagement.UI.SdkDataAccess.DataAdapters.EnterpriseManagementObjectAdapter  
   </AdapterType>  
      </Adapter>  
            <Adapter AdapterName="viewframework://adapters/ListDefault">  
              <AdapterAssembly>Microsoft.EnterpriseManagement.UI.ViewFramework</AdapterAssembly>  
              <AdapterType>Microsoft.EnterpriseManagement.UI.ViewFramework.ListSupportAdapter</AdapterType>  
            </Adapter>  
</Adapters>  
<ItemsSource>  
  <AdvancedListSupportClass DataTypeName="" AdapterName="viewframework://adapters/AdvancedList" FullUpdateAdapter="dataportal:EnterpriseManagementObjectAdapter" FullUpdateFrequency='1' DataSource="mom:ManagementGroup" IsRecurring="true" RecurrenceFrequency="5000"  treaming='true' xmlns="clr-namespace:Microsoft.EnterpriseManagement.UI.ViewFramework;assembly=Microsoft.EnterpriseManagement.UI.ViewFramework" xmlns:av="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" >  
    <AdvancedListSupportClass.Parameters>  
                <QueryParameter Parameter="TargetClass" Value="System.ConfigItem.Projector"/>  
    </AdvancedListSupportClass.Parameters>  
    </AdvancedListSupportClass>  
    </ItemsSource>  
    <Criteria />  
</Data>  
<Presentation>  
<Columns>  
            <mux:ColumnCollection xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:mux="https://schemas.microsoft.com/SystemCenter/Common/UI/Views/GridView" xmlns:s="clr-namespace:System;assembly=mscorlib">  
              <mux:Column Name="SerialNumber" DisplayMemberBinding="{Binding Path=SerialNumber}" Width="100" DisplayName="SerialNumber" Property="SerialNumber" DataType="s:Int32" />  
              <mux:Column Name="Location" DisplayMemberBinding="{Binding Path=Location}" Width="100" DisplayName="Location" Property="Location" DataType="s:String" />  
              <mux:Column Name="Condition" DisplayMemberBinding="{Binding Path=Condition.DisplayName}" Width="100" DisplayName="Condition" Property="Condition.DisplayName" DataType="s:String" />  
              <mux:Column Name="DisplayName" DisplayMemberBinding="{Binding Path=DisplayName}" Width="100" DisplayName="Display Name" Property="DisplayName" DataType="s:String" />  
              <mux:Column Name="OwnerUser" DisplayMemberBinding="{Binding Path=OwnerUser.DisplayName}" Width="100" DisplayName="SupportOwner" Property="OwnerUser.DisplayName" DataType="s:String" />  
            </mux:ColumnCollection>      
</Columns>  
</Presentation>  
</View>  
  

A View Target attribútum a nézet által megjelenítendő osztályra hivatkozik.

Az előző példában a Service Manager konzol felügyeleti csomagjára tett utalás található. Ez a felügyeleti csomag tartalmazza az egyik használt nézettípus definícióját. Ebben az esetben az SMConsole!GridViewType nézettípus van definiálva.

Az AdvancedListSupportClass több paramétert is definiál; ezek közül a legfontosabb a TargetClass paraméter. Állítsa ezt a paramétert annak a ClassType osztálytípusnak az ID azonosítójára, amely ebben a nézetben meg fog jelenni. A ClassType tulajdonságaiként szolgáló oszlopok megjelenítéséhez használja a Column elemet, és kösse azt a PropertyID attribútumhoz.

A ListSupportClass elem IsRecurring attribútuma határozza meg, hogy a nézet automatikusan frissüljön-e. A RecurrenceFrequency attribútum ezredmásodpercekben definiálja a frissítés időközét. Ebben a példában a frissítés időköze 1 másodperc, ez azonban nem ajánlott beállítás éles környezetekben.

Mappák definiálása

A mappa definiálásával meghatározható a megjelenített nézet helye a navigációs fán. Ebben a példában definiálva van egy konfigurációelem, így a nézet számára az egyetlen megfelelő hely a Konfigurációelemek munkaterület konfigurációelemeket tartalmazó meglévő mappája.

<Folders>  
  <Folder ID="Folder.Projectors" Accessibility="Public" ParentFolder="SMConfig!ServiceManager.Console.ConfigurationManagement.ConfigItem.Root" />  
</Folders>  
<FolderItems>  
   <FolderItem   
      ElementID="AllProjectorsView"   
      Folder="Folder.Projectors" />  
   </FolderItems>  

Az előző példában az ElementID attribútumban található egy hivatkozás a létrehozott nézetre. A Folder attribútum a Folders.Projectors mappára mutat, melynek cserébe megvan a Service Manager konzolConfiguration Manager munkaterületén meghatározott saját gyökere. Ez a gyökérmappa a Configuration Management felügyeleti csomagban van definiálva.

Az ImageReference elem hozzárendeli a korábban létrehozott nézetet egy olyan ikonhoz, amely a Configuration Management névtérben lett definiálva:

<ImageReferences>  
  <ImageReference ElementID="Folder.Projectors" ImageID="SMConfig!ConfigItemImage16x16" />  
  <ImageReference ElementID="AllProjectorsView" ImageID="SMConfig!ConfigItemImage16x16" />  
</ImageReferences>  

Honosítás a LanguagePacks szakasz használatával

A felügyeleti csomag LanaguagePacks (Nyelvi csomagok) szakasza meghatározza a felügyeleti csomag elemeihez tartozó karakterlánc-erőforrásokat és -hozzárendeléseket.

A példában a ProjectorCondition.WorkingEnumerationValue enumerálásértéknek a Working (Működik) szöveget kell megjelenítenie. Ehhez definiálni kell az alábbiak megjelenítendő nevét:

  • Nézet: Az összes kivetítő (All projectors)

  • Enumerálások: működik (working), hibás (broken), szervizelés alatt (in repair), új (new)

  <LanguagePacks>  
    <LanguagePack ID="ENU" IsDefault="true">  
      <DisplayStrings>  
        <DisplayString ElementID="AllProjectorsView">  
          <Name>All Projectors</Name>  
          <Description>This displays all projectors</Description>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.Working">  
          <Name>Working</Name>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.Broken">  
          <Name>Broken</Name>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.BeingRepaired">  
          <Name>In Repair</Name>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.New">  
          <Name>New</Name>  
        </DisplayString>  
      </DisplayStrings>  
    </LanguagePack>  
</LanguagePacks>  
  

Szükség esetén az összes kívánt nyelvhez létrehozhat további LanguagePack elemeket. A felhasználó számára megjelenített karakterlánc kiválasztása a felhasználó területi beállítása alapján történik.

Resources

A felügyeleti csomag Resources (Erőforrások) szakasza azokra a bináris erőforrásokra hivatkozik, amelyek a felügyeleti csomagtól különálló szerelvényekben találhatók. Az alábbi példában található erőforrás úgy van definiálva, hogy az a Projector osztály által használt űrlapot tartalmazó szerelvényre hivatkozik:

<Assembly ID="ProjectorFormsAssembly"    
         Accessibility="Public"   
         QualifiedName="SMFormsDemo, Version=1.0.0.0" FileName="SMFormsDemo.dll" CreationDate="1900-10-12T13:13:13" ModifiedDate="2008-12-12T12:12:12" />  

Osztálykiterjesztések

Az osztálykiterjesztés egy olyan osztály, amely további tulajdonságokkal bővít egy meglévő osztályt. A meglévő osztály a legtöbb esetben egy lezárt felügyeleti csomagban található. Ha a meglévő osztály nem lezárt felügyeleti csomagban található, az osztálykiterjesztésnek a kiterjesztett osztályéval megegyező felügyeleti csomagba kell kerülnie.

Az osztálykiterjesztések öröklik a szülőosztályuk tulajdonságait. Példa:

  • Az A osztálynak vagy egy Tulajdonság1 nevű tulajdonsága

  • A B osztály az A osztályból származik (más szóval: az A osztály kiterjesztése), ezért a B osztálynak is van egy Tulajdonság1 nevű tulajdonsága. Ez a tulajdonság az A osztálytól, vagyis a szülő-, más szóval alaposztálytól öröklődik

  • A B osztály definíciójában egy Tulajdonság2 nevű tulajdonság is szerepel.

  • Bármely a B osztályból származó osztálykiterjesztés örökölni fogja a Tulajdonság1 és a Tulajdonság2 tulajdonságot is.

Az alábbi példa az osztálykiterjesztés definícióját szemlélteti:

  
<TypeDefinitions>  
     <EntityTypes>  
       <ClassTypes>  
         <ClassType ID="IncidentManagmentPack.Extension" Accessibility="Public" Base="Incident!System.WorkItem.Incident" Hosted="false" IsExtensionType="true">  
          <Property ID="TimeOnIncident" Type="int" Key="false" />  
        </ClassType>  
      </ClassTypes>  
    </EntityTypes>  
  </TypeDefinitions>  
  

Ez az osztálykiterjesztés a System.WorkItem.Incident osztályt terjeszti ki a TimeOnIncident nevű új tulajdonsággal.

Az osztálykiterjesztések definíciója hasonlít az osztálydefiníciókra. A ClassType elem két attribútumával adható meg osztálydefiníció: a Base és az IsExtensionType attribútummal.

A Base attribútum határozza meg annak a szülőosztálynak az azonosítóját (ID), amelyből az osztálykiterjesztés származik. Ebben az esetben ennek az attribútumnak az értéke Incident!System.WorkItem.Incident. Ebben az értékben szerepel a teljes felügyeleti csomag nevéhez tartozó Alias érték, amely a kiterjesztendő osztályból, egy felkiáltójelből és az alaposztály nevéből áll. További információért lásd az alábbi példát.

Az IsExtensionType attribútum adja meg, hogy az adott osztály az alaposztály kiterjesztése-e. Mivel a TimeOnIncident az incidens osztály kiterjesztése, ez a tulajdonság true értékre van állítva:

IsExtensionType="true"  

Megadható false érték is, ami azt jelenti, hogy nem másik osztály kiterjesztéséről, hanem az alaposztályból leszármazó új osztályról van szó. Az alapértelmezett érték a false; ezt az attribútumot tehát nem kell használni, ha az osztály nem kiterjesztés.

Teljes példa

Az alábbi példakódban az osztálykiterjesztést tartalmazó teljes felügyeleti csomag látható.

<ManagementPack xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" ContentReadable="true" SchemaVersion="1.1">  
   <Manifest>  
     <Identity>  
      <ID>ServiceManager.Extension</ID>  
      <Version>1.0.0.0</Version>  
     </Identity>  
    <Name>ServiceManagerExtension</Name>  
     <References>  
       <Reference Alias="System">  
        <ID>System.Library</ID>  
        <Version>1.0.2780.0</Version>  
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>  
      </Reference>  
      <Reference Alias="Incident">  
        <ID>System.WorkItem.Incident.Library</ID>  
        <Version>1.0.2780.0</Version>  
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>  
      </Reference>  
    </References>  
  </Manifest>  
   <TypeDefinitions>  
     <EntityTypes>  
       <ClassTypes>  
         <ClassType ID="IncidentManagmentPack.Extension" Accessibility="Public" Base="Incident!System.WorkItem.Incident" Hosted="false" Extension="true">  
          <Property ID="TimeOnIncident" Type="int" Key="false" />  
        </ClassType>  
      </ClassTypes>  
    </EntityTypes>  
  </TypeDefinitions>  
</ManagementPack>  
  

Felügyeleti csomag importálása Windows PowerShell-parancsmag segítségével

Service Manager felügyeleti csomag importálására a Windows PowerShell Import-SCSMManagementPack parancsmagja használható. Példa:

Import-SCSMManagementPack MyServiceManager.ManagementPack.xml  

A jelen dokumentum nem tárgyalja a felügyeleti csomagoknak a Service Manager konzol felületén történő importálását és használatát. A felügyeleti csomagoknak a Service Manager konzol felületén történő használatáról lásd: Using Management Packs in System Center 2012 - Service Manager (A felügyeleti csomagok használata a System Center 2012 – Service Manager alkalmazásban).

Példa: teljes felügyeleti csomag

Az alábbi példakódban egy teljes felügyeleti mintacsomag szerepel, amely a jelen témakörben említett példákat szemlélteti. A példa az űrlap definíciójával és az űrlap mögötti C# kóddal egészül ki.

Felügyeleti csomag

<ManagementPack ContentReadable="true" SchemaVersion="1.1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
  <Manifest>  
    <Identity>  
      <ID>ServiceManager.Projector</ID>  
      <Version>7.0.3707.0</Version>  
    </Identity>  
    <Name>Projector Library</Name>  
    <References>  
      <Reference Alias="SMConsole">  
        <ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Console</ID>  
        <Version>7.0.3707.0</Version>  
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>  
      </Reference>  
      <Reference Alias="Authoring">  
        <ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring</ID>  
        <Version>7.0.3707.0</Version>  
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>  
      </Reference>  
      <Reference Alias="System">  
        <ID>System.Library</ID>  
        <Version>7.0.3707.0</Version>  
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>  
      </Reference>  
      <Reference Alias="SMConfig">  
        <ID>ServiceManager.ConfigurationManagement.Library</ID>  
        <Version>7.0.3707.0</Version>  
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>  
      </Reference>  
    </References>  
  </Manifest>  
  <TypeDefinitions>  
    <EntityTypes>  
      <ClassTypes>  
        <ClassType ID="System.ConfigItem.Projector" Accessibility="Public" Abstract="false" Base="System!System.ConfigItem" Hosted="false" Singleton="false" Extension="false">  
          <Property ID="SerialNumber" Type="int" Key="true" />  
          <Property ID="Make" Type="string" />  
          <Property ID="Model" Type="string" />  
          <Property ID="Location" Type="string" />  
          <Property ID="Condition" Type="enum" EnumType="ProjectorCondition" />  
        </ClassType>  
      </ClassTypes>  
      <EnumerationTypes>  
        <EnumerationValue ID="ProjectorCondition" Accessibility="Public" />  
        <EnumerationValue ID="ProjectorCondition.Working" Accessibility="Public" Parent="ProjectorCondition" />  
        <EnumerationValue ID="ProjectorCondition.BeingRepaired" Accessibility="Public" Parent="ProjectorCondition" />  
        <EnumerationValue ID="ProjectorCondition.New" Accessibility="Public" Parent="ProjectorCondition" />  
        <EnumerationValue ID="ProjectorCondition.Broken" Accessibility="Public" Parent="ProjectorCondition" />  
        <EnumerationValue ID="ProjectorViewTasksEnumeration" Accessibility="Public" />  
      </EnumerationTypes>  
    </EntityTypes>  
  </TypeDefinitions>  
  <Categories>  
    <Category ID="AllProjectorsView.Category" Target="AllProjectorsView" Value="SMConsole!Microsoft.EnterpriseManagement.ServiceManager.UI.Console.ViewTasks" />  
    <Category ID="ProjectorViewHasTasks.CreateTask" Target="AllProjectorsView" Value="Authoring!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.CreateTypeCategory" />  
    <Category ID="Projector.ProjectorConditionCategory" Target="ProjectorCondition" Value="Authoring!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.EnumerationViewTasks" />  
    <Category ID="Project.ProjectorConditionEnumVisibleCategory" Target="ProjectorCondition" Value="System!VisibleToUser" />  
  </Categories>  
  <Presentation>  
    <Forms>  
      <Form ID="TestForm" Accessibility="Public" Target="System.ConfigItem.Projector" Assembly="ProjectorFormsAssembly" TypeName="New_CI_lab.TestControl">  
        <Category>Form</Category>  
      </Form>  
    </Forms>  
    <Views>  
      <View ID="AllProjectorsView" Accessibility="Public" Enabled="true" Target="System.ConfigItem.Projector" TypeID="SMConsole!GridViewType" Visible="true">  
    <Category>NotUsed</Category>  
    <Data>  
    <Adapters>  
    <Adapter AdapterName="dataportal:EnterpriseManagementObjectAdapter">  
    <AdapterAssembly>Microsoft.EnterpriseManagement.UI.SdkDataAccess</AdapterAssembly>  
    <AdapterType>Microsoft.EnterpriseManagement.UI.SdkDataAccess.DataAdapters.EnterpriseManagementObjectAdapter</AdapterType>  
    </Adapter>  
    <Adapter AdapterName="viewframework://adapters/AdvancedList">  
    <AdapterAssembly>Microsoft.EnterpriseManagement.UI.ViewFramework</AdapterAssembly>  
    <AdapterType>Microsoft.EnterpriseManagement.UI.ViewFramework.AdvancedListSupportAdapter</AdapterType>  
    </Adapter>  
    <Adapter AdapterName="omsdk://Adapters/Criteria">  
    <AdapterAssembly>Microsoft.EnterpriseManagement.UI.SdkDataAccess</AdapterAssembly>  
    <AdapterType>Microsoft.EnterpriseManagement.UI.SdkDataAccess.DataAdapters.SdkCriteriaAdapter</AdapterType>  
    </Adapter>  
    </Adapters>  
    <ItemsSource>  
    <AdvancedListSupportClass DataTypeName="" AdapterName="viewframework://adapters/AdvancedList" FullUpdateAdapter="dataportal:EnterpriseManagementObjectAdapter" FullUpdateFrequency='1' DataSource="mom:ManagementGroup"   
  IsRecurring="true" RecurrenceFrequency="5000"  Streaming='true' xmlns="clr-namespace:Microsoft.EnterpriseManagement.UI.ViewFramework;assembly=Microsoft.EnterpriseManagement.UI.ViewFramework" xmlns:av="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" >  
    <AdvancedListSupportClass.Parameters>  
                <QueryParameter Parameter="TargetClass" Value="System.ConfigItem.Projector"/>  
    </AdvancedListSupportClass.Parameters>  
    </AdvancedListSupportClass>  
    </ItemsSource>  
    <Criteria />  
    </Data>  
    <Presentation>  
    <Columns>  
<mux:ColumnCollection xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:mux="https://schemas.microsoft.com/SystemCenter/Common/UI/Views/GridView" xmlns:s="clr-namespace:System;assembly=mscorlib">  
              <mux:Column Name="SerialNumber" DisplayMemberBinding="{Binding Path=SerialNumber}" Width="100" DisplayName="SerialNumber" Property="SerialNumber" DataType="s:Int32" />  
              <mux:Column Name="Location" DisplayMemberBinding="{Binding Path=Location}" Width="100" DisplayName="Location" Property="Location" DataType="s:String" />  
              <mux:Column Name="Condition" DisplayMemberBinding="{Binding Path=Condition.DisplayName}" Width="100" DisplayName="Condition" Property="Condition.DisplayName" DataType="s:String" />  
              <mux:Column Name="DisplayName" DisplayMemberBinding="{Binding Path=DisplayName}" Width="100" DisplayName="Display Name" Property="DisplayName" DataType="s:String" />  
              <mux:Column Name="OwnerUser" DisplayMemberBinding="{Binding Path=OwnerUser.DisplayName}" Width="100" DisplayName="SupportOwner" Property="OwnerUser.DisplayName" DataType="s:String" />  
            </mux:ColumnCollection>      
    </Columns>  
    </Presentation>  
    </View>  
    </Views>  
    <Folders>  
      <Folder ID="Folder.Projectors" Accessibility="Public" ParentFolder="SMConfig!ServiceManager.Console.ConfigurationManagement.ConfigItem.Root" />  
    </Folders>  
    <FolderItems>  
      <FolderItem ElementID="AllProjectorsView" ID="FolderItem.AllProjectors" Folder="Folder.Projectors" />  
    </FolderItems>  
    <ImageReferences>  
      <ImageReference ElementID="Folder.Projectors" ImageID="SMConfig!ConfigItemImage16x16" />  
      <ImageReference ElementID="AllProjectorsView" ImageID="SMConfig!ConfigItemImage16x16" />  
    </ImageReferences>  
  </Presentation>  
  <LanguagePacks>  
    <LanguagePack ID="ENU" IsDefault="true">  
      <DisplayStrings>  
    <DisplayString ElementID="System.ConfigItem.Projector">  
    <Name>Projector</Name>  
    </DisplayString>  
        <DisplayString ElementID="Folder.Projectors">  
          <Name>Projectors</Name>  
          <Description>This is the Projector Folder</Description>  
        </DisplayString>  
        <DisplayString ElementID="AllProjectorsView">  
          <Name>All Projectors</Name>  
          <Description>This displays all projectors</Description>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.Working">  
          <Name>Working</Name>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.Broken">  
          <Name>Broken</Name>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.BeingRepaired">  
          <Name>In Repair</Name>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.New">  
          <Name>New</Name>  
        </DisplayString>  
      </DisplayStrings>  
    </LanguagePack>  
  </LanguagePacks>  
  <Resources>  
    <Assembly ID="ProjectorFormsAssembly" Accessibility="Public" FileName="New_CI_lab.dll" QualifiedName="New_CI_lab, Version=0.0.0.0" />  
  </Resources>  
</ManagementPack>  

Űrlap-definíció

  
<UserControl  
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"  
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"  
    xmlns:local="clr-namespace:SMFormsDemo"  
    x:Class="SMFormsDemo.TestControl"  
    x:Name="Control"  
    Width="574" Height="390" Opacity="1" xmlns:d="https://schemas.microsoft.com/expression/blend/2008" xmlns:mc="https://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" Background="{DynamicResource {x:Static SystemColors.WindowBrushKey}}">  
  <UserControl.Resources>  
    <ObjectDataProvider ObjectType="{x:Type local:helper}"  MethodName="GetStatusValues" x:Key="getStatusValues" />  
  </UserControl.Resources>  
  <Grid x:Name="LayoutRoot">  
    <Label Margin="70,20,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" Content="Serial Number:"/>  
    <TextBox Margin="180,20,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" d:IsStaticText="True" Text="{Binding Path=SerialNumber, Mode=TwoWay}"/>  
    <Label Margin="70,60,0,0" HorizontalAlignment="Left"  VerticalAlignment="Top" Width="160" Height="25" Content="Make:"/>  
    <TextBox Margin="180,60,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" d:IsStaticText="True" Text="{Binding Path=Make, Mode=TwoWay}" />  
    <Label Margin="70,100,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" Content="Model:"/>  
    <TextBox Margin="180,100,0,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" d:IsStaticText="True" Text="{Binding Path=Model, Mode=TwoWay}"/>  
    <Label Margin="70,140,80,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" Content="Location:"/>  
    <TextBox Margin="180,140,80,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" d:IsStaticText="True" Text="{Binding Path=Location, Mode=TwoWay}" />  
    <Label Margin="70,180,80,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" Content="Condition:"/>  
    <ComboBox Margin="180,180,80,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" ItemsSource="{Binding Source={StaticResource getStatusValues}, Mode=OneWay }" IsSynchronizedWithCurrentItem="True">  
      <ComboBox.SelectedItem>  
        <Binding Path="Condition" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/>  
      </ComboBox.SelectedItem>  
      <ComboBox.ItemTemplate>  
        <DataTemplate>  
          <StackPanel>  
            <TextBlock Text="{Binding Path=DisplayName}"/>  
          </StackPanel>  
        </DataTemplate>  
      </ComboBox.ItemTemplate>  
    </ComboBox>  
  </Grid>  
</UserControl>  
  

Űrlap háttérkódja

  
using System;  
using System.Collections.Generic;  
using System.Collections.ObjectModel;  
using System.Threading;  
using System.Windows.Controls;  
using Microsoft.EnterpriseManagement.ServiceManager.Application.Common;  
using Microsoft.EnterpriseManagement.UI.DataModel;  
namespace SMFormsDemo  
{  
   /// <summary>  
   /// Interaction logic for ProjectorForm.xaml  
   /// </summary>  
   public partial class TestControl : UserControl  
   {  
        public TestControl()  
      {  
         InitializeComponent();  
      }        
   }  
   public class helper  
   {  
  
      public static ICollection<IDataItem> GetStatusValues()  
      {  
            return ConsoleContextHelper.Instance.GetEnumerations("ProjectorCondition",true);  
      }  
   }  
}  
  

Lásd még

A System Center közös sémájának változásai
Űrlapok: Általános irányelvek és bevált gyakorlatok