Alterações no esquema comum do System Center
Publicado: julho de 2016
Aplicável a: System Center 2012 SP1 - Service Manager, System Center 2012 R2 Service Manager, System Center 2012 - Service Manager
O System Center 2012 - Service Manager contém uma versão atualizada do esquema do Pacote de Gerenciamento do System Center. Este esquema é chamado agora de esquema comum do System Center e contém uma série de aperfeiçoamentos e adições destinados a aprimorar a funcionalidade existente e habilitar os recursos do Service Manager. Este tópico descreve as alterações no esquema comum do System Center.
Para obter mais informações sobre Service Manager os pacotes de gerenciamento do e outros exemplos de XML, consulte Criando diretamente um arquivo de Pacote de Gerenciamento para gerenciar projetores.
Propriedades e restrições de propriedade
O esquema comum amplia as classes por meio de vários tipos novos de propriedade. Esses tipos de propriedade incluem o binário, o enumerador e os tipos de incremento automático.
Além disso, você pode definir restrições em determinados valores de propriedade. Por exemplo, você pode definir uma restrição de expressão regular no valor de propriedade de uma cadeia de caracteres. No exemplo a seguir, a propriedade do BuildingName tem uma restrição de expressão regular definida para que apenas valores contendo a palavra "Edifício" seguido por um espaço e um número sejam considerados válidos.
<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>
Imagens
As imagens não são armazenadas dentro de um pacote de gerenciamento. Portanto, a seção <PresentationTypes> do pacote de gerenciamento não contém mais as marcas <Images>, <Image> nem <ImageData>. Em vez disso, use um recurso de imagem.
<Resources>
<Image ID="TestLibrary.Resources.Image1" Accessibility="Public" FileName="image.png"/>
</Resources>
Enumerações
O esquema comum oferece suporte a enumerações. Enumerações são uma árvore de valores que você pode usar para restringir o valor de uma propriedade ou um atributo.
Cada enumeração tem um atributo exclusivo de ID obrigatório e um atributo de Parent opcional.
No exemplo a seguir, a enumeração do XBoxState é definida com três valores possíveis: Em execução, parado e erro.
<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>
No exemplo a seguir, a classe Xbox define uma propriedade de enum do tipo 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>
Relações
A funcionalidade de definições de relações foi aprimorada no esquema comum. O tipo RelationshipType tem agora subelementos de Source e Target com propriedades de ID que podem ser usadas como nomes de exibição. Além disso, você pode definir uma cardinalidade mínima e máxima para a origem e o destino (por exemplo, uma para uma ou zero para muitas relações).
A cardinalidade não é imposta pelo processo de validação do pacote de gerenciamento, mas destina-se a ajudar a definir as interfaces de usuário do pacote de gerenciamento. Por exemplo, a cardinalidade pode ser verificada para determinar se um campo pode ser representado na forma de um corpo de texto ou uma lista.
Importante |
---|
|
Se você adicionar um novo tipo de relação de seu próprio pacote de gerenciamento, os usuários precisarão de privilégios suficientes para atualizar todas as propriedades das instâncias da classe de origem e de destino do tipo de relação para criar uma instância do novo tipo de relação.
No exemplo a seguir, uma relação de hospedagem (chamada de HasXboxes) entre o tipo Lobby e o tipo Xbox foi definida. Nesta definição de relação, cada tipo Lobby pode ter vários tipos 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>
Classes de combinação
As classes de combinação representam uma agregação de vários tipos relacionados no pacote de gerenciamento, semelhante às exibições definidas em um banco de dados do Microsoft SQL Server, que podem retornar dados de várias tabelas. As classes de combinação armazenam e recuperam todos os dados agregados em uma operação no banco de dados, e podem facilitar a definição de interfaces de usuário de um pacote de gerenciamento.
No exemplo a seguir, uma projeção foi definida para uma exibição do gerenciamento de incidentes. Esta projeção combina vários componentes diferentes relacionados a um incidente em uma única unidade, que pode ser usada com mais facilidade em formulários e operações do banco de dados.
<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>
Tarefas do Console
As tarefas do console foram ampliadas no esquema comum. Anteriormente, as tarefas do console eram simples indicadores de um diretório de aplicativo e um nome de arquivo executável. Agora, as tarefas do console estão implementadas como código de manipulador em um assembly do Microsoft.NET Framework. O código de manipulador referencia o assembly que hospeda o código, o nome do manipulador e uma lista de valores denominados que podem ser transmitidos como argumentos ao manipulador.
No exemplo a seguir, o manipulador Some.Handler.Name está definido no assembly MyLibrary.Resources.Assembly. Uma lista de parâmetros do manipulador e os respectivos valores também estão definidos.
<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>
Recursos
Dados binários não são armazenados diretamente em um pacote de gerenciamento. Em vez disso, metadados sobre o recurso binário são armazenados no pacote de gerenciamento e os dados binários reais são armazenados externamente em um arquivo do recurso. Os metadados abrangem um identificador exclusivo, o nome do arquivo, a data de criação, a data de modificação e informações de acessibilidade.
Dados binários podem abranger recursos genéricos, imagens, assemblies, definições de relatório e formulários. O exemplo a seguir mostra um recurso XML genérico, um recurso de assembly e um recurso de relatório.
<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>
Formulários
Os formulários são definidos em um pacote de gerenciamento. Você pode usar formulários para exibir e modificar uma única instância de um tipo ou classe de combinação.
Os formulários são baseados no WPF (Windows Presentation Framework) e definidos em assemblies. O assembly e a classe que contêm as implementações do formulário de um pacote de gerenciamento estão incluídos na seção de recursos do pacote de gerenciamento. Como em qualquer recurso binário de um pacote de gerenciamento que usa o novo esquema comum, o próprio pacote de gerenciamento não contém os dados binários do formulário. Somente o manifesto do recurso é especificado no pacote de gerenciamento.
Você pode especificar suas próprias informações de configuração do formulário no pacote de gerenciamento. No exemplo a seguir, a seção Configurações contém a propriedade ShowXboxes. Essas informações de configuração não são avaliadas pelo processo de verificação do pacote de gerenciamento; elas são apenas interpretadas pela implementação do formulário.
<Forms>
<Form ID="LobbyForm" Target="Projection" Assembly="FormAssembly“ TypeName="MyFormClass">
<Configuration>
<ShowXboxes>yes</ShowXboxes>
</Configuration>
</Form>
</Forms>
Consulte também
Criando diretamente um arquivo de Pacote de Gerenciamento para gerenciar projetores
Formulários: diretrizes gerais e práticas recomendadas