Service Manager 管理パックの XML ファイルを操作するWork with Service Manager management pack XML files

重要

このバージョンの Service Manager はサポート終了に達したため、 Service Manager 2019 にアップグレードすることをお勧めします。This version of Service Manager has reached the end of support, we recommend you to upgrade to Service Manager 2019.

管理パックの詳細なカスタマイズについては、Service Manager コンソールと Service Manager Authoring Tool では不十分な場合があります。また、管理パックファイルを直接作成したり変更したりする必要がある場合があります。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. 管理パックファイルを直接操作するには、 - System Center の共通スキーマや管理パックの構造など、いくつかの領域で詳細な知識が必要です。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.

このセクションでは、Service Manager をカスタマイズするために管理パックを作成および変更する際に役立つ背景情報とガイドラインを提供します。This section provides background information and guidelines that can help you author and modify management packs to customize Service Manager.

System Center の共通スキーマへの変更Changes to the System Center Common Schema

Service Manager には、System Center 管理パックスキーマの更新バージョンが含まれています。Service Manager includes an updated version of the System Center Management Pack Schema. このスキーマは、現在は System Center の共通スキーマと呼ばれています。これには、既存の機能を拡張して Service Manager 機能を有効にすることを目的とした多くの改善点と追加機能が含まれています。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. このトピックでは、System Center の共通スキーマにおける変更点について説明します。This topic describes the changes to the System Center Common Schema.

プロパティとプロパティの制限Properties and property restrictions

共通スキーマでは、いくつかの新しいプロパティ型によりクラスが拡張されます。The common schema extends classes through several new property types. これらのプロパティ型には、"バイナリ"、"列挙子"、"自動増分" が含まれます。These property types include the binary, enumerator, and autoincrement types.

さらに、特定のプロパティ値に制限を定義できます。In addition, you can define restrictions on certain property values. たとえば、文字列のプロパティ値に正規表現の制限を定義できます。For example, you can define a regular expression restriction on a string property value. 次の例では、 BuildingName プロパティは、正規表現制限により、"Building" という単語の後にスペース 1 文字と数字 1 つが続く文字列を含む値のみが有効と判断されるように定義されています。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>  

画像Images

イメージは管理パック内には保存されません。Images are not stored inside a management pack. そのため、管理パックの <PresentationTypes> セクションには、<Images><Image><ImageData> のタグは含まれなくなりました。Therefore, the <PresentationTypes> section of the management pack no longer contains the <Images>, <Image>, or <ImageData> tags. 代わりにイメージ リソースを使用します。Instead, use an image resource.

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

列挙Enumerations

共通スキーマは、列挙をサポートします。The common schema supports enumerations. 列挙は値をツリー形式に示すもので、プロパティや属性の値を制限するのに使用できます。Enumerations are a tree of values that you can use to restrict the value of a property or attribute.

列挙ごとに、一意の必須 ID 属性と、オプションの Parent 属性を持ちます。Each enumeration has a required unique ID attribute and an optional Parent attribute.

次の例では、 XBoxState 列挙に、Running、Stopped、Error という 3 つの可能値が定義されています。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>  

次の例では、 Xbox クラスにより、 enum 型の XBoxStateプロパティが定義されています。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>  

リレーションシップRelationships

共通スキーマにおいて、リレーションシップ定義の機能が強化されました。The functionality of relationship definitions has been enhanced in the common schema. RelationshipType 型には、表示名として使用できる Source プロパティと共にサブ要素 TargetID が含まれるようになりました。The RelationshipType type now has Source and Target subelements with ID properties that can be used as display names. さらに、ソースとターゲットの両方のカーディナリティの最小値と最大値を定義でき ( ます。たとえば、1 - ~ - 1 または 0 - 対 - 多のリレーションシップが ) あります。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).

カーディナリティは、管理パックの検証プロセスでは適用されませんが、管理パックのユーザー インターフェイスの定義に役立ちます。Cardinality is not enforced by the management pack validation process, but it is intended to help define user interfaces for the management pack. たとえば、フォームでフィールドをテキスト ボックスまたはリストとして表示可能かどうかなど、カーディナリティにより確認できます。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.

重要

1 より大きな値として定義されている MaxCardinality 値はすべて無限大として処理されます。Any MaxCardinality value that is defined as greater than 1 is processed as unlimited.

独自の管理パックから新しいリレーションシップの種類を追加する場合、ユーザーが新しいリレーションシップの種類のインスタンスを作成するには、そのリレーションシップの種類のソースとターゲットのクラス インスタンスのすべてのプロパティを更新するのに必要な特権が条件となります。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.

次の例では、ロビーの ( 種類HasXboxes ) とXboxLobby種類の間で HasXboxes というホストリレーションシップが定義されています。In the following example, a hosting relationship (called HasXboxes) between the Lobby type and the Xbox type is defined. このリレーションシップ定義では、各 Lobby 型に複数の Xbox 型を指定できます。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>  

複合クラスCombination classes

