Partager via


Création directe d'un fichier de pack d'administration pour gérer les projecteurs

 

Date de publication : juillet 2016

S’applique à : System Center 2012 SP1 - Service Manager, System Center 2012 R2 Service Manager, System Center 2012 - Service Manager

Les packs d'administration permettent de contrôler et d'étendre les fonctionnalités de System Center 2012 - Service Manager. Cette rubrique utilise les projecteurs comme exemples pour la description des différentes sections d'un pack d'administration, ainsi que pour la définition des différents objets nécessaires à la gestion des projecteurs au sein de votre organisation.

Cette rubrique comprend un exemple complet de pack d'administration avec les extensions nécessaires à la gestion des projecteurs au sein d'une organisation. En outre, elle décrit comment importer un pack d'administration à l'aide d'une applet de commande Windows PowerShell.

Cette rubrique aborde les sections suivantes du pack d'administration :

  • Le manifeste

  • Les TypeDefinitions permettant de créer des énumérations de classe et des relations

  • Formulaires

Cette rubrique aborde également les sections suivantes du pack d'administration qui contiennent les déclarations et les définitions des éléments d'interface utilisateur et de localisation :

  • Catégories

  • La présentation

  • Extensions de classe

La section du manifeste

La première section d'un pack d'administration contient le manifeste. Le manifeste identifie le pack d'administration et déclare toutes les références aux autres packs d'administration.

L'exemple suivant illustre la section Manifest du pack d'administration qui a été conçue pour effectuer le suivi des projecteurs au sein d'une organisation.

  
<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>  

Important


Dans la section References, n'utilisez pas de valeurs non alphanumériques, telles que '.', en tant que référence dans l'Alias.

Section TypeDefinitions : création d'une classe

La section suivante du pack d'administration contient des définitions de type. La section TypeDefinitions d'un pack d'administration contient des définitions de classes, d'énumérations et de relations qui sont utilisées par le pack d'administration.

L'exemple suivant montre une classe qui contient des informations sur les projecteurs :

  
<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>  
  

Voici une explication section par section de ce que contient la définition de type.

La section ClassTypes

L'élément ClassType définit la classe de projecteur :

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

L'attribut ID est l'identificateur unique de cette classe. Il a la valeur suivante :

ID="System.ConfigItem.Projector"

L'attribut Base est l'ID de la classe de laquelle est dérivée cette classe. Dans la mesure où un projecteur est un type d'élément de configuration, sa valeur est la suivante :

Base="System!System.ConfigItem"

La notation de System! indique que cette classe, System.ConfigItem, se trouve dans le pack d'administration qui est référencé par l'alias System.

L'attribut Hosted permet de définir si cette classe doit être hébergée par une autre classe. Dans ce cas, une instance de cette classe ne peut exister que lorsqu'elle est hébergée par une autre instance. Par exemple, les projecteurs ne sont pas hébergés. Par conséquent, l'attribut Hosted est défini sur false :

Hosted="false"

Si l'attribut Hosted a la valeur true, cela indique que la classe est hébergée par une autre classe. Une relation d'hébergement doit être déclarée dans la section RelationshipTypes.

L'attribut Accessibility permet de définir si les autres classes peuvent être dérivées de cette classe. Si vous souhaitez permettre aux utilisateurs de créer une version plus spécifique de votre classe, définissez cet attribut sur public. Exemple :

Accessibility="Public"

Si l'attribut Accessibility est défini sur Internal, les autres classes ne pourront pas être dérivées de cette classe.

L'attribut Abstract permet de définir si des instances de cette classe peuvent être créées, ou si la classe doit uniquement être utilisée comme classe parente d'autres classes dérivées. Dans cet exemple, cet attribut est défini sur false. Si cet attribut a la valeur true, aucune instance de cette classe ne pourra être créée directement, et la classe pourra uniquement être utilisée comme classe parente.

La section suivante de la définition de classe contient les propriétés de classe. Le code XML qui définit les propriétés de classe de cet exemple est défini dans l'exemple de code suivant :

  
<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"  />  
  

Chaque élément Property possède les attributs suivants :

  • L'attribut ID, qui désigne l'identificateur unique de la propriété.

  • L'attribut Type, qui indique le type de données de la propriété.

  • L'attribut Key. Si cet attribut a la valeur true, cette propriété doit uniquement être utilisée pour identifier cette classe.

