Service Manager felügyeleti csomag XML-fájljainak használataWork with Service Manager management pack XML files

Fontos

A Service Manager ezen verziója elérte a támogatás végét, javasoljuk, hogy frissítsen a Service Manager 2019-re.This version of Service Manager has reached the end of support, we recommend you to upgrade to Service Manager 2019.

A felügyeleti csomagok testreszabásának kidolgozásához a Service Manager-konzol és a Service Manager Authoring Tool valószínűleg nem elegendő, és előfordulhat, hogy közvetlenül kell létrehoznia vagy módosítania a felügyeleti csomag fájljait.For elaborate customizations of management packs, the Service Manager console and the Service Manager Authoring Tool might not be sufficient, and you might need to author or modify management pack files directly. A felügyeleti csomag fájljainak közvetlen kezeléséhez - számos területen részletes ismeretek szükségesek, például a System Center közös sémája és a felügyeleti csomagok szerkezete.Working directly with management pack files requires in-depth knowledge in several areas, such as the System Center Common Schema and the structure of management packs.

Ez a szakasz háttér-információkat és irányelveket tartalmaz, amelyek segítségével a Service Manager testreszabására szolgáló felügyeleti csomagokat hozhat létre és módosíthat.This section provides background information and guidelines that can help you author and modify management packs to customize Service Manager.

A System Center közös sémájának módosításaiChanges to the System Center Common Schema

Service Manager a System Center felügyeleti csomag sémájának frissített verzióját tartalmazza.Service Manager includes an updated version of the System Center Management Pack Schema. Ezt a sémát a System Center közös sémájának nevezik, és számos fejlesztést és kiegészítést tartalmaz, amelyek célja a meglévő funkciók javítása és Service Manager szolgáltatások engedélyezése.This schema is now called the System Center Common Schema, and it includes a number of improvements and additions that are intended to enhance existing functionality and enable Service Manager features. Ez a szakasz a System Center közös sémájának változásait ismerteti.This topic describes the changes to the System Center Common Schema.

Tulajdonságok és tulajdonságokra vonatkozó korlátozásokProperties and property restrictions

A közös séma számos új tulajdonságtípus bevezetésével kiterjeszti az osztályokat.The common schema extends classes through several new property types. Új tulajdonságtípus a binary, az enumerator és az autoincrement.These property types include the binary, enumerator, and autoincrement types.

Emellett bizonyos tulajdonságértékekhez korlátozásokat definiálhat.In addition, you can define restrictions on certain property values. Például reguláris kifejezéssel korlátozást adhat meg egy sztring típusú tulajdonságértékhez.For example, you can define a regular expression restriction on a string property value. A következő példában a BuildingName tulajdonság egy reguláris kifejezésre vonatkozó korlátozást tartalmaz, amely úgy van megadva, hogy csak az "épület" szót tartalmazó érték legyen érvényes.In the following example, the BuildingName property has a regular expression restriction that is defined so that only a value that contains the word "Building" followed by a space and a number is considered valid.


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

A képeket nem felügyeleti csomagban tárolja a rendszer.Images are not stored inside a management pack. Ezért a felügyeleti csomag <PresentationTypes> szakasza már nem tartalmazza az <Images>, <Image> és az <ImageData> címkét.Therefore, the <PresentationTypes> section of the management pack no longer contains the <Images>, <Image>, or <ImageData> tags. Ezek helyett használjon képerőforrásokat.Instead, use an image resource.

<Resources>  
   <Image ID="TestLibrary.Resources.Image1" Accessibility="Public" FileName="image.png"/>  
</Resources>  

EnumerálásokEnumerations

A közös séma támogatja az enumerálásokat.The common schema supports enumerations. 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.Enumerations are a tree of values that you can use to restrict the value of a property or attribute.

Minden enumeráláshoz egy kötelező egyedi azonosító attribútum és egy nem kötelező szülő attribútum tartozik.Each enumeration has a required unique ID attribute and an optional Parent attribute.

A következő példában a XBoxState enumerálás három lehetséges értékkel van definiálva: Futtatás, leállítva és hiba.In the following example, the XBoxState enumeration is defined with three possible values: Running, Stopped, and Error.


<EnumerationTypes>  
   <EnumerationValue ID="XBoxState" Accessibility="Public"/>  
   <EnumerationValue ID="XBoxState.Running" Parent="XBoxState" Accessibility="Public"/>  
  <EnumerationValue ID="XBoxState.Stopped" Parent="XBoxState" Accessibility="Public"/>  
   <EnumerationValue ID="XBoxState.Error" Parent="XBoxState" Accessibility="Public" />  
   <EnumerationValue ID="XBoxState.Error.RROD" Parent="XBoxState.Error" Accessibility="Public" />  
</EnumerationTypes>  

A következő példában az Xbox osztály egy XBoxStatetípusú enumerálási tulajdonságot határoz meg.In the following example, the Xbox class defines an enum property of type 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>  