複合クラスは、管理パック内の複数の関連する種類の集計を表します。これは、複数の   テーブルからデータを返すことができる MICROSOFT SQL Server データベースで定義されているビューに似ています。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. 複合クラスは、データベースに対して 1 つの演算を実行することで、すべての集計データを保管および取得します。そのため、複合クラスを利用すると、管理パックのユーザー インターフェイスを簡単に定義できます。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.

次の例では、インシデント管理ビューのプロジェクションが定義されています。In the following example, a projection is defined for an incident management view. このプロジェクションは、インシデントに関連する異なる複数のコンポーネントを 1 つのユニットとして統合します。そのため、フォームやデータベースの操作において、簡単に使用することができます。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>  

コンソール タスクConsole tasks

コンソール タスクは、共通スキーマで拡張されます。Console tasks are extended in the common schema. 以前は、コンソール タスクはアプリケーション ディレクトリと実行可能ファイル名を示すシンプルなポインターでした。Previously, console tasks were simple pointers to an application directory and executable file name. コンソールタスクが、Microsoft .NET Framework アセンブリにハンドラーコードとして実装されるようになりました   。Console tasks are now implemented as handler code in a Microsoft .NET Framework assembly. ハンドラー コードは、コード、ハンドラー名、および引数としてハンドラーに渡すことが可能な名前付きの値のリストを格納するアセンブリを参照します。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.

次の例では、 Some.Handler.Name ハンドラーが、 MyLibrary.Resources.Assembly アセンブリに定義されています。In the following example, the Some.Handler.Name handler is defined in the MyLibrary.Resources.Assembly assembly. ハンドラーのパラメーターとその値のリストも定義されています。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>  

リソースResources

バイナリ データは直接管理パック内には保存されません。Binary data is not stored directly in a management pack. 通常、バイナリ リソースに関するメタデータが管理パックに保存され、実際のバイナリ データは外部のリソース ファイルに保存されます。Instead, metadata about the binary resource is stored in the management pack, and the actual binary data is stored externally in a resource file. メタデータには、一意識別子、ファイル名、作成データ、変更日、およびアクセシビリティ情報が含まれます。The metadata includes a unique identifier, the file name, the creation data, the modified date, and accessibility information.

バイナリ データには、汎用リソース、イメージ、アセンブリ、レポート定義、フォームを含めることができます。Binary data can include generic resources, images, assemblies, report definitions, and forms. 次の例は、汎用 XML リソース、アセンブリ リソース、レポート リソースを示しています。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>  

フォームForms

フォームは管理パックで定義されます。Forms are defined in a management pack. フォームを使用して、型の単一インスタンスまたは複合クラスを表示して編集できます。You can use forms to view and modify a single instance of a type or combination class.

フォームは、Windows Presentation Framework WPF に基づいて ( おり、アセンブリで定義されてい ) ます。Forms are based on the Windows Presentation Framework (WPF), and they are defined in assemblies. 管理パックのフォーム実装を含むアセンブリとクラスは、管理パックの Resources セクションに含まれています。The assembly and class that contain the form implementations for a management pack are included in the resources section of the management pack. 新しい共通スキーマを使用する管理パックのバイナリ リソースと同様に、管理パック自体にはフォームのバイナリ データは含まれません。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. 管理パックでは、リソース マニフェストが指定されているだけです。Only the resource manifest is specified in the management pack.

管理パックのフォームに対して、独自の構成情報を指定できます。You can specify your own configuration information for the form in the management pack. 次の例では、Configuration セクションに ShowXboxes プロパティが含まれています。In the following example, the Configuration section contains a ShowXboxes property. この構成情報は、フォーム実装により解釈されるだけで、管理パックの検証プロセスでは評価されません。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>  

プロジェクターを管理するための管理パックファイルを作成するAuthor a management pack file to manage projectors

管理パックは、Service Manager の機能を直接および拡張するために使用されます。Management packs are used to direct and extend the functionality of Service Manager. このトピックでは、プロジェクターを例にして、管理パックのさまざまなセクションと、組織でプロジェクターを管理するのに必要なさまざまなオブジェクトの定義を説明します。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.

このトピックには、組織のプロジェクターの管理に必要な拡張が加えられた完全な管理パックの例が含まれます。This topic includes a complete management pack sample with the necessary extensions to manage projectors in an organization. また、Windows PowerShell コマンドレットを使用して管理パックをインポートする方法についても説明し   ます。Also, it describes how to import a management pack using a Windows PowerShell cmdlet.

このトピックでは、管理パックの次のセクションについて説明します。This topic describes the following sections of a management pack:

  • ManifestThe Manifest

  • TypeDefinitions (クラス列挙とリレーションシップの作成に使用)TypeDefinitions to create class enumerations and relationships

  • フォームForms

このトピックでは、ユーザーインターフェイス ( UI とローカリゼーション要素の宣言と定義を含む管理パックの次のセクションについても説明し ) ます。This topic also describes the following sections of a management pack that contain declarations and definitions for user interface (UI) and localization elements:

  • CategoriesCategories

  • プレゼンテーションPresentation

  • クラス拡張Class Extensions