Création de types d'énumération

Les énumérations du type de données enum sont des types de données spéciaux. Les énumérations sont utilisées pour limiter à un ensemble spécifique de valeurs les données autorisées pour une propriété donnée. Les énumérations peuvent être hiérarchiques, c'est-à-dire qu'une énumération peut être basée sur une autre énumération.

Les énumérations sont définies dans la section EnumertionTypes d'un pack de solution. La définition d'une énumération contient l'énumération racine, suivie des valeurs de l'énumération.

Chaque EnumerationValue accepte quelques attributs :

Dans cet exemple, une énumération est définie pour le suivi de la condition des projecteurs. L'énumération est définie de la façon suivante :

  • ID est l'identificateur de l'énumération ou la valeur de l'énumération.

  • Accessibility spécifie si l'énumérateur peut contenir d'autres énumérateurs.

  • ParentName est un attribut qui spécifie l'ID du parent de la valeur de l'énumérateur.

  
<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>  
  

Création d'un formulaire

Les formulaires Service Manager sont basés sur des formulaires Windows Presentation Framework (WPF).Service Manager étend WPF avec des attributs simples qui sont ajoutés à la définition XML et permettent à Service Manager de lier des données du pack d'administration à l'écran.

Les formulaires Service Manager peuvent être créés à l'aide de différents outils, tels que Microsoft Visual Studio ou Microsoft Expression Blend. S'agissant de formulaires XML, il est également possible de les définir à l'aide de n'importe quel éditeur XML.

L'exemple suivant montre une définition de formulaire créé à l'aide de Microsoft Expression Blend. Ce formulaire comprend quatre contrôles, trois zones de texte et une zone de liste déroulante, qui sont liés aux propriétés de la classe Projector précédemment définies :

  
<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>  
  

Pour permettre la liaison des contrôles du formulaire et des propriétés de classe définies dans un pack d'administration, certains éléments doivent être spécifiés.

Liaison de contrôles de texte

Pour lier les zones de texte aux propriétés de classe d'un pack d'administration, ajoutez une balise Binding Path à la propriété Text du contrôle de zone de texte. Exemple :

{Binding Path=SerialNumber, Mode=TwoWay}  

Cette balise lie le contrôle de zone de texte à la propriété SerialNumber de la classe Projector définie dans le pack d'administration, et spécifie qu'il doit s'agir d'une liaison bidirectionnelle. La valeur de la propriété est récupérée depuis la base de données, puis affichée dans la zone de texte lorsque le formulaire est chargé. La valeur de la propriété est ensuite stockée dans la base de données si elle a été modifiée par l'utilisateur.

Liaison de zones de liste déroulante

Pour permettre au formulaire de récupérer les données d'énumération depuis le pack d'administration sous-jacent et de les lier à un contrôle du formulaire, une classe d'assistance doit être définie dans le code-behind du formulaire. Cette classe d'assistance doit contenir une méthode qui retourne une énumération définie dans le pack d'administration. Pour renvoyer une énumération, utilisez la méthode GetEnumerations du pack d'administration. Cette instance est accessible à l'aide de la classe ConsoleContextHelper du Kit de développement logiciel (SDK) de Service Manager. Dans l'exemple suivant, une classe d'assistance définit une méthode GetStatusValues qui récupère les valeurs de l'énumération ProjectorCondition définie dans le pack d'administration :

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

Pour accéder à cette méthode, vous devez d'abord définir certains éléments dans la définition du formulaire du pack d'administration.

Tout d'abord, un espace de noms pointant vers l'espace de noms code behind du formulaire est ajouté à la définition du formulaire. Dans cet exemple, l'espace de noms est SMFormsDemo :

xmlns:local="clr-namespace:SMFormsDemo"  

Ensuite, un ObjectDataProvider doit être défini pour fournir les valeurs de la zone de liste déroulante qui affiche l'état du projecteur. Ce ObjectDataProvider est défini en tant que ressource :

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

Ce fournisseur de données spécifie le nom de l'objet et de la méthode qui récupèrent les valeurs d'énumération depuis le pack d'administration.