KapcsolatokRelationships

A kapcsolatdefiníciók funkciója tovább lett fejlesztve a közös sémában.The functionality of relationship definitions has been enhanced in the common schema. A RelationshipType típusa már rendelkezik olyan forrás -és cél alelemekkel, amelyek azonosító tulajdonságai használhatók megjelenítendő nevekként.The RelationshipType type now has Source and Target subelements with ID properties that can be used as display names. Emellett a forrás és a cél esetében is meghatározhatja a minimális és a maximális kardinális értéket ( ( például 1 - – - 1 vagy 0) a - - több kapcsolathoz ) .In addition, you can define minimum and maximum cardinality for both the source and target (for example, 1-to-1 or 0-to-many relationships).

A kardinalitást nem kényszeríti a felügyeleti csomag érvényesítési folyamata, de segítséget nyújt felhasználói felületek definiálásánál a felügyeleti csomaghoz.Cardinality is not enforced by the management pack validation process, but it is intended to help define user interfaces for the management pack. 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.For example, cardinality can be checked to determine whether a field can be represented in a form by a text box or by a list.

Fontos

Az 1 értéknél nagyobbként definiált MaxCardinality -értékek korlátlanként vannak feldolgozva.Any MaxCardinality value that is defined as greater than 1 is processed as unlimited.

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.If you add a new relationship type from your own management pack, users must have sufficient privileges to update all properties of the source and target class instances of the relationship type in order to create an instance of the new relationship type.

A következő példában egy HasXboxes nevű üzemeltetési kapcsolat ( HasXboxes ) van definiálva a lobby típusa és az Xbox -típus között.In the following example, a hosting relationship (called HasXboxes) between the Lobby type and the Xbox type is defined. Ebben a kapcsolat-definícióban mindegyik lobby -típus több Xbox -típussal rendelkezhet.In this relationship definition, each Lobby type can have multiple Xbox types.


<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ályokCombination classes

A kombinált osztályok a felügyeleti csomagban több kapcsolódó típus összesítését jelentik, hasonlóan a Microsoft SQL Server-adatbázisban definiált nézetekhez,   amelyek több táblából származó adatok visszaadására képesek.Combination classes represent an aggregation of multiple related types in the management pack, similar to views that are defined in a Microsoft SQL Server database that can return data from multiple tables. 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.Combination classes store and retrieve all the aggregated data in one operation to the database, and they can make it easier to define user interfaces for a management pack.

A következő példában leképezés van definiálva egy incidenskezelési nézethez.In the following example, a projection is defined for an incident management view. 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.This projection combines several different components that are related to an incident into one unit that can be used more easily for forms and for database operations.


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

KonzolfeladatokConsole tasks

A konzolfeladatok bővítve lettek a közös sémában.Console tasks are extended in the common schema. Korábban a konzolfeladatok egyszerű mutatók voltak egy alkalmazástárra és egy végrehajtható fájl nevére.Previously, console tasks were simple pointers to an application directory and executable file name. A konzolon végzett feladatok mostantól a Microsoft .NET-keretrendszer szerelvényében kezelő kódnak lettek implementálva   .Console tasks are now implemented as handler code in a Microsoft .NET Framework assembly. 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.The handler code references the assembly that houses the code, the handler name, and a list of named values that can be passed as arguments to the handler.

A következő példában a some.Handler.name kezelő a MyLibrary. Resources. Assembly szerelvényben van definiálva.In the following example, the Some.Handler.Name handler is defined in the MyLibrary.Resources.Assembly assembly. A kezelő paramétereinek és a paraméterek értékeinek listája is definiálva van.A list of handler parameters and their values is also defined.

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

További forrásokResources

A bináris adatokat nem közvetlenül a felügyeleti csomagban tárolja a rendszer.Binary data is not stored directly in a management pack. 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.Instead, metadata about the binary resource is stored in the management pack, and the actual binary data is stored externally in a resource file. 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ó.The metadata includes a unique identifier, the file name, the creation data, the modified date, and accessibility information.

A bináris adatok tartalmazhatnak általános erőforrásokat, képeket, szerelvényeket, jelentésdefiníciókat és űrlapokat.Binary data can include generic resources, images, assemblies, report definitions, and forms. 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ó.The following example shows a generic XML resource, an assembly resource, and a report resource.


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

ŰrlapokForms

Az űrlapokat felügyeleti csomagokban definiálják.Forms are defined in a management pack. Az űrlapok segítségével egy típus vagy kombinált osztály egyetlen példánya tekinthető meg és módosítható.You can use forms to view and modify a single instance of a type or combination class.

Az űrlapok a Windows megjelenítési keretrendszer WPF-es verzióján alapulnak ( ) , és szerelvényekben vannak definiálva.Forms are based on the Windows Presentation Framework (WPF), and they are defined in assemblies. 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ó.The assembly and class that contain the form implementations for a management pack are included in the resources section of the management pack. Az új közös sémát használó felügyeleti csomagok más bináris erőforrásaihoz hasonlóan maga a felügyeleti csomag nem tartalmazza az űrlap bináris adatait.As with any binary resource in a management pack that uses the new common schema, the management pack itself does not contain the binary data for the form. A felügyeleti csomagban csak az erőforrásjegyzék van megadva.Only the resource manifest is specified in the management pack.