マニフェストセクションManifest section

管理パックの最初のセクションにはマニフェストが含まれます。The first section of a management pack contains the manifest. マニフェストは管理パックを識別し、他の管理パックへの参照を宣言します。The manifest identifies the management pack and declares any references to other management packs.

次の例は、組織のプロジェクターを追跡するように設計された管理パックの Manifest セクションを示したものです。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>  

重要

参照セクションでは、参照のエイリアスに '. ' などの英数字以外の値を使用しないでください。In the References section, do not use nonalphanumeric values, such as a '.', in the Alias for a reference.

TypeDefinitions セクションでクラスを作成するCreate classes in the TypeDefinitions section

管理パックの次のセクションには、型の定義が含まれます。The next section of a management pack contains type definitions. 管理パックの TypeDefinitions セクションには、管理パックで使用されるクラス、列挙およびリレーションシップの定義が含まれます。The TypeDefinitions section of a management pack contains definitions for classes, enumerations, and relationships that are used by the management pack.

次の例は、プロジェクターについての情報を含むクラスを示したものです。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>  

次のセクションでは - 、 - 型定義に含まれる内容について説明します。The following is a section-by-section explanation of what the type definition contains.

ClassTypes セクションThe ClassTypes section

ClassType 要素がプロジェクターのクラスを定義します。The ClassType element defines the projector class:

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

ID 属性がこのクラスの一意の識別子です。The ID attribute is the unique identifier of this class. 次のように設定されています。It is set to:

ID="System.ConfigItem.Projector"

Base 属性は、このクラスの派生元クラスの ID です。The Base attribute is the ID of the class from which this class derives. プロジェクターは構成アイテムの一種なので、次のように設定されています。Because a projector is a kind of configuration item, this is set to:

Base="System!System.ConfigItem"

**システム ! **の表記The notation of System! このクラス System.Config項目が、エイリアス システムによって参照される管理パック内にあることを示します。indicates that this class, System.ConfigItem, is in the management pack that is referenced by the alias System.

Hosted 属性は、このクラスが他のクラスによってホストされているかどうかを定義します。The Hosted attribute defines whether this class is hosted by another class. ホストされている場合、このクラスのインスタンスは、それを含むホスト インスタンスが存在するときのみ存在できます。In this case, an instance of this class can only exist when a host instance exists that contains it. この例では、プロジェクターをホストするものはありません。そのため、 Hosted 属性には falseが設定されています。For this example, projectors are not hosted by anything; therefore, the Hosted attribute is set to false:

Hosted="false"

Hosted 属性に true を設定すると、そのクラスが別のクラスにホストされていることを示します。Setting the Hosted attribute to true indicates that the class is hosted by another class. ホスト リレーションシップは、 RelationshipTypes セクションで宣言されなければなりません。A hosting relationship must be declared in the RelationshipTypes section.

Accessibility 属性は、このクラスから他のクラスが派生できるかどうかを定義します。The Accessibility attribute defines whether other classes can derive from this class. 他が、クラスのより特化したバージョンを作成することを許可する場合には、次の例のように、この属性に publicを設定します。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"

Accessibility 属性に Internal を設定すると、他のクラスがこのクラスから派生できません。Setting the Accessibility attribute to Internal prevents other classes from deriving from this class.

Abstract 属性は、このクラスのインスタンスを作成できるかどうか、あるいは、このクラスは他のクラスが派生する親クラスとしてのみ使用できるかどうかを定義します。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. この例では、この属性に falseが設定されています。In this example, this attribute is set to false. この属性に true を設定すると、このクラスはインスタンスを直接作成できず、親クラスとしてのみ使用できることを意味します。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.

クラス定義の次のセクションには、クラスのプロパティが含まれます。The next section of the class definition contains the class properties. 次のサンプル コードでは、この例のクラスのプロパティが XML によって定義されています。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"  />  

Property 要素には、次の属性があります。Each Property element has the following attributes:

  • ID 属性は、プロパティの一意の識別子を指定します。The ID attribute, which designates the unique identifier of the property.

  • Type 属性は、プロパティのデータ型を示します。The Type attribute, which indicates the data type of the property.

  • キー属性。The Key attribute. この属性を true に設定すると、このプロパティがこのクラスを一意に識別するのに使用されることを示します。Setting this attribute to true indicates that this property is to be used to uniquely identify this class.

列挙型の作成Creating Enumeration Types

enum データ型の列挙は特別なデータ型です。Enumerations of the enum data type are special data types. 列挙は、あるプロパティに使用できるデータを特別な値セットに制限するために使用されます。Enumerations are used to constrain the data that is allowed for a property to a specific set of values. 列挙には階層を持つことができ、ある列挙が他の列挙に基づくことができます。Enumerations can be hierarchical; one enumeration can be based on another enumeration.