Enfin, pour lier la zone de liste déroulante aux valeurs d'énumération définies dans le pack d'administration, un attribut ItemsSource est ajouté à la définition de la zone de liste déroulante. Cet attribut spécifie l'emplacement auquel récupérer les valeurs d'énumération. Exemple :

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

Ensuite, les éléments SelectedItem et ItemTemplate sont ajoutés à la définition XAML du contrôle zone de liste déroulante. L'exemple suivant montre la définition de la zone de liste déroulante avec le code XAML de liaison :

  
<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>  
  

La section Category

La section Category d'un pack d'administration regroupe les éléments de pack d'administration pour une exploration facilitée.

Les deux premiers éléments <Category> de l'exemple sont utilisés pour contrôler l'affichage des tâches Nouveau et Modifier de la vue Projecteurs.

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

Les deux éléments Category suivants de l'exemple de pack d'administration sont utilisés pour faire apparaître l'énumération de la condition du projecteur dans la vue Listes du volet Création de la Console de Service Manager. Cela permet à l'utilisateur de personnaliser les valeurs :

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

Dans l'exemple suivant, l'ajout de cette catégorie fait apparaître la tâche Modifier dans la vue Listes pour la EnumerationValue référencée dans l'attribut Target :

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

La section Presentation

La section Presentation d'un pack d'administration déclare et définit les éléments relatifs à l'interface utilisateur. Il s'agit notamment des déclarations de formulaires, des catégories et des tâches de console.

La section Forms

La section Forms déclare les formulaires qui sont utilisés par votre pack d'administration. L'exemple suivant indique où trouver le formulaire défini pour l'affichage et la modification des instances de la classe Projector. Ceci lie le formulaire à la classe Projector définie dans le pack d'administration :

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

Les attributs suivants sont utilisés dans l'exemple précédent :

  • L'attribut TypeName contient l'espace de noms et le nom de classe du formulaire.

  • L'attribut ID contient l'identificateur unique de cette instance de formulaire.

  • L'attribut Target contient le nom de la classe à laquelle est lié ce formulaire.

  • L'attribut Assembly pointe vers la ressource externe qui contient le formulaire.

  • L'attribut Accessibility définit si ce formulaire peut être personnalisé.

Définition d'une vue

La section Views d'un pack d'administration contient les définitions des vues de l'interface utilisateur. Ces vues peuvent être utilisées pour filtrer et afficher des objets dans un pack d'administration.

<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>  
  

L'attribut View Target pointe vers la classe qui sera utilisée pour l'affichage de la vue.

Dans l'exemple précédent, le pack d'administration de la console Service Manager est référencé. Ce pack d'administration contient une définition d'un type de vue en cours d'utilisation. Dans cette instance, le type de vue SMConsole!GridViewType est défini.

AdvancedListSupportClass définit un certain nombre de paramètres, dont le plus important est TargetClass. Définissez ce paramètre sur l'ID du ClassType qui apparaît dans cette vue. Pour afficher les colonnes correspondant aux propriétés de ClassType, utilisez l'élément Column, puis liez-le à l'attribut PropertyID.

L'attribut IsRecurring de l'élément ListSupportClass détermine si la vue peut automatiquement s'actualiser. L'attribut RecurrenceFrequency définit l'intervalle d'actualisation en millisecondes. Dans cet exemple, l'intervalle d'actualisation est défini sur 1 seconde, ce qui n'est pas recommandé dans les environnements de production.

Définition des dossiers

La définition d'un dossier détermine l'emplacement de l'arborescence de navigation auquel la vue est affichée. Dans cet exemple, un élément de configuration est défini de façon à ne convenir qu'au placement de la vue dans le dossier existant des éléments de configuration dans l'espace de travail Éléments de configuration :

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

Dans l'exemple précédent, l'attribut ElementID contient une référence à la vue créée. L'attribut Folder pointe vers un dossier Folders.Projectors, dont la racine est définie tel que dans l'espace de travail Gestion de la configuration de la Console de Service Manager. Ce dossier racine est défini dans le pack d'administration Gestion de la configuration.

L'élément ImageReference mappe la vue créée précédemment sur une icône définie dans l'espace de noms Configuration Management :

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

Localisation à l'aide de la section LanguagePacks