A felügyeleti csomagban saját konfigurálási adatokat adhat meg az űrlaphoz.You can specify your own configuration information for the form in the management pack. A következő példában a konfigurációs szakasz egy ShowXboxes tulajdonságot tartalmaz.In the following example, the Configuration section contains a ShowXboxes property. A konfigurálási adatokat nem értékeli ki a felügyeleti csomag érvényesítési folyamata, ezeket csak az űrlap megvalósítása értelmezi.This configuration information is not evaluated by the management pack verification process; it is only interpreted by the form implementation.


    <Forms>  
   <Form ID="LobbyForm" Target="Projection" Assembly="FormAssembly" TypeName="MyFormClass">  
   <Configuration>  
      <ShowXboxes>yes</ShowXboxes>  
   </Configuration>  
   </Form>  
</Forms>  

Felügyeleti csomag fájljának létrehozása a kivetítők kezeléséhezAuthor a management pack file to manage projectors

A felügyeleti csomagok segítségével irányíthatja és bővítheti Service Manager funkcióit.Management packs are used to direct and extend the functionality of Service Manager. A jelen témakör a kivetítőket használja példaként, és ezen keresztül mutatja be a felügyeleti csomagok különböző részeit, valamint meghatározza azokat a különféle objektumokat, amelyekre szükség lehet egy szervezet kivetítőinek a kezeléséhez.This topic uses projectors as an example for describing the various sections of a management pack and for defining the various objects that are needed for managing projectors in an organization.

A témakör egy teljes körű felügyeleticsomag-mintát tartalmaz, a szervezeten belüli kivetítőkezeléshez szükséges kiterjesztésekkel.This topic includes a complete management pack sample with the necessary extensions to manage projectors in an organization. Azt is leírja, hogyan importálhat egy felügyeleti csomagot egy Windows   PowerShell-parancsmag használatával.Also, it describes how to import a management pack using a Windows PowerShell cmdlet.

A témakör a felügyeleti csomagok alábbi szakaszait mutatja be:This topic describes the following sections of a management pack:

  • ManifestThe Manifest

  • TypeDefinitions az osztályenumerálások és -kapcsolatok létrehozásáhozTypeDefinitions to create class enumerations and relationships

  • ŰrlapokForms

Ez a témakör a felügyeleti csomag alábbi szakaszait ismerteti, amelyek tartalmazzák a felhasználói felület felhasználói felületének ( és a ) honosítási elemeknek a deklarációit és definícióit:This topic also describes the following sections of a management pack that contain declarations and definitions for user interface (UI) and localization elements:

  • KategóriákCategories

  • MegjelenítésPresentation

  • OsztálykiterjesztésekClass Extensions

Jegyzékfájl szakaszaManifest section

A felügyeleti csomag első szakasza a jegyzék (manifest).The first section of a management pack contains the manifest. A jegyzék azonosítja be a felügyeleti csomagot, valamint deklarálja a többi felügyeleti csomagra mutató esetleges hivatkozásokat.The manifest identifies the management pack and declares any references to other management packs.

Az alábbi példa egy olyan felügyeleti csomag jegyzékfájljának szakaszát mutatja be, amelyet egy szervezeten belüli kivetítők nyomon követésére terveztek.The following example shows the Manifest section of a management pack that was designed to track projectors in an organization.


<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 nem alfanumerikus értékeket (például ".") egy hivatkozás aliasában.In the References section, do not use nonalphanumeric values, such as a '.', in the Alias for a reference.

Osztályok létrehozása a TypeDefinitions szakaszbanCreate classes in the TypeDefinitions section

A felügyeleti csomag következő szakasz a típusdefiníciókat tartalmazza.The next section of a management pack contains type definitions. A felügyeleti csomag TypeDefinitions szakasza a felügyeleti csomag által használt osztályok, enumerálások és kapcsolatok definícióit tartalmazza.The TypeDefinitions section of a management pack contains definitions for classes, enumerations, and relationships that are used by the management pack.

Az alábbi példában egy olyan osztály látható, amely a kivetítők adatait tartalmazza:The following example shows a class that contains information about projectors:


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

A következő szakasz a - - típus definíciójának magyarázatát tartalmazza.The following is a section-by-section explanation of what the type definition contains.

A ClassTypes szakaszThe ClassTypes section

A ClassType elem a kivetítő osztályt definiálja:The ClassType element defines the projector class:

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

Az ID attribútum az osztály egyedi azonosítója.The ID attribute is the unique identifier of this class. Ennek beállítása:It is set to:

ID="System.ConfigItem.Projector"