列挙は、ソリューション パックの EnumertionTypes セクションで定義されています。Enumerations are defined in the EnumertionTypes section of a solution pack. 列挙の定義には、ルート列挙と、それに続く実際の列挙値が含まれます。An enumeration definition contains the root enumeration, followed by the actual enumeration values.

EnumerationValue は、いくつかの属性を持つことができます。Each EnumerationValue accepts a few attributes:

この例では、列挙は、プロジェクターの状態を追跡するために定義されています。In this example, an enumeration is defined for keeping track of the condition of the projectors. この列挙を定義しているものは、次のとおりです。The following defines this enumeration:

  • ID は、列挙の識別子または列挙の値です。ID is the identifier for the enumeration or enumeration value.

  • Accessibility は、この列挙子が他の列挙子を含むことができるかどうかを指定します。Accessibility specifies whether this enumerator can contain other enumerators.

  • ParentName は、列挙値の親の ID を指定する属性です。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>  

フォームを作成するCreate a form

Service Manager フォームは、Windows Presentation Framework WPF フォームに基づいてい ( ) ます。Service Manager forms are based on Windows Presentation Framework (WPF) forms. Service Manager は、XML 定義に追加される単純な属性を使用して WPF を拡張し、Service Manager が管理パックからフォームにデータをバインドできるようにします。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 フォームは、Microsoft Visual Studio や Microsoft Expression Blend など、いくつかの異なるツールを使用して作成できます。Service Manager forms can be created by using several different tools, including Microsoft Visual Studio or Microsoft Expression Blend. フォームは XML ベースであるため - 、任意の xml エディターを使用して定義することもできます。Because the forms are XML-based, they can also be defined by using any XML editor.

次の例は、Microsoft Expression Blend を使用して作成されたフォーム定義を示したものです。The following example shows a form definition that was created by using Microsoft Expression Blend. このフォームには、4 つのコントロール、3 つのテキスト ボックス、1 つのコンボ ボックスが含まれ、それらは以前に定義された Projector クラスのプロパティにバインドされています。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>  

フォーム上のコントロールを、管理パックで定義されているクラスのプロパティにバインドできるようにするために、いくつかのアイテムを指定する必要があります。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.

テキスト コントロールのバインドBinding Text Controls

テキストボックスを管理パックのクラスプロパティにバインドするには、テキストボックスコントロールのtextプロパティにバインドパスタグを追加します。次に例を示します。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}  

このタグは、テキストボックスコントロールを、管理パックで定義されたプロジェクタークラスのシリアル設定プロパティにバインドし、これが双方向のバインディングであることを指定し - ます。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. フォームが読み込まれると、プロパティの値がデータベースから取得され、テキスト ボックスに表示されます。ユーザーがプロパティの値を変更すると、その値がデータベースに戻されて保存されます。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.

コンボ ボックスのバインドBinding Combo Boxes

フォームが基になる管理パックから列挙データを取得してフォーム上のコントロールにバインドできるようにするには、ヘルパークラスをフォーム の - 分離コード で定義する必要があります。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. このヘルパー クラスには、管理パックで定義されている列挙を返すメソッドが含む必要があります。This helper class should contain a method that returns an enumeration that is defined in the management pack. 列挙を返すには、現在の管理パックの GetEnumerations メソッドを使用します。To return an enumeration use the GetEnumerations method of the current management pack. このインスタンスには、Service Manager software development kit SDK の ConsoleContextHelper クラスを使用してアクセスし ( ) ます。This instance is accessed with the ConsoleContextHelper class from the Service Manager software development kit (SDK). 次の例では、ヘルパー クラスが、管理パックで定義されている GetStatusValues の値を取得する ProjectorCondition メソッドを定義します。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);  
   }  
}  

このメソッドにアクセスするには、管理パックのフォーム定義でいくつかを定義する必要があります。To access this method, a few things must be defined in the form definition in the management pack.

まず、フォーム定義に、フォームの code behind の名前空間を参照する名前空間を追加します。First, a namespace that points to the namespace for the code behind for the form is added to the form definition. この例では、名前空間は SMFormsDemoです。In this example, the namespace is SMFormsDemo:

xmlns:local="clr-namespace:SMFormsDemo"  

次に、プロジェクターの状態を表示するコンボ ボックスに値を提供する ObjectDataProvider を定義する必要があります。Next, an ObjectDataProvider must be defined to provide the values for the combo box that displays the projector status. この ObjectDataProvider は、リソースとして定義されています。This ObjectDataProvider is defined as a resource:


<UserControl.Resources>  
   <ObjectDataProvider   
      ObjectType="{x:Type local:helper}"    
      MethodName="GetStatusValues"   
      x:Key="getStatusValues" />  
</UserControl.Resources>  

このデータ プロバイダーは、管理パックから列挙値を取得するオブジェクトとメソッドの名前を指定します。This data provider specifies the object and method name that retrieves the enumeration values from the management pack.

最後に、コンボ ボックスを管理パックで定義されている列挙値にバインドするために、コンボ ボックスの定義に ItemsSource 属性を追加します。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. この属性は、次の例のように、列挙値をどこから取得するのかを指定します。This attribute specifies where to retrieve the enumeration values, for example:

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

