Direkte Konfiguration einer Management Pack-Datei zum Verwalten von Projektoren
Veröffentlicht: Juli 2016
Gilt für: System Center 2012 SP1 - Service Manager, System Center 2012 R2 Service Manager, System Center 2012 - Service Manager
Management Packs werden verwendet, um die Funktionalität von System Center 2012 – Service Manager zu steuern und zu erweitern. In diesem Thema werden Projektoren als Beispiel für die Beschreibung der verschiedenen Abschnitte eines Management Packs sowie zum Definieren verschiedener Objekte verwendet, die zum Verwalten von Projektoren in einer Organisation erforderlich sind.
Dieses Thema enthält ein umfassendes Beispiel für einen Management Pack mit den zum Verwalten von Projektoren in einer Organisation erforderlichen Erweiterungen. Zudem wird hier beschrieben, wie ein Management Pack mithilfe eines Windows PowerShell-Cmdlets importiert wird.
In diesem Thema werden die folgenden Abschnitte eines Management Packs beschrieben:
Abschnitt „Manifest“
„TypeDefinitions“ zum Erstellen von Klassenaufzählungen und -beziehungen
Formulare
In diesem Thema werden auch die folgenden Abschnitte eines Management Packs beschrieben, die Deklarationen und Definitionen für die Benutzeroberfläche und Lokalisierungselemente enthalten:
Abschnitt „Categories“
Abschnitt „Presentation“
Klassenerweiterungen
Abschnitt „Manifest“
Der erste Abschnitt eines Management Packs enthält das Manifest. Mit dem Manifest wird das Management Pack identifiziert, und es werden Verweise auf andere Management Packs deklariert.
Im folgenden Beispiel ist der Abschnitt Manifest eines Management Packs dargestellt, der zum Nachverfolgen von Projektoren in einer Organisation erstellt wurde.
<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>
Wichtig |
---|
|
Abschnitt „TypeDefinitions“: Erstellen einer Klasse
Im nächste Abschnitt eines Management Packs sind Typdefinitionen enthalten. Der Abschnitt TypeDefinitions eines Management Packs enthält Definitionen für Klassen, Aufzählungen und Beziehungen, die vom Management Pack verwendet werden.
Im folgenden Beispiel ist eine Klasse dargestellt, die Informationen zu Projektoren enthält:
<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>
Im Folgenden wird der Inhalt der Typdefinition abschnittsweise erläutert.
Abschnitt „ClassTypes“
Mit dem Element ClassType wird die Projektorklasse definiert:
<ClassType ID="System.ConfigItem.Projector" Base="System!System.ConfigItem" Hosted="false" Accessibility="Public" Abstract="false">
Das Attribut ID ist der eindeutige Bezeichner dieser Klasse. Es ist auf folgenden Wert festgelegt:
ID="System.ConfigItem.Projector"
Das Attribut Base ist die ID der Klasse, von der diese Klasse abgeleitet wird. Da ein Projektor ein Konfigurationselement ist, ist er auf folgenden Wert festgelegt:
Base="System!System.ConfigItem"
Durch die Schreibweise von System! wird angegeben, dass sich die Klasse System.ConfigItem im Management Pack befindet, auf das vom Alias System verwiesen wird.
Mit dem Attribut Hosted wird definiert, ob diese Klasse von einer anderen Klasse gehostet wird. Ist dies der Fall, kann eine Instanz dieser Klasse nur vorhanden sein, wenn eine Hostinstanz vorhanden ist, die diese Klasse enthält. In diesem Beispiel werden Projektoren nicht gehostet. Daher wird das Attribut Hosted auf false festgelegt:
Hosted="false"
Wenn das Attribut Hosted auf true festgelegt wird, wird angegeben, dass die Klasse von einer anderen Klasse gehostet wird. Eine Hostbeziehung muss im Abschnitt RelationshipTypes deklariert werden.
Mit dem Attribut Accessibility wird festgelegt, ob von dieser Klasse andere Klassen abgeleitet werden können. Wenn Sie möchten, dass Andere speziellere Versionen der Klasse erstellen können, legen Sie dieses Attribut auf public fest. Beispiel:
Accessibility="Public"
Wenn das Attribut Accessibility auf Internal festgelegt wird, wird verhindert, dass von dieser Klasse andere Klassen abgeleitet werden.
Mit dem Attribut Abstract wird festgelegt, ob Instanzen dieser Klasse erstellt werden können oder ob die Klasse nur als übergeordnete Klasse zur Ableitung für andere Klassen verwendet werden darf. In diesem Beispiel wird das Attribut auf false festgelegt. Wenn dieses Attribut auf true festgelegt wird, bedeutet das, dass keine Instanz dieser Klasse direkt erstellt werden kann und dass diese Klasse nur als übergeordnete Klasse verwendet werden darf.
Der nächste Abschnitt der Klassendefinition enthält die Klasseneigenschaften. Der XML-Code, mit dem die Klasseneigenschaften für dieses Beispiel definiert werden, wird im folgenden Codebeispiel definiert:
<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" />
Alle Elemente vom Typ Property enthalten folgende Attribute:
Das Attribut ID, mit dem der eindeutige Bezeichner der Eigenschaft angegeben wird
Das Attribut Type, mit dem der Datentyp der Eigenschaft angegeben wird
Das Attribut Key. Wenn dieses Attribut auf true festgelegt wird, wird angegeben, dass diese Eigenschaft zum eindeutigen Identifizieren dieser Klasse verwendet wird.
Erstellen von Aufzählungstypen
Aufzählungen vom Datentyp enum sind spezielle Datentypen. Aufzählungen werden verwendet, um die Daten für eine Eigenschaft auf eine bestimmte Gruppe von Werten einzuschränken. Aufzählungen können hierarchisch strukturiert sein. Eine Aufzählung kann auf einer anderen Aufzählung basieren.
Aufzählungen werden im Abschnitt EnumertionTypes eines Lösungspakets definiert. Eine Aufzählungsdefinition enthält die Stammaufzählung gefolgt von den eigentlichen Aufzählungswerten.
Von jedem EnumerationValue werden einige Attribute akzeptiert:
In diesem Beispiel wird eine Aufzählung zum Nachverfolgen der Bedingung für die Projektoren definiert. Im Folgenden wird diese Aufzählung definiert:
ID ist der Bezeichner für die Aufzählung oder der Aufzählungswert.
Mit Accessibility wird angegeben, ob dieser Enumerator andere Enumeratoren enthalten darf.
ParentName ist ein Attribut, mit dem die ID des übergeordneten Elements des Enumeratorwerts angegeben wird.
<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>
Erstellen eines Formulars
Service Manager-Formulare basieren auf WPF-Formularen (Windows Presentation Framework). Von Service Manager werden WPF-Formulare mit einfachen Attributen erweitert, die der XML-Definition hinzugefügt werden und ermöglichen, dass von Service Manager Daten aus dem Management Pack an das Formular gebunden werden.
Service Manager-Formulare können mit unterschiedlichen Tools wie Microsoft Visual Studio oder Microsoft Expression Blend erstellt werden. Da die Formulare auf XML basieren, können sie auch mithilfe eines XML-Editors definiert werden.
Im folgenden Beispiel wird eine Formulardefinition dargestellt, die mithilfe von Microsoft Expression Blend erstellt wurde. Dieses Formular enthält vier Steuerelemente, drei Textfelder und ein Kombinationsfeld, die an die zuvor definierten Klasseneigenschaften vom Typ Projector gebunden sind:
<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>
Damit Steuerelemente im Formular an in einem Management Pack definierte Klasseneigenschaften gebunden werden können, müssen verschiedene Elemente angegeben werden.
Binden von Textsteuerelementen
Fügen Sie zum Binden von Textfeldern an Klasseneigenschaften in einem Management Pack ein Binding Path-Tag an die Eigenschaft Text des Textfeld-Steuerelements. Beispiel:
{Binding Path=SerialNumber, Mode=TwoWay}
Mit diesem Tag wird das Textfeld-Steuerelement an die im Management definierte Eigenschaft SerialNumber der Klasse Projector gebunden. Zudem wird festgelegt, dass es sich um eine bidirektionale Bindung handelt. Der Wert der Eigenschaft wird aus der Datenbank abgerufen, beim Laden des Formulars im Textfeld angezeigt und wieder in der Datenbank gespeichert, wenn er vom Benutzer geändert wird.
Binden von Kombinationsfeldern
Damit vom Formular Aufzählungsdaten aus dem zugrunde liegenden Management Pack abgerufen und an ein Steuerelement im Formular gebunden werden können, muss im code-behind im Formular eine Hilfsklasse definiert werden. Diese Hilfsklasse muss eine Methode enthalten, mit der eine im Management Pack definierte Aufzählung zurückgegeben wird. Verwenden Sie zum Zurückgeben einer Aufzählung die Methode GetEnumerations des aktuellen Management Packs. Auf diese Instanz wird mit der Klasse ConsoleContextHelper aus dem Service Manager SDK (Software Development Kit) zugegriffen. Im folgenden Beispiel wird mit einer Hilfsklasse eine Methode vom Typ GetStatusValues definiert, mit der die Werte für die im Management Pack definierte Aufzählung ProjectorCondition abgerufen werden:
public class helper
{
public static ICollection<IDataItem> GetStatusValues()
{
return ConsoleContextHelper.Instance.GetEnumerations("ProjectorCondition",true);
}
}
Für den Zugriff auf diese Methode müssen in der Formulardefinition im Management Pack einige Dinge definiert werden.
Zunächst wird der Formulardefinition ein Namespace hinzugefügt, mit dem auf den Namespace für den code behind für das Formular verwiesen wird. In diesem Beispiel lautet der Namespace SMFormsDemo:
xmlns:local="clr-namespace:SMFormsDemo"
Als Nächstes muss ein ObjectDataProvider definiert werden, damit die Werte für das Kombinationsfeld bereitgestellt werden, mit dem der Projektorstatus angezeigt wird. Dieser ObjectDataProvider wird als Ressource definiert:
<UserControl.Resources>
<ObjectDataProvider
ObjectType="{x:Type local:helper}"
MethodName="GetStatusValues"
x:Key="getStatusValues" />
</UserControl.Resources>
Mit diesem Datenanbieter wird der Objekt- und Methodenname angegeben, mit dem die Aufzählungswerte aus dem Management Pack abgerufen werden.
Und schließlich wird der Definition des Kombinationsfelds ein Attribut vom Typ ItemsSource hinzugefügt, um das Kombinationsfeld an die im Management Pack definierten Aufzählungswerte zu binden. Mit diesem Attribut wird angegeben, wo die Aufzählungswerte abgerufen werden sollen. Beispiel:
ItemsSource="{Binding Source={StaticResource getStatusValues}, Mode=OneWay }"
Anschließend werden der XAML-Definition (Extensible Application Markup Language) des Kombinationsfeld-Steuerelements die Elemente SelectedItem und ItemTemplate hinzugefügt. Im folgenden Beispiel wird die Definition des Kombinationsfelds mit der XAML-Definition für die Bindung einbezogen:
<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>
Abschnitt „Category“
Im Abschnitt Category eines Management Packs werden Management Pack-Elemente zur leichteren Navigation gruppiert.
Im Beispiel werden die ersten beiden Elemente vom Typ <Category> zum Steuern der Anzeige der Tasks Neu und Bearbeiten in der Ansicht Projektoren verwendet.
<Category ID="ProjectorViewHasTasks.View" Target="AllProjectorsView" Value="ProjectorViewTasksEnumeration" />
<Category ID="ProjectorViewHasTasks.CreateTask" Target="CreateProjector" Value="ProjectorViewTasksEnumeration" />
Mithilfe der nächsten beiden Elemente vom Typ Category im Beispiel für das Management Pack wird sichergestellt, dass die Aufzählung von Projektorbedingungen in der Ansicht Listen im Bereich Konfiguration in der Service Manager-Konsole angezeigt werden. Dadurch kann der Benutzer die Werte anpassen:
<Category ID="Project.ProjectorConditionEnumVisibleCategory" Target="ProjectorCondition" Value="System!VisibleToUser"/>
Wenn diese Kategorie im folgenden Beispiel hinzugefügt wird, wird der Task Bearbeiten in der Ansicht Listen für den EnumerationValue angezeigt, auf den im Attribut Target verwiesen wird:
<Category ID="Projector.ProjectorConditionCategory" Target="ProjectorCondition" Value="Authoring!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.EnumerationViewTasks"/>
Abschnitt „Presentation“
Im Abschnitt Presentation eines Management Packs werden Elemente deklariert und definiert, die sich auf die Benutzeroberfläche beziehen. Hierzu zählen Formulardeklarationen, Kategorien und Konsolentasks.
Abschnitt „Forms“
Im Abschnitt Forms werden die vom Management Pack verwendeten Formulare deklariert. Im folgenden Beispiel wird angegeben, wo das Formular zu finden ist, das für die Anzeige und Bearbeitung von Instanzen der Klasse Projector definiert wurde. Damit wird das Formular an die im Management Pack definierte Klasse Projector gebunden:
<Forms>
<Form TypeName="SMFormsDemo.TestControl"
ID="TestForm"
Target="System.ConfigItem.Projector"
Assembly="ProjectorFormsAssembly"
Accessibility="Public">
<Category>Form</Category>
</Form>
</Forms>
Im vorhergehenden Beispiel werden die folgenden Attribute verwendet:
Das Attribut TypeName enthält den Namespace- und Klassennamen des Formulars.
Das Attribut ID enthält den eindeutigen Bezeichner dieser Formularinstanz.
Das Attribut Target enthält den Namen der Klasse, an die dieses Formular gebunden wurde.
Mit dem Attribut Assembly wird auf die externe Ressource verwiesen, die das Formular enthält.
Mit dem Attribut Accessibility wird festgelegt, ob dieses Formular angepasst werden kann.
Definieren einer Ansicht
Im Abschnitt Views eines Management Packs sind Definitionen von Ansichten der Benutzeroberfläche enthalten. Mithilfe dieser Ansichten können Objekte in einem Management Pack gefiltert und angezeigt werden.
<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>
Mit dem Attribut „View Target“ wird auf die Klasse verwiesen, für deren Anzeige die Ansicht verwendet wird.
Im vorherigen Beispiel wird auf das Management Pack der Service Manager-Konsole verwiesen. Dieses Management Pack enthält eine Definition eines verwendeten Ansichtstyps. In diesem Beispiel wird der Ansichtstyp SMConsole!GridViewType definiert.
Mit der AdvancedListSupportClass werden verschiedene Parameter definiert. Der wichtigste davon ist der Parameter TargetClass. Legen Sie diesen Parameter auf die ID des ClassType fest, der in dieser Ansicht angezeigt wird. Binden Sie zum Anzeigen der Spalten, bei denen es sich um Eigenschaften des ClassType handelt, das Element Column an das Attribut PropertyID.
Mit dem Attribut IsRecurring des Elements ListSupportClass wird festgelegt, ob die Ansicht automatisch aktualisiert wird. Mit dem Attribut RecurrenceFrequency wird das Aktualisierungsintervall in Millisekunden festgelegt. In diesem Beispiel wird das Aktualisierungsintervall auf 1 Sekunde festgelegt. Für Produktionsinstallationen wird diese Festlegung jedoch nicht empfohlen.
Definieren von Ordnern
Durch Definieren von Ordnern wird der Speicherort in der Navigationsstruktur festgelegt, in der die Ansicht angezeigt wird. In diesem Beispiel wird ein Konfigurationselement so definiert, dass die Ansicht nur unter dem vorhandenen Ordner für Konfigurationselemente im Arbeitsbereich Konfigurationselemente platziert werden kann:
<Folders>
<Folder ID="Folder.Projectors" Accessibility="Public" ParentFolder="SMConfig!ServiceManager.Console.ConfigurationManagement.ConfigItem.Root" />
</Folders>
<FolderItems>
<FolderItem
ElementID="AllProjectorsView"
Folder="Folder.Projectors" />
</FolderItems>
Im vorherigen Beispiel enthält das Attribut ElementID einen Verweis auf die erstellte Ansicht. Mit dem Attribut Folder wird auf einen Ordner vom Typ Folders.Projectors verwiesen, dessen Stamm im Arbeitsbereich Konfigurationsverwaltung der Service Manager-Konsole definiert wird. Dieser Stammordner wird im Management Pack der Konfigurationsverwaltung definiert.
Mit dem Element ImageReference wird die zuvor erstellte Ansicht einem Symbol zugeordnet, das im Namespace Configuration Management definiert wird:
<ImageReferences>
<ImageReference ElementID="Folder.Projectors" ImageID="SMConfig!ConfigItemImage16x16" />
<ImageReference ElementID="AllProjectorsView" ImageID="SMConfig!ConfigItemImage16x16" />
</ImageReferences>
Lokalisierung mithilfe des Abschnitts „LanguagePacks“
Im Abschnitt LanaguagePacks eines Management Packs werden Zeichenfolgenressourcen und Zuordnungen für Management Pack-Elemente definiert.
In diesem Beispiel muss der EnumerationValueProjectorCondition.Working als Working (In Bearbeitung) angezeigt werden. Hierzu müssen die Anzeigenamen für alle folgenden Elemente definiert werden:
Ansicht: Alle Projektoren
Aufzählungen: working (in Bearbeitung), broken (unterbrochen), in repair (wird repariert), new (neu)
<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>
Bei Bedarf können Sie für jede weitere erforderliche Sprache weitere Elemente vom Typ LanguagePack erstellen. Dem Benutzer wird je nach Gebietsschema des Benutzers die entsprechende Anzeigezeichenfolge angezeigt.
Ressourcen
Der Abschnitt Resources eines Management Packs enthält Verweise auf binäre Ressourcen, die in vom Management Pack getrennten Assemblys enthalten sind. Im folgenden Beispiel wird eine Ressource definiert, mit der auf die Assembly verwiesen wird, die das von der Klasse Projector verwendete Formular enthält:
<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" />
Klassenerweiterungen
Eine Klassenerweiterung ist eine Klasse, mit der Eigenschaften zur einer vorhandenen Klasse hinzugefügt werden. In den meisten Fällen befindet sich diese vorhandene Klasse in einem versiegelten Management Pack. Wenn die vorhandene Klasse sich nicht in einem versiegelten Management Pack befindet, muss die Klassenerweiterung im selben Management Pack wie die erweiterte Klasse gespeichert sein.
Eine Klassenerweiterung erbt die Eigenschaften aller übergeordneten Klassen, z. B.:
Klasse A verfügt über eine Eigenschaft mit dem Namen „Property1“ (Eigenschaft1).
Klasse B wird abgeleitet von bzw. erweitert Klasse A und verfügt daher über eine Eigenschaft mit dem Namen „Property1“. Diese Eigenschaft wird von Klasse A, der übergeordneten oder Basisklasse, geerbt.
Durch die Definition der Klasse B wird eine Eigenschaft „Property2“ (Eigenschaft2) hinzugefügt.
Jede Klassenerweiterung, die von Klasse B abgeleitet ist, erbt „Property1“ und „Property2“.
Im folgenden Beispiel ist eine Definition einer Klassenerweiterung dargestellt:
<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>
Mit dieser Klassenerweiterung wird die Klasse System.WorkItem.Incident erweitert und eine neue Eigenschaft mit dem Namen TimeOnIncident hinzugefügt.
Die Definition für eine Klassenerweiterung gleicht der einer Klassendefinition. Zwei Attribute des Elements ClassType werden zum Definieren einer Klassendefinition verwendet: das Attribut Base und das Attribut IsExtensionType.
Mit dem Attribut Base wird die ID der übergeordneten Klasse festgelegt, aus der die Klassenerweiterung abgeleitet wird. In diesem Beispiel ist der Attributwert auf Incident!System.WorkItem.Incident festgelegt. Dieser Wert enthält den Alias des vollständigen Namens des Management Packs, das die erweiterte Klasse enthält, ein Ausrufezeichen und den Namen der Basisklasse. Weitere Informationen finden Sie im folgenden Beispiel.
Mit dem Attribut IsExtensionType wird festgelegt, ob diese Klasse eine Erweiterung der Basisklasse ist. Da TimeOnIncident eine Erweiterung der Klasse Incident ist, wird diese Eigenschaft auf true festgelegt:
IsExtensionType="true"
Die andere Möglichkeit (false) würde bedeuten, dass es sich nicht um eine Erweiterung einer anderen Klasse, sondern um eine neue Klasse handelt, die die Eigenschaften der Basisklasse erbt. Der Standardwert ist false, daher braucht dieses Attribut nicht verwendet zu werden, wenn die Klasse keine Erweiterung ist.
Vollständiges Beispiel
Im folgenden Codebeispiel wird das vollständige Management Pack dargestellt, das die Klassenerweiterung enthält.
<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>
Importieren eines Management Packs mithilfe eines Windows PowerShell-Cmdlets
Sie können zum Importieren eines Service Manager-Management Packs z. B. das Windows PowerShell-Cmdlet Import-SCSMManagementPack verwenden:
Import-SCSMManagementPack MyServiceManager.ManagementPack.xml
In diesem Dokument wird nicht beschrieben, wie Sie Management Packs in die Service Manager-Konsole importieren und dort verwenden. Informationen zur Verwendung von Management Packs in der Service Manager-Konsole finden Sie unter Using Management Packs in System Center 2012 - Service Manager (Verwenden von Management Packs in System Center 2012 – Service Manager).
Beispiel: Vollständiges Management Pack
In den folgenden Codebeispielen ist das vollständige, für Beispiele in diesem Thema verwendete Beispiel-Management Pack, die Formulardefinition und der C#-CodeBehind des Formulars dargestellt.
Management Pack
<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>
Formulardefinition
<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>
Formular „Code-Behind“
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);
}
}
}
Siehe auch
Änderungen am System Center Common Schema
Formulare: Allgemeine Richtlinien und bewährte Methoden