Az Alap attribútum annak az osztálynak az azonosítója, amelyből ez az osztály származik.The Base attribute is the ID of the class from which this class derives. Mivel az egyes kivetítők konfigurációelemnek minősülhetnek, ennek beállítása:Because a projector is a kind of configuration item, this is set to:

Base="System!System.ConfigItem"

A **System ! ** jelöléseThe notation of System! azt jelzi, hogy ez az osztály, System.Configelemaz alias rendszeráltal hivatkozott felügyeleti csomagban található.indicates that this class, System.ConfigItem, is in the management pack that is referenced by the alias System.

Az üzemeltetett attribútum meghatározza, hogy ezt az osztályt egy másik osztály üzemelteti-e.The Hosted attribute defines whether this class is hosted by another class. Ilyen esetben az osztálypéldány csak akkor létezhet, ha létezik egy azt tartalmazó birtoklópéldány.In this case, an instance of this class can only exist when a host instance exists that contains it. Ebben a példában a kivetítőket nem a semmi; Ezért az üzemeltetett attribútum hamisértékre van állítva:For this example, projectors are not hosted by anything; therefore, the Hosted attribute is set to false:

Hosted="false"

Ha az üzemeltetett attribútum igaz értékre van állítva, azt jelzi, hogy az osztályt egy másik osztály üzemelteti.Setting the Hosted attribute to true indicates that the class is hosted by another class. A RelationshipTypes szakaszban deklarálni kell egy üzemeltetési kapcsolatot.A hosting relationship must be declared in the RelationshipTypes section.

A kisegítő lehetőségek attribútum határozza meg, hogy a többi osztály ebből az osztályból származik-e.The Accessibility attribute defines whether other classes can derive from this class. Azokban az esetekben, amikor engedélyezni szeretné mások számára az osztály egy adott verziójának létrehozását, ezt az attribútumot nyilvánosrakell beállítani, például:In cases where you might want to allow others to create a more specific version of your class, set this attribute to public, for example:

Accessibility="Public"

Ha a kisegítő lehetőségek tulajdonságot belső értékre állítja, a más osztályok ebből az osztályból származnak.Setting the Accessibility attribute to Internal prevents other classes from deriving from this class.

Az absztrakt attribútum határozza meg, hogy az osztály példányai létrehozhatók-e, illetve hogy az osztályt csak szülő osztályként kell-e használni más osztályokba származtatni.The Abstract attribute defines whether instances of this class can be created, or whether the class should just be used as a parent class to other classes to derive from. Ebben a példában ez az attribútum hamisértékre van állítva.In this example, this attribute is set to false. Ha az attribútum értéke true (igaz ), akkor az osztály egyetlen példánya sem hozható létre közvetlenül, és az osztály csak szülő osztályként használható.Setting this attribute to true means that no instances of this class can be created directly and that this class can be used only as a parent class.

Az osztálydefiníció következő szakasza az osztály tulajdonságait tartalmazza.The next section of the class definition contains the class properties. A jelen példa osztálytulajdonságait definiáló XML-kód az alábbi példában látható:The XML that defines the class properties for this example are defined in the following code example:


<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ág elem a következő tulajdonságokkal rendelkezik:Each Property element has the following attributes:

  • Az ID attribútum, amely a tulajdonság egyedi azonosítóját jelöli.The ID attribute, which designates the unique identifier of the property.

  • A tulajdonság adattípusát jelző Type attribútum.The Type attribute, which indicates the data type of the property.

  • A kulcs attribútuma.The Key attribute. Ha ezt az attribútumot igaz értékre állítja, az azt jelenti, hogy ezt a tulajdonságot az osztály egyedi azonosítására kell használni.Setting this attribute to true indicates that this property is to be used to uniquely identify this class.

Enumerálási típusok létrehozásaCreating Enumeration Types

Az enumerálás adattípusának enumerálásai speciális adattípusok.Enumerations of the enum data type are special data types. 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.Enumerations are used to constrain the data that is allowed for a property to a specific set of values. Az enumerálások lehetnek hierarchikusak; egy enumerálás szolgálhat egy másik alapjául.Enumerations can be hierarchical; one enumeration can be based on another enumeration.

A számbavételek meghatározása a EnumertionTypes szakaszban található.Enumerations are defined in the EnumertionTypes section of a solution pack. 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.An enumeration definition contains the root enumeration, followed by the actual enumeration values.

Mindegyik EnumerationValue fogad néhány attribútumot:Each EnumerationValue accepts a few attributes:

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.In this example, an enumeration is defined for keeping track of the condition of the projectors. Az alábbi attribútumok definiálják ezt az enumerálást:The following defines this enumeration:

  • Az azonosító a számbavételi vagy enumerálási érték azonosítója.ID is the identifier for the enumeration or enumeration value.

  • A kisegítő lehetőségek azt határozzák meg, hogy ez a számbavétel tartalmazhat-e más enumerálásokat is.Accessibility specifies whether this enumerator can contain other enumerators.

  • A ParentName olyan attribútum, amely meghatározza a számbavételi érték szülőjének azonosítóját .ParentName is an attribute that specifies the ID of the parent of the enumerator value.


