管理パック ファイルの直接的作成によるプロジェクターの管理
公開日: 2016年7月
対象: System Center 2012 SP1 - Service Manager、System Center 2012 R2 Service Manager、System Center 2012 - Service Manager
管理パックは、System Center 2012 – Service Manager の機能の管理と拡張に使用されます。 このトピックでは、プロジェクターを例にして、管理パックのさまざまなセクションと、組織でプロジェクターを管理するのに必要なさまざまなオブジェクトの定義を説明します。
このトピックには、組織のプロジェクターの管理に必要な拡張が加えられた完全な管理パックの例が含まれます。 また、Windows PowerShell コマンドレットを使用して、管理パックをインポートする方法についても説明します。
このトピックでは、管理パックの次のセクションについて説明します。
Manifest
TypeDefinitions (クラス列挙とリレーションシップの作成に使用)
フォーム
このトピックでは、ユーザー インターフェイス (UI) とローカライズ要素の宣言と定義を含む管理パックの次のセクションについても説明します。
カテゴリ
Presentation
クラス拡張
Manifest セクション
管理パックの最初のセクションにはマニフェストが含まれます。 マニフェストは管理パックを識別し、他の管理パックへの参照を宣言します。
次の例は、組織のプロジェクターを追跡するように設計された管理パックの Manifest セクションを示したものです。
<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>
重要 |
---|
|
TypeDefinitions セクション—クラスの作成
管理パックの次のセクションには、型の定義が含まれます。 管理パックの TypeDefinitions セクションには、管理パックで使用されるクラス、列挙およびリレーションシップの定義が含まれます。
次の例は、プロジェクターについての情報を含むクラスを示したものです。
<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>
次に、型の定義の内容をセクションごとに説明します。
ClassTypes セクション
ClassType 要素がプロジェクターのクラスを定義します。
<ClassType ID="System.ConfigItem.Projector" Base="System!System.ConfigItem" Hosted="false" Accessibility="Public" Abstract="false">
ID 属性がこのクラスの一意の識別子です。 次のように設定されています。
ID="System.ConfigItem.Projector"
Base 属性は、このクラスの派生元クラスの ID です。 プロジェクターは構成アイテムの一種なので、次のように設定されています。
Base="System!System.ConfigItem"
System! の表記は、このクラス (System.ConfigItem) が管理パックでは System というエイリアスで参照されることを示しています。
Hosted 属性は、このクラスが他のクラスによってホストされているかどうかを定義します。 ホストされている場合、このクラスのインスタンスは、それを含むホスト インスタンスが存在するときのみ存在できます。 この例では、プロジェクターをホストするものはありません。そのため、Hosted 属性には false が設定されています。
Hosted="false"
Hosted 属性に true を設定すると、そのクラスが別のクラスにホストされていることを示します。 ホスト リレーションシップは、RelationshipTypes セクションで宣言されなければなりません。
Accessibility 属性は、このクラスから他のクラスが派生できるかどうかを定義します。 他が、クラスのより特化したバージョンを作成することを許可する場合には、次の例のように、この属性に public を設定します。
Accessibility="Public"
Accessibility 属性に Internal を設定すると、他のクラスがこのクラスから派生できません。
Abstract 属性は、このクラスのインスタンスを作成できるかどうか、あるいは、このクラスは他のクラスが派生する親クラスとしてのみ使用できるかどうかを定義します。 この例では、この属性に false が設定されています。 この属性に true を設定すると、このクラスはインスタンスを直接作成できず、親クラスとしてのみ使用できることを意味します。
クラス定義の次のセクションには、クラスのプロパティが含まれます。 次のサンプル コードでは、この例のクラスのプロパティが XML によって定義されています。
<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 要素には、次の属性があります。
ID 属性は、プロパティの一意の識別子を指定します。
Type 属性は、プロパティのデータ型を示します。
Key 属性。 この属性を true に設定すると、このプロパティがこのクラスを一意に識別するのに使用されることを示します。
列挙型の作成
enum データ型の列挙は特別なデータ型です。 列挙は、あるプロパティに使用できるデータを特別な値セットに制限するために使用されます。 列挙には階層を持つことができ、ある列挙が他の列挙に基づくことができます。
列挙は、ソリューション パックの EnumertionTypes セクションで定義されています。 列挙の定義には、ルート列挙と、それに続く実際の列挙値が含まれます。
各 EnumerationValue は、いくつかの属性を持つことができます。
この例では、列挙は、プロジェクターの状態を追跡するために定義されています。 この列挙を定義しているものは、次のとおりです。
ID は、列挙の識別子または列挙の値です。
Accessibility は、この列挙子が他の列挙子を含むことができるかどうかを指定します。
ParentName は、列挙値の親の ID を指定する属性です。
<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>
フォームの作成
Service Manager フォームは Windows Presentation Framework (WPF) フォームをベースにします。Service Manager は、XML 定義に簡単な属性を追加して WPF を 拡張し、Service Manager が管理パックからデータをフォームにバインドできるようにします。
Service Manager フォームは、Microsoft Visual Studio や Microsoft Expression Blend を含む複数のさまざまなツールを使用して作成できます。 フォームは XML ベースのため、どんな XML エディターを使用しても定義できます。
次の例は、Microsoft Expression Blend を使用して作成されたフォーム定義を示したものです。 このフォームには、4 つのコントロール、3 つのテキスト ボックス、1 つのコンボ ボックスが含まれ、それらは以前に定義された Projector クラスのプロパティにバインドされています。
<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="https://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>
フォーム上のコントロールを、管理パックで定義されているクラスのプロパティにバインドできるようにするために、いくつかのアイテムを指定する必要があります。
テキスト コントロールのバインド
テキスト ボックスを管理パックのクラスのプロパティにバインドするには、たとえば、テキスト ボックス コントロールの Binding Path プロパティに Text タグを追加します。
{Binding Path=SerialNumber, Mode=TwoWay}
このタグは、テキスト ボックスを、管理パックで定義された Projector クラスの SerialNumber プロパティにバインドし、これが双方向バインドであることを指定します。 フォームが読み込まれると、プロパティの値がデータベースから取得され、テキスト ボックスに表示されます。ユーザーがプロパティの値を変更すると、その値がデータベースに戻されて保存されます。
コンボ ボックスのバインド
フォームがその基本である管理パックから列挙データを取得して、フォーム上のコントロールにバインドできるようにするには、フォームの code-behind でヘルパー クラスを定義する必要があります。 このヘルパー クラスには、管理パックで定義されている列挙を返すメソッドが含む必要があります。 列挙を返すには、現在の管理パックの GetEnumerations メソッドを使用します。 このインスタンスは、Service Manager ソフトウェア開発キット (SDK) から ConsoleContextHelper クラスを使用してアクセスされます。 次の例では、ヘルパー クラスが、管理パックで定義されている GetStatusValues の値を取得する ProjectorCondition メソッドを定義します。
public class helper
{
public static ICollection<IDataItem> GetStatusValues()
{
return ConsoleContextHelper.Instance.GetEnumerations("ProjectorCondition",true);
}
}
このメソッドにアクセスするには、管理パックのフォーム定義でいくつかを定義する必要があります。
まず、フォーム定義に、フォームの code behind の名前空間を参照する名前空間を追加します。 この例では、名前空間は SMFormsDemo です。
xmlns:local="clr-namespace:SMFormsDemo"
次に、プロジェクターの状態を表示するコンボ ボックスに値を提供する ObjectDataProvider を定義する必要があります。 この ObjectDataProvider は、リソースとして定義されています。
<UserControl.Resources>
<ObjectDataProvider
ObjectType="{x:Type local:helper}"
MethodName="GetStatusValues"
x:Key="getStatusValues" />
</UserControl.Resources>
このデータ プロバイダーは、管理パックから列挙値を取得するオブジェクトとメソッドの名前を指定します。
最後に、コンボ ボックスを管理パックで定義されている列挙値にバインドするために、コンボ ボックスの定義に ItemsSource 属性を追加します。 この属性は、次の例のように、列挙値をどこから取得するのかを指定します。
ItemsSource="{Binding Source={StaticResource getStatusValues}, Mode=OneWay }"
次に、SelectedItem 要素と ItemTemplate 要素を、コンボ ボックス コントロールの Extensible Application Markup Language (XAML) 定義に追加します。 次の例は、バインドする XAML が含まれるコンボ ボックス定義を示したものです。
<ComboBox Margin="180,180,80,0" HorizontalAlignment="Left" VerticalAlignment="Top" Width="160" Height="25" ItemsSource="{Binding Source={StaticResource getStatusValues}, Mode=OneWay }" IsSynchronizedWithCurrentItem="True">
<ComboBox.SelectedItem>
<Binding Path="Condition" Mode="TwoWay" UpdateSourceTrigger="PropertyChanged"/>
</ComboBox.SelectedItem>
<ComboBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=DisplayName}"/>
</StackPanel>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
Category セクション
管理パックの Category セクションは、より簡単に移動できるように、管理パック要素をグループに分けます。
例にある最初の 2 つの <Category> 要素は、[プロジェクター] ビューでの [新規] タスクと [編集] タスクの表示を制御するのに使用されます。
<Category ID="ProjectorViewHasTasks.View" Target="AllProjectorsView" Value="ProjectorViewTasksEnumeration" />
<Category ID="ProjectorViewHasTasks.CreateTask" Target="CreateProjector" Value="ProjectorViewTasksEnumeration" />
例の管理パックの 2 番目の 2 つの Category 要素は、Service Manager コンソール の [作成] ウィンドウの [リスト] ビューにプロジェクターの条件一覧を表示するために使用されます。 これによって、ユーザーが値をカスタマイズできるようになります。
<Category ID="Project.ProjectorConditionEnumVisibleCategory" Target="ProjectorCondition" Value="System!VisibleToUser"/>
次の例では、このカテゴリを追加することで、Target 属性で示されている EnumerationValue について、[編集] タスクを [リスト] ビューに表示しています。
<Category ID="Projector.ProjectorConditionCategory" Target="ProjectorCondition" Value="Authoring!Microsoft.EnterpriseManagement.ServiceManager.UI.Authoring.EnumerationViewTasks"/>
Presentation セクション
管理パックの Presentation セクションでは、ユーザー インターフェイスに関連する要素の宣言と定義を行います。 これには、フォームの宣言、カテゴリ、コンソール タスクが含まれます。
Forms セクション
Forms セクションでは、管理パックによって使用されるフォームを宣言します。 次の例では、Projector クラスのインスタンスの表示と編集を定義するフォームの場所が指定されています。 これによって、フォームが、管理パックで定義されている Projector クラスにバインドされます。
<Forms>
<Form TypeName="SMFormsDemo.TestControl"
ID="TestForm"
Target="System.ConfigItem.Projector"
Assembly="ProjectorFormsAssembly"
Accessibility="Public">
<Category>Form</Category>
</Form>
</Forms>
前の例では、次の属性が使用されています。
TypeName 属性は、フォームの名前空間とクラス名を含みます。
ID 属性は、このフォームのインスタンスの一意の識別子を含みます。
Target 属性は、このフォームがバインドされるクラスの名前を含みます。
Assembly 属性は、フォームが含まれる外部リソースを参照します。
Accessibility 属性は、このフォームがカスタマイズ可能かどうかを定義します。
ビューの定義
管理パックの Views セクションには、ユーザー インターフェイス (UI) ビューの定義が含まれます。 これらのビューは、管理パックのオブジェクトのフィルター処理と表示に使用できます。
<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 属性は、ビューの表示に使用されるクラスを参照します。
前の例では、Service Manager コンソール管理パックが参照されています。 この管理パックには、使用されるビューの種類の型が含まれています。 このインスタンスでは、SMConsole!GridViewType ビューの型が定義されています。
AdvancedListSupportClass はいくつかのパラメーターを定義しますが、そのうち最も重要な TargetClass パラメーターを定義しています。 このパラメーターを、このビューで表示される ID の ClassType に設定します。ClassType のプロパティを列に表示するには、Column 要素を使用して、PropertyID 属性にバインドします。
IsRecurring 要素の ListSupportClass 属性は、ビューが自動的に最新の情報に更新されるかどうかを決定します。RecurrenceFrequency 属性は、更新間隔をミリ秒で定義します。 この例では、更新間隔は 1 秒に設定されていますが、これは運用環境のインストールには推奨されません。
フォルダーの定義
フォルダーの定義は、ビューに表示されるナビゲーション ツリーの場所を決定します。 この例では、[構成アイテム] ワークスペースの構成アイテム用の既存フォルダー下のみにビューが適切に配置されるように、構成アイテムが定義されています。
<Folders>
<Folder ID="Folder.Projectors" Accessibility="Public" ParentFolder="SMConfig!ServiceManager.Console.ConfigurationManagement.ConfigItem.Root" />
</Folders>
<FolderItems>
<FolderItem
ElementID="AllProjectorsView"
Folder="Folder.Projectors" />
</FolderItems>
前の例では、ElementID 属性に、作成されたビューへの参照が含まれています。Folder 属性は、Folders.Projectorsの [構成管理] ワークスペースでそのルートが定義されている、Service Manager コンソール フォルダーを参照しています。 このルート フォルダーは、構成管理の管理パックで定義されています。
ImageReference 要素は、以前に作成されたビューを Configuration Management 名前空間で定義されているアイコンにマップします。
<ImageReferences>
<ImageReference ElementID="Folder.Projectors" ImageID="SMConfig!ConfigItemImage16x16" />
<ImageReference ElementID="AllProjectorsView" ImageID="SMConfig!ConfigItemImage16x16" />
</ImageReferences>
LanguagePacks セクションを利用したローカライズ
管理パックの LanaguagePacks セクションでは、管理パック要素の文字列リソースとマッピングを定義します。
この例では、EnumerationValueProjectorCondition.Working は Working と表示されます。 このためには、次のそれぞれに表示名を定義する必要があります。
ビュー:すべてのプロジェクト
列挙: 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 要素を作成できます。 正しい文字列が、ユーザーのロケールに基づいてユーザーに表示されます。
リソース
管理パックの Resources セクションには、管理パックから独立したアセンブリに含まれるバイナリ リソースへの参照があります。 次の例では、Projector クラスによって使用されるフォームを含むアセンブリを参照するリソースが定義されています。
<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" />
クラス拡張
クラス拡張は、既存のクラスにプロパティを追加するクラスです。 ほとんどの場合、この既存クラスは封印された管理パックにあります。 既存のクラスが封印された管理パックにない場合は、クラス拡張は、拡張元のクラスと同じ管理パックに含まれている必要があります。
クラス拡張は、親クラスのプロパティを継承します。次に例を示します。
クラス A には Property1 というプロパティがあります。
クラス B はクラス A から派生または拡張されるため、Property1 というプロパティを持ちます。 このプロパティは、クラス A (親または基本クラス) から継承されます。
クラス B の定義は、Property2 というプロパティを追加します。
クラス B から派生するクラス拡張はすべて、 Property1 と Property2 を継承します。
次の例は、クラス拡張の定義を示すものです。
<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 と呼ばれる新しいプロパティを追加します。
クラス拡張の定義は、クラス定義に類似します。 クラス定義を定義するのに、ClassType 要素の 2 つの属性である Base 属性と IsExtensionType 属性が使用されます。
Base 属性は、クラス拡張の派生元の親クラスの ID を指定します。 この場合、属性値は Incident!System.WorkItem.Incident に設定されます。 この値には、拡張対象のクラスを含む完全な管理パック名の Alias、感嘆符、基本クラスの名前が含まれます。 詳細については、次の例を参照してください。
IsExtensionType 属性は、このクラスが基本クラスの拡張であるかどうかを定義します。TimeOnIncident は Incident クラスの拡張であるため、このプロパティは true に設定されます。
IsExtensionType="true"
もう 1 つのオプションである false は、別のクラスの拡張ではなく、基本クラスを継承する新規クラスであることを示します。 既定値は false です。そのため、クラスが拡張でない場合は、この属性は使用する必要はありません。
完全な例
次のコード例は、クラス拡張を含む完全な管理パックを示しています。
<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>
Windows PowerShell コマンドレットの使用による管理パックのインポート
Windows PowerShell Import-SCSMManagementPack コマンドレットを使用して、Service Manager 管理パックをインポートできます。次に例を示します。
Import-SCSMManagementPack MyServiceManager.ManagementPack.xml
このドキュメントでは、Service Manager コンソールを使用して管理パックをインポートして使用する方法については説明しません。Service Manager コンソールでの管理パックの使用については、「Using Management Packs in System Center 2012 - Service Manager (System Center 2012 - Service Manager での管理パックの使用)」を参照してください。
例:完全な管理パック
次のコード例は、フォーム定義とフォームの C# 分離コードに加えて、このトピックの例として使用されている完全な管理パックのサンプルを示しています。
管理パック
<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>
フォーム定義
<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="https://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>
フォームの分離コード
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);
}
}
}