Práce se soubory XML sady Management Pack Service Manager
Důležité
Tato verze Service Manager dosáhla konce podpory. Doporučujeme upgradovat na Service Manager 2022.
Pro podrobnější přizpůsobení sad Management Pack nemusí stačit konzola Service Manager a nástroj Service Manager Authoring Tool a možná budete muset přímo vytvářet nebo upravovat soubory sady Management Pack. Přímá práce se soubory sady Management Pack vyžaduje podrobné znalosti v několika oblastech, jako je například společ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 vytvářet a upravovat sady Management Pack pro přizpůsobení Service Manager.
Změny společného schématu nástroje System Center
Service Manager obsahuje aktualizovanou verzi schématu sady System Center Management Pack. Toto schéma se teď nazývá Společné schéma nástroje System Center a obsahuje řadu vylepšení a doplňků, jejichž cílem je vylepšit stávající funkce a povolit Service Manager funkce. 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 pomocí několika nových typů vlastností. Tyto typy vlastností zahrnují binární typy, typy enumerátoru a automatického přírůstku.
Můžete navíc definovat omezení konkrétních hodnot vlastností. Například můžete definovat omezení regulárního výrazu na 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, že pouze hodnota, která obsahuje slovo Building následované mezerou a číslo je považována za platnou.
<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 nejsou uložené v sadě Management Pack. Proto oddíl <PresentationTypes>
sady Management Pack již neobsahuje značky <Images>
, <Image>
nebo <ImageData>
. Místo toho je používán prostředek obrázku.
<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ý atribut jedinečného 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: Spuštěno, Zastaveno a Chyba.
<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
Ve společném schématu byla vylepšena funkce definicí relací. Typ RelationshipType teď obsahuje podprvky Source a Target s vlastnostmi ID , které se dají 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 pomáhá definovat uživatelská rozhraní sady Management Pack. Mohutnost může být například zkontrolována k určení, zda lze pole ve formuláři reprezentovat textovým polem nebo seznamem.
Důležité
Jakákoli hodnota MaxCardinality , která je definována jako větší než 1, se zpracuje jako neomezená.
Pokud přidáte nový typ vztahu z vlastní sady Management Pack, uživatelé musí mít k vytvoření instance nového typu vztahu dostatečná oprávnění k aktualizaci všech vlastností instancí zdrojové a cílové třídy typu vztahu.
V následujícím příkladu je definován vztah hostování s názvem HasXboxes mezi typem lobby a typem Xboxu . V této definici relace může mít každý typ předsálí více typů Xboxu .
<RelationshipType ID="HasXBboxes" Accessibility="Public" Base="System!System.Hosting">
<Source ID="Source" Type="Lobby" />
<Target ID="Target" Type="Xbox" MinCardinality="0" MaxCardinality="9999" />
</RelationshipType>
Třídy kombinací
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 Server, která mohou vracet data z více tabulek. Třídy kombinací ukládají a načítají všechna agregovaná data v rámci jedné operace do databáze a mohou usnadnit definování uživatelských rozhraní sady Management Pack.
V následujícím příkladu je pro zobrazení správy incidentů definována projekce. Tato projekce kombinuje několik různých komponent souvisejících s incidentem do jedné jednotky, kterou lze snadněji používat ve formulářích a operacích databáze.
<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 konzole jsou ve společném schématu rozšířeny. Dříve byly úlohy konzole jednoduchými ukazateli na adresář aplikace a spustitelný název 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í zaštiťující kód, název obslužné rutiny a seznam pojmenovaných hodnot, které lze předat popisovači jako argumenty.
V následujícím příkladu je obslužná rutina Some.Handler.Name definována v sestavení MyLibrary.Resources.Assembly . Definován je 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 a prostředky
Binární data nejsou uložená přímo v sadě Management Pack. Místo toho jsou v sadě Management Pack uložena metadata o binárním prostředku a skutečná binární data jsou uložena do souboru prostředků externě. Metadata zahrnují jedinečný identifikátor, název souboru, data o vytvoření, datum změny a informace o přístupnosti.
Binární data mohou zahrnovat obecné prostředky, obrázky, sestavení, definice sestav a formuláře. Následující příklad zobrazuje 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. K zobrazení a úpravě samostatné instance typu nebo třídy kombinací můžete použít formuláře.
Formuláře jsou založené na rozhraní WPF (Windows Presentation Framework) a jsou definovány v sestaveních. V oddílu prostředků sady Management Pack je zahrnuto sestavení a třída obsahující implementace formuláře pro sadu Management Pack. Stejně jako u jakéhokoli binárního prostředku v sadě Management Pack, který používá nové společné schéma, samotná sada Management Pack neobsahuje binární data pro formulář. V sadě Management Pack je určen pouze manifest prostředku.
V sadě Management Pack můžete zadat vlastní informace o konfiguraci pro formulář. V následujícím příkladu obsahuje část Konfigurace vlastnost ShowXboxes . Tyto konfigurační informace nejsou vyhodnoceny procesem ověření sady Management Pack. je interpretován 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 řízení a rozšíření funkcí Service Manager. Tento článek používá projektory jako příklad k popisu různých částí sady Management Pack a k 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. Také popisuje, jak importovat sadu Management Pack pomocí rutiny Windows PowerShell.
Tento článek popisuje následující části sady Management Pack:
Manifest
Definice TypeDefinitions pro tvorbu výčtů a vztahů tříd
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
Zobrazení
Rozšíření třídy
Oddíl manifestu
První oddíl sady Management Pack obsahuje manifest. Manifest identifikuje sadu Management Pack a deklaruje všechny odkazy na ostatní sady Management Pack.
Následující příklad ukazuje část Manifest sady Management Pack, která byla navržena ke 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 Reference nepoužívejte v aliasu pro referenci jiné nežphanumerické hodnoty, například ..
Vytvoření tříd v části TypeDefinitions
Další oddíl sady Management Pack obsahuje definice typů. Část TypeDefinitions sady Management Pack obsahuje definice tříd, výčtů a relací, které jsou používány sadou Management Pack.
V následujícím příkladu je zobrazena třída obsahující 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 vysvětlení toho, co definice typu obsahuje, a to podle jednotlivých oddílů.
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"
Atribut Base je ID třídy, ze které je tato třída odvozena. Vzhledem k tomu, že projektor je druh položky konfigurace, je nastaven na následující:
Base="System!System.ConfigItem"
Zápis System! označuje, že tato třída System.ConfigItem je v sadě Management Pack, na kterou odkazuje alias System.
Atribut Hosted definuje, zda je tato třída hostována jinou třídou. V takovém případě může instance této třídy existovat, pouze pokud existuje instance hostitele, která ji obsahuje. V tomto příkladu nejsou projektory hostovány ničím; Proto je atribut Hostovaný nastaven na hodnotu false:
Hosted="false"
Nastavení atributu Hosted na hodnotu true znamená, že třída je hostována jinou třídou. Relace hostování musí být deklarována v části RelationshipTypes .
Atribut Accessibility definuje, zda jiné třídy mohou odvozovat z této třídy. V případech, kdy chcete ostatním umožnit, aby vytvořili konkrétnější verzi třídy, nastavte tento atribut na public, například:
Accessibility="Public"
Nastavení atributu Accessibility na Hodnotu Internal zabrání ostatním třídám odvozovat z této třídy.
Atribut Abstract definuje, zda mohou být vytvořeny instance této třídy, nebo zda se třída má použít pouze jako nadřazená třída k jiným třídám, ze kterých se mají odvozovat. V tomto příkladu je tento atribut nastaven na hodnotu false. Nastavení tohoto atributu na hodnotu true znamená, že žádné instance této třídy nelze vytvořit přímo a že tuto třídu lze použít pouze jako nadřazenou třídu.
Další oddíl definice třídy obsahuje vlastnosti třídy. V následujícím příkladu kódu je uvedena syntaxe XML definující vlastnosti tříd pro tento příklad:
<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 Key Nastavení tohoto atributu na hodnotu true znamená, že tato vlastnost má být použita k jedinečné identifikaci této třídy.
Vytváření typů výčtu
Výčty datového typu výčtu jsou speciální datové typy. Výčty jsou používány k omezení dat, která jsou povolena pro vlastnost na specifickou 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ý vlastními hodnotami výčtu.
Každá Hodnota výčtu přijímá několik atributů:
V následujícím příkladu je definován výčet pro uchování záznamu o stavu projektorů. Výčet je definován následujícím:
ID je identifikátor hodnoty výčtu nebo výčtu.
Přístupnost určuje, zda tento výčet 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
Service Manager formuláře 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žňují Service Manager vytvořit vazbu dat ze sady Management Pack do formuláře.
Service Manager formuláře lze vytvořit pomocí několika různých nástrojů, včetně sady Microsoft Visual Studio nebo Microsoft Expression Blend. 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 zobrazuje definici formuláře, která byla vytvořena pomocí nástroje Microsoft Expression Blend. Tento formulář obsahuje čtyři ovládací prvky, tři textová pole a jedno pole se seznamem, které jsou vázané na vlastnosti třídy Projektor definované 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ů formuláře na vlastnosti třídy definované v sadě Management Pack, je třeba určit množství položek.
Vazby textových ovládacích prvků
Pokud chcete svázat textová pole s vlastnostmi třídy v sadě Management Pack, přidejte do vlastnosti Text ovládacího prvku textového pole značku Cesta vazby, například:
{Binding Path=SerialNumber, Mode=TwoWay}
Tato značka sváže ovládací prvek textového pole na serialNumber vlastnost Projektor třídy, která byla definována v sadě Management Pack, a určuje, že by se mělo jednat o obousměrnou vazbu. 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ění.
Svázání polí se seznamem
Pokud chcete formuláři umožnit načtení dat výčtu z podkladové sady Management Pack a jejich vazbu na ovládací prvek ve formuláři, musí být v kódu na pozadí ve formuláři definována pomocná třída. Tato pomocná třída by měla obsahovat metodu, která vrátí výčet definovaný v sadě Management Pack. Pokud chcete vrátit výčet, použijte metodu GetEnumerations aktuální sady Management Pack. K této instanci se přistupuje pomocí třídy ConsoleContextHelper z Service Manager sady SDK (Software Development Kit). V následujícím příkladu pomocné třídy definuje metodu GetStatusValues , která načte hodnoty pro výčet ProjektorCondition , který byl definován v sadě Management Pack:
public class helper
{
public static ICollection<IDataItem> GetStatusValues()
{
return ConsoleContextHelper.Instance.GetEnumerations("ProjectorCondition",true);
}
}
Chcete-li získat přístup k této metodě, je třeba nastavit několik vlastností formuláře v sadě Management Pack.
Nejprve se do definice formuláře přidá obor názvů, který odkazuje na obor názvů pro kód formuláře . V tomto příkladu je obor názvů SMFormsDemo:
xmlns:local="clr-namespace:SMFormsDemo"
Dále musí být definován ObjectDataProvider , který poskytuje 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 poskytovatel dat určuje objekt a název metody, které načtou hodnoty výčtu ze sady Management Pack.
Nakonec, chcete-li vytvořit vazbu pole se seznamem na hodnoty výčtu, které jsou definovány v sadě Management Pack, přidá se do definice pole se seznamem atribut ItemsSource . Tento atribut určuje, kam 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 zobrazuje definici pole se seznamem se zahrnutou vazbou jazyka 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 sady 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 prvky Kategorie v ukázkové sadě Management Pack slouží k tomu, aby se výčet podmínky projektoru zobrazil v zobrazení Seznamy v podokně Vytváření obsahu v konzole Service Manager. To umožňuje uživateli upravit hodnoty:
<Category ID="Project.ProjectorConditionEnumVisibleCategory" Target="ProjectorCondition" Value="System!VisibleToUser"/>
Přidání této kategorie v následujícím příkladu způsobí, že se úloha Upravit zobrazí v zobrazení Seznamy pro hodnotu EnumerationValue , na kterou je odkazováno v atributu Target :
<Category ID="Projector.ProjectorConditionCategory" Target="ProjectorCondition" Value="Authoring!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.EnumerationViewTasks"/>
Oddíl Prezentace
Část Prezentace sady Management Pack deklaruje a definuje prvky související s uživatelským rozhraním. Ty zahrnují deklarace formulářů, kategorie a úlohy konzole.
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 úpravy instancí projektor třídy. Tím svážete formulář s třídou Projektor , která je definována 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 jsou používány 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, na kterou je tento formulář vázán.
Atribut Assembly odkazuje na externí prostředek, který obsahuje formulář.
Atribut Accessibility 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 ukazuje na třídu, která bude používána pro zobrazení.
V předcházejícím příkladu je odkazována sada Management Pack konzole portálu Service Manager. Tato sada Management Pack obsahuje používanou definici 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 IDtřídy ClassType , která se zobrazí v tomto zobrazení. Chcete-li zobrazit sloupce, které jsou vlastnosti ClassType, použijte Column element a vytvořte vazbu k atributu PropertyID .
IsRecurring atribut ListSupportClass element určuje, zda 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 to pro produkční instalace.
Definování složek
Definice složky určuje umístění navigačního stromu, ve kterém je zobrazeno zobrazení. V tomto příkladu je položka konfigurace definována tak, aby bylo vhodné umístit 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 atribut ElementID odkaz na vytvořené zobrazení. Atribut Folder odkazuje na složku Folders.Projectors, která má svůj kořen definovaný v pracovním prostoru Správa konfigurace konzoly Service Manager. Tato kořenová složka je definována v sadě Management Pack Správa konfigurací.
Element ImageReference mapuje dříve vytvořené zobrazení na ikonu, která je definovaná v oboru názvů správy konfigurace :
<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 prostředky řetězců a mapování prvků sady Management Pack.
V příkladu musí být EnumerationValueProjectorCondition.Working zobrazen jako Pracovní. Aby toho bylo možné dosáhnout, musí být definovány zobrazované názvy pro všechny následující položky:
Zobrazení: Všechny projektory
Výčty: pracovní, 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ý potřebujete. Uživateli se zobrazí správný zobrazovaný řetězec na základě národního prostředí uživatele.
Prostředky
Oddíl Prostředky sady Management Pack obsahuje odkazy na binární prostředky, které jsou obsaženy v sestaveních oddělených od sady Management Pack. V následujícím příkladu je definován prostředek, který odkazuje na sestavení, které obsahuje formulář, který je používán projektor třídy:
<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 k existující třídě. Ve většině případů je existující třída obsažena v zapečetěné sadě Management Pack. V případech, kdy existující třída není součástí zapečetěné sady Management Pack, musí být rozšíření třídy obsaženo ve stejné sadě Management Pack jako rozšiřovaná třída.
Rozšíření třídy dědí vlastnosti nadřazených tříd, jako například:
Třída A má vlastnost s názvem Vlastnost1.
Třída B je odvozena z Třídy A (rozšiřuje tuto třídu), má proto vlastnost s názvem Vlastnost1. Tato vlastnost je zděděna z třídy A, nadřazené nebo základní třídy).
Definice Třídy B přidává vlastnost s názvem Vlastnost2.
Všechna rozšíření tříd odvozená z Třídy B zdědí Vlastnost1 a Vlastnost2.
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 Třídu System.WorkItem.Incident a přidává novou vlastnost s názvem TimeOnIncident.
Definice rozšíření třídy je podobná definici běžné třídy. Dva atributy ClassType element jsou použity k definování definice třídy: Base 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 nastavená na Incident! System.WorkItem.Incident. Tato hodnota obsahuje alias úplného názvu sady Management Pack, který obsahuje třídu, která se rozšiřuje, vykřičník a pak název základní třídy. Další informace naleznete v následujícím příkladě.
IsExtensionType Atribut definuje, zda je tato třída rozšířením základní třídy. Vzhledem k tomu , že TimeOnIncident je rozšířením třídy Incident , je tato vlastnost nastavena na hodnotu true:
IsExtensionType="true"
Druhá možnost je false, což značí, že se nejedná o rozšíření jiné třídy, ale o novou třídu, která dědí ze základní třídy. Výchozí hodnota je false; Proto se tento atribut nemusí používat, pokud třída není rozšíření.
Úplný příklad
Následující příklad kódu představuje celou 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 Manager můžete použít rutinu Windows PowerShell Import-SCSMManagementPack, například:
Import-SCSMManagementPack MyServiceManager.ManagementPack.xml
Tento dokument nepopisuje, jak importovat a používat sady Management Pack v konzole Service Manager. Informace o používání sad Management Pack v konzole Service Manager najdete v tématu Použití sad Management Pack v Service Manager.
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 na pozadí jazyka C#.
Sada 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 na pozadí
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);
}
}
}