La section LanaguagePacks d'un pack d'administration définit les ressources de chaîne et les mappages des éléments du pack d'administration.

Dans cet exemple, EnumerationValueProjectorCondition.Working doit avoir la valeur Working. Pour ce faire, les noms complets de chacun des éléments suivants doivent être définis :

  • Vue : All projectors

  • Énumérations : working, broken, in repair, 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>  
  

Si nécessaire, vous pouvez créer des éléments LanguagePack supplémentaires, pour chacune des langues requises. La chaîne d'affichage appropriée s'affiche, selon les paramètres régionaux de l'utilisateur.

Ressources

La section Resources d'un pack d'administration contient des références aux ressources binaires contenues dans des assemblys ne faisant pas partie du pack d'administration. Dans l'exemple suivant, une ressource définie pointe vers l'assembly qui contient le formulaire utilisé par la classe Projector :

<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" />  

Extensions de classe

Une extension de la classe est une classe qui ajoute des propriétés à une classe existante. Dans la plupart des cas, cette classe existante se trouve dans un pack d'administration scellé. Lorsque la classe existante ne se trouve pas dans un pack d'administration scellé, l'extension de classe doit se trouver dans le même pack d'administration que la classe en cours d'extension.

Une extension de classe hérite des propriétés de toutes les classes parentes, par exemple :

  • La classe A possède une propriété nommée Property1

  • La classe B dérive de la classe A ou étend celle-ci et par conséquent possède une propriété appelée Property1. Cette propriété est héritée d'une classe A, le parent ou la classe de base)

  • La définition de la classe B ajoute une propriété appelée Property2.

  • Toute extension de classe dérivant de la classe B hérite de Property1 et Property2.

L'exemple suivant montre une définition de l'extension de classe :

  
<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>  
  

Cette extension de classe étend la classe System.WorkItem.Incident et ajoute une nouvelle propriété nommée TimeOnIncident.

La définition d'une extension de classe est similaire à celle d'une définition de classe. Deux attributs de l'élément ClassType sont utilisées pour définir une définition de classe : l'attribut Base et l'attribut IsExtensionType.

L'attribut Base spécifie l'élément ID de la classe parente à partir de laquelle extension de classe est dérivée. Dans ce cas, la valeur d'attribut possède la valeur Incident!System.WorkItem.Incident. Cette valeur contient l'élément Alias du nom complet du pack d'administration, qui contient la classe en cours d'extension, un point d'exclamation, puis le nom d'une classe de base. Pour plus d'informations, reportez-vous à l'exemple suivant.

L'attribut IsExtensionType définit si cette classe est une extension de la classe de base.TimeOnIncident étant une extension vers la classe Incident, cette propriété possède la valeur true :

IsExtensionType="true"  

L'autre option est false, qui indique qu'il n'est pas une extension de notre classe, mais une nouvelle classe qui hérite de la base. La valeur par défaut est false ; par conséquent, cet attribut ne doit pas être utilisé si la classe n'est pas une extension.

Exemple complet

L'exemple de code suivant montre le pack d'administration complet contenant l'extension de classe.

<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>  
  

Importation d'un pack de gestion à l'aide d'une applet de commande Windows PowerShell

Par exemple, vous pouvez utiliser l'applet de commande Import-SCSMManagementPack Windows PowerShell pour importer un pack d'administration Service Manager, par exemple :

Import-SCSMManagementPack MyServiceManager.ManagementPack.xml  

Ce document ne décrit pas comment importer et utiliser les packs d'administration dans la Console de Service Manager. Pour plus d'informations sur l'utilisation des packs d'administration dans la Console de Service Manager, voir Using Management Packs in System Center 2012 - Service Manager (Utilisation des packs d'administration dans System Center 2012 - Service Manager).

Exemple : Pack d'administration complet

Les codes d'exemple suivants représentent un exemple du pack d'administration utilisé pour les exemples de cette rubrique, en plus de la définition du formulaire et du code-behind C# utilisé pour le formulaire.

Pack d'administration

<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>  

Définition de formulaire

  
<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>  
  

Code-Behind du formulaire

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

Voir aussi

Modifications du schéma commun de System Center
Formulaires : Directives et meilleures pratiques d'ordre général