<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ásaCreate a form

Service Manager űrlapok a Windows megjelenítési keretrendszer WPF- ( ) űrlapjain alapulnak.Service Manager forms are based on Windows Presentation Framework (WPF) forms. Service Manager kiterjeszti a WPF-t az XML-definícióhoz hozzáadott egyszerű attribútumokkal, és lehetővé teszi a Service Manager számára az adatok a felügyeleti csomagból az űrlapra való kötését.Service Manager extends WPF with simple attributes that are added to the XML definition and allow Service Manager to bind data from the management pack to the form.

Service Manager űrlapokat több különböző eszköz, például a Microsoft Visual Studio vagy a Microsoft Expression Blend használatával hozhat létre.Service Manager forms can be created by using several different tools, including Microsoft Visual Studio or Microsoft Expression Blend. Mivel az űrlapok XML- - alapúak, az XML-szerkesztővel is meghatározhatók.Because the forms are XML-based, they can also be defined by using any XML editor.

Az alábbi példában egy olyan űrlap-definíció látható, amely a Microsoft Expression Blend használatával lett létrehozva.The following example shows a form definition that was created by using Microsoft Expression Blend. Ez az űrlap négy vezérlőt, három szövegmezőt és egy kombinált listát tartalmaz, amelyek a korábban definiált kivetítő osztály tulajdonságaihoz vannak kötve:This form contains four controls, three text boxes and one combo box, that are bound to the Projector class properties that were defined previously:


<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.To enable binding of controls on the form to class properties that are defined in a management pack, a number of items must be specified.

Kötési szöveg vezérlőkBinding Text Controls

Ha szövegmezőket szeretne kötni egy felügyeleti csomagban lévő osztály tulajdonságaihoz, adjon hozzá egy kötési elérésiút -címkét a szövegmező vezérlőelem text (szöveg) tulajdonságához, például:To bind text boxes to class properties in a management pack, add a Binding Path tag to the text box control's Text property, for example:

{Binding Path=SerialNumber, Mode=TwoWay}  

Ez a címke a felügyeleti csomagban definiált kivetítő osztály serialnumber tulajdonságához köti a szövegmező vezérlőelemet, és ez azt jelenti, hogy ez a két - módszer kötése.This tag binds the text box control to the SerialNumber property of the Projector class that was defined in the management pack, and it specifies that this should be a two-way binding. A tulajdonság értéke lekérésre kerül az adatbázisból és az űrlap betöltődésekor megjelenik a szövegmezőben. Ha a felhasználó módosítást végez, akkor a tulajdonság értéke visszakerül az adatbázisba, és ott tárolódik.The value of the property is retrieved from the database and displayed in the text box when the form is loaded, and the property value is stored back to the database if it is changed by the user.

Kötés kombinált listákBinding Combo Boxes

Annak engedélyezéséhez, hogy az űrlap az alapul szolgáló felügyeleti csomagból lekérje az enumerálási adatokat, és azt az űrlap egy vezérlőeleméhez köti, a segítő osztályt az űrlap ** - mögötti kódban** kell definiálni.To allow the form to retrieve enumeration data from the underlying management pack and bind it to a control on the form, a helper class must be defined in the code-behind in the form. A segítőosztálynak tartalmaznia kell egy olyan metódust, amely a felügyeleti csomagban definiált enumerálást ad vissza.This helper class should contain a method that returns an enumeration that is defined in the management pack. Enumerálás visszaadásához használja az aktuális felügyeleti csomag GetEnumerations metódusát.To return an enumeration use the GetEnumerations method of the current management pack. Ez a példány a Service Manager szoftverfejlesztői készlet SDK-ból származó ConsoleContextHelper osztállyal érhető ( el ) .This instance is accessed with the ConsoleContextHelper class from the Service Manager software development kit (SDK). A következő példában egy segítő osztály egy GetStatusValues metódust határoz meg, amely a felügyeleti csomagban definiált ProjectorCondition enumerálás értékeit kérdezi le:In the following example, a helper class defines a GetStatusValues method that retrieves the values for the ProjectorCondition enumeration that was defined in the management pack:


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.To access this method, a few things must be defined in the form definition in the management pack.

Először egy olyan névteret ad hozzá az űrlap-definícióhoz, amely az űrlap mögé tartozó kód névterére mutat.First, a namespace that points to the namespace for the code behind for the form is added to the form definition. Ebben a példában a névtér SMFormsDemo:In this example, the namespace is SMFormsDemo:

xmlns:local="clr-namespace:SMFormsDemo"  

Ezután meg kell határozni egy ObjectDataProvider , hogy megadja a kivetítő állapotát megjelenítő kombinált lista értékeit.Next, an ObjectDataProvider must be defined to provide the values for the combo box that displays the projector status. Ez a ObjectDataProvider erőforrásként van definiálva:This ObjectDataProvider is defined as a resource:


