Изменения в общей схеме System Center

 

Опубликовано: Июль 2016

Применимо к: System Center 2012 SP1 - Service Manager, System Center 2012 R2 Service Manager, System Center 2012 - Service Manager

System Center 2012 – Service Manager включает обновленную версию схемы пакета управления System Center. Теперь эта схема называется общей схемой System Center и содержит ряд улучшений и дополнений, которые призваны расширить существующие функциональные возможности и обеспечить поддержку функций Service Manager. В этой статье описываются изменения общей схемы System Center.

Дополнительные сведения о пакетах управления Service Manager и дополнительные образцы XML-кода см. в разделе Непосредственное создание файла пакета управления для управления проекторами.

Свойства и ограничения свойств

Общая схема расширяет классы за счет ряда новых типов свойств. Эти типы свойств включают двоичные типы, а также типы перечислителя и автоинкремента.

Кроме того, можно определить ограничения для определенных значений свойств. Например, можно определить ограничение в виде регулярного выражения для значения свойства строкового типа. В следующем примере для свойства BuildingName ограничение в виде регулярного выражения определено таким образом, чтобы допустимым считалось только значение, содержащее слово "Building", за которым следует пробел и число.

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

образы,

Изображения не хранятся внутри пакета управления. В связи с этим раздел <PresentationTypes> пакета управления больше не содержит тегов <Images>, <Image> и <ImageData>. Вместо этого используется ресурс изображения.

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

Перечисления

Общая схема поддерживает перечисления. Перечисление — это дерево значений, с помощью которого можно ограничить значение свойства или атрибута.

Каждое перечисление имеет обязательный уникальный атрибут ID и необязательный атрибут Parent.

В следующем примере перечисление XBoxState определено с помощью трех возможных значений: Running, Stopped и 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.

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

Отношения

В общей схеме расширена функциональность определений отношений. Тип RelationshipType теперь содержит дочерние элементы Source и Target со свойствами ID, которые могут использоваться в качестве отображаемых имен. Кроме того, как для исходного, так и для целевого класса можно определить минимальную и максимальную кратность (например, отношения 1-к-1 или 0-ко-многим).

Кратность не обеспечивается процессом проверки пакета управления, однако она предназначена для определения пользовательских интерфейсов для пакета управления. Например, кратность может проверяться для того, чтобы определить, каким элементом управления может быть представлено поле в форме: текстовым полем или списком.

System_CAPS_ICON_important.jpg Важно


Любое значение свойства MaxCardinality, которое больше 1, обрабатывается как бесконечное.

Если добавить новый тип отношения из собственного пакета управления, у пользователей должно быть достаточно прав для обновления всех свойств экземпляров исходного и целевого класса данного типа отношения, чтобы создать экземпляр нового типа отношения.

В следующем примере определено отношение размещения (с именем HasXboxes) между типом Lobby и типом Xbox. В этом определении отношения каждый тип Lobby может иметь несколько типов Xbox.

  
<RelationshipType ID="HasXBboxes" Accessibility="Public" Base="System!System.Hosting">  
   <Source ID="Source" Type="Lobby" />  
   <Target ID="Target" Type="Xbox" MinCardinality="0" MaxCardinality="9999" />  
</RelationshipType>  
  

Комбинированные классы

Комбинированные классы представляют агрегаты нескольких связанных типов в пакете управления, подобно представлениям, определенным в базе данных Microsoft SQL Server, которые могут возвращать данные из нескольких таблиц. Комбинированные классы сохраняют и извлекают все агрегированные данные за одну операцию с базой данных и могут упростить определение пользовательских интерфейсов для пакета управления.

В следующем примере определена проекция для представления управления инцидентами. Эта проекция объединяет несколько различных компонентов, связанных с инцидентом, в один блок, который проще использовать для форм и операций с базой данных.

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

Задачи консоли

В общей схеме расширены задачи консоли. Раньше задачи консоли были простыми указателями на каталог приложения и имя исполняемого файла. Теперь задачи консоли реализованы в виде кода обработчика в сборке Microsoft .NET Framework. Код обработчика ссылается на сборку, которая содержит код, имя обработчика и список именованных значений, которые могут быть переданы в обработчик в качестве аргументов.

В следующем примере обработчик Some.Handler.Name определен в сборке MyLibrary.Resources.Assembly. Также определен список параметров обработчика и их значений.

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

Ресурсы

Двоичные данные не хранятся непосредственно в пакете управления. Вместо этого в пакете управления хранятся метаданные о двоичном ресурсе, а сами двоичные данные хранятся во внешнем файле ресурсов. Метаданные включают уникальный идентификатор, имя файла, дату создания, дату изменения и сведения о доступности.

Двоичные данные могут включать универсальные ресурсы, изображения, сборки, определения отчетов и формы. В следующем примере показан универсальный XML-ресурс, ресурс сборки и ресурс отчета.

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

Формы

Формы определяются в пакете управления. Формы можно использовать для просмотра и изменения одного экземпляра типа или комбинированного класса.

Формы создаются на базе Windows Presentation Framework (WPF) и определяются в сборках. Сборка и класс, которые содержат реализации формы для пакета управления, включаются в раздел ресурсов пакета управления. Как и для любого двоичного ресурса в пакете управления, использующем новую общую схему, сам пакет управления не содержит двоичные данные для формы. В пакете управления указывается только манифест ресурса.

В пакете управления можно указать собственные данные конфигурации для формы. В следующем примере раздел Configuration содержит свойство ShowXboxes. Данные конфигурации не оцениваются процессом проверки пакета управления; они интерпретируются только реализацией формы.

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

См. также

Непосредственное создание файла пакета управления для управления проекторами
Формы: общие правила и рекомендации