次に、 SelectedItem 要素と ItemTemplate 要素を、 ( ) コンボボックスコントロールの Extensible Application Markup Language XAML 定義に追加します。Next, SelectedItem and ItemTemplate elements are added to the Extensible Application Markup Language (XAML) definition of the combo box control. 次の例は、バインドする XAML が含まれるコンボ ボックス定義を示したものです。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>  

Category セクションThe Category section

管理パックの Category セクションは、より簡単に移動できるように、管理パック要素をグループに分けます。The Category section of a management pack groups management pack elements together for easier navigation.

この例の最初の2つの <Category> 要素は、プロジェクタービューでの新しいタスクと編集タスクの表示を制御するために使用されます。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" />  

例の管理パックの2つ目のカテゴリの要素を使用して、プロジェクターの条件の列挙が、Service Manager コンソールの [作成] ウィンドウの [リスト] ビューに表示されるようにします。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. これによって、ユーザーが値をカスタマイズできるようになります。This enables the user to customize the values:

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

次の例では、このカテゴリを追加することで、 Target 属性で示されている EnumerationValue について、 [編集] タスクを [リスト] ビューに表示しています。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"/>  

Presentation セクションThe Presentation section

管理パックの Presentation セクションでは、ユーザーインターフェイスに - 関連する要素を宣言して定義し - ます。The Presentation section of a management pack declares and defines user-interface-related elements. これには、フォームの宣言、カテゴリ、コンソール タスクが含まれます。These include forms declarations, categories, and console tasks.

Forms セクションThe Forms Section

Forms セクションでは、管理パックによって使用されるフォームを宣言します。The Forms section declares forms that are used by your management pack. 次の例では、 Projector クラスのインスタンスの表示と編集を定義するフォームの場所が指定されています。The following example specifies where to find the form that is defined to display and edit instances of the Projector class. これによって、フォームが、管理パックで定義されている Projector クラスにバインドされます。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>  

前の例では、次の属性が使用されています。The following attributes are used in the preceding example:

  • TypeName 属性は、フォームの名前空間とクラス名を含みます。The TypeName attribute contains the namespace and class name of the form.

  • ID 属性は、このフォームのインスタンスの一意の識別子を含みます。The ID attribute contains the unique identifier of this form instance.

  • Target 属性は、このフォームがバインドされるクラスの名前を含みます。The Target attribute contains the name of the class that this form is bound to.

  • Assembly 属性は、フォームが含まれる外部リソースを参照します。The Assembly attribute points to the external resource that contains the form.

  • Accessibility 属性は、このフォームがカスタマイズ可能かどうかを定義します。The Accessibility attribute defines whether this form can be customized.

ビューの定義Defining a View

管理パックの views セクションには、ユーザーインターフェイスの UI ビューの定義が含まれてい ( ) ます。The Views section of a management pack contains definitions of user interface (UI) views. これらのビューは、管理パックのオブジェクトのフィルター処理と表示に使用できます。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>  

View Target 属性は、ビューの表示に使用されるクラスを参照します。The View Target attribute points to the class that the view will be used to display.

前の例では、Service Manager コンソール管理パックが参照されています。In the preceding example, the Service Manager Console management pack is referenced. この管理パックには、使用されるビューの種類の型が含まれています。This management pack contains a definition of a view type being used. このインスタンスでは、 Smconsole ! gridviewtype ビューの種類が定義されています。In this instance, the SMConsole!GridViewType view type is defined.

AdvancedListSupportClass はいくつかのパラメーターを定義しますが、そのうち最も重要な TargetClass パラメーターを定義しています。The AdvancedListSupportClass defines a number of parameters, the most important of which is the TargetClass parameter. このパラメーターを、このビューで表示される IDClassType に設定します。Set this parameter to the ID of the ClassType that will appear in this view. ClassTypeのプロパティを列に表示するには、 Column 要素を使用して、 PropertyID 属性にバインドします。To display the columns that are properties of the ClassType, use the Column element and bind it to the PropertyID attribute.

Listsupportclass要素のisrecurring属性は、ビューが自動的に更新されるかどうかを決定し - ます。The IsRecurring attribute of the ListSupportClass element determines whether the view auto-refreshes. RecurrenceFrequency 属性は、更新間隔をミリ秒で定義します。The RecurrenceFrequency attribute defines the refresh interval in milliseconds. この例では、更新間隔は 1 秒に設定されていますが、これは運用環境のインストールには推奨されません。In this example, the refresh interval is set to 1 second, but that is not recommended for production installations.

フォルダーの定義Defining Folders

フォルダーの定義は、ビューに表示されるナビゲーション ツリーの場所を決定します。Defining a folder determines the location in the navigation tree in which the view is displayed. この例では、[ 構成アイテム ] ワークスペースの構成アイテム用の既存フォルダー下のみにビューが適切に配置されるように、構成アイテムが定義されています。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>  

