Práce se soubory XML sady Management Pack service Manageru
Pro propracovaná přizpůsobení sad Management Pack nemusí být dostatečná konzola Service Manageru a nástroj pro tvorbu Service Manageru a možná budete muset přímo vytvářet nebo upravovat soubory sady Management Pack. Práce přímo se soubory sady Management Pack vyžaduje podrobné znalosti v několika oblastech, jako je běžné schéma nástroje System Center a struktura sad Management Pack.
Tato část obsahuje základní informace a pokyny, které vám můžou pomoct při vytváření a úpravě sad Management Pack pro přizpůsobení Service Manageru.
Změny společného schématu nástroje System Center
Service Manager obsahuje aktualizovanou verzi schématu sady Management Pack nástroje System Center. Toto schéma se teď označuje jako běžné schéma nástroje System Center a obsahuje řadu vylepšení a doplňků, které jsou určeny k vylepšení stávajících funkcí a povolení funkcí portálu Service Manager. Tento článek popisuje změny společného schématu nástroje System Center.
Omezení vlastností a vlastností
Společné schéma rozšiřuje třídy prostřednictvím několika nových typů vlastností. Mezi tyto typy vlastností patří binární, enumerátor a typy automatického přírůstku.
Kromě toho můžete definovat omezení pro určité hodnoty vlastností. Můžete například definovat omezení regulárního výrazu pro hodnotu vlastnosti řetězce. V následujícím příkladu má Vlastnost BuildingName omezení regulárního výrazu, které je definováno tak, aby pouze hodnota obsahující slovo Building následované mezerou a číslo je považováno za platné.
<ClassType ID="Lobby" Accessibility="Public" Base="System!System.Entity">
<Property ID="Id" Type="int" Key="true" />
<Property ID="BuildingName" Type="string" RegEx="Building [0-9]+" />
</ClassType>
Obrázky
Image se neukládají do sady Management Pack. <PresentationTypes>
Proto oddíl sady Management Pack již neobsahuje značky <Images>
, <Image>
nebo <ImageData>
. Místo toho použijte prostředek image.
<Resources>
<Image ID="TestLibrary.Resources.Image1" Accessibility="Public" FileName="image.png"/>
</Resources>
Výčty
Společné schéma podporuje výčty. Výčty jsou strom hodnot, které můžete použít k omezení hodnoty vlastnosti nebo atributu.
Každý výčet má požadovaný jedinečný atribut ID a volitelný nadřazený atribut.
V následujícím příkladu je výčet XBoxState definován se třemi možnými hodnotami: Running, Stopped a Error.
<EnumerationTypes>
<EnumerationValue ID="XBoxState" Accessibility="Public"/>
<EnumerationValue ID="XBoxState.Running" Parent="XBoxState" Accessibility="Public"/>
<EnumerationValue ID="XBoxState.Stopped" Parent="XBoxState" Accessibility="Public"/>
<EnumerationValue ID="XBoxState.Error" Parent="XBoxState" Accessibility="Public" />
<EnumerationValue ID="XBoxState.Error.RROD" Parent="XBoxState.Error" Accessibility="Public" />
</EnumerationTypes>
V následujícím příkladu třída Xbox definuje vlastnost výčtu typu XBoxState.
<ClassType ID="XBox" Accessibility="Public" Base="System!System.ConfigItem" Hosted="true">
<Property ID="Id" Type="int" Key="true" />
<Property ID="Name" Type="string" />
<Property ID="State" Type="enum" EnumType="XBoxState" />
</ClassType>
Relace
Funkce definic relací byla vylepšena ve společném schématu. Typ RelationshipType má nyní podprsítku Source a Target s vlastnostmi ID , které lze použít jako zobrazované názvy. Kromě toho můžete definovat minimální a maximální kardinalitu pro zdroj i cíl; Například relace 1:1 nebo 0:N.
Kardinalitu nevynucuje proces ověření sady Management Pack, ale má pomoct definovat uživatelská rozhraní pro sadu Management Pack. Kardinalitu lze například zaškrtnutou a určit, zda lze pole reprezentovat ve formuláři textovým polem nebo seznamem.
Důležité
Jakákoli hodnota MaxCardinality definovaná jako větší než 1 se zpracuje jako neomezená.
Pokud přidáte nový typ relace z vlastní sady Management Pack, musí mít uživatelé dostatečná oprávnění k aktualizaci všech vlastností zdrojové a cílové třídy typu relace, aby mohli vytvořit instanci nového typu relace.
V následujícím příkladu je definován vztah hostingu s názvem HasXboxes mezi typem předsálí a typem Xboxu . V této definici relace může mít každý typ předsálí více typů Xbox .
<RelationshipType ID="HasXBboxes" Accessibility="Public" Base="System!System.Hosting">
<Source ID="Source" Type="Lobby" />
<Target ID="Target" Type="Xbox" MinCardinality="0" MaxCardinality="9999" />
</RelationshipType>
Kombinované třídy
Kombinované třídy představují agregaci více souvisejících typů v sadě Management Pack, podobně jako zobrazení definovaná v databázi Microsoft SQL Serveru, která mohou vracet data z více tabulek. Kombinované třídy ukládají a načítají všechna agregovaná data v jedné operaci do databáze a můžou usnadnit definování uživatelských rozhraní pro sadu Management Pack.
V následujícím příkladu je projekce definována pro zobrazení správy incidentů. Tato projekce kombinuje několik různých komponent souvisejících s incidentem do jedné jednotky, kterou lze snadněji použít pro formuláře a databázové operace.
<TypeProjections>
<TypeProjection ID="System.WorkItem.Incident.View.ProjectionType"
Accessibility="Public" Type="Incident!System.WorkItem.Incident">
<Component Alias="AffectedUser"
Path="$Target/Path[Relationship='SMCore!System.WorkItemCreatedForUser']$"/>
<Component Alias="AssignedUser" Path="$Target/Path[Relationship='SMCore!System.WorkItemAssignedToUser']$"/>
</TypeProjection>
<TypeProjection ID="System.WorkItem.Incident.View.DCMProjectionType" Accessibility="Public" Type="Incident!System.WorkItem.Incident.DCMIncident">
<Component Alias="AffectedUser" Path="$Target/Path[Relationship='SMCore!System.WorkItemCreatedForUser']$"/>
<Component Alias="AssignedUser" Path="$Target/Path[Relationship='SMCore!System.WorkItemAssignedToUser']$"/>
<!--Baseline and Configuration Item Information-->
<Component Alias="AffectedComputer" Path="$Target/Path[Relationship='Incident!System.WorkItem.Incident.DCMIncident.Refers.NonComplianceComputer']$"/>
</TypeProjection>
<TypeProjection ID="System.WorkItem.ChangeRequestViewProjection" Accessibility="Public" Type="System.WorkItem.ChangeRequest">
<Component Alias="AssignedTo" Path="$Target/Path[Relationship='SMCore!System.WorkItemAssignedToUser']$"/>
</TypeProjection>
<TypeProjection ID="System.WorkItem.ChangeRequestProjection" Accessibility="Public" Type="System.WorkItem.ChangeRequest">
<Component Alias="Activity" Path="$Target/Path[Relationship='SMActivity!System.WorkItemContainsActivity']$">
<Component Alias="ActivityAssignedTo" Path="$Target/Path[Relationship='SMCore!System.WorkItemAssignedToUser']$"/>
<Component Alias="ActivityRelatedWorkItem" Path="$Target/Path[Relationship='SMCore!System.WorkItemRelatesToWorkItem']$">
<Component Alias="ActivityRelatedWorkItemAssignedTo" Path="$Target/Path[Relationship='SMCore!System.WorkItemAssignedToUser']$"/>
</Component>
<Component Alias="ActivityRelatedConfigItem" Path="$Target/Path[Relationship='SMCore!System.WorkItemRelatesToConfigItem']$"/>
<Component Alias="ActivityAboutConfigItem" Path="$Target/Path[Relationship='System!System.WorkItemAboutConfigItem']$"/>
<Component Alias="ActivityFileAttachment" Path="$Target/Path[Relationship='System!System.WorkItemHasFileAttachment']$">
<Component Alias="ActivityFileAttachmentAddedBy" Path="$Target/Path[Relationship='System!System.FileAttachmentAddedByUser']$"/>
</Component>
<Component Alias="Reviewer" Path="$Target/Path[Relationship='SMActivity!System.ReviewActivityHasReviewer']$">
<Component Alias="User" Path="$Target/Path[Relationship='SMActivity!System.ReviewerIsUser']$"/>
<Component Alias="VotedBy" Path="$Target/Path[Relationship='SMActivity!System.ReviewerVotedByUser']$"/>
</Component>
</Component>
<Component Alias="CreatedBy" Path="$Target/Path[Relationship='SMCore!System.WorkItemCreatedByUser']$"/>
<Component Alias="AssignedTo" Path="$Target/Path[Relationship='SMCore!System.WorkItemAssignedToUser']$"/>
<Component Alias="CreatedFor" Path="$Target/Path[Relationship='SMCore!System.WorkItemCreatedForUser']$"/>
<Component Alias="RelatedWorkItem" Path="$Target/Path[Relationship='SMCore!System.WorkItemRelatesToWorkItem']$">
<Component Alias="RelatedWorkItemAssignedTo" Path="$Target/Path[Relationship='SMCore!System.WorkItemAssignedToUser']$"/>
</Component>
<Component Alias="RelatedConfigItem" Path="$Target/Path[Relationship='SMCore!System.WorkItemRelatesToConfigItem']$"/>
<Component Alias="AboutConfigItem" Path="$Target/Path[Relationship='System!System.WorkItemAboutConfigItem']$"/>
<Component Alias="FileAttachment" Path="$Target/Path[Relationship='System!System.WorkItemHasFileAttachment']$">
<Component Alias="FileAttachmentAddedBy" Path="$Target/Path[Relationship='System!System.FileAttachmentAddedByUser']$"/>
</Component>
</TypeProjection>
<TypeProjection ID="System.FileAttachmentProjection" Accessibility="Public" Type="System!System.FileAttachment">
<Component Alias="FileAttachmentAddedBy" Path="$Target/Path[Relationship='System!System.FileAttachmentAddedByUser']$"/>
</TypeProjection>
</TypeProjections>
Úlohy konzoly
Úlohy konzoly jsou rozšířeny ve společném schématu. Dříve byly úlohy konzoly jednoduchými ukazateli na adresář aplikace a název spustitelného souboru. Úlohy konzoly jsou nyní implementovány jako kód obslužné rutiny v sestavení Microsoft .NET Framework. Kód obslužné rutiny odkazuje na sestavení, které obsahuje kód, název obslužné rutiny a seznam pojmenovaných hodnot, které lze předat obslužné rutině jako argumenty.
V následujícím příkladu je obslužná rutina Some.Handler.Name definována v sestavení MyLibrary.Resources.Assembly. Definuje se také seznam parametrů obslužné rutiny a jejich hodnot.
<ConsoleTask ID="MyLibrary.ConsoleTasks.T1"
Accessibility="Public"
Target="System!System.Entity"
Enabled="true"
RequireOutput="true">
<Assembly>MyLibrary.Resources.Assembly1</Assembly>
<Handler>Some.Handler.Name</Handler>
<Parameters>
<Argument Name="Application">cmd.exe</Argument>
<Argument Name="WorkingDirectory">%TEMP%</Argument>
<Argument>test1</Argument>
<Argument>test2</Argument>
</Parameters>
</ConsoleTask>
Zdroje informací
Binární data nejsou uložená přímo v sadě Management Pack. Místo toho jsou metadata o binárním prostředku uložena v sadě Management Pack a skutečná binární data jsou uložena externě v souboru prostředků. Metadata obsahují jedinečný identifikátor, název souboru, data vytvoření, datum změny a informace o přístupnosti.
Binární data můžou zahrnovat obecné prostředky, obrázky, sestavení, definice sestav a formuláře. Následující příklad ukazuje obecný prostředek XML, prostředek sestavení a prostředek sestavy.
<Resources>
<Resource ID="TestLibrary.Resources.Test1" Accessibility="Public" FileName="res1.xml"/>
<Resource ID="TestLibrary.Resources.Test2" Accessibility="Public" FileName="res2.xml"/>
<Assembly ID="TestLibrary.Resources.Assembly1" Accessibility="Public" QualifiedName="Baz, Version=1.0.0.0" FileName="baz.dll"/>
<Assembly ID="TestLibrary.Resources.Assembly2" Accessibility="Public" QualifiedName="Yoyo, Version=1.0.0.0" FileName="yoyo.dll">
<Dependency ID="TestLibrary.Resources.Assembly1"/>
</Assembly>
<ReportResource ID="TestLibrary.Resources.Report1" Accessibility="Public" MIMEType="text/xml" FileName="res1.xml"/>
<Image ID="TestLibrary.Resources.Image1" Accessibility="Public" FileName="image.png"/>
</Resources>
Formuláře
Formuláře jsou definovány v sadě Management Pack. Pomocí formulářů můžete zobrazit a upravit jednu instanci typu nebo třídy kombinace.
Formuláře jsou založené na rozhraní WINDOWS Presentation Framework (WPF) a jsou definovány v sestaveních. Sestavení a třída, které obsahují implementace formulářů pro sadu Management Pack, jsou zahrnuty v části prostředků sady Management Pack. Stejně jako u jakéhokoli binárního prostředku v sadě Management Pack, který používá nové společné schéma, sada Management Pack sama neobsahuje binární data formuláře. V sadě Management Pack je zadán pouze manifest prostředku.
Můžete zadat vlastní konfigurační informace pro formulář v sadě Management Pack. V následujícím příkladu část Konfigurace obsahuje ShowXboxes vlastnost. Tyto informace o konfiguraci se nevyhodnocují procesem ověření sady Management Pack; interpretuje se pouze implementací formuláře.
<Forms>
<Form ID="LobbyForm" Target="Projection" Assembly="FormAssembly" TypeName="MyFormClass">
<Configuration>
<ShowXboxes>yes</ShowXboxes>
</Configuration>
</Form>
</Forms>
Vytvoření souboru sady Management Pack pro správu projektorů
Sady Management Pack slouží k přímému a rozšíření funkcí Service Manageru. Tento článek používá projektory jako příklad pro popis různých částí sady Management Pack a pro definování různých objektů potřebných ke správě projektorů v organizaci.
Tento článek obsahuje kompletní ukázku sady Management Pack s potřebnými rozšířeními pro správu projektorů v organizaci. Popisuje také, jak importovat sadu Management Pack pomocí rutiny Prostředí Windows PowerShell.
Tento článek popisuje následující části sady Management Pack:
The Manifest
TypeDefinitions pro vytvoření výčtů a relací třídy
Formuláře
Tento článek také popisuje následující části sady Management Pack, které obsahují deklarace a definice pro prvky uživatelského rozhraní a lokalizace:
Kategorie
Prezentace
Rozšíření tříd
Oddíl manifestu
První část sady Management Pack obsahuje manifest. Manifest identifikuje sadu Management Pack a deklaruje všechny odkazy na jiné sady Management Pack.
Následující příklad ukazuje část Manifest sady Management Pack, která byla navržena pro sledování projektorů v organizaci.
<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>
Důležité
V části Odkazy nepoužívejte v aliasu pro odkaz jiné než osamocené hodnoty, například ..
Vytvoření tříd v oddílu TypeDefinitions
Další část sady Management Pack obsahuje definice typů. Oddíl TypeDefinitions sady Management Pack obsahuje definice pro třídy, výčty a relace, které jsou používány sadou Management Pack.
Následující příklad ukazuje třídu, která obsahuje informace o projektorech:
<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>
Následuje popis definice typu.
Oddíl ClassTypes
Element ClassType definuje třídu projektoru:
<ClassType ID="System.ConfigItem.Projector" Base="System!System.ConfigItem" Hosted="false" Accessibility="Public" Abstract="false">
Atribut ID je jedinečný identifikátor této třídy. Je nastavená na:
ID="System.ConfigItem.Projector"
Základní atribut je ID třídy, ze které tato třída odvozuje. Vzhledem k tomu, že projektor je druh položky konfigurace, je nastavena na:
Base="System!System.ConfigItem"
Zápis system! označuje, že tato třída System.ConfigItem je v sadě Management Pack, na kterou odkazuje systém aliasů.
Hostovaný atribut definuje, zda je tato třída hostována jinou třídou. V tomto případě může instance této třídy existovat pouze v případě, že existuje instance hostitele, která ji obsahuje. V tomto příkladu nejsou projektory hostovány nic; Proto je hostovaný atribut nastaven na false:
Hosted="false"
Nastavení hostovaného atributu na true označuje, že třída je hostována jinou třídou. Hostitelský vztah musí být deklarován v části RelationshipTypes .
Atribut Accessibility definuje, zda ostatní třídy mohou odvozovat z této třídy. V případech, kdy můžete chtít ostatním umožnit, aby vytvořili konkrétnější verzi třídy, nastavte tento atribut na veřejný, například:
Accessibility="Public"
Nastavení atributu Accessibility na Internal zabraňuje jiným třídám odvození z této třídy.
Abstraktní atribut definuje, zda lze vytvořit instance této třídy, nebo zda by třída měla být použita pouze jako nadřazená třída k jiným třídám, které mají být odvozeny. V tomto příkladu je tento atribut nastaven na false. Nastavení tohoto atributu na hodnotu true znamená, že nelze přímo vytvořit žádné instance této třídy a že tuto třídu lze použít pouze jako nadřazenou třídu.
Další část definice třídy obsahuje vlastnosti třídy. Xml, který definuje vlastnosti třídy pro tento příklad jsou definovány v následujícím příkladu kódu:
<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" />
Každý element Property má následující atributy:
Atribut ID , který určuje jedinečný identifikátor vlastnosti.
Atribut Type , který označuje datový typ vlastnosti.
Atribut Klíč . Nastavení tohoto atributu na hodnotu true označuje, že tato vlastnost má být použita k jedinečné identifikaci této třídy.
Vytvoření typů výčtu
Výčty datového typu výčtu jsou speciální datové typy. Výčty slouží k omezení dat, která jsou povolena pro vlastnost na konkrétní sadu hodnot. Výčty mohou být hierarchické; jeden výčet může být založen na jiném výčtu.
Výčty jsou definovány v části EnumertionTypes balíčku řešení. Definice výčtu obsahuje kořenový výčet následovaný skutečnými hodnotami výčtu.
Každá hodnota výčtu přijímá několik atributů:
V tomto příkladu je definován výčet pro sledování stavu projektorů. Následující definice definuje tento výčet:
ID je identifikátor výčtu nebo hodnoty výčtu.
Přístupnost určuje, jestli tento enumerátor může obsahovat další enumerátory.
ParentName je atribut, který určuje ID nadřazené hodnoty enumerátoru.
<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>
Vytvoření formuláře
Formuláře portálu Service Manager jsou založené na formulářích WPF (Windows Presentation Framework). Service Manager rozšiřuje WPF o jednoduché atributy, které jsou přidány do definice XML a umožňuje Service Manageru svázat data z sady Management Pack do formuláře.
Formuláře portálu Service Manager je možné vytvořit pomocí několika různých nástrojů, včetně sady Microsoft Visual Studio nebo Microsoft Expression Blendu. Vzhledem k tomu, že formuláře jsou založené na jazyce XML, lze je také definovat pomocí libovolného editoru XML.
Následující příklad ukazuje definici formuláře, která byla vytvořena pomocí Microsoft Expression Blend. Tento formulář obsahuje čtyři ovládací prvky, tři textová pole a jedno pole se seznamem, které jsou svázané s vlastnostmi třídy projektoru , které byly definovány dříve:
<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="http://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>
Chcete-li povolit vazbu ovládacích prvků ve formuláři na vlastnosti třídy definované v sadě Management Pack, je nutné zadat několik položek.
Vytvoření vazby textových ovládacích prvků
Chcete-li svázat textová pole s vlastnostmi třídy v sadě Management Pack, přidejte značku Cesta vazby do vlastnosti Text ovládacího prvku textového pole, například:
{Binding Path=SerialNumber, Mode=TwoWay}
Tato značka vytvoří vazbu ovládacího prvku textového pole na vlastnost SerialNumber třídy projektoru , která byla definována v sadě Management Pack, a určuje, že by to měla být obousměrná vazba. Hodnota vlastnosti se načte z databáze a zobrazí se v textovém poli při načtení formuláře a hodnota vlastnosti se uloží zpět do databáze, pokud ji uživatel změnil.
Vytvoření vazby polí se seznamem
Aby formulář mohl načíst data výčtu z podkladové sady Management Pack a svázat je s ovládacím prvek ve formuláři, musí být pomocná třída definována v kódu ve formuláři. Tato pomocná třída by měla obsahovat metodu, která vrací výčet, který je definován v sadě Management Pack. K vrácení výčtu použijte Metodu GetEnumerations aktuální sady Management Pack. Tato instance je přístupná pomocí třídy ConsoleContextHelper ze sady SDK (Software Development Kit) Service Manageru. V následujícím příkladu pomocná třída definuje GetStatusValues metoda, která načte hodnoty pro projektorCondition výčtu, která byla definována v sadě Management Pack:
public class helper
{
public static ICollection<IDataItem> GetStatusValues()
{
return ConsoleContextHelper.Instance.GetEnumerations("ProjectorCondition",true);
}
}
Pro přístup k této metodě musí být v definici formuláře v sadě Management Pack definováno několik věcí.
Nejprve se do definice formuláře přidá obor názvů odkazující na obor názvů kódu pro formulář. V tomto příkladu je obor názvů SMFormsDemo:
xmlns:local="clr-namespace:SMFormsDemo"
Dále musí být definován ObjectDataProvider, aby bylo možné zadat hodnoty pole se seznamem, které zobrazuje stav projektoru. Tento ObjectDataProvider je definován jako prostředek:
<UserControl.Resources>
<ObjectDataProvider
ObjectType="{x:Type local:helper}"
MethodName="GetStatusValues"
x:Key="getStatusValues" />
</UserControl.Resources>
Tento zprostředkovatel dat určuje název objektu a metody, který načte hodnoty výčtu z sady Management Pack.
Nakonec k vytvoření vazby pole se seznamem k hodnotám výčtu definovaným v sadě Management Pack se přidá atribut ItemsSource do definice pole se seznamem. Tento atribut určuje, kam se mají načíst hodnoty výčtu, například:
ItemsSource="{Binding Source={StaticResource getStatusValues}, Mode=OneWay }"
Dále se do definice XAML (Extensible Application Markup Language) ovládacího prvku pole se seznamem přidají prvky SelectedItem a ItemTemplate . Následující příklad ukazuje definici pole se seznamem s vloženou vazbou 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>
Oddíl Kategorie
Oddíl Kategorie v sadě Management Pack seskupuje prvky sady Management Pack pro snadnější navigaci.
První dva <Category>
prvky v příkladu slouží k řízení zobrazení úkolů Nový a Upravit v zobrazení Projektory .
<Category ID="ProjectorViewHasTasks.View" Target="AllProjectorsView" Value="ProjectorViewTasksEnumeration" />
<Category ID="ProjectorViewHasTasks.CreateTask" Target="CreateProjector" Value="ProjectorViewTasksEnumeration" />
Druhé dva elementy Kategorie v ukázkové sadě Management Pack slouží k tomu, aby se výčet podmínek projektoru zobrazil v zobrazení Seznamy v podokně Vytváření v konzole portálu Service Manager. To uživateli umožňuje přizpůsobit hodnoty:
<Category ID="Project.ProjectorConditionEnumVisibleCategory" Target="ProjectorCondition" Value="System!VisibleToUser"/>
Přidáním této kategorie v následujícím příkladu se úloha Upravit zobrazí v zobrazení Seznamy pro výčetValue , který je uveden v atributu Target :
<Category ID="Projector.ProjectorConditionCategory" Target="ProjectorCondition" Value="Authoring!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.EnumerationViewTasks"/>
Oddíl Prezentace
Oddíl Prezentace sady Management Pack deklaruje a definuje prvky související s uživatelským rozhraním. Patří sem deklarace formulářů, kategorie a úlohy konzoly.
Oddíl Formuláře
Oddíl Formuláře deklaruje formuláře používané sadou Management Pack. Následující příklad určuje, kde najít formulář, který je definován pro zobrazení a úpravu instancí třídy projektoru. Tím se vytvoří vazba formuláře na třídu projektoru definovanou v sadě Management Pack:
<Forms>
<Form TypeName="SMFormsDemo.TestControl"
ID="TestForm"
Target="System.ConfigItem.Projector"
Assembly="ProjectorFormsAssembly"
Accessibility="Public">
<Category>Form</Category>
</Form>
</Forms>
V předchozím příkladu se používají následující atributy:
Atribut TypeName obsahuje obor názvů a název třídy formuláře.
Atribut ID obsahuje jedinečný identifikátor této instance formuláře.
Atribut Target obsahuje název třídy, ke které je tento formulář vázán.
Atribut Sestavení odkazuje na externí prostředek, který obsahuje formulář.
Atribut Usnadnění definuje, zda lze tento formulář přizpůsobit.
Definování zobrazení
Část Zobrazení sady Management Pack obsahuje definice zobrazení uživatelského rozhraní . Tato zobrazení lze použít k filtrování a zobrazení objektů v sadě Management Pack.
<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>
Atribut View Target odkazuje na třídu, kterou bude zobrazení použito k zobrazení.
V předchozím příkladu se odkazuje na sadu Management Pack konzoly Service Manageru. Tato sada Management Pack obsahuje definici použitého typu zobrazení. V tomto případě SMConsole! Typ zobrazení GridViewType je definován.
AdvancedListSupportClass definuje řadu parametrů, z nichž nejdůležitější je parametr TargetClass. Nastavte tento parametr na ID třídy ClassType , která se zobrazí v tomto zobrazení. Chcete-li zobrazit sloupce, které jsou vlastnosti ClassType, použijte column element a vytvořte vazbu na PropertyID atribut.
Atribut IsRecurring elementu ListSupportClass určuje, zda se zobrazení automaticky aktualizuje. Atribut RecurrenceFrequency definuje interval aktualizace v milisekundách. V tomto příkladu je interval aktualizace nastavený na 1 sekundu, ale nedoporučuje se pro produkční instalace.
Definování složek
Definování složky určuje umístění v navigačním stromu, ve kterém je zobrazení zobrazeno. V tomto příkladu je položka konfigurace definována tak, aby byla vhodná pouze pro umístění zobrazení do existující složky pro položky konfigurace v pracovním prostoru Položky konfigurace:
<Folders>
<Folder ID="Folder.Projectors" Accessibility="Public" ParentFolder="SMConfig!ServiceManager.Console.ConfigurationManagement.ConfigItem.Root" />
</Folders>
<FolderItems>
<FolderItem
ElementID="AllProjectorsView"
Folder="Folder.Projectors" />
</FolderItems>
V předchozím příkladu obsahuje elementID atribut odkaz na zobrazení, které bylo vytvořeno. Atribut Složka odkazuje na složku Folders.Projectors , která má zase svůj kořen definovaný v pracovním prostoru Správa konfigurace konzoly Service Manageru. Tato kořenová složka je definována v sadě Management Pack pro konfiguraci.
Element ImageReference mapuje zobrazení, které bylo dříve vytvořeno, na ikonu definovanou v oboru názvů Configuration Management :
<ImageReferences>
<ImageReference ElementID="Folder.Projectors" ImageID="SMConfig!ConfigItemImage16x16" />
<ImageReference ElementID="AllProjectorsView" ImageID="SMConfig!ConfigItemImage16x16" />
</ImageReferences>
Lokalizace pomocí oddílu LanguagePacks
Část LanaguagePacks sady Management Pack definuje řetězcové prostředky a mapování prvků sady Management Pack.
V příkladu musí být funkce EnumerationValueProjectorCondition.Working zobrazena jako Pracovní. Chcete-li to provést, musí být definovány zobrazované názvy pro každou z následujících položek:
Zobrazení: Všechny projektory
Výčty: práce, nefunkční, v opravě, nová
<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>
Podle potřeby můžete vytvořit další elementy LanguagePack pro každý další jazyk, který požadujete. Správný zobrazovaný řetězec se uživateli zobrazí na základě národního prostředí uživatele.
Materiály
Oddíl Prostředky sady Management Pack obsahuje odkazy na binární prostředky, které jsou obsaženy v sestaveních, která jsou oddělená od sady Management Pack. V následujícím příkladu je prostředek definován, který odkazuje na sestavení, které obsahuje formulář, který používá třída projektoru:
<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" />
Rozšíření tříd
Rozšíření třídy je třída, která přidává vlastnosti do existující třídy. Ve většině případů je tato existující třída v zapečetěné sadě Management Pack. V případech, kdy existující třída není v zapečetěné sadě Management Pack, musí být rozšíření třídy obsaženo ve stejné sadě Management Pack jako třída, která se rozšiřuje.
Rozšíření třídy dědí vlastnosti všech nadřazených tříd, například:
Třída A má vlastnost s názvem Property1
Třída B je odvozena z třídy A nebo rozšiřuje, a proto má vlastnost s názvem Property1. Tato vlastnost je zděděna z třídy A, nadřazené nebo základní třídy).
Definice třídy B přidá vlastnost s názvem Property2.
Jakékoli rozšíření třídy, které je odvozeno z třídy B, dědí Vlastnost1 a Property2.
Následující příklad ukazuje definici rozšíření třídy:
<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>
Toto rozšíření třídy rozšiřuje System.WorkItem.Incident třídy a přidá novou vlastnost s názvem TimeOnIncident.
Definice rozšíření třídy je podobná definici třídy. K definování definice třídy se používají dva atributy Element ClassType : Základní atribut a IsExtensionType atribut.
Základní atribut určuje ID nadřazené třídy, ze které je odvozeno rozšíření třídy. V tomto případě je hodnota atributu nastavena na Incident! System.WorkItem.Incident. Tato hodnota obsahuje alias úplného názvu sady Management Pack, který obsahuje rozšířenou třídu, vykřičník a název základní třídy. Další informace najdete v následujícím příkladu.
Atribut IsExtensionType definuje, zda je tato třída rozšířením základní třídy. Vzhledem k tomu , TimeOnIncident je rozšíření třídy Incident , tato vlastnost je nastavena na true:
IsExtensionType="true"
Druhá možnost je false, což znamená, že není rozšířením jiné třídy, ale novou třídou, která dědí ze základu. Výchozí hodnota je false, proto tento atribut není nutné použít, pokud třída není rozšířením.
Úplný příklad
Následující příklad kódu ukazuje úplnou sadu Management Pack obsahující rozšíření třídy.
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>
Import sady Management Pack pomocí rutiny
K importu sady Management Pack Service Manageru můžete použít rutinu Import-SCSMManagementPack prostředí Windows PowerShell, například:
Import-SCSMManagementPack MyServiceManager.ManagementPack.xml
Tento dokument nepopisuje, jak importovat a používat sady Management Pack v konzole portálu Service Manager. Informace o používání sad Management Pack v konzole portálu Service Manager naleznete v tématu Použití sad Management Pack v Service Manageru.
Příklad úplné sady Management Pack
Následující příklady kódu představují úplnou ukázkovou sadu Management Pack, která se používá pro příklady v tomto článku, kromě definice formuláře a kódu jazyka C#.
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>
Definice formuláře
<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="http://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>
Kód formuláře – za
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);
}
}
}