Service Manager felügyeleti csomag XML-fájljainak használata
Fontos
A Service Manager ezen verziója elérte a támogatás végét. Javasoljuk, hogy frissítsen Service Manager 2022-re.
A felügyeleti csomagok részletes testreszabásához előfordulhat, hogy a Service Manager konzol és a Service Manager szerkesztőeszköz nem elegendő, és előfordulhat, hogy közvetlenül kell létrehoznia vagy módosítania a felügyeleti csomag fájljait. A felügyeleticsomag-fájlok közvetlen használatához több területen, például a System Center közös sémájában és a felügyeleti csomagok szerkezetében is alapos ismeretekre van szükség.
Ez a szakasz háttérinformációkat és irányelveket tartalmaz, amelyek segítségével létrehozhatja és módosíthatja a felügyeleti csomagokat a Service Manager testreszabásához.
A System Center közös sémájának módosítása
Service Manager tartalmazza a System Center felügyeleticsomag-séma frissített verzióját. Ezt a sémát a System Center közös sémájának nevezik, és számos olyan fejlesztést és kiegészítést tartalmaz, amelyek célja a meglévő funkciók továbbfejlesztése és Service Manager funkciók engedélyezése. Ez a cikk a System Center közös sémájának módosításait ismerteti.
Tulajdonságok és tulajdonságkorlátozások
A közös séma számos új tulajdonságtípus bevezetésével kiterjeszti az osztályokat. Ezek a tulajdonságtípusok közé tartoznak a bináris, az enumerátor és az automatikus növekményes típusok.
Emellett bizonyos tulajdonságértékekhez korlátozásokat definiálhat. Például reguláris kifejezéssel korlátozást adhat meg egy sztring típusú tulajdonságértékhez. A következő példában a BuildingName tulajdonság egy reguláris kifejezéskorlátozással rendelkezik, amely úgy van definiálva, hogy csak az Épület szót tartalmazó érték, majd egy szóköz és egy szám legyen érvényes.
<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>
Képek
A rendszerképek nem felügyeleti csomagban vannak tárolva. Ezért a felügyeleti csomag <PresentationTypes>
szakasza már nem tartalmazza az <Images>
, <Image>
és az <ImageData>
címkét. Ezek helyett használjon képerőforrásokat.
<Resources>
<Image ID="TestLibrary.Resources.Image1" Accessibility="Public" FileName="image.png"/>
</Resources>
Enumerálások
A közös séma támogatja az enumerálásokat. Az enumerálások olyan értékek fája, amelyek tulajdonságok vagy attribútumok értékének korlátozására használhatók.
Minden enumeráláshoz tartozik egy kötelező egyedi azonosító attribútum és egy nem kötelező szülőattribútum.
A következő példában az XBoxState enumerálás három lehetséges értékkel van definiálva: Futtatás, Leállítva és Hiba.
<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>
Az alábbi példában az Xbox osztály egy XBoxState típusú enumerálási tulajdonságot határoz meg.
<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>
Kapcsolatok
A kapcsolatdefiníciók funkciója tovább lett fejlesztve a közös sémában. A RelationshipType típus mostantól forrás - és cél alelemekkel rendelkezik , amelyek azonosítótulajdonságokkal rendelkeznek, amelyek megjelenítendő nevekként használhatók. Emellett meghatározhatja a forrás és a cél minimális és maximális számosságát is; például 1-az-1 vagy 0-a-többhöz kapcsolatok.
A felügyeleti csomag érvényesítési folyamata nem kényszeríti ki a számosságot, de a felügyeleti csomag felhasználói felületeinek meghatározására szolgál. Például a kardinalitás ellenőrzésével meghatározható, hogy egy mező beviteli mezőként vagy listaként jelenjen-e meg.
Fontos
Az 1-nél nagyobbként definiált MaxCardinality értékek korlátlanként lesznek feldolgozva.
Ha új kapcsolattípust vesz fel saját felügyeleti csomagjából, a felhasználóknak megfelelő jogosultságokkal kell rendelkezniük a kapcsolattípus forrás és cél osztálypéldányai tulajdonságainak módosításához, hogy létrehozhassák az új kapcsolattípus példányát.
Az alábbi példában hasXboxes nevű üzemeltetési kapcsolat van definiálva az Előszoba típusa és az Xbox típus között. Ebben a kapcsolatdefinícióban minden előszobatípushoz több Xbox-típus is tartozhat.
<RelationshipType ID="HasXBboxes" Accessibility="Public" Base="System!System.Hosting">
<Source ID="Source" Type="Lobby" />
<Target ID="Target" Type="Xbox" MinCardinality="0" MaxCardinality="9999" />
</RelationshipType>
Kombinált osztályok
A kombinált osztályok a felügyeleti csomag több kapcsolódó típusának összesítését jelentik, hasonlóan a Microsoft SQL Server-adatbázisban definiált nézetekhez, amelyek több táblából is képesek adatokat visszaadni. A kombinált osztályok az összes összesített adatot tárolják és lekérik egy adatbázis-műveletben, és ezek megkönnyíthetik felhasználói felületek definiálását a felügyeleti csomaghoz.
A következő példában leképezés van definiálva egy incidenskezelési nézethez. Ez a leképezés egy incidensre vonatkozó több különböző összetevőt egyesít egy egységbe, amely könnyebben használható űrlapoknál és adatbázis-műveleteknél.
<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>
Konzolfeladatok
A konzolfeladatok bővítve lettek a közös sémában. Korábban a konzolfeladatok egyszerű mutatók voltak egy alkalmazástárra és egy végrehajtható fájl nevére. A konzolfeladatok mostantól kezelőkódként vannak implementálva egy Microsoft .NET-keretrendszer-szerelvényben. A kezelőkód arra a szerelvényre mutat, amely a kódot, a kezelő nevét és olyan nevesített értékek listáját tartalmazza, amelyek argumentumként átadhatók a kezelőnek.
A következő példában a Some.Handler.Name kezelő a MyLibrary.Resources.Assembly szerelvényben van definiálva. A kezelő paramétereinek és a paraméterek értékeinek listája is definiálva van.
<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>
Források
A bináris adatok nincsenek közvetlenül felügyeleti csomagban tárolva. Ehelyett a bináris erőforrásra vonatkozó metaadatok tárolódnak a felügyeleti csomagban, míg a tényleges bináris adatok külső erőforrásfájlban találhatók. A metaadatok közé tartozik egy egyedi azonosító, a fájlnév, a létrehozás dátuma, a módosítás dátuma és a hozzáférési információ.
A bináris adatok tartalmazhatnak általános erőforrásokat, képeket, szerelvényeket, jelentésdefiníciókat és űrlapokat. A következő példában általános XML-erőforrás, szerelvény-erőforrás és jelentés-erőforrás található.
<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>
Űrlapok
Az űrlapokat felügyeleti csomagokban definiálják. Az űrlapok segítségével egy típus vagy kombinált osztály egyetlen példánya tekinthető meg és módosítható.
Az űrlapok a Windows Presentation Frameworken (WPF) alapulnak, és szerelvényekben vannak definiálva. Adott felügyeleti csomagnál az űrlap megvalósításait tartalmazó szerelvény és osztály a felügyeleti csomag erőforrások szakaszában található. Az új közös sémát használó felügyeleti csomagokban található bináris erőforrásokhoz hasonlóan maga a felügyeleti csomag sem tartalmazza az űrlap bináris adatait. A felügyeleti csomagban csak az erőforrásjegyzék van megadva.
A felügyeleti csomagban saját konfigurálási adatokat adhat meg az űrlaphoz. A következő példában a Konfiguráció szakasz egy ShowXboxes tulajdonságot tartalmaz. Ezt a konfigurációs információt a felügyeleti csomag ellenőrzési folyamata nem értékeli ki; csak az űrlap implementációja értelmezi.
<Forms>
<Form ID="LobbyForm" Target="Projection" Assembly="FormAssembly" TypeName="MyFormClass">
<Configuration>
<ShowXboxes>yes</ShowXboxes>
</Configuration>
</Form>
</Forms>
Felügyeleticsomag-fájl létrehozása projektorok kezeléséhez
A felügyeleti csomagok a Service Manager funkcióinak közvetlen irányítására és bővítésére szolgálnak. Ez a cikk projektorokat használ példaként a felügyeleti csomagok különböző szakaszainak leírásához és a projektorok szervezeten belüli kezeléséhez szükséges különböző objektumok meghatározásához.
Ez a cikk egy teljes felügyeleti csomagmintát tartalmaz, amely tartalmazza a projektorok szervezeten belüli kezeléséhez szükséges bővítményeket. Azt is ismerteti, hogyan importálhat felügyeleti csomagokat egy Windows PowerShell parancsmag használatával.
Ez a cikk a felügyeleti csomagok alábbi szakaszait ismerteti:
Manifest
TypeDefinitions az osztályenumerálások és -kapcsolatok létrehozásához
Űrlapok
Ez a cikk egy felügyeleti csomag következő szakaszait is ismerteti, amelyek a felhasználói felület (UI) és a honosítási elemek deklarációit és definícióit tartalmazzák:
Kategóriák
Megjelenítés
Osztálykiterjesztések
Jegyzékszakasz
A felügyeleti csomag első szakasza a jegyzék (manifest). A jegyzék azonosítja be a felügyeleti csomagot, valamint deklarálja a többi felügyeleti csomagra mutató esetleges hivatkozásokat.
Az alábbi példa egy szervezet projektorainak nyomon követésére tervezett felügyeleti csomag Jegyzék szakaszát mutatja be.
<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>
Fontos
A Hivatkozások szakaszban ne használjon nonalphanumerikus értékeket, például "." értékeket az Aliasban egy hivatkozáshoz.
Osztályok létrehozása a TypeDefinitions szakaszban
A felügyeleti csomag következő szakasz a típusdefiníciókat tartalmazza. A felügyeleti csomagok TypeDefinitions szakasza a felügyeleti csomag által használt osztályok, enumerációk és kapcsolatok definícióit tartalmazza.
Az alábbi példában egy olyan osztály látható, amely a kivetítők adatait tartalmazza:
<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>
Az alábbiakban a típusdefiníciót tartalmazó szakaszonkénti magyarázat látható.
A ClassTypes szakasz
A ClassType elem határozza meg a projektor osztályt:
<ClassType ID="System.ConfigItem.Projector" Base="System!System.ConfigItem" Hosted="false" Accessibility="Public" Abstract="false">
Az ID attribútum ennek az osztálynak az egyedi azonosítója. A következő értékre van állítva:
ID="System.ConfigItem.Projector"
A Base attribútum annak az osztálynak az azonosítója, amelyből ez az osztály származik. Mivel az egyes kivetítők konfigurációelemnek minősülhetnek, ennek beállítása:
Base="System!System.ConfigItem"
A System! jelölése azt jelzi, hogy ez a System.ConfigItem osztály a System alias által hivatkozott felügyeleti csomagban található.
A Hosted attribútum határozza meg, hogy ezt az osztályt egy másik osztály üzemelteti-e. Ilyen esetben az osztálypéldány csak akkor létezhet, ha létezik egy azt tartalmazó birtoklópéldány. Ebben a példában a kivetítőket nem semmi üzemelteti; ezért a Hosted attribútum értéke hamis:
Hosted="false"
A Hosted attribútum igaz értékre állítása azt jelzi, hogy az osztályt egy másik osztály üzemelteti. Egy üzemeltetési kapcsolatot a RelationshipTypes szakaszban kell deklarálni .
Az Accessibility attribútum határozza meg, hogy más osztályok származhatnak-e ebből az osztályból. Azokban az esetekben, amikor engedélyezni szeretné másoknak az osztály egy konkrétabb verzióját, állítsa ezt az attribútumot nyilvánosra, például:
Accessibility="Public"
Az Accessibility attribútum Belső értékre állítása megakadályozza, hogy más osztályok származtassa ezt az osztályt.
Az Absztrakt attribútum határozza meg, hogy létre lehet-e hozni ennek az osztálynak a példányait, vagy hogy az osztályt csak szülőosztályként kell-e használni más osztályokhoz, amelyekből származtathatók. Ebben a példában ez az attribútum hamis értékre van állítva. Ha ezt az attribútumot igaz értékre állítja, az azt jelenti, hogy ennek az osztálynak egyetlen példánya sem hozható létre közvetlenül, és hogy ez az osztály csak szülőosztályként használható.
Az osztálydefiníció következő szakasza az osztály tulajdonságait tartalmazza. A jelen példa osztálytulajdonságait definiáló XML-kód az alábbi példában látható:
<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" />
Minden tulajdonságelem a következő attribútumokkal rendelkezik:
Az ID attribútum, amely a tulajdonság egyedi azonosítóját jelöli.
A Type attribútum, amely a tulajdonság adattípusát jelzi.
A Key attribútum. Ha ezt az attribútumot igaz értékre állítja, az azt jelzi, hogy ezt a tulajdonságot kell használni az osztály egyedi azonosításához.
Enumerálási típusok létrehozása
Az enumerálási adattípus enumerációi speciális adattípusok. Az enumerálások használatával megkötések állíthatók be arra vonatkozóan, hogy egy adott tulajdonságnál mely konkrét értékek engedélyezettek. Az enumerálások lehetnek hierarchikusak; egy enumerálás szolgálhat egy másik alapjául.
Az enumerálások a megoldáscsomag EnumertionTypes szakaszában vannak definiálva. Az enumerálások definíciója a gyökérenumerálást, majd utána a tényleges enumerálási értékeket tartalmazza.
Minden EnumerationValue elfogad néhány attribútumot:
Ebben a példában definiálva van egy enumerálás a kivetítők állapotának nyomon követése céljából. Az alábbi attribútumok definiálják ezt az enumerálást:
Az azonosító az enumerálási vagy enumerálási érték azonosítója.
Az Akadálymentesség azt határozza meg, hogy ez az enumerátor tartalmazhat-e más enumerátorokat.
A ParentName egy attribútum, amely az enumerátorérték szülőjének azonosítóját adja meg.
<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>
Űrlap létrehozása
Service Manager űrlapok a Windows Presentation Framework (WPF) űrlapokon alapulnak. Service Manager kibővíti a WPF-et az XML-definícióhoz hozzáadott egyszerű attribútumokkal, és lehetővé teszi, hogy Service Manager a felügyeleti csomagból származó adatokat az űrlaphoz kösse.
Service Manager űrlapok számos különböző eszközzel hozhatók létre, például a Microsoft Visual Studio vagy a Microsoft Expression Blend használatával. Mivel az űrlapok XML-alapúak, bármely XML-szerkesztővel is definiálhatók.
Az alábbi példában egy olyan űrlap-definíció látható, amely a Microsoft Expression Blend használatával lett létrehozva. Ez az űrlap négy vezérlőt, három szövegdobozt és egy kombinált listát tartalmaz, amelyek a korábban definiált Projector osztálytulajdonsághoz vannak kötve:
<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>
Ahhoz, hogy az űrlap vezérlőit a felügyeleti csomagban definiált osztálytulajdonságokhoz lehessen kötni, meg kell határozni néhány elemet.
Szövegvezérlők kötése
Ha a szövegdobozokat egy felügyeleti csomag osztálytulajdonságaihoz szeretné kötni, adjon hozzá egy Kötési útvonal címkét a szövegdoboz vezérlőelem Text tulajdonságához, például:
{Binding Path=SerialNumber, Mode=TwoWay}
Ez a címke köti a szövegdoboz vezérlőelemet a felügyeleti csomagban definiált Projector osztály SerialNumber tulajdonságához, és meghatározza, hogy ennek kétirányú kötésnek kell lennie. A rendszer lekéri a tulajdonság értékét az adatbázisból, és az űrlap betöltésekor megjelenik a szövegmezőben, és ha a felhasználó módosítja, a tulajdonság értéke vissza lesz mentve az adatbázisba.
Kombinált lista kötése
Ahhoz, hogy az űrlap lekérhesse az enumerálási adatokat a mögöttes felügyeleti csomagból, és azokat egy vezérlőhöz kösse az űrlapon, egy segédosztályt kell definiálni az űrlap mögötti kódjában . A segítőosztálynak tartalmaznia kell egy olyan metódust, amely a felügyeleti csomagban definiált enumerálást ad vissza. Enumerálás visszaadásához használja az aktuális felügyeleti csomag GetEnumerations metódusát. Ez a példány a ConsoleContextHelper osztálysal érhető el a Service Manager szoftverfejlesztői készletből (SDK). A következő példában egy segédosztály definiál egy GetStatusValues metódust, amely lekéri a felügyeleti csomagban definiált ProjectorCondition enumerálás értékeit:
public class helper
{
public static ICollection<IDataItem> GetStatusValues()
{
return ConsoleContextHelper.Instance.GetEnumerations("ProjectorCondition",true);
}
}
A metódus eléréséhez definiálni kell néhány dolgot a felügyeleti csomag űrlap-definíciójában.
Először is az űrlaphoz tartozó kódhoz tartozó névtér lesz hozzáadva az űrlapdefinícióhoz. Ebben a példában a névtér SMFormsDemo:
xmlns:local="clr-namespace:SMFormsDemo"
Ezután meg kell adni egy ObjectDataProvidert a projektor állapotát megjelenítő kombinált lista értékeinek megadásához. Ez az ObjectDataProvider erőforrásként van definiálva:
<UserControl.Resources>
<ObjectDataProvider
ObjectType="{x:Type local:helper}"
MethodName="GetStatusValues"
x:Key="getStatusValues" />
</UserControl.Resources>
Ez az adatszolgáltató meghatározza annak az objektumnak és metódusnak a nevét, amely lekéri az enumerálási adatokat a felügyeleti csomagból.
Végül, ha a kombinált listát a felügyeleti csomagban definiált enumerálási értékekhez szeretné kötni, a rendszer hozzáad egy ItemsSource attribútumot a kombinált lista definícióhoz. Ez az attribútum meghatározza a lekért enumerálásértékek helyét; például:
ItemsSource="{Binding Source={StaticResource getStatusValues}, Mode=OneWay }"
Ezután a SelectedItem és az ItemTemplate elemek hozzáadódnak a kombinált lista vezérlőelem Extensible Application Markup Language (XAML) definíciójához. Az alábbi példában a kombinált lista kötési XAML-kódot tartalmazó definíciója látható:
<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>
A Kategória szakasz
A felügyeleti csomagok Kategória szakasza csoportosítja a felügyeleti csomag elemeit a könnyebb navigálás érdekében.
A példában szereplő első két <Category>
elem az Új és szerkesztési feladatok megjelenítésének szabályozására szolgál a Projektorok nézetben.
<Category ID="ProjectorViewHasTasks.View" Target="AllProjectorsView" Value="ProjectorViewTasksEnumeration" />
<Category ID="ProjectorViewHasTasks.CreateTask" Target="CreateProjector" Value="ProjectorViewTasksEnumeration" />
A példa felügyeleti csomag második két Kategória eleme arra szolgál, hogy a projektor feltételének számbavétele megjelenjen a Listák nézetben a Service Manager konzol Szerzői munkaablakában. Ez lehetővé teszi a felhasználó számára az értékek személyre szabását:
<Category ID="Project.ProjectorConditionEnumVisibleCategory" Target="ProjectorCondition" Value="System!VisibleToUser"/>
Ha hozzáadja ezt a kategóriát a következő példához, a Szerkesztés feladat megjelenik a Cél attribútumban hivatkozott EnumerationValueListák nézetben:
<Category ID="Projector.ProjectorConditionCategory" Target="ProjectorCondition" Value="Authoring!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.EnumerationViewTasks"/>
A Bemutató szakasz
A felügyeleti csomag Bemutató szakasza deklarálja és definiálja a felhasználói felülethez kapcsolódó elemeket. Ezek közé tartoznak az űrlap-deklarációk, a kategóriák, valamint a konzolfeladatok.
Az Űrlapok szakasz
Az Űrlapok szakasz deklarálja a felügyeleti csomag által használt űrlapokat. Az alábbi példa azt határozza meg, hogy hol található a Projector osztály példányainak megjelenítéséhez és szerkesztéséhez definiált űrlap. Ez köti az űrlapot a felügyeleti csomagban definiált Projector osztályhoz:
<Forms>
<Form TypeName="SMFormsDemo.TestControl"
ID="TestForm"
Target="System.ConfigItem.Projector"
Assembly="ProjectorFormsAssembly"
Accessibility="Public">
<Category>Form</Category>
</Form>
</Forms>
Az előző példában a következő attribútumok szerepeltek:
A TypeName attribútum tartalmazza az űrlap névterét és osztálynevét.
Az ID attribútum az űrlappéldány egyedi azonosítóját tartalmazza.
A Target attribútum annak az osztálynak a nevét tartalmazza, amelyhez ez az űrlap hozzá van kötve.
A Assembly attribútum az űrlapot tartalmazó külső erőforrásra mutat.
Az Akadálymentesség attribútum határozza meg, hogy ez az űrlap testre szabható-e.
Nézet definiálása
A felügyeleti csomag Nézetek szakasza tartalmazza a felhasználói felület (UI) nézeteinek definícióit. Ezek a nézetek a felügyeleti csomag objektumainak szűrésére és megjelenítésére használhatók.
<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>
A View Target attribútum a nézet által megjelenítendő osztályra hivatkozik.
Az előző példában a Service Manager konzol felügyeleti csomagjára tett utalás található. Ez a felügyeleti csomag tartalmazza az egyik használt nézettípus definícióját. Ebben az esetben az SMConsole! A GridViewType nézettípus definiálva van.
Az AdvancedListSupportClass számos paramétert határoz meg, amelyek közül a legfontosabb a TargetClass paraméter. Állítsa ezt a paramétert a nézetben megjelenő ClassTypeazonosítójára. A ClassType tulajdonságú oszlopok megjelenítéséhez használja az Oszlop elemet, és kösse azt a PropertyID attribútumhoz.
A ListSupportClass elem IsRecurring attribútuma határozza meg, hogy a nézet automatikusan frissül-e. A RecurrenceFrequency attribútum ezredmásodpercben határozza meg a frissítési időközt. Ebben a példában a frissítési időköz 1 másodpercre van állítva, éles telepítés esetén azonban nem ajánlott.
Mappák definiálása
A mappa definiálásával meghatározható a megjelenített nézet helye a navigációs fán. Ebben a példában egy konfigurációelem van definiálva, hogy csak a konfigurációelemek meglévő mappájába helyezze a nézetet a Konfigurációelemek munkaterületen:
<Folders>
<Folder ID="Folder.Projectors" Accessibility="Public" ParentFolder="SMConfig!ServiceManager.Console.ConfigurationManagement.ConfigItem.Root" />
</Folders>
<FolderItems>
<FolderItem
ElementID="AllProjectorsView"
Folder="Folder.Projectors" />
</FolderItems>
Az előző példában az ElementID attribútum a létrehozott nézetre mutató hivatkozást tartalmaz. A Mappa attribútum egy Folders.Projectors mappára mutat, amelynek gyökere a Service Manager konzol Konfigurációkezelés munkaterületén van definiálva. Ez a gyökérmappa a Configuration Management felügyeleti csomagban van definiálva.
Az ImageReference elem a korábban létrehozott nézetet egy, a Configuration Management névtérben definiált ikonra képezi le:
<ImageReferences>
<ImageReference ElementID="Folder.Projectors" ImageID="SMConfig!ConfigItemImage16x16" />
<ImageReference ElementID="AllProjectorsView" ImageID="SMConfig!ConfigItemImage16x16" />
</ImageReferences>
Honosítás a LanguagePacks szakasz használatával
A felügyeleti csomagok LanaguagePacks szakasza sztringerőforrásokat és leképezéseket határoz meg a felügyeleti csomag elemeihez.
A példában az EnumerationValueProjectorCondition.Working függvénynek Munkaként kell megjelennie. Ehhez definiálni kell az alábbiak megjelenítendő nevét:
Nézet: Minden kivetítő
Enumerálások: munka, hibás, javítás alatt, új
<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>
Szükség esetén további LanguagePack-elemeket is létrehozhat minden további szükséges nyelvhez. A megfelelő megjelenítési sztring jelenik meg a felhasználó számára a felhasználó területi beállításai alapján.
Erőforrások
A felügyeleti csomag Erőforrások szakasza bináris erőforrásokra mutató hivatkozásokat tartalmaz, amelyek a felügyeleti csomagtól különálló szerelvényekben találhatók. A következő példában egy erőforrás van definiálva, amely a Projector osztály által használt űrlapot tartalmazó szerelvényre mutat:
<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" />
Osztálybővítmények
Az osztálykiterjesztés egy olyan osztály, amely további tulajdonságokkal bővít egy meglévő osztályt. A meglévő osztály a legtöbb esetben egy lezárt felügyeleti csomagban található. Azokban az esetekben, amikor a meglévő osztály nincs lezárt felügyeleti csomagban, az osztálybővítményt ugyanabban a felügyeleti csomagban kell tárolni, mint a meghosszabbított osztályt.
Az osztálykiterjesztések öröklik a szülőosztályuk tulajdonságait. Példa:
Az A osztálynak vagy egy Tulajdonság1 nevű tulajdonsága
A B osztály az A osztályból származik (más szóval: az A osztály kiterjesztése), ezért a B osztálynak is van egy Tulajdonság1 nevű tulajdonsága. Ez a tulajdonság az A osztálytól, a szülőtől vagy az alaposztálytól öröklődik.
A B osztály definíciójában egy Tulajdonság2 nevű tulajdonság is szerepel.
Bármely a B osztályból származó osztálykiterjesztés örökölni fogja a Tulajdonság1 és a Tulajdonság2 tulajdonságot is.
Az alábbi példa az osztálykiterjesztés definícióját szemlélteti:
<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>
Ez az osztálybővítmény kibővíti a System.WorkItem.Incident osztályt, és hozzáad egy új, TimeOnIncident nevű tulajdonságot.
Az osztálykiterjesztések definíciója hasonlít az osztálydefiníciókra. A ClassType elem két attribútuma egy osztálydefiníció definiálására szolgál: az Alap attribútum és az IsExtensionType attribútum.
Az Alap attribútum annak a szülőosztálynak az azonosítóját adja meg, amelyből az osztálybővítmény származik. Ebben a példában az attribútum értéke Incidens! System.WorkItem.Incident. Ez az érték tartalmazza a felügyeleti csomag teljes nevének aliasát , amely tartalmazza a kiterjesztett osztályt, egy felkiáltójelet, majd az alaposztály nevét. További információért lásd az alábbi példát.
Az IsExtensionType attribútum határozza meg, hogy ez az osztály az alaposztály kiterjesztése-e. Mivel a TimeOnIncident az Incidens osztály kiterjesztése, ez a tulajdonság igaz értékre van állítva:
IsExtensionType="true"
A másik lehetőség a hamis, ami azt jelzi, hogy nem egy másik osztály kiterjesztése, hanem egy új osztály, amely az alaptól öröklődik. Az alapértelmezett érték hamis; Ezért ezt az attribútumot nem kell használni, ha az osztály nem bővítmény.
Teljes példa
Az alábbi példakódban az osztálykiterjesztést tartalmazó teljes felügyeleti csomag látható.
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>
Felügyeleti csomag importálása parancsmaggal
A Windows PowerShell Import-SCSMManagementPack parancsmaggal importálhat egy Service Manager felügyeleti csomagot, például:
Import-SCSMManagementPack MyServiceManager.ManagementPack.xml
Ez a dokumentum nem ismerteti, hogyan importálhat és használhat felügyeleti csomagokat a Service Manager konzolon. A felügyeleti csomagok Service Manager konzolon való használatáról a Felügyeleti csomagok használata Service Manager című témakörben olvashat.
Teljes felügyeleti csomag – példa
Az alábbi példakódok a jelen cikkben szereplő példákhoz használt teljes felügyeleti csomagot felelnek meg az űrlap definíciója és az űrlap C#-kód mögötti kódja mellett.
Felügyeleti csomag
<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>
Űrlapdefiníció
<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>
Űrlapkód mögött
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);
}
}
}