前の例では、 ElementID 属性に、作成されたビューへの参照が含まれています。In the preceding example, the ElementID attribute contains a reference to the view that was created. フォルダー属性は、Folders フォルダーを指します。このフォルダーには、Service Manager コンソールの [構成管理] ワークスペースで定義されているようにルートがあります 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. このルート フォルダーは、構成管理の管理パックで定義されています。This root folder is defined in the Configuration Management management pack.

ImageReference 要素は、以前に作成されたビューを Configuration Management 名前空間で定義されているアイコンにマップします。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>  

LanguagePacks セクションを利用したローカライズLocalization Using the LanguagePacks Section

管理パックの LanaguagePacks セクションでは、管理パック要素の文字列リソースとマッピングを定義します。The LanaguagePacks section of a management pack defines string resources and mappings for management pack elements.

この例では、 EnumerationValueProjectorCondition正常に動作している必要があります。In the example, the EnumerationValueProjectorCondition.Working must appear as Working. このためには、次のそれぞれに表示名を定義する必要があります。To do this, display names for each of the following must be defined:

  • ビュー:すべてのプロジェクトView: All projectors

  • 列挙: Working、Broken、In Repair、NewEnumerations: 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>  

必要に応じて、各追加言語の追加 LanguagePack 要素を作成できます。You can create additional LanguagePack elements, as necessary, for each additional language you require. ユーザーのロケールに基づいて、正しい表示文字列がユーザーに表示されます。The correct display string appears to the user based on the user's locale.

リソースResources

管理パックの Resources セクションには、管理パックから独立したアセンブリに含まれるバイナリ リソースへの参照があります。The Resources section of a management pack contains references to binary resources, which are contained in assemblies that are separate from the management pack. 次の例では、 Projector クラスによって使用されるフォームを含むアセンブリを参照するリソースが定義されています。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" />  

クラス拡張Class extensions

クラス拡張は、既存のクラスにプロパティを追加するクラスです。A class extension is a class that adds properties to an existing class. ほとんどの場合、この既存クラスは封印された管理パックにあります。In most cases, this existing class is in a sealed management pack. 既存のクラスが封印された管理パックにない場合は、クラス拡張は、拡張元のクラスと同じ管理パックに含まれている必要があります。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.

クラス拡張は、親クラスのプロパティを継承します。次に例を示します。A class extension inherits the properties of any parent classes, for example:

  • クラス A には Property1 というプロパティがあります。Class A has a property called Property1

  • クラス B はクラス A から派生または拡張されるため、Property1 というプロパティを持ちます。Class B derives from, or extends, Class A and therefore has a property called Property1. このプロパティは、クラス A、親、または基本クラスから継承されます。)This property is inherited from Class A, the parent, or base class)

  • クラス B の定義は、Property2 というプロパティを追加します。The definition of Class B adds a property called Property2.

  • クラス B から派生するクラス拡張はすべて、 Property1 と Property2 を継承します。Any class extension that derives from Class B will inherit Property1 and Property2.

    次の例は、クラス拡張の定義を示すものです。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>  

このクラス拡張は、 System.WorkItem.Incident クラスを拡張し、 TimeOnIncidentと呼ばれる新しいプロパティを追加します。This class extension extends the System.WorkItem.Incident class and adds a new property called TimeOnIncident.

クラス拡張の定義は、クラス定義に類似します。The definition for a class extension is similar to that of a class definition. クラス定義を定義するのに、 ClassType 要素の 2 つの属性である Base 属性と IsExtensionType 属性が使用されます。Two attributes of the ClassType element are used to define a class definition: the Base attribute and the IsExtensionType attribute.

Base 属性は、クラス拡張の派生元の親クラスの ID を指定します。The Base attribute specifies the ID of the parent class from which the class extension derives. このインスタンスでは、属性値は インシデント ! システム. WorkItem. incidentに設定されています。In this instance, the attribute value is set to Incident!System.WorkItem.Incident. この値には、拡張対象のクラスを含む完全な管理パック名の Alias 、感嘆符、基本クラスの名前が含まれます。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. 詳細については、次の例を参照してください。For more information, see the following example.

IsExtensionType 属性は、このクラスが基本クラスの拡張であるかどうかを定義します。The IsExtensionType attribute defines whether this class is an extension of the base class. TimeOnIncidentIncident クラスの拡張であるため、このプロパティは trueに設定されます。Because TimeOnIncident is an extension to the Incident class, this property is set to true:

IsExtensionType="true"  

もう 1 つのオプションである falseは、別のクラスの拡張ではなく、基本クラスを継承する新規クラスであることを示します。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. 既定値は falseです。そのため、クラスが拡張でない場合は、この属性は使用する必要はありません。The default value is false; therefore, this attribute does not have to be used if the class is not an extension.

完全な例Full Example

次のコード例は、クラス拡張を含む完全な管理パックを示しています。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>  

コマンドレットを使用して管理パックをインポートするImport a management pack by using a cmdlet