<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.This data provider specifies the object and method name that retrieves the enumeration values from the management pack.

Végezetül, ha a kombinált listát a felügyeleti csomagban definiált enumerálási értékekhez szeretné kötni, a kombinált lista definíciójában egy ItemsSource attribútum lesz hozzáadva.Finally, to bind the combo box to the enumeration values that are defined in the management pack, an ItemsSource attribute is added to the combo box definition. Ez az attribútum meghatározza a lekért enumerálásértékek helyét; például:This attribute specifies where to retrieve the enumeration values, for example:

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

A következő, SelectedItem és ItemTemplate elemek hozzáadódnak a ( ) kombinált lista vezérlő Extensible Application Markup Language XAML-definícióhoz.Next, SelectedItem and ItemTemplate elements are added to the Extensible Application Markup Language (XAML) definition of the combo box control. Az alábbi példában a kombinált lista kötési XAML-kódot tartalmazó definíciója látható:The following example shows the combo box definition with the binding XAML included:


<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 szakaszaThe Category section

A felügyeleti csomagok Kategória szakasza a felügyeleti csomag elemeit csoportosítja a könnyebb navigálás érdekében.The Category section of a management pack groups management pack elements together for easier navigation.

A példában szereplő első két <Category> elem segítségével szabályozható az új és a szerkesztési feladatok megjelenítése a kivetítők nézetben.The first two <Category> elements in the example are used to control the display of the New and Edit tasks in the Projectors view.

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

A példaként szolgáló felügyeleti csomag második két kategóriája a kivetítő állapotának enumerálására szolgál a Service Manager-konzol szerzői műveletek paneljének lista nézetében.The second two Category elements in the example management pack are used to make the projector condition enumeration appear in the Lists view in the Authoring pane in the Service Manager console. Ez lehetővé teszi a felhasználó számára az értékek személyre szabását:This enables the user to customize the values:

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

Ha a következő példában ezt a kategóriát adja hozzá, akkor a szerkesztési feladat megjelenik a EnumerationValue listán , amely a cél attribútumban szerepel:Adding this category in the following example makes the Edit task appear in the Lists view for the EnumerationValue that is pointed at in the Target attribute:

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

A bemutató szakaszThe Presentation section

A felügyeleti csomag Megjelenítés szakasza deklarálja és meghatározza a felhasználói - felülettel - kapcsolatos elemeket.The Presentation section of a management pack declares and defines user-interface-related elements. Ezek közé tartoznak az űrlap-deklarációk, a kategóriák, valamint a konzolfeladatok.These include forms declarations, categories, and console tasks.

Az űrlapok szakaszThe Forms Section

Az űrlapok szakasz a felügyeleti csomag által használt űrlapokat deklarálja.The Forms section declares forms that are used by your management pack. Az alábbi példa megadja, hogy hol található a kivetítő osztály példányainak megjelenítéséhez és szerkesztéséhez definiált űrlap.The following example specifies where to find the form that is defined to display and edit instances of the Projector class. Ez az űrlapot a felügyeleti csomagban definiált kivetítő osztályhoz köti:This binds the form to the Projector class that is defined in the management pack:


<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:The following attributes are used in the preceding example:

  • A TypeName attribútum tartalmazza az űrlap névterét és osztályának nevét.The TypeName attribute contains the namespace and class name of the form.

  • Az ID attribútum az ilyen típusú példány egyedi azonosítóját tartalmazza.The ID attribute contains the unique identifier of this form instance.

  • A Target attribútum annak az osztálynak a nevét tartalmazza, amelyhez az űrlap kötve van.The Target attribute contains the name of the class that this form is bound to.

  • A Assembly attribútum az űrlapot tartalmazó külső erőforrásra mutat.The Assembly attribute points to the external resource that contains the form.

  • A kisegítő lehetőségek attribútum határozza meg, hogy az űrlap testreszabható-e.The Accessibility attribute defines whether this form can be customized.

Nézet definiálásaDefining a View

A felügyeleti csomag nézetek szakasza a felhasználói felület ( felhasználóifelület-nézeteinek definícióit tartalmazza ) .The Views section of a management pack contains definitions of user interface (UI) views. Ezek a nézetek a felügyeleti csomag objektumainak szűrésére és megjelenítésére használhatók.These views can be used to filter and display objects in a 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>  

A View Target attribútum a nézet által megjelenítendő osztályra hivatkozik.The View Target attribute points to the class that the view will be used to display.

Az előző példában a Service Manager konzol felügyeleti csomagjára tett utalás található.In the preceding example, the Service Manager Console management pack is referenced. Ez a felügyeleti csomag tartalmazza az egyik használt nézettípus definícióját.This management pack contains a definition of a view type being used. Ebben az esetben a SMConsole ! GridViewType nézettípus van definiálva.In this instance, the SMConsole!GridViewType view type is defined.

