直接撰寫管理組件檔案以管理投影機
發行︰ 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 Cmdlet 匯入管理組件。
本主題說明管理組件的下列區段:
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 屬性是此類別衍生來源類別的唯一識別碼。 因為投影機是一種設定項目,所以此屬性設定為:
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 使用簡單的屬性來擴充 WPF,這些簡單屬性已新增到 XML 定義中,且可讓 Service Manager 將資料從管理組件繫結到表單。
Service Manager 表單可以使用幾種不同的工具來建立,包括 Microsoft Visual Studio 或 Microsoft Expression Blend。 由於這些表單是 XML 格式,因此也可以使用任何 XML 編輯器來定義。
下列範例顯示使用 Microsoft Expression Blend 建立的表單定義。 這個表單包含四個控制項 (三個文字方塊和一個下拉式方塊),繫結至先前定義的 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 方法。 這個執行個體是使用 ConsoleContextHelper 類別從 Service Manager 軟體開發套件 (SDK) 擷取。 在下列範例中,協助程式類別定義一個 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 元件會新增到下拉式方塊控制項的可延伸應用程式標記語言 (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 區段會將管理組件元素群組在一起,以方便瀏覽。
範例中的前兩個 <Category> 元素是用來控制 [投影機] 檢視中 [新增] 和 [編輯] 工作的顯示。
<Category ID="ProjectorViewHasTasks.View" Target="AllProjectorsView" Value="ProjectorViewTasksEnumeration" />
<Category ID="ProjectorViewHasTasks.CreateTask" Target="CreateProjector" Value="ProjectorViewTasksEnumeration" />
範例管理組件中的後面兩個 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>
[檢視目標] 屬性指向要使用檢視顯示的類別。
前面的範例中參照了 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 資料夾,該資料夾的 Root 如同 Service Manager 主控台 的 [設定管理] 工作區中所定義。 這個根資料夾是在 Configuration Management 管理組件中定義。
ImageReference 元素會將先前建立的檢視對應到 Configuration Management 命名空間中定義的圖示:
<ImageReferences>
<ImageReference ElementID="Folder.Projectors" ImageID="SMConfig!ConfigItemImage16x16" />
<ImageReference ElementID="AllProjectorsView" ImageID="SMConfig!ConfigItemImage16x16" />
</ImageReferences>
使用 LanguagePacks 區段進行當地語系化
管理組件的 LanaguagePacks 區段可定義管理組件元素的字串資源和對應。
在範例中,EnumerationValueProjectorCondition.Working 必須顯示為 [使用中]。 為了達到此目的,必須定義以下每個元素的顯示名稱:
檢視:所有投影機
列舉:工作中、中斷、修復中、新增
<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 元素的兩個屬性來定義類別定義:Base 屬性和 IsExtensionType 屬性。
Base 屬性能指定類別延伸衍生之來源父類別的 ID。 在本例中,屬性值已設定為 Incident!System.WorkItem.Incident。 此值包含完整管理組件名稱的 Alias,其中包含要擴充的類別、驚嘆號及基底類別的名稱。 如需詳細資訊,請參閱下列範例。
IsExtensionType 屬性會定義此類別是否為基底類別的延伸。 由於 TimeOnIncident 是 Incident 類別的延伸,因此該內容設定為 true:
IsExtensionType="true"
另一個選項是 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 Cmdlet 匯入管理組件
您可以使用 Windows PowerShell Import-SCSMManagementPack Cmdlet 匯入 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);
}
}
}