Windows   PowerShell インポート - scsmmanagementpack コマンドレットを使用して、Service Manager 管理パックをインポートできます。次に例を示します。You can use the Windows PowerShell Import-SCSMManagementPack cmdlet to import a Service Manager management pack, for example:

Import-SCSMManagementPack MyServiceManager.ManagementPack.xml  

このドキュメントでは、Service Manager コンソールで管理パックをインポートして使用する方法については説明しません。This document does not describe how to import and use management packs in the Service Manager console. Service Manager コンソールでの管理パックの使用の詳細については、「 Service Manager での管理パックの使用」を参照してください。For information about using management packs in the Service Manager console, see Using Management Packs in Service Manager.

完全な管理パックの例Full management pack example

次のコード例は、フォーム定義とフォームの C コードビハインドに加えて、このトピックの例で使用される完全なサンプル管理パックを表してい # - ます。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.

管理パックManagement Pack

<ManagementPack ContentReadable="true" SchemaVersion="1.1" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">  
  <Manifest>  
    <Identity>  
      <ID>ServiceManager.Projector</ID>  
      <Version>7.0.3707.0</Version>  
    </Identity>  
    <Name>Projector Library</Name>  
    <References>  
      <Reference Alias="SMConsole">  
        <ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Console</ID>  
        <Version>7.0.3707.0</Version>  
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>  
      </Reference>  
      <Reference Alias="Authoring">  
        <ID>Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring</ID>  
        <Version>7.0.3707.0</Version>  
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>  
      </Reference>  
      <Reference Alias="System">  
        <ID>System.Library</ID>  
        <Version>7.0.3707.0</Version>  
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>  
      </Reference>  
      <Reference Alias="SMConfig">  
        <ID>ServiceManager.ConfigurationManagement.Library</ID>  
        <Version>7.0.3707.0</Version>  
        <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>  
      </Reference>  
    </References>  
  </Manifest>  
  <TypeDefinitions>  
    <EntityTypes>  
      <ClassTypes>  
        <ClassType ID="System.ConfigItem.Projector" Accessibility="Public" Abstract="false" Base="System!System.ConfigItem" Hosted="false" Singleton="false" Extension="false">  
          <Property ID="SerialNumber" Type="int" Key="true" />  
          <Property ID="Make" Type="string" />  
          <Property ID="Model" Type="string" />  
          <Property ID="Location" Type="string" />  
          <Property ID="Condition" Type="enum" EnumType="ProjectorCondition" />  
        </ClassType>  
      </ClassTypes>  
      <EnumerationTypes>  
        <EnumerationValue ID="ProjectorCondition" Accessibility="Public" />  
        <EnumerationValue ID="ProjectorCondition.Working" Accessibility="Public" Parent="ProjectorCondition" />  
        <EnumerationValue ID="ProjectorCondition.BeingRepaired" Accessibility="Public" Parent="ProjectorCondition" />  
        <EnumerationValue ID="ProjectorCondition.New" Accessibility="Public" Parent="ProjectorCondition" />  
        <EnumerationValue ID="ProjectorCondition.Broken" Accessibility="Public" Parent="ProjectorCondition" />  
        <EnumerationValue ID="ProjectorViewTasksEnumeration" Accessibility="Public" />  
      </EnumerationTypes>  
    </EntityTypes>  
  </TypeDefinitions>  
  <Categories>  
    <Category ID="AllProjectorsView.Category" Target="AllProjectorsView" Value="SMConsole!Microsoft.EnterpriseManagement.ServiceManager.UI.Console.ViewTasks" />  
    <Category ID="ProjectorViewHasTasks.CreateTask" Target="AllProjectorsView" Value="Authoring!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.CreateTypeCategory" />  
    <Category ID="Projector.ProjectorConditionCategory" Target="ProjectorCondition" Value="Authoring!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.EnumerationViewTasks" />  
    <Category ID="Project.ProjectorConditionEnumVisibleCategory" Target="ProjectorCondition" Value="System!VisibleToUser" />  
  </Categories>  
  <Presentation>  
    <Forms>  
      <Form ID="TestForm" Accessibility="Public" Target="System.ConfigItem.Projector" Assembly="ProjectorFormsAssembly" TypeName="New_CI_lab.TestControl">  
        <Category>Form</Category>  
      </Form>  
    </Forms>  
    <Views>  
      <View ID="AllProjectorsView" Accessibility="Public" Enabled="true" Target="System.ConfigItem.Projector" TypeID="SMConsole!GridViewType" Visible="true">  
    <Category>NotUsed</Category>  
    <Data>  
    <Adapters>  
    <Adapter AdapterName="dataportal:EnterpriseManagementObjectAdapter">  
    <AdapterAssembly>Microsoft.EnterpriseManagement.UI.SdkDataAccess</AdapterAssembly>  
    <AdapterType>Microsoft.EnterpriseManagement.UI.SdkDataAccess.DataAdapters.EnterpriseManagementObjectAdapter</AdapterType>  
    </Adapter>  
    <Adapter AdapterName="viewframework://adapters/AdvancedList">  
    <AdapterAssembly>Microsoft.EnterpriseManagement.UI.ViewFramework</AdapterAssembly>  
    <AdapterType>Microsoft.EnterpriseManagement.UI.ViewFramework.AdvancedListSupportAdapter</AdapterType>  
    </Adapter>  
    <Adapter AdapterName="omsdk://Adapters/Criteria">  
    <AdapterAssembly>Microsoft.EnterpriseManagement.UI.SdkDataAccess</AdapterAssembly>  
    <AdapterType>Microsoft.EnterpriseManagement.UI.SdkDataAccess.DataAdapters.SdkCriteriaAdapter</AdapterType>  
    </Adapter>  
    </Adapters>  
    <ItemsSource>  
    <AdvancedListSupportClass DataTypeName="" AdapterName="viewframework://adapters/AdvancedList" FullUpdateAdapter="dataportal:EnterpriseManagementObjectAdapter" FullUpdateFrequency='1' DataSource="mom:ManagementGroup"   
  IsRecurring="true" RecurrenceFrequency="5000"  Streaming='true' xmlns="clr-namespace:Microsoft.EnterpriseManagement.UI.ViewFramework;assembly=Microsoft.EnterpriseManagement.UI.ViewFramework" xmlns:av="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" >  
    <AdvancedListSupportClass.Parameters>  
                <QueryParameter Parameter="TargetClass" Value="System.ConfigItem.Projector"/>  
    </AdvancedListSupportClass.Parameters>  
    </AdvancedListSupportClass>  
    </ItemsSource>  
    <Criteria />  
    </Data>  
    <Presentation>  
    <Columns>  