A AdvancedListSupportClass számos paramétert határoz meg, amelyek közül a legfontosabb a TargetClass paraméter.The AdvancedListSupportClass defines a number of parameters, the most important of which is the TargetClass parameter. Adja meg ezt a paramétert annak a ClassType az azonosítójának , amely ebben a nézetben fog megjelenni.Set this parameter to the ID of the ClassType that will appear in this view. A ClassTypetulajdonságait tartalmazó oszlopok megjelenítéséhez használja az oszlop elemet, és kösse azt a PropertyID attribútumhoz.To display the columns that are properties of the ClassType, use the Column element and bind it to the PropertyID attribute.

A ListSupportClass elem IsRecurring attribútuma határozza meg, hogy a nézet automatikusan frissül-e - .The IsRecurring attribute of the ListSupportClass element determines whether the view auto-refreshes. A RecurrenceFrequency attribútum a frissítési időközt ezredmásodpercekben határozza meg.The RecurrenceFrequency attribute defines the refresh interval in milliseconds. Ebben a példában a frissítés időköze 1 másodperc, ez azonban nem ajánlott beállítás éles környezetekben.In this example, the refresh interval is set to 1 second, but that is not recommended for production installations.

Mappák definiálásaDefining Folders

A mappa definiálásával meghatározható a megjelenített nézet helye a navigációs fán.Defining a folder determines the location in the navigation tree in which the view is displayed. Ebben a példában egy konfigurációs elem van definiálva, hogy csak a konfigurációs elemek munkaterületen található konfigurációs elemek meglévő mappájában legyen alkalmas a nézet elhelyezésére:In this example, a configuration item is defined so that it is only suitable to place the view under the existing folder for configuration items in the Configuration Items workspace:

<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 a ElementID attribútum a létrehozott nézetre mutató hivatkozást tartalmaz.In the preceding example, the ElementID attribute contains a reference to the view that was created. A mappa attribútuma egy Folders. projecters mappára mutat, amely a Service Manager-konzol Configuration Management munkaterületén definiált legfelső szintű.The Folder attribute points to a Folders.Projectors folder, which in turn has its root as defined in the Configuration Management workspace of the Service Manager console. Ez a gyökérmappa a Configuration Management felügyeleti csomagban van definiálva.This root folder is defined in the Configuration Management management pack.

A ImageReference elem a korábban létrehozott nézetet képezi le a Configuration Management névtérben definiált ikonhoz:The ImageReference element maps the view that was previously created to an icon that is defined in the Configuration Management namespace:

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

Honosítás a LanguagePacks szakasz használatávalLocalization Using the LanguagePacks Section

A felügyeleti csomagok LanaguagePacks szakasza meghatározza a felügyeleti csomag elemeinek karakterlánc-erőforrásait és hozzárendeléseit.The LanaguagePacks section of a management pack defines string resources and mappings for management pack elements.

A példában a EnumerationValueProjectorCondition. Work működésnekkell megjelennie.In the example, the EnumerationValueProjectorCondition.Working must appear as Working. Ehhez definiálni kell az alábbiak megjelenítendő nevét:To do this, display names for each of the following must be defined:

  • Megtekintés: összes kivetítőView: All projectors

  • Enumerálások: munka, megszakadt, javítás, újEnumerations: working, broken, in repair, new

  <LanguagePacks>  
    <LanguagePack ID="ENU" IsDefault="true">  
      <DisplayStrings>  
        <DisplayString ElementID="AllProjectorsView">  
          <Name>All Projectors</Name>  
          <Description>This displays all projectors</Description>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.Working">  
          <Name>Working</Name>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.Broken">  
          <Name>Broken</Name>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.BeingRepaired">  
          <Name>In Repair</Name>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.New">  
          <Name>New</Name>  
        </DisplayString>  
      </DisplayStrings>  
    </LanguagePack>  
</LanguagePacks>  

Szükség szerint további LanguagePack elemeket is létrehozhat a szükséges további nyelvekhez.You can create additional LanguagePack elements, as necessary, for each additional language you require. A felhasználó területi beállítása alapján a megfelelő megjelenítési karakterlánc jelenik meg a felhasználó számára.The correct display string appears to the user based on the user's locale.

ErőforrásokResources

A felügyeleti csomag erőforrások szakasza olyan bináris erőforrásokra mutató hivatkozásokat tartalmaz, amelyek a felügyeleti csomagtól eltérő szerelvényekben találhatók.The Resources section of a management pack contains references to binary resources, which are contained in assemblies that are separate from the management pack. A következő példában egy erőforrás van definiálva, amely a kivetítő osztály által használt űrlapot tartalmazó szerelvényre mutat:In the following example, a resource is defined that points to the assembly that contains the form that is used by the Projector class:

<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ályok bővítményeiClass extensions

