Direktredigera en hanteringspaketfil för att hantera projektorer
Publicerat: juli 2016
Gäller för: System Center 2012 SP1 - Service Manager, System Center 2012 R2 Service Manager, System Center 2012 - Service Manager
Hanteringspaket används för att styra och utöka funktionerna i System Center 2012 – Service Manager. I det här avsnittet används projektorer som exempel för att beskriva olika delar av ett hanteringspaket och definiera olika objekt som behövs för att hantera projektorer i en organisation.
Här visas ett fullständigt hanteringspaketexempel med de tillägg som behövs för att hantera projektorer i en organisation. Här beskrivs också hur du importerar ett hanteringspaket med en Windows PowerShell-cmdlet.
Följande delar av ett hanteringspaket beskrivs:
Manifestet
TypeDefinitions som skapar klassuppräkningar och relationer
Formulär
Här beskrivs också följande delar av ett hanteringspaket som innehåller deklarationer och definitioner för användargränssnitts- och lokaliseringselement:
Kategorier
Presentation
Klasstillägg
Manifest-delen
Den första delen av ett hanteringspaket innehåller manifestet. Manifestet identifierar hanteringspaketet och anger eventuella referenser till andra hanteringspaket.
I följande exempel visas Manifest-delen av ett hanteringspaket som har utformats för att spåra projektorer i en 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>
Viktigt |
---|
|
TypeDefinitions-delen – Skapa en klass
Nästa del av ett hanteringspaket innehåller typdefinitioner. TypeDefinitions-delen i ett hanteringspaket innehåller definitioner av klasser, uppräkningar och relationer som används av hanteringspaketet.
I följande exempel visas en klass som innehåller information om projektorer:
<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>
Nedan förklaras per del vad en typdefinitionen innehåller.
ClassTypes-delen
Elementet ClassType definierar projektorklassen:
<ClassType ID="System.ConfigItem.Projector" Base="System!System.ConfigItem" Hosted="false" Accessibility="Public" Abstract="false">
Attributet ID är den unika identifieraren för den här klassen Det anges som:
ID="System.ConfigItem.Projector"
Attributet Base är ID för den klass som den här klassen härleds från. Eftersom en projektor är en typ av konfigurationsobjekt anges det som:
Base="System!System.ConfigItem"
System! anger att den här klassen, System.ConfigItem, finns i det hanteringspaket som aliaset System refererar till.
Attributet Hosted anger huruvida den här klassen har en annan klass som värd. I så fall kan det bara finnas en instans av klassen när det finns en värdinstans för den. I det här exemplet finns det inga värdar för projektorer och attributet Hosted anges därför som false:
Hosted="false"
När attributet Hosted är angett som true har klassen en annan klass som värd. En värdrelation måste anges i delen RelationshipTypes.
Attributet Accessibility anger huruvida andra klasser kan härledas från den här klassen. Om du vill att andra ska kunna skapa en mer specifik version av din klass anger du attributet till public, till exempel:
Accessibility="Public"
När attributet Accessibility är Internal kan andra klasser inte härledas från den här klassen.
Attributet Abstract definierar huruvida instanser av den här klassen kan skapas eller huruvida klassen bara ska användas som överordnad klass som andra klasser kan härledas från. I det här exemplet är attributet false. När attributet är true kan inga instanser av den här klassen skapas direkt och klassen kan bara användas som en överordnad klass.
Nästa del av klassdefinitionen innehåller klassegenskaperna. Den XML som anger klassegenskaperna i det här exemplet definieras i följande kodexempel:
<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" />
Varje Property-element består av följande attribut:
Attributet ID som utmärker egenskapens unika identifierare.
Attributet Type som utmärker egenskapens datatyp.
Attributet Key. När det här attributet är true används egenskapen för att unikt identifiera den här klassen.
Skapa uppräkningstyper
Uppräkningar av datatypen enum är speciella datatyper. Uppräkningar används för att begränsa vilka data som tillåts för en egenskap för en viss uppsättning värden. Uppräkningar kan vara hierarkiska. En uppräkning kan baseras på en annan uppräkning.
Uppräkningar definieras i EnumertionTypes-delen av ett lösningspaket. En uppräkningsdefinition innehåller rotuppräkningen följt av de faktiska uppräkningsvärdena.
Varje EnumerationValue godkänner några attribut:
I det här exemplet definieras en uppräkning för att spåra projektionernas tillstånd. Uppräkningen definieras av följande:
ID är identifieraren för uppräkningen eller uppräkningsvärdet.
Accessibility anger huruvida uppräknaren kan innehålla andra uppräknare.
ParentName är ett attribut som anger ID för uppräknarvärdets överordnade objekt.
<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>
Skapa ett formulär
Service Manager--formulär baseras på WPF-formulär (Windows Presentation Framework). Service Manager- utökar WPF med enkla attribut som läggs till i XML-definitionen och gör att Service Manager- kan binda data från hanteringspaketet till formuläret.
Service Manager--formulär kan skapas med flera olika verktyg, bland annat Microsoft Visual Studio och Microsoft Expression Blend. Eftersom formulären är XML-baserade kan de också definieras med en XML-redigerare.
I följande exempel visas en formulärdefinition som har skapats med Microsoft Expression Blend. Formuläret innehåller fyra kontroller, tre textrutor och en kombinationsruta som är bundna till de tidigare definierade Projektor-klassegenskaperna:
<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>
För att kunna binda kontroller i formuläret till klassegenskaper som är definierade i ett hanteringspaket, måste du ange ett antal objekt.
Binda textkontroller
Om du vill binda textrutor till klassegenskaper i ett hanteringspaket lägger du till en Binding Path-tagg i textrutekontrollens Text-egenskap, till exempel:
{Binding Path=SerialNumber, Mode=TwoWay}
Den här taggen binder textrutekontrollen till SerialNumber-egenskapen för klassen Projektor som definierades i hanteringspaketet, och den anger att detta ska vara en dubbelriktad bindning. Egenskapsvärdet hämtas från databasen och visas i textrutan när formuläret läses in. Egenskapsvärdet lagras i databasen igen om det ändras av användaren.
Binda kombinationsrutor
Om du vill att formuläret ska kunna hämta uppräkningsdata från det underliggande hanteringspaketet och binda dem till en kontroll i formuläret, måste du definiera en hjälparklass i code-behind i formuläret. Hjälparklassen måste innehålla en metod som returnerar en uppräkning som är definierad i hanteringspaketet. Använd metoden GetEnumerations i det aktuella hanteringspaketet för att returnera en uppräkning. Instansen nås med klassen ConsoleContextHelper från Service Manager- SDK-paketet. I följande exempel definierar en hjälparklass en GetStatusValues-metod som hämtar värdena för den ProjectorCondition-uppräkning som definierades i hanteringspaketet:
public class helper
{
public static ICollection<IDataItem> GetStatusValues()
{
return ConsoleContextHelper.Instance.GetEnumerations("ProjectorCondition",true);
}
}
För att metoden ska kunna användas måste några saker ha definierats i formulärdefinitionen i hanteringspaketet.
Först måste en namnrymd som pekar på namnrymden för code behind för formuläret läggas till i formulärdefinitionen. I det här exemplet är namnrymden SMFormsDemo:
xmlns:local="clr-namespace:SMFormsDemo"
Sedan måste en ObjectDataProvider definieras för att tillhandahålla värdena för den kombinationsruta som visar projektorstatusen. Denna ObjectDataProvider definieras som en resurs:
<UserControl.Resources>
<ObjectDataProvider
ObjectType="{x:Type local:helper}"
MethodName="GetStatusValues"
x:Key="getStatusValues" />
</UserControl.Resources>
Dataprovidern anger objektet och metodnamnet som hämtar uppräkningsvärdena från hanteringspaketet.
För att binda kombinationsrutan till de uppräkningsvärden som är definierade i hanteringspaketet, läggs slutligen ett ItemsSource-attribut till i kombinationsrutedefinitionen. Attributet anger var uppräkningsvärdena ska hämtas, till exempel:
ItemsSource="{Binding Source={StaticResource getStatusValues}, Mode=OneWay }"
Därefter läggs elementen SelectedItem och ItemTemplate till i XAML-definitionen (Extensible Application Markup Language) för kombinationsrutekontrollen. I följande exempel visas kombinationsrutedefinitionen med bindande XAML:
<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>
Kategori-delen
Category-delen av ett hanteringspaket grupperar hanteringspaketelement för att underlätta navigeringen.
De två första <Category>-elementen i exemplet används för att styra visningen av uppgifterna Ny och Redigera i vyn Projektorer.
<Category ID="ProjectorViewHasTasks.View" Target="AllProjectorsView" Value="ProjectorViewTasksEnumeration" />
<Category ID="ProjectorViewHasTasks.CreateTask" Target="CreateProjector" Value="ProjectorViewTasksEnumeration" />
De andra två Category-elementen i exempelhanteringspaketet används för att synliggöra projektortillståndsuppräkningen i Listor i rutan Redigering i Service Manager-konsol. Det gör att användaren kan anpassa värden:
<Category ID="Project.ProjectorConditionEnumVisibleCategory" Target="ProjectorCondition" Value="System!VisibleToUser"/>
Om den här kategorin läggs till i följande exempel visas uppgiften Redigera i vyn Listor för det EnumerationValue som Target-attributet pekar på:
<Category ID="Projector.ProjectorConditionCategory" Target="ProjectorCondition" Value="Authoring!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.EnumerationViewTasks"/>
Presentation-delen
I Presentation-delen av ett hanteringspaket anges och definieras användargränssnittsrelaterade element. Detta är formulärdeklarationer, kategorier och konsoluppgifter.
Formulär-delen
I Forms-delen anges de formulär som används av hanteringspaketet. I följande exempel anges var du hittar det formulär som har definierats för att att visa och redigera instanser av klassen Projektor. Detta binder formuläret till klassen Projektor som är definierad i hanteringspaketet:
<Forms>
<Form TypeName="SMFormsDemo.TestControl"
ID="TestForm"
Target="System.ConfigItem.Projector"
Assembly="ProjectorFormsAssembly"
Accessibility="Public">
<Category>Form</Category>
</Form>
</Forms>
Följande attribut används i föregående exempel:
Attributet TypeName innehåller namnrymd och klassnamn för formuläret.
Attributet ID innehåller den unika identifieraren för formulärinstansen.
Attributet Target innehåller namnet på den klass som formuläret är bundet till.
Attributet Assembly pekar på den externa resurs som innehåller formuläret.
Attributet Accessibility anger huruvida formuläret kan anpassas.
Definiera en vy
Views-delen av ett hanteringspaket innehåller definitioner av användargränssnittsvyer. Vyerna kan användas för att filtrera och visa objekt i ett hanteringspaket.
<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>
View Target-attributet pekar på den klass som ska visas i vyn.
I föregående exempel refereras det till Service Manager-konsolens hanteringspaket. Det här hanteringspaketet innehåller en definition av en vytyp som används. I den här instansen definieras vytypen SMConsole!GridViewType.
AdvancedListSupportClass anger ett antal parametrar, varav den viktigaste är TargetClass-parametern. Ställ in den här parametern på ID för den ClassType som ska visas i den här vyn. Om du vill visa de kolumner som är egenskaper för ClassType använder du elementet Column och binder det till PropertyID-attributet.
Attributet IsRecurring för ListSupportClass-elementet anger huruvida vyn ska uppdateras automatiskt. Attributet RecurrenceFrequency anger uppdateringsintervallet i millisekunder. I det här exemplet är uppdateringsintervallet 1 sekund, men det rekommenderas inte för produktionsinstallationer.
Definiera mappar
Genom att definiera mappar anger du platsen i navigeringsträdet där vyn ska visas. I det här exemplet har ett konfigurationsobjekt definierats, så att den enda passande platsen för vyn är under den befintliga mappen för konfigurationsobjekt i arbetsytan Konfigurationsobjekt:
<Folders>
<Folder ID="Folder.Projectors" Accessibility="Public" ParentFolder="SMConfig!ServiceManager.Console.ConfigurationManagement.ConfigItem.Root" />
</Folders>
<FolderItems>
<FolderItem
ElementID="AllProjectorsView"
Folder="Folder.Projectors" />
</FolderItems>
I föregående exempel innehåller attributet ElementID en referens till den vyn som skapades. Attributet Folder pekar på en Folders.Projectors-mapp vars rot är definierad i arbetsytan Konfigurationshantering i Service Manager-konsol. Denna rotmapp definieras i hanteringspaketet för konfigurationshanteringen.
Elementet ImageReference mappar den tidigare skapade vyn till en symbol som definieras i Configuration Management-namnrymden:
<ImageReferences>
<ImageReference ElementID="Folder.Projectors" ImageID="SMConfig!ConfigItemImage16x16" />
<ImageReference ElementID="AllProjectorsView" ImageID="SMConfig!ConfigItemImage16x16" />
</ImageReferences>
Lokalisering med LanguagePacks-delen
I LanaguagePacks-delen i ett hanteringspaket definieras strängresurser och mappningar för hanteringspaketelement.
I det här exemplet måste EnumerationValueProjectorCondition.Working visas som Arbetar. För att göra detta måste visningsnamn definieras för vart och ett av följande:
Vy: Alla projektorer
Uppräkningar: arbetar, skadad, repareras, ny
<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>
Du kan skapa ytterligare LanguagePack-element om så behövs för varje nytt språk du behöver. Den rätta visningssträngen visas för användaren baserat på användarens språkinställningar.
Resurser
Resources-delen av ett hanteringspaket innehåller referenser till binära resurser som finns i sammansättningar åtskilda från hanteringspaketet. I följande exempel definieras en resurs som pekar på den sammansättning som innehåller formuläret som används av klassen Projektor:
<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" />
Klasstillägg
Ett klasstillägg är en klass som ger en annan, befintlig klass fler egenskaper. Den ursprungliga klassen finns oftast i ett förseglat hanteringspaket. Om den ursprungliga klassen inte finns i ett förseglat hanteringspaket, måste klasstillägget finnas i samma hanteringspaket som den ursprungliga klassen.
Ett klasstillägg får samma egenskaper som den överordnade klassen som tillägget baseras på. Exempel:
Klass A har egenskapen Egenskap1.
Klass B är ett klasstillägg som baseras på klass A, och har därför också egenskapen Egenskap1. Egenskapen har ärvts från klass A, som är den överordnade klassen (eller basklassen).
Klass B har en definition som dessutom innehåller egenskapen Egenskap2.
Alla eventuella klasstillägg som baseras på klass B kommer att ärva både Egenskap1 och Egenskap2.
Det här är ett exempel på en definition av ett klasstillägg:
<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>
Det här klasstillägget baseras på klassen System.WorkItem.Incident och omfattar den nya egenskapen TimeOnIncident.
Ett klasstillägg har samma sorts definition som en klass. En klass definieras med två attribut från elementet ClassType: Base och IsExtensionType.
Attributet Base specificerar ID för den överordnade klass som klasstillägget baseras på. Attributvärdet i det här fallet är Incident!System.WorkItem.Incident. Värdet omfattar Alias för det fullständiga namnet på hanteringspaketet: den ursprungliga klassen följt av ett utropstecken och sedan namnet på basklassen. Mer information finns i exemplet nedan.
Attributet IsExtensionType definierar huruvida denna klass är ett klasstillägg till basklassen. TimeOnIncident är ett tillägg till klassen Incident, så egenskapen har värdet true:
IsExtensionType="true"
Det andra alternativet är false, vilket skulle indikera att detta inte är ett klasstillägg till en annan klass utan en ny klass som ärver egenskaper från basklassen. Standardvärdet är false, så detta attribut behöver alltså inte användas om klassen inte är ett klasstillägg.
Fullständigt exempel
Följande är en fullständig exempelkod för ett hanteringspaket med ett klasstillägg.
<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>
Importera ett hanteringspaket med hjälp av en Windows PowerShell-cmdlet
Med hjälp av the Windows PowerShell-cmdleten Import-SCSMManagementPack kan du importera ett Service Manager--hanteringspaket, till exempel
Import-SCSMManagementPack MyServiceManager.ManagementPack.xml
Hur man importerar och använder hanteringspaket i Service Manager-konsolen beskrivs inte i det här dokumentet. Information om hur man använder hanteringspaket i Service Manager-konsolen finns i Using Management Packs in System Center 2012 – Service Manager (Använda hanteringspaket i System Center 2012 – Service Manager).
Exempel: Fullständigt hanteringspaket
Följande exempelkoder representerar det fullständiga hanteringspaket som används i exemplen i detta avsnitt, förutom formulärdefinitionen och den bakomliggande C#-koden för formuläret.
Hanteringspaket
<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>
Formulärdefinition
<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>
Bakomliggande kod för formuläret
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);
}
}
}
Se även
Ändringar i det gemensamma System Center-schemat
Formulär: Allmänna riktlinjer och metodtips