<mux:ColumnCollection xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:mux="https://schemas.microsoft.com/SystemCenter/Common/UI/Views/GridView" xmlns:s="clr-namespace:System;assembly=mscorlib">  
              <mux:Column Name="SerialNumber" DisplayMemberBinding="{Binding Path=SerialNumber}" Width="100" DisplayName="SerialNumber" Property="SerialNumber" DataType="s:Int32" />  
              <mux:Column Name="Location" DisplayMemberBinding="{Binding Path=Location}" Width="100" DisplayName="Location" Property="Location" DataType="s:String" />  
              <mux:Column Name="Condition" DisplayMemberBinding="{Binding Path=Condition.DisplayName}" Width="100" DisplayName="Condition" Property="Condition.DisplayName" DataType="s:String" />  
              <mux:Column Name="DisplayName" DisplayMemberBinding="{Binding Path=DisplayName}" Width="100" DisplayName="Display Name" Property="DisplayName" DataType="s:String" />  
              <mux:Column Name="OwnerUser" DisplayMemberBinding="{Binding Path=OwnerUser.DisplayName}" Width="100" DisplayName="SupportOwner" Property="OwnerUser.DisplayName" DataType="s:String" />  
            </mux:ColumnCollection>      
    </Columns>  
    </Presentation>  
    </View>  
    </Views>  
    <Folders>  
      <Folder ID="Folder.Projectors" Accessibility="Public" ParentFolder="SMConfig!ServiceManager.Console.ConfigurationManagement.ConfigItem.Root" />  
    </Folders>  
    <FolderItems>  
      <FolderItem ElementID="AllProjectorsView" ID="FolderItem.AllProjectors" Folder="Folder.Projectors" />  
    </FolderItems>  
    <ImageReferences>  
      <ImageReference ElementID="Folder.Projectors" ImageID="SMConfig!ConfigItemImage16x16" />  
      <ImageReference ElementID="AllProjectorsView" ImageID="SMConfig!ConfigItemImage16x16" />  
    </ImageReferences>  
  </Presentation>  
  <LanguagePacks>  
    <LanguagePack ID="ENU" IsDefault="true">  
      <DisplayStrings>  
    <DisplayString ElementID="System.ConfigItem.Projector">  
    <Name>Projector</Name>  
    </DisplayString>  
        <DisplayString ElementID="Folder.Projectors">  
          <Name>Projectors</Name>  
          <Description>This is the Projector Folder</Description>  
        </DisplayString>  
        <DisplayString ElementID="AllProjectorsView">  
          <Name>All Projectors</Name>  
          <Description>This displays all projectors</Description>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.Working">  
          <Name>Working</Name>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.Broken">  
          <Name>Broken</Name>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.BeingRepaired">  
          <Name>In Repair</Name>  
        </DisplayString>  
        <DisplayString ElementID="ProjectorCondition.New">  
          <Name>New</Name>  
        </DisplayString>  
      </DisplayStrings>  
    </LanguagePack>  
  </LanguagePacks>  
  <Resources>  
    <Assembly ID="ProjectorFormsAssembly" Accessibility="Public" FileName="New_CI_lab.dll" QualifiedName="New_CI_lab, Version=0.0.0.0" />  
  </Resources>  
</ManagementPack>  

フォーム定義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>  

フォームの - 分離コードForm 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);  
      }  
   }  
}  

次のステップNext steps