Az osztálykiterjesztés egy olyan osztály, amely további tulajdonságokkal bővít egy meglévő osztályt.A class extension is a class that adds properties to an existing class. A meglévő osztály a legtöbb esetben egy lezárt felügyeleti csomagban található.In most cases, this existing class is in a sealed management pack. Ha a meglévő osztály nem lezárt felügyeleti csomagban található, az osztálykiterjesztésnek a kiterjesztett osztályéval megegyező felügyeleti csomagba kell kerülnie.In cases where the existing class is not in a sealed management pack, the class extension must be contained in the same management pack as the class that is being extended.

Az osztálykiterjesztések öröklik a szülőosztályuk tulajdonságait. Példa:A class extension inherits the properties of any parent classes, for example:

  • Az A osztálynak vagy egy Tulajdonság1 nevű tulajdonságaClass A has a property called Property1

  • 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.Class B derives from, or extends, Class A and therefore has a property called Property1. Ez a tulajdonság az A osztály, a szülő vagy az alaposztály örökölt.)This property is inherited from Class A, the parent, or base class)

  • A B osztály definíciójában egy Tulajdonság2 nevű tulajdonság is szerepel.The definition of Class B adds a property called Property2.

  • 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.Any class extension that derives from Class B will inherit Property1 and Property2.

    Az alábbi példa az osztálykiterjesztés definícióját szemlélteti:The following example shows a class extension definition:


<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ály-kiterjesztés kiterjeszti a System. Munkatétel. incidens osztályt, és hozzáadja a TimeOnIncidentnevű új tulajdonságot.This class extension extends the System.WorkItem.Incident class and adds a new property called TimeOnIncident.

Az osztálykiterjesztések definíciója hasonlít az osztálydefiníciókra.The definition for a class extension is similar to that of a class definition. A ClassType elem két attribútuma van használatban az osztály definíciójának definiálásához: az Alap attribútum és a IsExtensionType attribútum.Two attributes of the ClassType element are used to define a class definition: the Base attribute and the IsExtensionType attribute.

Az Alap attribútum meghatározza annak a szülő osztálynak az azonosítóját , amelyből az osztály-bővítmény származik.The Base attribute specifies the ID of the parent class from which the class extension derives. Ebben az esetben az attribútumérték az incidens ! System. Munkatétel. incidensértékre van állítva.In this instance, the attribute value is set to Incident!System.WorkItem.Incident. Ez az érték tartalmazza a teljes felügyeleti csomag nevének aliasát , amely tartalmazza a kibővíteni kívánt osztályt, egy felkiáltójelet, majd az alaposztály nevét.This value contains the Alias of the full management pack name, which contains the class being extended, an exclamation point, and then the name of the base class. További információért lásd az alábbi példát.For more information, see the following example.

A IsExtensionType attribútum határozza meg, hogy ez az osztály az alaposztály kiterjesztése-e.The IsExtensionType attribute defines whether this class is an extension of the base class. Mivel a TimeOnIncident az incidens osztály kiterjesztése, ez a tulajdonság igazértékre van állítva:Because TimeOnIncident is an extension to the Incident class, this property is set to true:

IsExtensionType="true"  

A másik lehetőség hamis, ami azt jelzi, hogy nem egy másik osztály kiterjesztése, hanem egy új osztály, amely az Alaptól örököl.The other option is false, which indicates that it is not an extension of another class but a new class that inherits from the base. Az alapértelmezett érték false (hamis). Ezért ezt az attribútumot nem kell használni, ha az osztály nem bővítmény.The default value is false; therefore, this attribute does not have to be used if the class is not an extension.

Teljes példaFull Example

Az alábbi példakódban az osztálykiterjesztést tartalmazó teljes felügyeleti csomag látható.The following code example shows the full management pack containing the class extension.

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 parancsmag használatávalImport a management pack by using a cmdlet

 Service Manager felügyeleti csomag importálásához a Windows PowerShell import - SCSMManagementPack parancsmagot használhatja, például:You can use the Windows PowerShell Import-SCSMManagementPack cmdlet to import a Service Manager management pack, for example:

Import-SCSMManagementPack MyServiceManager.ManagementPack.xml  

Ez a dokumentum nem ismerteti a felügyeleti csomagok importálását és használatát a Service Manager-konzolon.This document does not describe how to import and use management packs in the Service Manager console. További információ a felügyeleti csomagok a Service Manager-konzolon való használatáról: felügyeleti csomagok használata a Service Managerban.For information about using management packs in the Service Manager console, see Using Management Packs in Service Manager.

Teljes felügyeleti csomag – példaFull management pack example

Az alábbi kódrészletek a jelen témakörben található példákhoz használt teljes minta felügyeleti csomagot, valamint az űrlap-definíciót és a # mögöttes C-kódot jelölik - .The following code examples represent the full sample management pack that is used for examples in this topic, in addition to the form definition and the C# code-behind for the form.

Felügyeleti csomagManagement 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>  

Űrlap-definícióForm Definition


<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 - mögötti formátumForm Code-Behind


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

További lépésekNext steps