Referência XML de configuração de visualização do controlo de recursos

Os recursos de configuração de visualização do controlo de recursos (RCDC) são recursos definidos pelo utilizador que pode utilizar para controlar a forma como outros recursos no arquivo de dados do Microsoft Identity Manager SP1 (MIM) 2016 aparecem na interface de utilizador (IU) para o utilizador final. Cada recurso RCDC contém um ficheiro de configuração XML que pode alterar para adicionar, modificar ou remover texto da IU e controlos de IU. Embora o MIM 2016 SP1 forneça vários recursos RCDC predefinidos, também pode criar recursos RCDC personalizados para recursos personalizados. Para obter mais informações sobre como utilizar a IU do RCDC no Portal do FIM, veja Introdução à Configuração e Personalização do Portal do FIM na documentação do FIM.

Problemas conhecidos

O valor predefinido em muitos controlos RCDC não é suportado.

Nesta versão, a definição de valores predefinidos nos controlos num controlo de recursos não é suportada, exceto para o controlo de botão de opção. Pode contornar este problema numa caixa pendente ao especificar um valor predefinido que não está associado a qualquer valor para forçar o utilizador a alterar a seleção. Para contornar este problema com outros controlos, tem de utilizar um fluxo de trabalho de autorização para fornecer um valor predefinido durante a submissão do pedido.

Estrutura básica

Os dados XML de um recurso RCDC consistem num único elemento XML ObjectControlConfiguration .

Nota

Para obter o esquema XSD completo, veja Apêndice A: Esquema XSD predefinido.

Segue-se o esquema XSD para o elemento ObjectControlConfiguration :

<xsd:element name="ObjectControlConfiguration"\>
  <xsd:complexType\>
    <xsd:sequence\>
      <xsd:element ref="my:ObjectDataSource" minOccurs="0" maxOccurs="32"/>
      <xsd:element ref="my:XmlDataSource" minOccurs="0" maxOccurs="32"/>
      <xsd:element ref="my:Panel"/>
      <xsd:element ref="my:Events" minOccurs="0" maxOccurs="1"/>
    </xsd:sequence>
    <xsd:attribute ref="my:TypeName"/>
    <xsd:anyAttribute processContents="lax" namespace="http://www.w3.org/XML/1998/namespace"/>
  </xsd:complexType>
</xsd:element>

O elemento ObjectControlConfiguration contém os seguintes elementos:

  • ObjectDataSource: este elemento especifica o TypeName de uma classe de origem de dados que o Controlo de Recursos (RC) utiliza. Para obter uma descrição e a definição de esquema, veja a seguinte secção Origens de dados neste documento. Um elemento ObjectControlConfiguration pode conter até 32 nós do elemento ObjectDataSource .

  • XmlDataSource: esta é uma origem de dados simples que é mais frequentemente utilizada para especificar a estrutura de uma página de resumo. Para obter uma descrição e a definição de esquema, veja a seguinte secção Origens de dados neste documento. Um elemento ObjectControlConfiguration: pode conter até 32 nós do elemento XmlDataSource .

  • Painel: o administrador pode personalizar o esquema da página RCDC ao modificar elementos dentro dos elementos do Painel. Para obter mais informações, consulte a secção Painel mais adiante neste documento. Um elemento ObjectControlConfiguration tem de ter apenas um elemento de Painel.

  • Eventos: os administradores não podem fornecer código personalizado, esta funcionalidade é limitada. Este é o Evento que um painel ou um controlo pode emitir, com base numa alteração de estado. Para obter mais informações, consulte a secção Eventos mais adiante neste documento. Um elemento ObjectControlConfiguration pode conter opcionalmente um elemento Evento . Em geral, a utilização de Eventos personalizados não é suportada, a menos que seja especificamente desenvolvida em melhoramentos posteriores.

Origens de dados

Microsoft Identity Manager utiliza origens de dados como forma de vincular dados a componentes de IU. Isto ajuda a facilitar a separação dos dados da camada de apresentação. Existem dois tipos de origens de dados nos dados de configuração do recurso RCDC: ObjectDataSource e XmlDataSource.

  • ObjectDataSources especifica uma classe Microsoft .NET que fornece os dados ao RC. Existe um conjunto fixo de tipos disponíveis de ObjectDataSources, desde que o administrador possa optar por consumir ao criar RCDCs.

  • Os XMLDataSources fornecem uma forma simples de estruturar dados baseados em XML e podem ser utilizados pelos administradores para fornecer dados personalizados. Os dados XML têm de ser especificados diretamente no RCDC, a menos que utilize a estrutura XML predefinida incorporada. A estrutura XML incorporada é utilizada para gerar páginas de resumo no RC.

No RCDC, pode vincular estas origens de dados a atributos dos controlos de IU especificados no RCDC para gerar a IU.

Elementos objectDataSource

O Microsoft Identity Manager fornece os tipos de origem de dados comuns na tabela seguinte que estão disponíveis para todos os tipos de recursos (exceto quando indicado).

TypeName Description Enlace bidirecional Sintaxe de enlace
PrimaryResourceObjectDataSource Isto representa o recurso fim 2010 que está a ser criado, editado ou visualizado. O caminho na cadeia de enlace é o nome do atributo. O tipo de recurso é especificado pelo atributo TargetObjectType do RCDC e não pelo RCDC. Atributo ConfigurationData. Yes [AttributeName] valor do atributo de objeto fornecido pelo respetivo nome.
PrimaryResourceDeltaDataSource Esta origem de dados cria o XML delta que compara o estado original e o estado atual do recurso FIM 2010. O XML delta gerado é consumido pelo controlo de resumo RC para compor a IU para o pedido que o utilizador está a submeter. No DeltaXml Isto é utilizado com o controlo de resumo para apresentar o delta.
PrimaryResourceRightsDataSource Esta origem de dados fornece os direitos inline para cada atributo do recurso fim 2010. Isto permite ao RC determinar antes da submissão quais as permissões que o utilizador tem nesse atributo e, em seguida, compor a IU para esse atributo adequadamente. No [AttributeName]
SchemaDataSource Esta origem de dados pode ser utilizada para aceder a informações relacionadas com o esquema, como o nome a apresentar, a descrição, se o atributo é ou não necessário, bem como informações de tipo de recurso. No [AttributeName].Required Valor booleano que indica se o atributo tem de ter um valor válido.
[AttributeName].DisplayNameString Valor que indica o Nome a Apresentar do enlace.
[AttributeName].DescriptionString Valor que indica a Descrição do enlace.
[AttributeName].StringRegexString que indica o Regex de Cadeia de um enlace.
[AttributeName].DisplayName
[AttributeName].Description
[AttributeName].IntegerValueMinimum
[AttributeName].IntegerValueMaximum
[AttributeName].LocalizedAllowedValues
DomainDataSource Esta origem de dados fornece uma enumeração de domínios, com base nos recursos de configuração do domínio. Esta origem de dados só pode ser utilizada em RCDCs que se destinam a recursos de grupo e recursos de utilizador. Yes Domínio

Segue-se um fragmento RCDC de exemplo que vincula três origens de dados ao controlo UocTextBox para editar o atributo Description de um grupo:

<my:ObjectDataSource my:TypeName="PrimaryResourceObjectDataSource" my:Name="object" my:Parameters=""/>
<my:ObjectDataSource my:TypeName="SchemaDataSource" my:Name="schema"/>
<my:ObjectDataSource my:TypeName="PrimaryResourceRightsDataSource" my:Name="rights"/>

     <my:Control my:Name="Description" my:TypeName="UocTextBox" my:Caption="{Binding Source=schema, Path=Description.DisplayName}" my:RightsLevel="{Binding Source=rights, Path=Description}">
          <my:Properties>
               <my:Property my:Name="Required" my:Value="{Binding Source=schema, Path=DisplayName.Required}"/>
               <my:Property my:Name="Rows" my:Value="3"/>
               <my:Property my:Name="Columns" my:Value="60"/>
               <my:Property my:Name="MaxLength" my:Value="450"/>
               <my:Property my:Name="Text" my:Value="{Binding Source=object, Path=Description, Mode=TwoWay}"/>
          </my:Properties>
     </my:Control>

Elemento XMLDataSource

Ao utilizar um elemento XMLDataSource , pode especificar dados personalizados que o RCDC pode consumir para um determinado recurso. Neste caso, os dados XML têm de ser especificados no RCDC. Como alternativa, esta origem de dados pode ser utilizada para referenciar uma estrutura de dados XML incorporada para compor a IU para páginas de resumo. Pode controlar o tipo de XMLDataSource a utilizar quando o definir no RCDC.

TypeName Description Enlace bidirecional Sintaxe de enlace
XMLDataSource A origem de dados representa dados XML. Os dados podem estar em formatos XSL ou XSL incorporados:
  • Formato XSL no Microsoft.IdentityManagement.WebUI.Controls.dll:
    <my:XmlDataSource my:Name="summaryTransformXsl" my:Parameters="Microsoft.IdentityManagement. WebUI.Controls.Resources.DefaultSummary.xsl"> </my:XmlDataSource>
  • Formato XSL incorporado:
    <my:XmlDataSource my:Name="RequestStatusTransformXsl"><xsl:stylesheet version="1.0" xmlns:xsl=http://www.w3.org/1999/XSL/Transform xmlns:msxsl="urn:schemas-microsoft-com:xslt"></xsl:stylesheet></my:XmlDataSource>
No Xpath[;namespaces]em que Xpath é um xpath XML válido para selecionar a nota necessária, na maioria das vezes "/" (raiz). namespaces é uma lista opcional de prefix=cadeias de URI. A cadeia é delimitada por ponto e vírgula, conforme necessário para que o Xpath funcione em relação ao XML com espaços de nomes.
ReferenceDeltaDataSource A origem de dados representa deltas de atributos de referência de valores múltiplos. É utilizado apenas em RCDC para Group e Set.
Embora a origem de dados não esteja limitada a Grupos ou Conjuntos, requer alterações de código no anfitrião RCDC para submeter esses deltas. Atualmente, a opção Agrupar e Definir são os únicos anfitriões que reconhecem esta origem de dados.
Yes [AttributeName].Add em que [AttributeName] representa um atributo de referência e os dados devolvidos são as adições delta.
  • Exemplo: [ReferenceAttribute].Add
  • Exemplo: <my:Property my:Name="Value" my:Value="{Binding Source=delta, Path=ExplicitMember.Add, Mode=TwoWay}"/>
[AttributeName].Remove em que [AttributeName] representa um atributo de referência e os dados devolvidos são as remoção de diferenças.
DeltaXml
RequestDetailsDataSource A origem de dados representa o atributo RequestParameter dos objetos Request. O parâmetro define o número máximo de valores de atributo a apresentar por atributo de valores múltiplos. É utilizado apenas no RCDC para Pedido. <my:ObjectDataSource my:TypeName="RequestDetailsDataSource" my:Name="requestDetails" my:Parameters="1000" /> No DeltaXml
RequestStatusDataSource A origem de dados representa o atributo RequestStatusDetails dos objetos Request. É utilizado apenas no RCDC para Pedido. No DeltaXml

Para definir uma origem de dados XML personalizada, utilize o seguinte XML:

<my:XmlDataSource my:Name="MyCustomData" >
    %Insert custom, properly formatted XML data here%
</my:XmlDataSource>

Para utilizar o XSL de controlo de resumo incorporado, defina a origem de dados da seguinte forma:

<my:XmlDataSource my:Name="summaryTransformXsl" my:Parameters="Microsoft.IdentityManagement.WebUI.Controls.Resources.DefaultSummary.xsl" />

Se estiver a criar um RCDC para um tipo de recurso personalizado, pode utilizar este método para compor automaticamente uma página de resumo desse recurso personalizado.

Segue-se um exemplo de como criar um separador de resumo no RCDC, com o elemento PrimaryResourceDeltaDataSource com o elemento XMLDataSource através do XSL incorporado:

<my:ObjectDataSource my:TypeName="PrimaryResourceDeltaDataSource" my:Name="delta" />
<my:XmlDataSource my:Name="summaryTransformXsl" my:Parameters="Microsoft.IdentityManagement.WebUI.Controls.Resources.DefaultSummary.xsl" />

<my:Grouping my:Name="summaryGroup" my:Caption="Summary” my:IsSummary="true">
     <my:Control my:Name="summaryControl" my:TypeName="UocHtmlSummary" my:ExpandArea="true">
          <my:Properties>
               <my:Property my:Name="ModificationsXml" my:Value="{Binding Source=delta, Path=DeltaXml}" />
              <my:Property my:Name="TransformXsl" my:Value="{Binding Source=summaryTransformXsl, Path=/}" />
          </my:Properties>
     </my:Control>
</my:Grouping>

Como alternativa, o utilizador pode substituir o elemento XmlDataSource especificado anteriormente pelo seguinte formato para definir um esquema personalizado de uma página de resumo. Como referência, o XSL de Resumo predefinido do FIM 2010 está incluído no Apêndice B: XSL de Resumo Predefinido, mais à frente neste documento.

<my:XmlDataSource my:Name="summaryTransformXsl">
     Insert valid XSL code here
</my:XmlDataSource>

Esquema para origens de dados

O seguinte esquema XSD gera os dois tipos de origens de dados:

<xsd:element name="ObjectDataSource">
     <xsd:complexType>
          <xsd:sequence/>
          <xsd:attribute ref="my:TypeName"/>
          <xsd:attribute ref="my:Name"/>
          <xsd:attribute ref="my:Parameters"/>
     </xsd:complexType>
</xsd:element>
<xsd:element name="XmlDataSource">
     <xsd:complexType  mixed="true">
          <xsd:sequence>
              <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
          </xsd:sequence>
          <xsd:attribute ref="my:Name"/>
          <xsd:attribute ref="my:Parameters"/>
    </xsd:complexType>
</xsd:element>

Elemento de evento

Um elemento Evento define o estado de alteração de um Controlo. A extensibilidade desta funcionalidade é limitada porque não pode escrever uma função personalizada (Processador) para definir qual é o comportamento após um evento ser acionado. O mesmo elemento Evento pode ser utilizado no elemento Painel. Para obter mais informações, consulte a secção Painel mais adiante neste documento.

Segue-se o esquema XSD para o elemento Evento:

<xsd:element name="Events">
     <xsd:complexType>
          <xsd:sequence>
               <xsd:element ref="my:Event" minOccurs="1" maxOccurs="16"/>
          </xsd:sequence>
     </xsd:complexType>
</xsd:element>
<xsd:element name="Event">
     xsd:complexType>
          <xsd:simpleContent>
               <xsd:extension base="xsd:string">
                    xsd:attribute ref="my:Name"/>
                    <xsd:attribute ref="my:Handler"/>
               </xsd:extension>
          </xsd:simpleContent>
     </xsd:complexType>
     </xsd:element>

Um Evento é um elemento vazio e tem os seguintes atributos:

  • Nome: este é o nome exclusivo de um evento. O único evento suportado no ObjectControlConfiguration é o evento Carregar. Este evento é acionado quando a página é carregada pela primeira vez.

  • Processador: este é o nome exclusivo de um processador. Quando o evento é acionado, normalmente é chamado um método de programa para processar a alteração do estado do controlo. Os seguintes casos não são suportados:

    • Remover um processador existente de um controlo existente.
    • Criar um novo processador.
    • Anexar um processador a um controlo existente ou novo.

Segue-se um exemplo de um elemento Eventos :

<my:Events>
    <my:Event my:Name="Load" my:Handler="OnLoad"/>
</my:Events>

Elemento de painel

O elemento Painel é o elemento principal num esquema RCDC. Segue-se o esquema XSD para o elemento Panel:

<xsd:element name="Panel">
     <xsd:complexType>
          <xsd:sequence>
               <xsd:element ref="my:Grouping" minOccurs="1" maxOccurs="16"/>
          </xsd:sequence>
          <xsd:attribute ref="my:Name"/>
          <xsd:attribute ref="my:DisplayAsWizard"/>
          <xsd:attribute ref="my:Caption"/>
          <xsd:attribute ref="my:AutoValidate"/>
     </xsd:complexType>
</xsd:element>

O elemento Painel contém um elemento recorrente, Agrupamento. Para obter mais informações, consulte a secção Agrupamento neste documento.

O elemento Painel tem os seguintes atributos:

  • Nome: o nome do Painel. Este é um atributo obrigatório de tipo de cadeia.

  • DisplayAsWizard: este atributo foi preterido atualmente. O atributo VerbContext correspondente no RCDC governa se o esquema de recurso estiver no modo assistente ou no Modo de tabulação. Se estiver definido como 0 (Modo de criação), também está no modo Assistente. Caso contrário, está no modo de Tabulação. Para obter mais informações, veja Introdução à Configuração e Personalização do Portal do FIM na documentação.

  • Legenda: este atributo foi preterido atualmente. O utilizador pode especificar legendas para uma página ao incluir um Grupo que contém apenas informações de cabeçalho. Para obter mais informações, consulte a secção Agrupamento neste documento.

  • AutoValidate: este é um atributo Booleano opcional. Quando está definido como validação verdadeira, é acionado em cada controlo no separador atual. Por predefinição, se o atributo estiver em falta, está definido como verdadeiro. Pode ser utilizado em combinação com a propriedade RegularExpression. Para obter mais informações, consulte "RegularExpression" numa secção posterior deste documento.

Elemento de agrupamento

O elemento Agrupamento define o esquema geral de um Painel. Funciona como um contentor que agrupa controlos individuais em diferentes secções e separadores. Segue-se o esquema XSD para o elemento Agrupamento:

<xsd:element name="Grouping">
     <xsd:complexType>
          <xsd:sequence>
               <xsd:element ref="my:Help" minOccurs="0"  maxOccurs="1"/>
               <xsd:element ref="my:Control" minOccurs="1" maxOccurs="256"/>
               <xsd:element ref="my:Events" minOccurs="0" maxOccurs="1"/>
          </xsd:sequence>
          <xsd:attribute ref="my:Name"/>
          <xsd:attribute ref="my:Caption"/>
          <xsd:attribute ref="my:Description"/>
          <xsd:attribute ref="my:Enabled"/>
          <xsd:attribute ref="my:Visible"/>
          <xsd:attribute ref="my:IsHeader"/>
          <xsd:attribute ref="my:IsSummary"/>
     </xsd:complexType>
</xsd:element>

Existem três tipos de elemento Agrupamento :

  • Agrupamento de Cabeçalhos: um Agrupamento de Cabeçalhos é opcional. Só pode existir um Agrupamento de Cabeçalhos num Painel. É apresentado um Agrupamento de Cabeçalhos na parte superior de um painel como legenda. Só é possível utilizar um UocCaptionControl neste agrupamento. Para obter um exemplo de Agrupamento de Cabeçalhos, veja a secção Exemplo.

  • Agrupamento de Conteúdos: é necessário, pelo menos, um Agrupamento de Conteúdos. Podem existir vários Agrupamentos de Conteúdos num Painel. É apresentado um Agrupamento de Conteúdos como o conteúdo principal de uma página RCDC. Cada Agrupamento de Conteúdos aparece como um separador no mesmo Painel e pode conter entre 1 e 256 controlos. Veja a secção Exemplos para obter um exemplo de Agrupamento de Conteúdos.

  • Agrupamento de Resumo: um Agrupamento de Resumo é opcional. Só pode existir um Agrupamento de Resumo num Painel. É apresentado um Agrupamento de Resumo como o último separador de um Painel. Apenas um controlo UocHtmlSummary pode ser utilizado num Agrupamento de Resumo para apresentar as alterações efetuadas pelo utilizador antes de submeter um pedido. Veja a secção Exemplos para obter um exemplo de agrupamento de resumo.

Cada tipo de Agrupamento contém os seguintes elementos:

  • Ajuda: este elemento fornece texto de Ajuda num separador. Também pode utilizá-lo para adicionar uma ligação a um ficheiro de Ajuda para o separador.

  • Controlos: para obter informações sobre este elemento, consulte a secção Controlo neste documento. Cada agrupamento tem de ter 1 a 256 controlos de forma inclusiva, consoante o tipo de agrupamento.

  • Eventos: para obter informações sobre este elemento, consulte a secção Eventos neste documento. Cada agrupamento pode, como opção, ter um Evento. Os Eventos suportados num elemento de Agrupamento são os seguintes:

    • AntesGuardar: este Evento é acionado quando o utilizador está pronto para deixar um separador num agrupamento de conteúdos.
    • AfterEnter: este Evento é acionado quando o utilizador está pronto para introduzir um separador num agrupamento de conteúdos.

Um Agrupamento pode conter os seguintes sete atributos:

  • Nome: este é o nome necessário do Agrupamento. O Nome tem de ser exclusivo no Painel.

  • Legenda: a Legenda é apresentada como a legenda do cabeçalho num Agrupamento de Cabeçalhos. Aparece como a legenda do separador de um agrupamento Conteúdo ou Resumo.

  • Descrição: um atributo de cadeia opcional, Descrição está funcional apenas quando é utilizado num Agrupamento de Conteúdos. Utilize este elemento para dar ao utilizador final alguns detalhes sobre as informações no mesmo separador.

    Nota

    Se este atributo for utilizado num Agrupamento de Resumo, o XML é considerado inválido. Se este atributo for utilizado num Agrupamento de Cabeçalhos, o XML é considerado válido, mas ignorado.

  • Ativado: um atributo booleano opcional, Ativado, está definido como verdadeiro quando está em falta. Se Ativado estiver definido como falso, o utilizador final verá um separador Desativado. Este atributo está funcional apenas num agrupamento de Conteúdos.

    Nota

    Se este atributo for utilizado num Agrupamento de Resumo, o XML é considerado inválido. Se este atributo for utilizado num Agrupamento de Cabeçalhos, o XML é considerado válido, mas ignorado.

  • Visível: pode ocultar um separador de página RCDC ou o respetivo cabeçalho ao definir este atributo como falso. Por predefinição, este atributo de tipo booleano opcional está definido como verdadeiro. Este atributo funciona apenas num Agrupamento de Conteúdos.

    Nota

    Quando existe apenas um Agrupamento de Conteúdos num Painel, esta funcionalidade não funciona. Quando existe mais do que um Agrupamento de Conteúdos num Painel, este comporta-se conforme descrito anteriormente.

  • IsHeader: este atributo é um atributo booleano opcional que define se o Agrupamento é um Agrupamento de Cabeçalhos. Se este atributo não for especificado, está definido como falso.

  • IsSummary: este é um atributo booleano opcional que define se o Agrupamento é um agrupamento de Resumo. Se este atributo não for especificado, está definido como falso.

Exemplos para tipos de elementos de Agrupamento

Esta secção contém exemplos para o elemento Agrupamentos.

Exemplo: Agrupamento de Cabeçalhos

A figura seguinte mostra um exemplo de Agrupamento de Cabeçalhos:

Agrupamento de Cabeçalhos

O XML seguinte gera um agrupamento de cabeçalhos de exemplo. No XML, o Agrupamento de Cabeçalhos é a área com o texto da legenda "Agrupamento de Cabeçalhos de Exemplo".

<!--Sample for a Header Grouping-->
<my:Grouping my:Name="HeaderGroupingSample" my:IsHeader="true">
     <my:Control my:Name="SampleHeaderCaption" my:TypeName="UocCaptionControl" my:ExpandArea="true" my:Caption="Sample Header Grouping">
          <my:Properties>
               <my:Property my:Name="MaxHeight" my:Value="32"/>
               <my:Property my:Name="MaxWidth" my:Value="32"/>
          </my:Properties>
      </my:Control>
</my:Grouping>
<!--End of Header Grouping Sample-->

Exemplo: Agrupamento de Conteúdos

A figura seguinte mostra um exemplo de Agrupamento de Conteúdos:

Agrupamento de Conteúdos

O XML seguinte gera um agrupamento de conteúdos de exemplo. No XML, o Agrupamento de Conteúdos é a área com a legenda "Agrupamento de Conteúdos de Exemplo".

<!--Sample for a Content Grouping-->
<my:Grouping my:Name="ContentGroupingSample" my:Caption="Sample Content Grouping" my:Description="Some description for content grouping">
     <my:Control my:Name="DisplayName" my:TypeName="UocTextBox" my:Caption="Display name" my:Description="This is the display name of the set.">
          <my:Properties>
               <my:Property my:Name="Required" my:Value="True"/>
               <my:Property my:Name="MaxLength" my:Value="128"/>
               <my:Property my:Name="Text" my:Value="{Binding Source=object, Path=DisplayName, Mode=TwoWay}"/>
          </my:Properties>
     </my:Control>
</my:Grouping>
<!--End of Content Grouping Sample-->

Exemplo: Agrupamento de Resumo

A figura seguinte mostra um agrupamento de resumo de exemplo:

Agrupamento de Resumo

O XML seguinte gera um agrupamento de resumo de exemplo. No XML, o Agrupamento de Resumo é a área com o texto da legenda "Agrupamento de Resumo de Exemplo".

<!--Sample for a Summary Grouping-->
<my:Grouping my:Name="Summary" my:Caption="Sample Summary Grouping" my:IsSummary="true">
     <my:Control my:Name="SummaryControl" my:TypeName="UocHtmlSummary" my:ExpandArea="true">
          <my:Properties>
               <my:Property my:Name="ModificationsXml" my:Value="{Binding Source=delta, Path=DeltaXml}"/>
               <my:Property my:Name="TransformXsl" my:Value="{Binding Source=summaryTransformXsl, Path=/}"/>
          </my:Properties>
     </my:Control>
</my:Grouping>
<!--End of Summary Grouping Sample-->

Elemento de ajuda

O elemento Ajuda pode ser incluído num elemento Agrupamento ou Controlo como um elemento opcional. Se for utilizado num Agrupamento, tem de ser o primeiro elemento utilizado. Fornece Ajuda textual aos utilizadores finais para ajudá-los a fornecer informações precisas. O seguinte esquema XSD destina-se ao elemento Ajuda:

<xsd:element name="Help">
     <xsd:complexType>
          <xsd:sequence/>
          <xsd:attribute ref="my:HelpText"/>
          <xsd:attribute ref="my:Link"/>
     </xsd:complexType>
</xsd:element>

O seguinte código de exemplo XML gera um elemento de Ajuda:

<my:Help my:HelpText="Some Help Text for Group Basic Info" my:Link="03e258a0-609b-44f4-8417-4defdb6cb5e9.htm#bkmk_grouping_GroupingBasicInfo" />

Elemento de controlo

Um elemento agrupamento contém um ou mais elementos de Controlo . Os controlos são os elementos principais num RCDC. Pode personalizar o elemento Agrupamento ao definir os diferentes elementos de Controlo que contém. O seguinte esquema XSD destina-se ao elemento Controlo:

<xsd:element name="Control">
     <xsd:complexType>
          <xsd:sequence>
               <xsd:element ref="my:Help" minOccurs="0"  maxOccurs="1"/>
               <xsd:element ref="my:CustomProperties" minOccurs="0"  maxOccurs="1"/>
               <xsd:element ref="my:Options" minOccurs="0"  maxOccurs="1"/>
               <xsd:element ref="my:Buttons" minOccurs="0"  maxOccurs="1"/>
               <xsd:element ref="my:Properties" minOccurs="0"  maxOccurs="1"/>
               <xsd:element ref="my:Events" minOccurs="0" maxOccurs="1"/>
          </xsd:sequence>
          <xsd:attribute ref="my:Name"/>
          <xsd:attribute ref="my:TypeName"/>
          <xsd:attribute ref="my:Caption"/>
          <xsd:attribute ref="my:Enabled"/>
          <xsd:attribute ref="my:Visible"/>
          <xsd:attribute ref="my:Description"/>
          <xsd:attribute ref="my:ExpandArea"/>
          <xsd:attribute ref="my:Hint"/>
          <xsd:attribute ref="my:AutoPostback"/>
          <xsd:attribute ref="my:RightsLevel"/>
     </xsd:complexType>
</xsd:element>

Um elemento Controlo contém os seguintes elementos:

  • Ajuda: este elemento é ignorado. Funciona apenas no Agrupamento.

  • CustomProperties: este elemento não é suportado.

  • Opções: este elemento é utilizado apenas em combinação com os Controlos UocDropDownList ou UocRadioButtonList . Não está funcional com outros Controlos. Veja a secção Opções neste documento para obter a estrutura deste elemento. Veja a secção Controlos individuais deste documento para ver como as Opções são utilizadas por um controlo.

  • Botões: este elemento é utilizado apenas em combinação com o Controlo UocListView . Não está funcional para outros controlos. Para obter mais informações, consulte a secção UocListView neste documento.

  • Propriedades: este elemento é utilizado em todos os Controlos para especificar comportamentos adicionais de um Controlo. Para obter informações sobre este elemento, veja a secção Propriedades neste documento.

  • Eventos: para obter a estrutura deste elemento, veja a secção Eventos anteriormente neste documento. Veja a secção Controlos individuais deste documento para ver que eventos são utilizados num controlo.

Um elemento Controlo pode conter os seguintes 10 atributos:

  • Nome: este é o Nome do controlo. O nome de um Controlo tem de ser exclusivo em cada painel. Este é um atributo obrigatório de tipo de cadeia.

  • TypeName: este atributo especifica o tipo de Controlo que é. Este é um atributo obrigatório de tipo de cadeia. Veja a secção Controlos Individuais neste documento para obter cada nome de controlo.

  • Legenda: pode utilizar este atributo para incluir uma legenda para o controlo. Normalmente, a legenda é o nome a apresentar dos dados que o controlo está a apresentar ou a introduzir. Pode especificar explicitamente um valor para a legenda ou vinculá-lo com informações de nome a apresentar do atributo de esquema. A legenda é apresentada no lado esquerdo de um controlo de tamanho normal. Se um controlo estiver a abranger o ecrã inteiro, a legenda é apresentada sobre o controlo. Este é um atributo opcional do tipo cadeia. Para obter informações sobre como vincular uma origem de dados com um atributo ou um valor de propriedade, veja a secção Propriedades.

    O exemplo seguinte mostra como uma legenda pode ser utilizada explicitamente:

      <my:Control my:Name="ExplicitAlias" my:TypeName="UocTextBox" my:Caption="Explicit Alias">…<my:Control/>
    

    O exemplo seguinte mostra como uma legenda pode ser utilizada com uma origem de dados. Se tiver utilizado o modelo para uma origem de dados apresentada anteriormente neste documento, a origem de dados é um esquema. Recomendamos que vinculte o DisplayName do atributo com um atributo Legenda.

    <my:Control my:Name="DynamicAlias" my:TypeName="UocTextBox" my:Caption="{Binding Source=schema, Path=Alias.DisplayName, Mode=OneWay}">…<my:Control/>
    
  • Ativado: este é um atributo opcional do tipo Booleano. Ao definir este valor de atributo como falso, o utilizador pode desativar um Controlo. O valor predefinido está definido como verdadeiro.

  • Visível: este é um atributo opcional do tipo Booleano. Pode utilizar este atributo para ocultar todo o controlo. O valor predefinido está definido como verdadeiro.

  • Descrição: utilize este atributo opcional de tipo de cadeia para incluir uma descrição para ajudar o utilizador final a compreender o que deve colocar no controlo ou o que o controlo faz. Pode especificar explicitamente um valor para a descrição ou vinculá-lo com as informações de descrição do atributo de esquema.

    A Descrição aparece no lado esquerdo de um controlo de tamanho normal por baixo da legenda. Se um controlo estiver a abranger o ecrã inteiro, a descrição é apresentada na parte superior do controlo por baixo da legenda. Para obter informações sobre como vincular uma origem de dados com um atributo ou um valor de propriedade, veja a secção Propriedades neste documento.

    O exemplo seguinte mostra como uma Descrição pode ser utilizada explicitamente:

    <my:Control my:Name="ExplicitAlias" my:TypeName="UocTextBox" my:Caption="Explicit Alias" my:Description="This is explicit description.">…<my:Control/>
    

    Este exemplo mostra como uma Descrição pode ser utilizada com uma origem de dados. Se tiver utilizado o modelo para uma origem de dados apresentada anteriormente neste documento, a origem de dados é um esquema. Recomendamos que vinculte a Descrição do atributo com um atributo Descrição.

    <my:Control my:Name="DynamicAlias" my:TypeName="UocTextBox" my:Caption="{Binding Source=schema, Path=Alias.DisplayName, Mode=OneWay}" my:Description="{Binding Source=schema, Path=Alias.Description, Mode=OneWay}">…<my:Control/>
    
  • ExpandArea: este atributo indica se o controlo abrange o ecrã inteiro. Este é um atributo opcional do tipo Booleano. O valor predefinido é definido como falso.

    Nota

    Os atributos Legenda e Descrição são desativados quando este atributo está definido como verdadeiro. Utilize o controlo UocLabel para fornecer uma legenda para um controlo expandido.

  • Sugestão: este é um atributo opcional do tipo cadeia. O texto no atributo Sugestão ajuda o utilizador final a decidir o que é uma entrada válida para o controlo. A Sugestão é apresentada por baixo do controlo.

  • Repetição Automática: este é um atributo opcional do tipo Booleano. O valor predefinido é false. Se estiver definido como falso, atualizar a página poderá não atualizar o controlo. Para obter informações sobre a Reativação Automática, procure a propriedade de controlo da IU do Microsoft ASP.NET com o mesmo nome.

  • RightsLevel: este é um atributo opcional de tipo de cadeia. Só pode vincular este atributo com direitos inline a uma origem de dados. O controlo é ativado ou desativado dinamicamente, com base nos direitos do utilizador. Para obter informações sobre como vincular origens de dados com um atributo ou um valor de propriedade, veja a secção Propriedades neste documento.

    Este exemplo mostra como um atributo RightsLevel pode ser utilizado com uma origem de dados. Se tiver utilizado o modelo para uma origem de dados apresentada anteriormente neste documento, a origem de dados é um direito. Utilize o nome do atributo como Caminho.

Elemento de propriedade

Pode utilizar um elemento Propriedade para personalizar ainda mais o comportamento de cada controlo. Uma Propriedade é um elemento vazio. O seguinte esquema XSD destina-se ao elemento Propriedade:

<xsd:element name="Properties">
     <xsd:complexType>
          <xsd:sequence>
               <xsd:element ref="my:Property" minOccurs="1" maxOccurs="32"/>
          </xsd:sequence>
     </xsd:complexType>
</xsd:element>
<xsd:element name="Property">
     <xsd:complexType>
          <xsd:simpleContent>
               <xsd:extension base="xsd:string">
                    <xsd:attribute ref="my:Name"/>
                    <xsd:attribute ref="my:Value"/>
               </xsd:extension>
          </xsd:simpleContent>
     </xsd:complexType>
</xsd:element>

Cada Propriedade tem os dois atributos necessários seguintes:

  • Nome: este atributo de tipo de cadeia é o nome exclusivo da Propriedade. Diferentes controlos têm propriedades diferentes. Existem algumas propriedades comuns que podem ser utilizadas por todos os controlos. Para obter mais informações sobre que nomes estão disponíveis para um determinado controlo, veja as secções Propriedades comuns e Controlos individuais deste documento.

  • Valor: este é o valor da Propriedade. O tipo de dados do valor depende da propriedade à qual está atribuído. Veja a secção seguinte para obter o formato de valor permitido para obter propriedades específicas.

Vincular Propriedade com conteúdo de origem de dados

Algumas propriedades podem ser vinculadas a informações de uma origem de dados. Utilize o seguinte formato de cadeia para tornar este enlace. Veja a descrição das propriedades individuais na secção Controlos individuais deste documento para saber como vincular propriedades a uma origem de dados.

<my:Property my:Name="Required" my:Value="[Formatted String]"/>

   Formatted String :=  “{Binding “ + [SourceExpression] + “,” + [PathExpression] + “,” + [ModeExpression]? + “}

   SourceExpression:= “Source=” + [ObjectDataSourceName]

   PathExpression:= “Path=” + [AttributeName]|[AttributePropertyName]

   ModeExpression:= “Mode=” + [ModeChoice]

   ModeChoice:= “OneWay”|”TwoWay”

   ObjectDataSourceName:= The value of any string assign to node /ObjectControlConfiguration/ObjectDataSource/Name.

   AttributeName:= valid schema attribute name from the data source.

   AttributePropertyName:= valid property name of a schema attribute from the data source.

O XML seguinte mostra como vincular uma origem de dados a um elemento Propriedade :

<my:Property my:Name="Text" my:Value="{Binding Source=object, Path=DisplayName, Mode=TwoWay}"/>
<my:Property my:Name="Required" my:Value="{Binding Source=schema, Path=DisplayName.Required}"/>

Common properties (Propriedades comuns)

Todos os controlos RCDC especificados neste documento podem ter as propriedades comuns descritas nesta secção. Pode utilizar estas Propriedades juntamente com outras Propriedades específicas de diferentes controlos.

  • Obrigatório: esta propriedade indica que o campo é um campo obrigatório ou um campo opcional. Um campo obrigatório tem de ser preenchido com um valor. Não é suportado um valor vazio para a entrada de cadeia. Um campo opcional pode ser deixado vazio. Se este campo for um campo obrigatório sem qualquer valor preenchido, é apresentada uma mensagem de erro sobre o controlo de entrada. Pode especificar explicitamente se um campo é obrigatório ou opcional. Também pode vincular o campo com as informações de esquema de um determinado enlace entre um atributo e um tipo de recurso. Por predefinição, se esta propriedade estiver em falta, significa que o controlo é um controlo de entrada opcional.

    O exemplo seguinte utiliza um valor explícito para esta propriedade:

    <my:Property my:Name="Required" my:Value="True"/>
    

    Este é um exemplo que utiliza uma origem de dados dinâmica para esta propriedade. Se utilizou o modelo para uma origem de dados apresentada na secção anterior deste documento, a origem de dados é um esquema. Utilize <attribute name>.Required como Caminho.

    <my:Property my:Name="Required" my:Value="{Binding Source=schema, Path=DisplayName.Required}"/>
    
  • ReadOnly: ao definir esta propriedade como verdadeira, o utilizador final experimenta o controlo num modo só de leitura. Este é um atributo opcional do tipo Booleano. O valor predefinido é definido como falso. No entanto, por vezes, o comportamento desta propriedade é substituído pelo tipo de direitos que uma pessoa tem no enlace de dados com o controlo. Por exemplo, se um utilizador não tiver direitos para atualizar um campo e o campo estiver vinculado a direitos inline, o utilizador verá os dados num modo só de leitura, mesmo que esta propriedade esteja definida como falso.

  • RegularExpression: esta propriedade especifica restrições impostas ao valor no controlo. Os formatos deste valor de propriedade são os formatos suportados na norma .NET StringRegex. Para obter mais informações, veja .NET Framework Expressões Regulares. Se o controlo for utilizado para introduzir um valor, o valor é verificado em relação à restrição especificada nesta propriedade quando o utilizador tenta sair da página atual. A mensagem de erro é apresentada sobre o controlo que tem uma entrada inválida. O utilizador pode especificar explicitamente uma expressão regular de cadeia. O utilizador também pode vinculá-lo com informações de esquema de um determinado atributo. Por predefinição, se esta propriedade estiver em falta, significa que o controlo não verifica a existência de restrições nas cadeias de entrada.

    O exemplo seguinte utiliza um valor explícito para esta propriedade:

    <my:Property my:Name="RegularExpression" my:Value="[A-Z]*"/>
    

    Este é um exemplo que utiliza uma origem de dados dinâmica para esta propriedade. Se tiver utilizado o modelo para uma origem de dados mostrada anteriormente neste documento, a origem de dados é um esquema. Utilize o <attribute name>.StringRegex como o Caminho.

    <my:Property my:Name="RegularExpression" my:Value="{Binding Source=schema, Path=Alias.StringRegex, Mode=OneWay}"/>
    
  • Visível: este é um atributo opcional do tipo Booleano. Pode utilizar este atributo para ocultar todo o controlo. O valor predefinido está definido como verdadeiro.

Elemento Opções

O elemento Opções inclui um ou mais subnódes de Opção . O elemento Opções é utilizado apenas com os controlos UocRadioButtonList e UocDropDownList . Para obter detalhes sobre como utilizar estes controlos, consulte a secção Controlos individuais deste documento.

O seguinte esquema XSD destina-se ao elemento Opções:

<xsd:element name="Options">
     <xsd:complexType>
          <xsd:sequence>
               <xsd:element ref="my:Option" minOccurs="0" maxOccurs="unbounded"/>
          </xsd:sequence>
     </xsd:complexType>
</xsd:element>
<xsd:element name="Option">
     <xsd:complexType>
          <xsd:simpleContent>
               <xsd:extension base="xsd:string">
                    <xsd:attribute ref="my:Value"/>
                    <xsd:attribute ref="my:Caption"/>
                    <xsd:attribute ref="my:Hint"/>
               </xsd:extension>
          </xsd:simpleContent>
     </xsd:complexType>
</xsd:element>

O elemento Opções tem os seguintes atributos:

  • Valor: este é um atributo necessário do tipo de cadeia. O atributo de valor tem de ser exclusivo no mesmo controlo. Só podem ser utilizados carateres de A a Z não sensíveis a maiúsculas e minúsculas.

  • Legenda: este atributo necessário é o nome a apresentar de cada Opção.

  • Sugestão: este é um atributo opcional. Utilize este atributo para fornecer mais informações e sugestões ao utilizador final.

Variáveis de ambiente

As seguintes variáveis de ambiente podem ser utilizadas em qualquer configuração RCDC:

Variável Descrição
<LoginID> Apresenta o ID do utilizador com sessão iniciada atualmente.
<LoginDomain> Apresenta o domínio do utilizador com sessão iniciada atualmente.
<Today> Apresenta a data e hora atuais
<FromToday_nnn> Apresenta a data atual, mais nnn e a hora, em que nnn é um número inteiro.
<ObjectID> O ID de recurso primário RCDC.
<Attribute_xxx> Devolve um atributo especificado, xxx, do recurso primário RCDC.

Depurar ficheiros de configuração XML

Quando estiver a desenvolver ou modificar ficheiros de configuração XML para um RCDC, pode ajudar a reduzir os erros ao validar o XML em ficheiros XSD com um editor como o Microsoft Visual Studio. Para obter mais informações, veja Uma Introdução às Ferramentas XML no Visual Studio 2005.

Personalizar ficheiros de Ajuda

Se criar novos recursos e atributos, poderá querer atualizar os ficheiros de Ajuda existentes no Portal do FIM com conteúdo para os seus recursos personalizados. Os ficheiros de ajuda no Portal do FIM estão no formato .htm e podem ser editados manualmente. Para obter mais informações sobre a criação de atributos personalizados, veja Introdução à Gestão de Atributos e Recursos Personalizados na documentação do FIM 2010.

Importante

As informações básicas sobre a formatação ou edição de HTML não são fornecidas neste artigo. Espera-se que os utilizadores saibam como editar ficheiros HTML.

Localização dos ficheiros de Ajuda

Todos os ficheiros de Ajuda do portal do Microsoft Identity Manager 2016 SP1 estão localizados na pasta <ProgramFiles>\Common Files\Microsoft Shared\Web Server Extensions\12\Template\Layouts\MSILM2\Help\1033\html no servidor do serviço MIM.

Localizar um ficheiro de Ajuda específico

Todos os ficheiros de Ajuda do Portal do FIM têm o nome de um identificador exclusivo global (GUID). Para localizar o ficheiro correto para o recurso personalizado:

  1. No Portal do FIM, abra o ficheiro de Ajuda na página Portal que pretende personalizar.

  2. Clique com o botão direito do rato no ficheiro de Ajuda e selecione Propriedades.

  3. Realce e copie o <GUID\>.htm ficheiro no campo Endereço do URL .

  4. Navegue para a pasta onde os ficheiros de Ajuda estão armazenados e procure o ficheiro.

Adicionar conteúdo para atributo no elemento Agrupamento existente

Para adicionar conteúdo descritivo para um novo atributo dentro de um elemento de Agrupamento existente (separador):

  1. Identifique e localize o ficheiro de Ajuda adequado.

  2. Com um editor de HTML, abra o ficheiro.

  3. Localize onde pretende adicionar o conteúdo. Normalmente, isto está num parágrafo adicional, por exemplo:

    <p xmlns="">A new paragraph with customized information.</p>

    Também pode ser um item inserido numa lista existente, por exemplo:

    <li class="unordered"><b>First Name</b> – The first name of the User.<br>
    <li class="unordered"><b>Last Name</b> - The last name of the User.<br>
    <li class="unordered"><b>Added a new line</b><br>
    

Adicionar conteúdo para o elemento Agrupamento existente

A maioria das páginas do Portal do FIM tem vários elementos de Agrupamento (ou separadores) e os ficheiros de Ajuda que acompanham têm secções com marcadores relacionadas com cada elemento de Agrupamento. Os marcadores no HTML são especificados nas secções. Por exemplo, este é o HTML do separador Informações de Trabalho do ficheiro de Ajuda da página Criar Utilizador no Portal do FIM:

<a name="bkmk_grouping_WorkInfo" xmlns=""></a><h3 class="subHeading" xmlns="">Work Info</h3><p class="subHeading" xmlns=""></p><div class="subSection" xmlns="">

É referenciado pelo elemento Agrupamento WorkInfo no ficheiro XML de Dados de Configuração para a Configuração para Criação de Utilizadores RCDC. O \<GUID\>.htm nome do ficheiro e o marcador são especificados no my:Link parâmetro :

<my:Grouping my:Name="WorkInfo" my:Caption="%SYMBOL_WorkInfoTabCaption_END%" my:Enabled="true" my:Visible="true"> <my:Help my:HelpText="%SYMBOL_WorkInfoTabHelpText_END%" my:Link="5e18a08b-4b20-48b8-90c6-c20f6cbeeb44.htm#bkmk_grouping_WorkInfo"/>

Exemplos de controlo simples

Esta secção fornece exemplos para criar diferentes controlos de caixa de texto simples.

A figura seguinte mostra alguns controlos simples de caixa de texto em modos diferentes:

Controlos de caixa de texto simples

O segmento de código seguinte cria o primeiro controlo de caixa de texto, que utiliza texto explícito para todos os atributos e propriedades:

<!-- Sample for a simple control to use explicit information. (with hints)-->
<my:Control my:Name="ExplicitControl" my:TypeName="UocTextBox" my:Caption="Explicit Control" my:Description="This is explicit description." my:Hint="This is a Hint (enter any text).">
     <my:Properties>
          <my:Property my:Name="Required" my:Value="True"/>
          <my:Property my:Name="RegularExpression" my:Value="[A-Z]*"/>
          <my:Property my:Name="Text" my:Value="Enter Information Here"/>
     </my:Properties>
</my:Control>
<!-- End of Sample for a simple control to use explicit information.-->

O segmento de código seguinte cria o segundo controlo de caixa de texto, que utiliza a técnica de enlace dinâmico para ligar o controlo a uma origem de dados diferente:

<!-- Sample for a simple control to use stored data information.-->
<my:Control my:Name="DynamicControl" my:TypeName="UocTextBox" my:Caption="{Binding Source=schema, Path=DisplayName.DisplayName, Mode=OneWay}" my:Description="{Binding Source=schema, Path=DisplayName.Description, Mode=OneWay}" my:RightsLevel="{Binding Source=rights, Path=DisplayName, Mode=OneWay}">
     <my:Properties>
          <my:Property my:Name="Required" my:Value="{Binding Source=schema, Path=DisplayName.Required, Mode=OneWay}"/>
          <my:Property my:Name="RegularExpression" my:Value="{Binding Source=schema, Path=DisplayName.StringRegex, Mode=OneWay}"/>
          <my:Property my:Name="Text" my:Value="{Binding Source=object, Path=DisplayName, Mode=TwoWay}"/>
     </my:Properties>
</my:Control>
<!-- End of Sample for a simple control to use stored data information.-->

O segmento de código seguinte cria a terceira etiqueta expandida e o controlo de caixa de texto:

<!-- Sample for a simple expanded control with caption control.-->
<my:Control my:Name="SampleExpandLabel" my:TypeName="UocLabel" my:ExpandArea="true">
     <my:Properties>
          <my:Property my:Name="Text" my:Value="This is an expanded control."/>
     </my:Properties>
</my:Control>
<my:Control my:Name="ExpandedControl" my:TypeName="UocTextBox"
          my:ExpandArea="true">
     <my:Properties>
          <my:Property my:Name="Required" my:Value="false"/>
          <my:Property my:Name="Columns" my:Value="40"/>
          <my:Property my:Name="Text" my:Value="Expanded control (enter text)"/>
     </my:Properties>
</my:Control>
<!-- End of Sample for a simple expanded control.-->

O segmento de código seguinte cria o quarto controlo de caixa de texto desativado. Embora este controlo não apresente uma diferença visível entre o estado desativado e o estado ativado, o utilizador já não pode introduzir dados na caixa de texto.

<!-- Sample for a simple disabled control.-->
<my:Control my:Name="DisabledControl" my:TypeName="UocTextBox" my:Caption="Disabled Control" my:Description="This is disabled simple control." my:Enabled="false">
     <my:Properties>
          <my:Property my:Name="Required" my:Value="false"/>
          <my:Property my:Name="MaxLength" my:Value="128"/>
          <my:Property my:Name="Text" my:Value="Disabled control"/>
     </my:Properties>
</my:Control>
<!-- End of Sample for a simple disabled control.-->

Controlos individuais

Esta secção documenta os controlos individuais fornecidos com Microsoft Identity Manager 2016 SP1.

UocButton

Nome: UocButton

Descrição: este é um controlo de botão simples que pode utilizar para acionar determinadas ações. No entanto, como não pode especificar o seu próprio processador, a utilização deste controlo é limitada.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • Texto: esta propriedade especifica o texto que aparece no botão. Este é um atributo opcional do tipo cadeia. O texto utiliza um valor de cadeia explícito.

Eventos:

  • OnButtonClicked: o evento é emitido quando o botão é clicado.

Exemplo:

Controlo UocButton

O seguinte segmento XML produz um simples botão de controlo UocButton:

<!--Sample enabled simple button control-->
<my:Control my:Name="ButtonControl" my:TypeName="UocButton" my:Caption="SampleButton" my:Description="This is a simple button."
my:Hint="Click the button">
     <my:Properties>
          <my:Property my:Name="Required" my:Value="True"/>
          <my:Property my:Name="Text" my:Value="Click Me"/>
     </my:Properties>
</my:Control>
<!--End of sample enabled simple button control -->

UocCaptionControl

Nome: UocCaptionControl

Descrição: este controlo é utilizado para apresentar a legenda de uma página RCDC. Este controlo foi concebido para ser utilizado apenas como um único controlo num Agrupamento de Cabeçalhos. Utilizá-lo em qualquer outro contexto pode causar problemas de composição ou erros no portal.

Modo: Só de leitura (OneWay)

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • MaxHeight: Esta propriedade especifica a altura máxima do ícone na secção de legendas. Esta propriedade é opcional. Esta propriedade utiliza um valor inteiro em píxeis. O valor predefinido é 32 píxeis.

Eventos:

  • Não existem eventos para este controlo.

Exemplo:

Controlo UocCaptionControl

O seguinte segmento de código gera uma Legenda de Cabeçalho:

<!--Sample header caption control-->
<my:Control my:Name="SampleHeaderCaption" my:TypeName="UocCaptionControl" my:ExpandArea="true" my:Caption="Header Caption" my:Description="Description Starts here.">
     <my:Properties>
          <my:Property my:Name="MaxHeight" my:Value="32"/>
          <my:Property my:Name="MaxWidth" my:Value="32"/>
     </my:Properties>
</my:Control>
<!--End of sample header caption control-->

O seguinte segmento de código gera uma Legenda de Conteúdo Explícita:

<my:Control my:Name="SampleContentCaption" my:TypeName="UocCaptionControl" my:ExpandArea="true" my:Caption="Sample Explicit Content Caption" my:Description="Explicit content caption with smaller icon">
     <my:Properties>
          <my:Property my:Name="MaxHeight" my:Value="20"/>
          <my:Property my:Name="MaxWidth" my:Value="20"/>
     </my:Properties>
</my:Control>
<!--End of sample caption-->

O segmento de código seguinte gera uma legenda dinâmica de Nome a Apresentar :

<!--Sample content dynamic caption-->
<my:Control my:Name="Caption3" my:TypeName="UocCaptionControl" my:Caption="{Binding Source=schema, Path=DisplayName.DisplayName, Mode=OneWay}" my:Description="{Binding Source=schema, Path=DisplayName.Description, Mode=OneWay}"/>
<!--End of sample caption -->

UocCheckBox

Nome: UocCheckBox

Descrição: este é um controlo de caixa de verificação simples. Recomendamos que o utilizador vincule este controlo com dados do tipo Booleano. Este controlo pode ser utilizado como um controlo só de leitura ou um controlo atualizável, com base nos dados aos quais se vincula.

Nota

Nesta versão, ao utilizar o controlo de caixa de verificação no modo de edição para apresentar um atributo Booleano, se o atributo não tiver um valor atribuído anteriormente, o Controlo de Recursos adiciona um valor de falso ao atributo quando OK é clicado no modo de edição. A solução é criar sempre um atributo Booleano que pressupõe que a não existência é igual a falsa ou utilizar outros controlos, como um botão de opção para atributos booleanos.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • ValorPredefinido: esta é uma propriedade opcional do tipo Booleano. O valor predefinido é definido como falso. Este campo especifica o comportamento predefinido de uma caixa de verificação. Isto pode ser especificado explicitamente.

  • Selecionado: esta é uma propriedade opcional do tipo Booleano. O valor predefinido é definido como falso. Este valor substitui a propriedade ValorPredefinido quando está presente juntamente com DefaultValue. Este campo especifica o comportamento de uma caixa de verificação. Tal como DefaultValue, isto pode ser especificado explicitamente ou vinculado a dados do servidor.

  • Texto: este é um atributo opcional de tipo de cadeia. O texto é apresentado à direita da caixa de verificação. Pode utilizar esta propriedade para especificar texto que forneça mais informações ao utilizador final.

Eventos:

  • CheckedChanged: quando a caixa de verificação altera o respetivo estado, este evento é emitido.

Exemplo:

No exemplo seguinte, é criado um enlace personalizado entre o tipo de recurso personalizado e o atributo IsConfigurationType. O XML é utilizado no RCDC de um tipo de recurso personalizado.

Controlo UocCheckBox

O seguinte segmento de código produz uma caixa de verificação dinâmica, conforme mostrado como Caixa de Verificação Dinâmica na figura anterior. Este tipo de enlace é mais versátil e útil do que uma caixa de verificação explícita. O atributo tem de pertencer ao tipo de recurso atual.

<!--Sample dynamic check box-->
<my:Control my:Name="SampleDynamicCheckBox" my:TypeName="UocCheckBox" my:Caption="Dynamic Check Box" my:Description="This is a dynamic check box. It saves to data source." my:RightsLevel="{Binding Source=rights, Path=IsConfigurationType}">
     <my:Properties>
          <my:Property my:Name="Text" my:Value="{Binding Source=schema, Path=IsConfigurationType.DisplayName, Mode=OneWay}"/>
          <my:Property my:Name="Checked" my:Value="{Binding Source=object, Path=IsConfigurationType, Mode=TwoWay}"/>
     </my:Properties>
</my:Control>
<!--End of sample dynamic check box -->

UocCommonMultiValueControl

Nome: UocCommonMultiValueControl

Descrição: este é um controlo de caixa de texto com várias linhas que suporta formatação de cadeias especiais. Cada valor entre as entradas de valores múltiplos é separado entre si por ponto e vírgula (;) ou uma quebra de linha na caixa de texto. Recomendamos que enlace este controlo com dados de tipos de números inteiros, de cadeia curta e de valores múltiplos. Este controlo suporta o modo só de leitura e o modo atualizável.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • DataType: este é um atributo obrigatório de tipo de cadeia. Pode especificar isto como um tipo de Cadeia, Número Inteiro ou DateTime explicitamente. Também pode vincular o atributo com a propriedade DataType do atributo de esquema. Um tipo de Referência De Valores Múltiplos deve ser processado por UOCListView ou UOCIdentityPicker. Booleano de valores múltiplos não é um tipo de dados suportado.

  • Linhas: este é um atributo opcional de tipo inteiro. Pode definir a altura da caixa em número de carateres. O valor predefinido está definido como 1.

  • Colunas: este é um atributo opcional de tipo inteiro. Pode definir a largura da caixa em número de carateres. O valor predefinido está definido como 20.

  • Valor: este é um atributo opcional de tipo de cadeia. Só pode vincular este atributo à origem de dados.

Eventos:

  • ValueListChanged: este evento é acionado quando o valor atual no controlo é alterado.

Exemplo:

No exemplo seguinte, é criado um atributo de cadeia de carateres multivalor com o nome AMultiValueString e vinculado ao tipo de recurso personalizado. Este exemplo só funciona após a criação deste enlace.

Controlo UocCommonMultiValueControl

O segmento de código seguinte gera um controlo UocCommonMultiValueControl :

<!--Sample multivalue control-->
<my:Control my:Name="SampleDynamicMultiValueControl" my:TypeName="UocCommonMultiValueControl" my:Caption="{Binding Source=schema, Path=AMultiValueString.DisplayName, Mode=OneWay}" my:Description="{Binding Source=schema, Path=AMultiValueString.Description, Mode=OneWay}" my:RightsLevel="{Binding Source=rights, Path=AMultiValueString}">
     <my:Properties>
          <my:Property my:Name="Rows" my:Value="6"/>
          <my:Property my:Name="Columns" my:Value="60"/>
          <my:Property my:Name="DataType" my:Value="String"/>
          <!--not supported for above property my:Value={Binding Source=schema, Path=AMultiValueString.DataType, Mode=OneWay}"/>-->
          <my:Property my:Name="Value" my:Value="{Binding Source=object, Path=AMultiValueString, Mode=TwoWay}"/>
     </my:Properties>
</my:Control>
<!--End of sample multivalue control -->

UocDateTimeControl

Nome: UocDateTimeControl

Descrição: é semelhante a um controlo de caixa de texto, mas a Descrição aceita apenas um determinado formato. No modo só de leitura, aparece como uma etiqueta. Para obter o formato da cadeia de entrada suportada, veja a propriedade DateTimeFormat nesta secção.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • DateTimeFormat: este é um atributo opcional de tipo de cadeia. Os formatos suportados são DateTime e DateOnly. O valor predefinido está definido para o formato DateTime .

    • DateTime: o atributo é formatado como mm/dd/yyyyy hh:mm:ss AM.

    • DateOnly: o atributo é formatado como mm/dd/aaaa.

      Nota

      Os formatos DateTime e DateOnly são suportados, independentemente do utilizador que está a especificar a diferença.

  • Valor: este é um atributo opcional de tipo de cadeia. Vincula este atributo a uma origem de dados de recurso. O valor deste atributo tem de estar em conformidade com o formato datetime correto.

Eventos:

  • DateTimeChanged: quando o valor datetime é alterado, o evento ocorre.

Exemplo:

Controlo UocDateTimeControl

O segmento de código seguinte produz o primeiro controlo DateTime .

<!--Sample explicit DateTime control-->
<my:Control my:Name="SampleExplicitDateTimeControl" my:TypeName="UocDateTimeControl" my:Caption="Explicit Date Time Control" my:Description="The data shown here is explicit and in date time format.">
     <my:Properties>
          <my:Property my:Name="DateTimeFormat" my:Value="DateTime"/>
          <my:Property my:Name="Value" my:Value="11/11/2008 00:00:00"/>
     </my:Properties>
</my:Control>
<!--End of sample explicit DateTime control -->

O seguinte segmento de código produz o segundo controlo DateTime . Se tiver utilizado o código de exemplo na secção Origens de dados, o atributo ExpirationTime está vinculado a todos os tipos de recursos. Por conseguinte, pode utilizá-lo com o seguinte código:

<!--Sample dynamic DateTime control-->
<my:Control my:Name="SampleDynamicDateTimeControl" my:TypeName="UocDateTimeControl" my:Caption="{Binding Source=schema, Path=ExpirationTime.DisplayName, Mode=OneWay}" my:Description="{Binding Source=schema, Path=ExpirationTime.Description, Mode=OneWay}" my:RightsLevel="{Binding Source=rights, Path=ExpirationTime}">
     <my:Properties>
          <my:Property my:Name="DateTimeFormat" my:Value="DateOnly"/>
          <my:Property my:Name="Value" my:Value="{Binding Source=object, Path=ExpirationTime, Mode=TwoWay}"/>
     </my:Properties>
</my:Control>
<!--End of dynamic explicit DateTime control -->

UocDropDownList

Nome: UocDropDownList

Descrição: este é um controlo de caixa pendente simples. Este controlo é utilizado para selecionar opções de um conjunto definido de opções. Os tipos de dados de cadeia, número inteiro, datetime e Booleano são bons candidatos para este controlo.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • ValuePath: a propriedade para obter o atributo Valor do ItemSource. Quando ItemSource é especificado como Personalizado, o caminho do valor é definido como Valor. Vincula-se ao campo Valor do elemento Opção, conforme descrito nesta secção.

  • CaptionPath: a propriedade para obter o atributo Valor do ItemSource. Quando ItemSource é especificado como Personalizado, o caminho do valor é definido como Legenda. Vincula-se ao campo Legenda do elemento Opção, conforme descrito nesta secção.

  • HintPath: a propriedade para obter o atributo Valor a partir do ItemSource. Quando ItemSource é especificado como Personalizado, o caminho do valor é definido como Sugestão. Vincula-se ao campo Sugestão do elemento Opção, conforme descrito nesta secção.

  • ItemSource: uma coleção de ListControlItems que define as opções na lista. O utilizador pode defini-lo explicitamente como Personalizado e utilizar o elemento Opção, conforme descrito nesta secção, para especificar o valor da cadeia.

  • SelectedValue: o valor que está atualmente selecionado. Esta é uma propriedade necessária, tipo cadeia. Esta propriedade está vinculada a dados de cadeia da origem de dados.

Eventos:

  • SelectedIndexChanged: o evento ocorre quando a seleção na caixa pendente é alterada.

Opções:

Para obter a estrutura de um elemento Opções , veja Elemento Opções.

  • Valor: o valor de um único elemento Opções pode ser definido como qualquer cadeia que seja a entrada válida da origem de dados à qual o controlo se vincula.

  • Legenda: A legenda pode ser qualquer valor de cadeia.

  • Sugestão: a sugestão pode ser qualquer valor de cadeia.

Exemplo:

Controlo UocDropDownList

Opções num controlo UocDropDownList

Nota

Para que o exemplo funcione, tem de vincular um atributo existente de tipo de cadeia Âmbito ao tipo de recurso personalizado a que o RCDC se aplica.

O seguinte segmento de código gera uma lista pendente:

<!--Sample for drop-down list control-->
<my:Control my:Name="Scope" my:TypeName="UocDropDownList" my:Caption="{Binding Source=schema, Path=Scope.DisplayName}" my:RightsLevel="{Binding Source=rights, Path=Scope}">
     <my:Options>
          <my:Option my:Value="DomainLocal" my:Caption="Domain Local" my:Hint="to secure a local resource (i.e. a file share on your computer)" />
          <my:Option my:Value="Global" my:Caption="Global" my:Hint="to secure resources across your team or division" />
          <my:Option my:Value="Universal" my:Caption="Universal" my:Hint="to use this group across your organization" />
     </my:Options>
     <my:Properties>
          <my:Property my:Name="Required" my:Value="{Binding Source=schema, Path=Scope.Required" />
          <my:Property my:Name="ValuePath" my:Value="Value" />
          <my:Property my:Name="CaptionPath" my:Value="Caption" />
          <my:Property my:Name="HintPath" my:Value="Hint" />
          <my:Property my:Name="ItemSource" my:Value="Custom" />
          <my:Property my:Name="SelectedValue" my:Value="{Binding Source=object, Path=Scope, Mode=TwoWay}" />
     </my:Properties>
</my:Control>
<!--End of Sample for drop-down list control-->

UocFileTransferir

Nome: UocFileDownload

Descrição: este controlo contém uma hiperligação. Quando a hiperligação é clicada, é apresentada uma página Guardar Ficheiro do Windows. O utilizador pode guardar o ficheiro na unidade local. A opção Abrir também é suportada se o Internet Explorer conseguir compor o formato de ficheiro. Os tipos de dados recomendados para utilizar este controlo são tipos de cadeia formatada (XML) e binários.

Nota

Nesta versão do Microsoft Identity Manager 2016 SP1, o utilizador tem de fechar a janela do Internet Explorer na qual abriu o ficheiro e, em seguida, atualizar a página. Depois de atualizar a janela do Internet Explorer, o utilizador pode iniciar a transferência para guardar ou abrir o mesmo ficheiro novamente na janela original.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • Texto: este é um atributo opcional do tipo cadeia de carateres que define o texto da hiperligação. O utilizador pode especificar uma cadeia explícita para esta propriedade.

  • Valor: este é um atributo necessário. Especifica o enlace de atributos no servidor cujo conteúdo deve ser transferido.

  • PromptedFileName: este é um atributo opcional de tipo de cadeia. Este é o nome de ficheiro que é sugerido ao utilizador quando guarda o ficheiro transferido.

  • ContentType: este é um atributo obrigatório de tipo de cadeia. Este é o tipo de ficheiro no qual os dados são guardados. Texto ou binário são as duas opções de cadeia suportadas. Se for texto, o valor devolvido é considerado como uma cadeia longa. Caso contrário, para binário, o valor devolvido é considerado como byte[]. Se o texto estiver selecionado, o utilizador pode, como opção, adicionar um sufixo para especificar o tipo de formato em que o texto se encontra. Por exemplo, o texto/xml é válido.

Nota

Quando o valor vinculado a este controlo está vazio, falta o controlo da hiperligação a ser utilizada para acionar a ação de transferência. Isto deve-se ao facto de não haver nada para transferir.

Eventos:

  • Não existem eventos para este controlo.

Exemplo:

Controlo UocFileDownload

Nota

Antes de carregar este ficheiro de exemplo, o utilizador tem de criar um enlace entre um tipo de recurso personalizado e o atributo ConfigurationData existente.

O seguinte segmento de código gera um controlo de transferência de ficheiros:

<!--Sample dynamic download control-->
<my:Control my:Name="SampleDynamicFileDownloadControl" my:TypeName="UocFileDownload" my:Caption="{Binding Source=schema, Path=ConfigurationData.DisplayName, Mode=OneWay}" my:Description="{Binding Source=schema, Path=ConfigurationData.Description, Mode=OneWay}" my:RightsLevel="{Binding Source=rights, Path=ConfigurationData}">
     <my:Properties>
          <my:Property my:Name="Text" my:Value="Download Dummy xml"/>
          <my:Property my:Name="PromptedFileName" my:Value="DummyXML.xml"/>
          <my:Property my:Name="ContentType" my:Value="text/xml"/>
          <my:Property my:Name="Value" my:Value="{Binding Source=object, Path=ConfigurationData}"/>
     </my:Properties>
</my:Control>
<!--End of dynamic download control -->

UocFileUpload

Nome: UocFileUpload

Descrição: este controlo contém uma caixa de texto que apresenta a localização do ficheiro local a carregar, um botão procurar ficheiro e um botão de carregamento. Quando o utilizador final clica num botão Procurar, é apresentada uma janela Abrir Ficheiro do Windows. O utilizador final pode selecionar um ficheiro na unidade local para carregar. Quando o ficheiro está selecionado, a localização do ficheiro é apresentada na caixa de texto. Quando o botão Carregar é clicado, o ficheiro é carregado para a origem de dados local do lado do cliente. O conteúdo do ficheiro ainda não foi submetido para o servidor. Os tipos de dados recomendados para utilizar este controlo são os seguintes: cadeia formatada (XML) ou tipos binários.

Nota

Não há indicação do progresso ou estado do carregamento. Quando o ficheiro é carregado para a origem de dados local, a caixa de texto é desmarcada.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • Valor: este é um atributo necessário. Especifica o enlace do atributo de esquema no servidor para o qual os dados são carregados.

  • ContentType: este é um atributo opcional de tipo de cadeia. Este é o tipo de dados no qual o ficheiro é guardado no servidor. Isto pode ser definido como Texto ou Binário. Quando a propriedade está em falta, o valor predefinido é Binário.

  • MaxFileSize: este é um atributo opcional de tipo de cadeia. MaxFileSize define o tamanho do ficheiro carregado. Por predefinição, se a propriedade estiver em falta, o tamanho máximo é de 1 megabyte (MB).

  • PromptedForNoValue: este é um atributo opcional de tipo de cadeia. Define o texto que aparece ao utilizador quando um ficheiro não está a ser carregado.

Eventos:

  • FileUploaded: este evento é emitido quando o ficheiro é carregado com êxito.

Exemplo:

Controlo UocFileUpload

Nota

Para que o código de exemplo seguinte funcione, tem de criar um novo atributo de tipo binário com o nome ABinaryAttribute e, em seguida, criar um novo enlace entre um tipo de recurso personalizado e este atributo.

O seguinte segmento de código gera um controlo de carregamento:

<!--Sample dynamic upload control-->
<my:Control my:Name="SampleDynamicFileUploadControl" my:TypeName="UocFileUpload" my:Caption="{Binding Source=schema, Path=ABinaryAttribute.DisplayName, Mode=OneWay}" my:Description="{Binding Source=schema, Path=ABinaryAttribute.Description, Mode=OneWay}” my:RightsLevel="{Binding Source=rights, Path=ABinaryAttribute}">
     <my:Properties>
          <my:Property my:Name="Required" my:Value="{Binding Source=schema, Path=ABinaryAttribute.Required}"/>
          <my:Property my:Name="ContentType" my:Value="Binary"/>
          <my:Property my:Name="Value" my:Value="{Binding Source=object, Path=ABinaryAttribute, Mode=TwoWay}"/>
     </my:Properties>
</my:Control>
<!--End of dynamic upload control -->

UocFilterBuilder

Nome: UocFilterBuilder

Descrição: este é um controlo complexo que permite ao utilizador compor uma expressão XPath do MIM 2016. Algumas expressões XPath não são suportadas. Para obter informações sobre como utilizar o construtor de filtros, consulte a Ajuda do construtor de filtros.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • PermittedObjectTypes: isto define uma lista de tipos de recursos a serem apresentados na instrução select de um construtor de filtros. Para obter informações sobre como utilizar o construtor de filtros, consulte a Ajuda do construtor de filtros. A cadeia está no formato ResourceTypeA, ResourceTypeB, onde cada tipo de recurso é separado por uma vírgula ','.

  • Valor: este é o valor com o qual o construtor de filtros é composto. Só é suportado um enlace com dados de tipo de cadeia que contenham uma expressão XPath. O atributo Filtro é um atributo recomendado para vincular este controlo.

  • PreviewButtonVisible: esta é uma propriedade opcional do tipo Booleano. Quando esta propriedade está definida como falsa, o utilizador não vê um botão Pré-visualizar. O valor predefinido está definido como verdadeiro. Este botão pode ser utilizado em combinação com um controlo de vista de lista para pré-visualizar os resultados de uma expressão XPath.

  • ExcludeGroupMembership: esta é uma propriedade Booleana. Quando esta propriedade está definida como verdadeira, não pode criar um filtro que utilize <o Atributo> de Referência (por exemplo, ResourceID) é membro do <objeto> Grupo. Por outras palavras, quando esta propriedade está definida como verdadeira, não pode criar um filtro que utilize o diretório de associação ao grupo.

  • PreviewButtonCaption: esta é uma cadeia opcional. Quando PreviewButtonVisible estiver definido como verdadeiro, pode utilizar esta propriedade para atribuir um texto personalizado ao botão. O texto é apresentado no botão Pré-visualizar.

Eventos:

  • OnFilterChanged: este evento é acionado quando o conteúdo do construtor de filtros é alterado.

Exemplo:

Controlo UocFilterBuilder

O seguinte código de exemplo inclui um controlo UOCLabel, um construtor de filtros simples com PermittedObjectTypes e uma vista de lista de Pré-visualização. Aponte a propriedade ListFilter da vista de lista e a propriedade Valor do construtor de filtros para o mesmo atributo de origem de dados para ligar os dois.

Nota

Antes de utilizar este código de exemplo, crie um novo enlace entre um atributo Filtro existente e um tipo de recurso personalizado.

<!--Sample filter builder with preview list-->
<my:Control my:Name="ComplexFilterBuilderLabel" my:TypeName="UocLabel" my:ExpandArea="true">
     <my:Properties>
          <my:Property my:Name="Text" my:Value="This is a Filter Builder with preview."/>
     </my:Properties>
</my:Control>
<my:Control my:Name="ComplexFilterBuilder" my:TypeName="UocFilterBuilder" my:RightsLevel="{Binding Source=rights, Path=Filter}" my:ExpandArea="true">
     <my:Properties>
          <my:Property my:Name="PermittedObjectTypes" my:Value="Person,Group" />
          <my:Property my:Name="Value" my:Value="{Binding Source=object, Path=Filter, Mode=TwoWay}" />
          <my:Property my:Name="Required" my:Value="{Binding Source=schema, Path=Filter.Required, Mode=OneWay}" />
     </my:Properties>
</my:Control>
<my:Control my:Name="FilterBuilderwithpreview" my:TypeName="UocListView" my:ExpandArea="true">
     <my:Properties>
          <my:Property my:Name="ColumnsToDisplay" my:Value="DisplayName,ObjectType,AccountName" />
          <my:Property my:Name="EmptyResultText" my:Value="There is no members according to the filter definition." />
       <my:Property my:Name="PageSize" my:Value="10" />
       <my:Property my:Name="ShowTitleBar" my:Value="false" />
       <my:Property my:Name="ShowActionBar" my:Value="false" />
       <my:Property my:Name="ShowPreview" my:Value="false" />
       <my:Property my:Name="ShowSearchControl" my:Value="false" />
       <my:Property my:Name="EnableSelection" my:Value="false" />
       <my:Property my:Name="SingleSelection" my:Value="false" />
       <my:Property my:Name="ItemClickBehavior" my:Value=" ModelessDialog "/>
       <my:Property my:Name="ListFilter" my:Value="{Binding Source=object, Path=Filter}" />
     </my:Properties>
</my:Control>
<!--end of sample filter builder with preview-->

UocHtmlSummary

Nome: UocHtmlSummary

Descrição: pode utilizar este controlo para definir uma página de resumo numa página RCDC. Esta página de resumo é apresentada depois de o utilizador final submeter um pedido. Este controlo só pode ser utilizado num Agrupamento de Resumo e tem de ser o único controlo. Recomendamos vivamente que utilize o código de exemplo fornecido.

Nota

Este controlo não foi testado extensivamente.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • ModificaçõesXml: esta propriedade tem de ser formatada como {Binding Source=delta, Path=DeltaXml}, onde o delta é definido no cabeçalho de configuração ObjectDataSource.

  • TransformXsl: esta propriedade está formatada como {Binding Source=summaryTransformXsl, Path=/}, onde summaryTransformXsl é definido no cabeçalho de configuração XmlDataSource.

Eventos:

  • Não existem eventos para este controlo.

Exemplo:

Para obter um exemplo deste controlo, veja o exemplo de um Agrupamento de Resumo na secção Elemento de agrupamento deste documento.

Nome: UocHyperLink

Descrição: este é um controlo de hiperligação simples. Pode utilizar este controlo para apresentar informações como uma hiperligação.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • ObjectReference: esta é uma propriedade opcional do tipo de referência. Se um recurso válido for referenciado pelo GUID definido nesta propriedade, a hiperligação fornece ao utilizador final uma forma de aceder ao recurso. Isto é mutuamente exclusivo com a propriedade NavigateUrl.

  • Texto: esta é uma propriedade opcional, tipo cadeia de carateres. Utilize esta propriedade para definir o texto que aparece como a hiperligação.

  • NavigateUrl: esta é uma propriedade opcional do tipo cadeia de carateres. Utilize esta propriedade para definir o URL de caminho completo ao qual a hiperligação se liga. Isto é mutuamente exclusivo com a propriedade ObjectReference.

Eventos:

  • Não existem eventos para este controlo.

Exemplo:

Controlo UocHyperLink

Nota

Precisa de um GUID válido de um recurso para o associar. Neste caso, a segunda hiperligação é gerada com um GUID válido. O primeiro pode ser qualquer Web site.

O seguinte segmento de código gera uma hiperligação de redirecionamento:

<!--Sample for a hyperlink that redirects page.-->
<my:Control my:Name="RedirectHyperlink" my:TypeName="UocHyperLink" my:Caption="Redirect Hyperlink" my:Description="This is a hyperlink that takes you to other pages.">
     <my:Properties>
          <my:Property my:Name="NavigateUrl" my:Value="http://www.microsoft.com"/>
          <my:Property my:Name="Text" my:Value="Microsoft Home Page"/>
     </my:Properties>
</my:Control>
<!--End of Sample for a hyperlink that redirect page-->

O segmento de código seguinte gera uma hiperligação que referencia um recurso. A referência explícita pode ser substituída pela expressão {Binding Source=object, Path=Creator} para o vincular a uma origem de dados. Isto só pode ser válido quando o gestor do recurso existe e é de valor de tipo de referência.

<!--Sample for a hyperlink that reference object-->
<my:Control my:Name="ReferenceHyperlink" my:TypeName="UocHyperLink" my:Caption="Reference Hyperlink" my:Description="This is a hyperlink gives you an object view of the reference object">
     <my:Properties>
          <my:Property my:Name="ObjectReference" my:Value="e4e048b1-9e43-415e-806c-cf44c429c34c"/>
          <my:Property my:Name="Text" my:Value="View a group in FIM 2010."/>
     </my:Properties>
</my:Control>
<!--End of Sample for a hyperlink that reference object-->

UocIdentityPicker

Nome: UocIdentityPicker

Descrição: este controlo consiste numa caixa de Resolução opcional e numa janela Procurar. A caixa Desativação opcional consiste numa caixa de texto opcional para introduzir a identidade, um botão Resolver para resolver a identidade e um botão Procurar para pedir uma janela de pesquisa de pop-up. A janela Procurar permite que o utilizador selecione identidades através de um controlo de vista de lista. A identidade selecionada na janela Procurar reflete-se na caixa Resolver.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • UsageKeywords: esta é uma propriedade de cadeia opcional. Pode definir uma lista de âmbitos de pesquisa a utilizar no Seletor de Recursos ao fornecer uma lista das palavras-chave de utilização que são suportadas pela estrutura SearchScopeConfiguration, onde cada palavra-chave é separada por um apóstrofo (').

  • Filtro: esta é uma propriedade de cadeia opcional. O utilizador fornece uma expressão XPath para definir o âmbito do seletor de recursos para apresentar apenas os itens que se enquadram num âmbito definido. Esta propriedade é mutuamente exclusiva com a propriedade UsageKeywords. Quando o âmbito de pesquisa é aplicado, esta propriedade não tem efeito.

  • ResultObjectType: esta é uma propriedade de cadeia opcional. O tipo de recurso é utilizado para compor recursos na lista de caixas de diálogo de pop-up. Isto é utilizado com o Filtro para ajudar o Selecionador de Identidade a identificar que tipo de recurso é devolvido pelo Filtro e a compor os dados em conformidade. Esta propriedade é mutuamente exclusiva com a propriedade UsageKeywords. Quando o âmbito de pesquisa é aplicado, isto não tem efeito. A cadeia que é aceite para esta propriedade é qualquer nome único, válido, do tipo de recurso, por exemplo, Pessoa. Quando se espera que o filtro devolva vários tipos de recursos, é utilizado Recurso.

  • PreviewTitle: este é o título de pré-visualização utilizado numa vista de lista. Para obter informações sobre esta propriedade, consulte a secção UocListView.

  • ListViewTitle: esta é uma propriedade de cadeia opcional. Pode utilizar esta propriedade para definir o texto apresentado na parte superior da vista de lista como um título.

  • Valor: esta é uma propriedade de cadeia opcional. Recomenda-se que o enlace com um atributo de esquema para ligar o valor a uma origem de dados.

  • Modo: esta é uma propriedade de cadeia opcional. Pode utilizar esta propriedade para definir se um valor pode ser selecionado pelo Selecionador de Identidade ou se podem ser selecionadas múltiplas identidades. SingleResult e MultipleResult são os valores permitidos. Por predefinição, está definido como SingleResult.

  • ObjectTypes: esta é uma propriedade opcional do tipo cadeia. Pode definir uma lista de tipos de recursos com os quais o utilizador final pode resolver as entradas na caixa Resolução do Seletor de Identidades. A lista consiste numa lista de nomes de tipo de recurso separados por uma vírgula ','.

  • AttributesToSearch: esta é uma propriedade opcional do tipo cadeia de carateres. Pode definir uma lista de atributos a utilizar para resolver o item no Seletor de Identidade, onde a lista é uma lista de atributos de esquema, separados por uma vírgula ','. Por exemplo, se AttributesToSearch estiver definido como DisplayName, Alias, o utilizador pode procurar os itens com DisplayName = \<search value\> ou Alias=\<search value\>. Os nomes de atributos introduzidos aqui devem ser atributos válidos nos tipos de recursos de destino da origem de dados especificada na propriedade Valor. Os tipos de recursos de destino podem ser encontrados no campo ObjectTypes. Todos os atributos têm de ser válidos em todos os tipos de recursos que são citados no campo ObjectTypes.

  • ColumnsToDisplay: esta é uma propriedade opcional, tipo cadeia. O utilizador fornece uma lista de nomes de atributos de esquema, separados por uma vírgula ','. Os atributos que estão definidos aqui compõem a coluna da vista de lista no Seletor de Identidade.

  • Linhas: esta é uma propriedade opcional, número inteiro. Só funciona quando o Modo está definido como MultipleResult. Utilize esta propriedade para definir a altura da caixa de texto Resolver para um determinado tamanho em unidades de carateres.

  • MainSearchScreenText: esta é uma propriedade opcional do tipo cadeia de carateres. Este é o texto personalizado que aparece enquanto a pesquisa está em execução na janela Procurar.

Eventos:

  • SelectedObjectChanged: este evento é emitido quando o utilizador altera os recursos selecionados.

Exemplo:

Controlo UocIdentityPicker no modo SingleResult

Nota

Para que este exemplo funcione, tem de criar um novo enlace entre o atributo Gestor e qualquer tipo de recurso personalizado a que este XML se aplique.

O segmento de código seguinte gera um Selecionador de Identidade no modo SingleResult com as propriedades Filter e ResultObjectType como parte do RCDC:

<!--Sample for a single-selection identity picker using Filter and Result Object Type-->
<my:Control my:Name="SingleSelectionIdentityPicker" my:TypeName="UocIdentityPicker" my:Caption="A Single Selection Identity Picker" my:Description="The user is allowed to select only one entry here." my:RightsLevel="{Binding Source=rights, Path=Manager}">
     <my:Properties>
          <my:Property my:Name="Required" my:Value="{Binding Source=schema, Path=Manager.Required}"/>
          <my:Property my:Name="Mode" my:Value="SingleResult" />
          <!--Columns displayed in list view in pop-up window-->
          <my:Property my:Name="ColumnsToDisplay" my:Value="DisplayName, ObjectType" />
          <!--Identities will be resolved against following attribute in the resolve textbox when resolve button is clicked.-->
          <my:Property my:Name="AttributesToSearch" my:Value="DisplayName, AccountName" />
          <!--single valued reference type attribute is used to bind the control-->
          <my:Property my:Name="Value" my:Value="{Binding Source=object, Path=Manager , Mode=TwoWay}" />
          <!--Scoping the list explicitly to All Persons name contains letter "e"-->
          <my:Property my:Name="Filter" my:Value="/Person[contains(JobTitle, 'Manager')]"/>
          <!--Result object type specify the type is Person-->
          <my:Property my:Name="ResultObjectType" my:Value="Person"/>
          <my:Property my:Name="ListViewTitle" my:Value="Select only one entry" />
          <my:Property my:Name="PreviewTitle" my:Value="Entry selected:" />
     </my:Properties>
</my:Control>
<!--End of sample for a single-selection identity picker.-->

A seguinte figura mostra um Selecionador de Identidade no modo MultipleResult:

Controlo UocIdentityPicker no modo MultipleResult

Nota

Para que este código de exemplo funcione, tem de vincular o atributo ExplicitMember (um atributo de referência de valores múltiplos) ao tipo de recurso personalizado. Crie âmbitos de pesquisa com a propriedade UsageKeyword definida como Pessoa e Grupo.

O segmento de código seguinte cria um Seletor de Identidade no modo MultipleResult:

<!--Sample for a multiselection Identity Picker uses Search Scope-->
<my:Control my:Name="multiSelectionIdentityPicker" my:TypeName="UocIdentityPicker" my:Caption="A multi Selection Identity Picker" my:Description="The user is allowed to select more than one entry here" my:RightsLevel="{Binding Source=rights, Path=ExplicitMember}">
     <my:Properties>
          <my:Property my:Name="Required" my:Value="{Binding Source=schema, Path=ExplicitMember.Required}"/>
          <my:Property my:Name="Mode" my:Value="MultipleResult" />
          <my:Property my:Name="Rows" my:Value="10" />
          <!--There are existing search scopes that has key word "Person" and "Group" use both sets of search scopes here.-->
          <my:Property my:Name="UsageKeywords" my:Value="Person,Group"/>
          <!--Columns displayed in list view in pop-up window-->
          <my:Property my:Name="ColumnsToDisplay" my:Value="DisplayName, ObjectType" />
          <!--Identities will be resolved against following attribute in the resolve textbox when resolve button is clicked.-->
          <my:Property my:Name="AttributesToSearch" my:Value="DisplayName, AccountName" />
          <!--multi valued reference type attribute is used to bind the control-->
          <my:Property my:Name="Value" my:Value="{Binding Source=object, Path=ExplicitMember , Mode=TwoWay}" />
          <my:Property my:Name="ResultObjectType" my:Value="Resource"/>
          <my:Property my:Name="ListViewTitle" my:Value="Select multiple entries" />
          <my:Property my:Name="PreviewTitle" my:Value="Entries selected" />
     </my:Properties>
</my:Control>
<!--End of sample for a multiselection Identity Picker.-->

UocLabel

Nome: UocLabel

Descrição: este é um controlo de etiqueta de texto simples, só de leitura. Recomendamos que este controlo seja utilizado para apresentar dados só de leitura.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • Texto: este é um atributo de tipo de cadeia. Pode definir esta propriedade ao fornecer um valor de cadeia explícito ou ao enlace-lo com uma origem de dados. Um enlace de exemplo que atribui o valor desta propriedade é {Binding Source=object, Path=<valid attribute name>.

Para obter um exemplo do controlo UocLabel, veja o controlo simples na secção Exemplos de controlo simples.

UocListView

Nome: UocListView

Descrição: este é um controlo de vista de lista avançado. Consiste numa vista de lista simples, uma pesquisa simples opcional, um controlo de pesquisa avançado opcional, uma caixa de pré-visualização de seleção opcional e uma barra de botão de ação. A pesquisa simples opcional consiste num âmbito de pesquisa e numa caixa de texto de pesquisa simples. O controlo de pesquisa avançado é um construtor de filtros. A vista de lista mostra uma lista pré-gerada de recursos. Também pode mostrar resultados de pesquisa provenientes dos controlos de pesquisa neste controlo. A barra Botão de Ação define que ação pode ser efetuada com base na seleção na vista de lista. A caixa Pré-visualização da Seleção mostra que itens estão selecionados na vista de lista.

Importante

O UocListView não funciona com atributos de referência de valor único. Só pode ser utilizado com atributos de referência de valores múltiplos. Para obter atributos de referência de valor único, veja UocIdentityPicker neste documento.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • SelectedValue: esta é uma propriedade opcional de tipo de cadeia que está vinculada a um atributo de referência de valores múltiplos que aceita uma lista de cadeias formatadas por GUID.

  • PageSize: esta é uma propriedade de número inteiro opcional. O utilizador pode especificar quantas entradas cabem numa página num controlo de vista de lista. O valor predefinido é 10 entradas. Qualquer número inteiro positivo é válido.

  • UsageKeyword: esta é uma propriedade opcional do tipo cadeia. O utilizador pode especificar uma lista de palavras-chave que definem que âmbito de pesquisa é utilizado no controlo de pesquisa de vista de lista. Existem recursos de âmbito de pesquisa no servidor FIM 2010. O atributo numa estrutura SearchScopeConfiguration, denominada UsageKeyword, é utilizado para agrupar um conjunto de âmbitos de pesquisa. A vista de lista consome essa lista de palavras-chave. Cada palavra-chave é separada por uma vírgula (,). Esta é a palavra-chave de utilização utilizada no âmbito de pesquisa correspondente que pretende mostrar nesta vista de lista. Isto só está em vigor quando a propriedade ShowSearchControl está definida como true.

  • SearchControlAutoPostback: esta é uma propriedade Booleana opcional. Defina o valor desta propriedade como verdadeiro para efetuar a repetição automática quando uma pesquisa é acionada. Por predefinição, SearchControlAutoPostback está definido como falso.

  • EmptyResultText: esta é uma propriedade opcional do tipo cadeia de carateres. Por predefinição, está definido como Sem itens, mas pode ser definido para qualquer valor de cadeia. Este texto é apresentado quando um resultado de pesquisa está vazio.

  • ButtonHeight: esta é uma propriedade opcional de tipo inteiro. Defina o valor desta propriedade para qualquer valor inteiro positivo. Esta propriedade define a altura dos botões na barra de ação em píxeis. O valor predefinido é 32 píxeis.

  • ButtonWidth: esta é uma propriedade opcional de tipo inteiro. Defina o valor desta propriedade para qualquer valor inteiro positivo. Esta propriedade define a largura dos botões na barra de ação em píxeis. O valor predefinido é 32 píxeis.

  • CaptionImageMaxHeight: esta é uma propriedade opcional de tipo inteiro. Defina o valor desta propriedade para qualquer número inteiro positivo. Esta propriedade define a altura máxima do ícone de uma legenda opcional. O valor predefinido é 32 píxeis.

  • CaptionImageMaxWidth: esta é uma propriedade opcional de tipo inteiro. Defina o valor desta propriedade para qualquer número inteiro positivo. Esta propriedade define a largura máxima do ícone de uma legenda opcional. O valor predefinido é 32 píxeis.

  • CaptionImageUrl: esta é uma propriedade opcional do tipo cadeia. Esta propriedade define um URL que liga a uma imagem que aparece como a imagem da legenda.

  • PreviewTitle: esta é uma propriedade opcional do tipo cadeia de carateres. Utilize esta propriedade para definir o texto que aparece na parte superior da caixa de pré-visualização de seleção.

  • EnableSelection: esta é uma propriedade opcional do tipo Booleano. Utilize esta propriedade para definir se uma vista de lista está no modo de seleção. Se uma vista de lista estiver no modo de seleção, é apresentada uma coluna de caixas de verificação na coluna mais à esquerda da vista de lista e é apresentada uma caixa de pré-visualização de seleção na parte inferior da vista de lista. O valor predefinido desta propriedade está definido como verdadeiro.

  • SingleSelection: esta é uma propriedade opcional do tipo Booleano. Se o modo de seleção estiver ativado para a vista de lista, definir este valor como verdadeiro limita o utilizador final a selecionar apenas um item da lista. Por predefinição, o valor desta propriedade está definido como falso. Isto significa que, por predefinição, o utilizador final pode selecionar vários itens da lista.

  • RedirectUrl: esta é uma propriedade opcional do tipo cadeia. Utilize esta propriedade para especificar uma página para a qual redirecionar quando um item com hiperligação é clicado na lista. Este URL pode conter marcadores de posição que são substituídos pelo valor real durante o runtime. Os marcadores de posição são os seguintes:

    • {0} objectType
    • {1} objectID
    • {2} displayName
  • ShowTitleBar: esta é uma propriedade opcional do tipo Booleano. Utilize esta propriedade para especificar se a barra de título deve estar visível. O valor predefinido desta propriedade é falso.

  • ShowActionBar: esta é uma propriedade opcional do tipo Booleano. Utilize esta propriedade para especificar se a área da barra de ação deve estar visível. O valor predefinido desta propriedade é verdadeiro.

  • ShowPreview: esta é uma propriedade opcional do tipo Booleano. Utilize esta propriedade para especificar se a área de pré-visualização deve estar visível. O valor predefinido desta propriedade é verdadeiro.

  • ShowSearchControl: esta é uma propriedade opcional do tipo Booleano. Utilize esta propriedade para especificar se o controlo de pesquisa deve estar visível. O valor predefinido desta propriedade é verdadeiro.

  • ResultObjectType: esta é uma propriedade opcional de tipo de cadeia. Utilize esta propriedade para especificar o tipo de objeto esperado dos resultados da pesquisa. O valor predefinido desta propriedade é Recurso. Se o resultado da pesquisa contiver vários tipos de recursos, este valor deve ser especificado como Recurso.

  • ColumnsToDisplay: esta é uma propriedade opcional. Utilize esta propriedade para especificar os atributos que pretende que a vista de lista apresente como colunas. O valor predefinido desta propriedade é DisplayName, ResourceType. Cada coluna é representada pelo nome do sistema de um atributo. Cada coluna é separada por uma vírgula ','. Não tem de especificar um valor para esta propriedade quando a vista de lista é utilizada no modo de seleção. No modo de seleção, a definição da coluna provém do atributo SearchScopeColumn do âmbito de pesquisa que está atualmente selecionado.

  • ListFilter: esta é uma propriedade opcional do tipo cadeia de carateres. Este é o xpath que é utilizado para compor a vista de lista e só está em vigor quando a propriedade ShowSearchControl está definida como falso. Quando este valor é especificado, a vista de lista utiliza este valor de propriedade para consultas e a vista de lista não está no modo de seleção. O filtro pode ser vinculado a um atributo de cadeia do recurso:

    <my:Property my:Name="ListFilter" my:Value="{Binding Source=object, Path=Filter}"/>

    ou seja uma cadeia que contenha alguma variável de ambiente predefinida:

    <my:Property my:Name="ListFilter" my:Value="/Approval[Request=''%ObjectID%'']"/>

  • TargetAttribute: esta é uma propriedade obsoleta. O respetivo valor deve ser o nome do sistema de um atributo referenciado de valores múltiplos. Recomendamos que esta propriedade já não seja utilizada. Por exemplo, na gestão de grupos, em vez de utilizar:

    <my:Property my:Name="TargetAttribute" my:Value="ExplicitMember"/>

    Utilize:

    <my:Property my:Name=”ListFilter” my:Value=”/Group[ObjectID=’%ObjectID%’]/ExplicitMember”/>

  • ItemClickBehavior: esta é uma propriedade opcional do tipo cadeia. Utilize esta propriedade para especificar se pretende clicar num item de vista de lista para acionar uma postback do servidor ou para apresentar uma vista de detalhes do item. São suportados dois valores de opção: ModelessDialog e Server. O valor predefinido é ModelessDialog.

  • SearchOnLoad: esta é uma propriedade opcional do tipo Booleano que especifica se o controlo de vista de lista deve consultar ao carregar. Esta propriedade só é aplicável quando a vista de lista está no modo de seleção. O valor predefinido para esta propriedade é verdadeiro. Pode desativá-lo se esperar que o utilizador escreva texto na pesquisa para obter um resultado significativo. Neste caso, a vista de lista mostra inicialmente uma mensagem para indicar ao utilizador como efetuar uma pesquisa. O texto pode ser personalizado pelas seguintes propriedades:

  • MainSearchScreenText: esta propriedade opcional de tipo de cadeia só é aplicável quando SearchOnload está definido como verdadeiro. Esta propriedade pode ser utilizada para personalizar texto que aparece no meio da vista de lista quando a vista de lista não é pesquisada automaticamente. O valor predefinido para esta propriedade é Localizar os recursos com a pesquisa, conforme descrito anteriormente. Pode especificar um valor para tornar o texto mais relevante para o seu cenário.

  • SubSearchScreenText: esta propriedade opcional de tipo de cadeia é utilizada para personalizar o texto que aparece após a propriedade MainSearchScreenText . Normalmente, não tem de especificar um valor para esta propriedade, a menos que pretenda adicionar algumas instruções adicionais sobre como utilizar a vista de lista.

Eventos:

  • Não existem eventos para este controlo.

Exemplo:

Para obter exemplos de como utilizar a vista de lista juntamente com o controlo UocFilterBuilder como uma lista de pré-visualização, veja os exemplos do UocFilterBuilder anteriormente neste documento. O UocListView também pode ser utilizado sem o construtor de filtros.

UocNumericBox

Nome: UocNumericBox

Descrição: esta é uma caixa de texto simples que utiliza apenas valores inteiros. Este controlo suporta o modo só de leitura e o modo atualizável.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • MaxValue: esta é uma propriedade opcional de tipo inteiro. Utilize esta propriedade para definir uma validação do lado do cliente para o controlo. O valor introduzido pelo utilizador final não pode exceder este valor. Pode introduzir um número inteiro explícito ou vincular isto a dados inteiros de uma origem de dados com {Binding Source=schema, Path=IntegerMaximum}.

  • MinValue: esta é uma propriedade opcional de tipo inteiro. Utilize esta propriedade para definir uma validação do lado do cliente para o controlo. O valor introduzido pelo utilizador final não pode ser inferior a este valor. Pode introduzir um número inteiro explícito ou vincular isto a dados inteiros de uma origem de dados com {Binding Source=schema, Path=IntegerMinimum}.

  • DefaultValue: esta é uma propriedade opcional de tipo inteiro. Utilize esta propriedade para definir um valor predefinido para o controlo se o controlo for utilizado para criar novos dados. Este valor só pode ser explicitamente definido como um número inteiro estático.

  • Valor: esta é uma propriedade opcional de tipo inteiro. Quando vincula isto a um tipo inteiro de dados de uma origem de dados, o valor desse atributo é apresentado quando a página é carregada e, em seguida, é guardado na origem de dados após a submissão.

Eventos:

  • TextChanged: este evento é emitido quando o valor atual dentro do controlo é alterado.

Exemplo:

Controlo UocNumericBox

Nota

O seguinte código de exemplo gera a primeira caixa numérica. A caixa numérica não está ligada a uma origem de dados ou a quaisquer informações de esquema.

<!--Sample for an explicit Numeric Box-->
<my:Control my:Name="SampleExplicitNumericBox" my:TypeName="UocNumericBox" my:Caption="An Explicit NumericBox" my:Description="This is a dummy numeric box that is not linked with data source.">
     <my:Properties>
          <my:Property my:Name="MinValue" my:Value="1"/>
          <my:Property my:Name="MaxValue" my:Value="100"/>
          <my:Property my:Name="DefaultValue" my:Value="1"/>
     </my:Properties>
</my:Control>
<!--End of sample for an explicit Numeric Box.-->

O seguinte código de exemplo gera a segunda caixa numérica.

Nota

Para que este exemplo funcione, primeiro tem de criar um novo atributo de tipo inteiro chamado AnIntegerAttribute e enlace-o com o tipo de recurso personalizado.

<!--Sample for a dynamically rendered numeric box-->
<my:Control my:Name="SampleDynamicNumericBox" my:TypeName="UocNumericBox" my:Caption="{Binding Source=schema, Path=AnIntegerAttribute.DisplayName}" my:Description="{Binding Source=schema, Path=AnIntegerAttribute.Description}" my:RightsLevel="{Binding Source=rights, Path=AnIntegerAttribute}">
     <my:Properties>
          <my:Property my:Name="MaxValue" my:Value="{Binding Source=schema, Path=AnIntegerAttribute.IntegerMaximum}"/>
          <my:Property my:Name="MinValue" my:Value="{Binding Source=schema, Path=AnIntegerAttribute.IntegerMinimum}"/>
          <my:Property my:Name="DefaultValue" my:Value="1"/>
          <my:Property my:Name="Value" my:Value="{Binding Source=object, Path=AnIntegerAttribute, Mode=TwoWay}"/>
          <my:Property my:Name="Required" my:Value="{Binding Source=schema, Path=AnIntegerAttribute.Required}"/>
     </my:Properties>
</my:Control>
<!--End of sample for a dynamically numeric box.-->

UocPictureBox

Nome: UocPictureBox

Descrição: este controlo é utilizado para compor dados de imagem, de tipo binário. Recomendamos que este controlo seja utilizado com dados de tipo binário. A imagem pode ser composta por um URL de imagem fornecido, dados de tipo binário ou a origem de atributos que contém dados de tipo de imagem.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • ImageUrl: esta é uma propriedade opcional, tipo cadeia de carateres. Introduza o URL da imagem de destino.

  • MaxHeight: esta é uma propriedade opcional de tipo de cadeia. Define a altura máxima da imagem a ser composta em píxeis.

  • MaxWidth: esta é uma propriedade opcional do tipo cadeia de carateres. Define a largura máxima da imagem a ser composta em píxeis.

  • ImageData: esta é uma propriedade de tipo binário. Utilize esta propriedade para vincular uma origem de dados à imagem apresentada. A origem de dados vinculada tem de ser binária. Também pode utilizar este campo para definir explicitamente uma imagem ao fornecer dados no formato byte[] .

  • ImageResource: esta é uma propriedade opcional de tipo binário.

  • AlternativeText: esta é uma propriedade opcional do tipo cadeia. Esta propriedade aparece como texto alternativo quando não é possível apresentar a imagem.

Eventos:

  • Não existem eventos para este controlo.

Exemplo:

Nota

Para utilizar este exemplo, tem de ter uma ligação de dados de imagem existente com o controlo.

O segmento de código seguinte gera um controlo de caixa de imagem que vincula uma origem de dados com o controlo:

<!--Sample for a Picture Box control binding with a data source-->
<my:Control my:Name="SamplePictureBoxImageData" my:TypeName="UocPictureBox" my:RightsLevel="{Binding Source=rights, Path=Photo}">
     <my:Properties>
          <my:Property my:Name="MaxHeight" my:Value="100" />
          <my:Property my:Name="MaxWidth" my:Value="100" />
          <my:Property my:Name="ImageData" my:Value="{Binding Source=object, Path=Photo}" />
     </my:Properties>
</my:Control>
<!--End of Sample for a Picture Box control-->

O segmento de código seguinte gera um controlo de caixa de imagem que vincula uma imagem de URL com o controlo:

<!--Sample for a Picture Box control bind with explicit URL-->
<my:Control my:Name="SamplePictureBoxImageUrl" my:TypeName="UocPictureBox">
     <my:Properties>
          <my:Property my:Name="MaxHeight" my:Value="100" />
          <my:Property my:Name="MaxWidth" my:Value="100" />
          <my:Property my:Name="ImageUrl" my:Value="http://www.microsoft.com/dummypicture.jpg" />
     </my:Properties>
</my:Control>
<!--End of Sample for a Picture Box control-->

UocRadioButtonList

Nome: UocRadioButtonList

Descrição: esta é uma lista simples de botões de opção. As escolhas são mutuamente exclusivas nesta lista. Este controlo é recomendado quando os utilizadores têm cinco ou menos opções para escolher. Caso contrário, recomenda-se UOCListView.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • ValuePath: o caminho do valor está definido como Valor. Vincula-se ao campo Valor do elemento Opção, conforme descrito nesta secção.

  • CaptionPath: o caminho do valor está definido como Legenda. Vincula-se ao campo Legenda do elemento Opção, conforme descrito nesta secção.

  • HintPath: o caminho do valor está definido como Sugestão. Vincula-se ao campo Sugestão do elemento Opção, conforme descrito nesta secção.

  • SelectedValue: o valor que está atualmente selecionado. Esta é uma propriedade necessária, tipo cadeia. Esta propriedade vincula-se aos dados de cadeia da origem de dados.

Eventos:

  • SelectedIndexChanged: o evento ocorre quando o botão de opção selecionado muda.

  • CheckedChanged: quando o botão de opção muda de estado, este evento é emitido.

Opções:

Só podem existir dois elementos opções como opções para este controlo. Para obter a estrutura de um elemento Opções , veja Elemento Opções.

  • Valor: o campo Valor num único elemento Opção tem de ser definido como Verdadeiro ou Falso.

  • Legenda: pode ser qualquer valor de cadeia.

  • Sugestão: pode ser qualquer valor de cadeia.

Exemplo:

Controlo UocRadioButtonList

Nota

Para que este exemplo funcione, tem de criar um novo atributo Booleano, ABooleanAttribute, e enlace-o com o seu tipo de recurso personalizado.

O segmento de código seguinte cria uma lista de botões de opção:

<!--Sample for option button list control-->
<my:Control my:Name="SampleRadioButtonList" my:TypeName="UocRadioButtonList" my:Caption="{Binding Source=schema, Path=ABooleanAttribute.DisplayName}" my:Description="{Binding Source=schema, Path=ABooleanAttribute.Description}" my:RightsLevel="{Binding Source=rights, Path=ABooleanAttribute}">
     <my:Options>
          <my:Option my:Value="False" my:Caption="Set Value To False" my:Hint="By selecting this option, you are setting the value of the attribute to false." />
          <my:Option my:Value="True" my:Caption="Set Value To True" my:Hint="By selecting this option, you are setting the value of the attribute to true." />
     </my:Options>
     <my:Properties>
          <my:Property my:Name="Required" my:Value="{Binding Source=schema, Path=ABooleanAttribute.Required}" />
          <my:Property my:Name="ValuePath" my:Value="Value" />
          <my:Property my:Name="CaptionPath" my:Value="Caption" />
          <my:Property my:Name="HintPath" my:Value="Hint" />
          <my:Property my:Name="SelectedValue" my:Value="{Binding Source=object, Path=ABooleanAttribute, Mode=TwoWay}" />
     </my:Properties>
</my:Control>
<!--End of Sample for option button list control-->

UocSimpleRadioButton

Nome: UocSimpleRadioButton

Descrição: este é um controlo simples de botão de opção. A utilização deste controlo é semelhante a uma caixa de verificação simples. Existem dois botões de opção a mostrar lado a lado com a etiquetagem de texto. Recomenda-se vincular o controlo a dados do tipo Booleano.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • TrueText: esta é uma propriedade opcional do tipo cadeia de carateres. Este é o texto que aparece quando o botão de opção está selecionado.

  • FalseText: esta é uma propriedade opcional do tipo cadeia de carateres. Este é o texto que aparece quando o botão de opção não está selecionado.

  • SelectedItem: esta é uma propriedade opcional do tipo Booleano. Este valor indica que o botão de opção está selecionado. Isto pode vincular-se a dados do tipo Booleano de uma origem de dados. O valor predefinido está definido como falso.

Eventos:

  • CheckedChanged: quando o botão de opção muda de estado de selecionado para não selecionado ou o contrário, este sinal é emitido.

Exemplo:

Controlo UocSimpleRadioButton

Nota

Para que o exemplo funcione, tem de criar um novo atributo Booleano ABooleanAttribute e enlace-o ao seu tipo de recurso personalizado. Os dados RCDC são aplicados ao mesmo tipo de recurso personalizado.

O seguinte segmento de código gera um botão de opção:

<!--Sample for simple option button control-->
<my:Control my:Name="SampleSimpleRadioButton" my:TypeName="UocSimpleRadioButton" my:Caption="{Binding Source=schema, Path=ABooleanAttribute.DisplayName}" my:Description="{Binding Source=schema, Path=ABooleanAttribute.Description}" my:RightsLevel="{Binding Source=rights, Path=ABooleanAttribute}">
     <my:Properties>
          <my:Property my:Name="Required" my:Value="{Binding Source=schema, Path=ABooleanAttribute.Required}" />
          <my:Property my:Name="FalseText" my:Value="False"/>
          <my:Property my:Name="TrueText" my:Value="True"/>
          <my:Property my:Name="SelectedItem" my:Value="{Binding Source=object, Path=ABooleanAttribute, Mode=TwoWay}" />
     </my:Properties>
</my:Control>
<!--End of Sample for simple option button control-->

UocTextBox

Nome: UocTextBox

Descrição: esta é uma caixa de texto simples que suporta entradas de tipo de cadeia. Recomendamos que utilize este controlo para vincular a dados de tipo de cadeia.

Propriedades:

  • Todas as propriedades comuns: para obter informações sobre estas propriedades, veja Propriedades comuns.

  • MaxLength: este é um atributo opcional de tipo inteiro. Esta propriedade especifica o comprimento máximo de uma entrada de cadeia. O valor predefinido para esta propriedade é de 128 carateres.

  • Texto: esta é uma propriedade opcional, tipo cadeia de carateres. Este é o texto que aparece na caixa de texto. Pode definir uma cadeia explícita que aparece na caixa de texto durante o carregamento inicial do controlo ou vincular a um atributo de esquema de um tipo de cadeia.

  • Linhas: esta é uma propriedade opcional do tipo número inteiro. Esta propriedade define a altura da caixa de texto em unidades de carateres. O valor predefinido é um caráter.

  • Colunas: esta é uma propriedade opcional do tipo número inteiro. Esta propriedade define a largura da caixa de texto em unidades de carateres. O valor predefinido é 20 carateres.

  • Moldagem: esta é uma propriedade opcional do tipo Booleano. Ao definir o valor desta propriedade como verdadeiro, o utilizador ativa a funcionalidade Moldagem do Word na caixa de texto. O valor predefinido desta propriedade está definido como verdadeiro.

  • UniquenessValidationXPath: esta é uma propriedade opcional, tipo cadeia. Utiliza uma expressão de filtro FIM XPath válida e garante que o valor introduzido pelo utilizador é exclusivo dentro dos recursos que estão no âmbito do filtro. Por exemplo, para garantir que o nome a apresentar pedido pelo utilizador é exclusivo em todos os grupos de segurança com capacidade de correio na BD do Serviço FIM, utilizaria o XPath /Group[DisplayName=’%VALUE%’ and Type=’MailEnabledSecurity’. A ação de validação é executada quando o utilizador sai da página. Esta propriedade só é suportada no RCDC para criação de um recurso.

  • UniquenessErrorMessage: esta é uma propriedade opcional do tipo cadeia. Esta cadeia é utilizada para apresentar uma mensagem de erro se a validação UniquenessValidationXPath falhar e puder ser texto explícito ou uma Variável de Recurso de Cadeia. Se esta propriedade não for especificada, a mensagem de erro predefinida para uma validação falhada é "%VALOR% já existe. Experimente uma diferente."

Eventos:

  • TextChanged: este evento é emitido quando o texto dentro da caixa de texto é alterado.

Exemplo:

Veja a secção Exemplos de controlo simples para obter uma amostra completa deste controlo.


Apêndice A: Esquema XSD predefinido

Esta secção mostra o esquema XSD completo para todos os RCDCs predefinidos fornecidos com Microsoft Identity Manager 2016 SP1.

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<xsd:schema targetNamespace="http://schemas.microsoft.com/2006/11/ResourceManagement" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:my="http://schemas.microsoft.com/2006/11/ResourceManagement" xmlns:xd="http://schemas.microsoft.com/office/infopath/2003" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:attribute name="TypeName" type="my:requiredString"/>
    <xsd:attribute name="Name" type="my:requiredAlphanumericString"/>
    <xsd:attribute name="Parameters" type="xsd:string"/>
    <xsd:attribute name="DisplayAsWizard" type="xsd:boolean"/>
    <xsd:attribute name="Caption" type="xsd:string"/>
    <xsd:attribute name="AutoValidate" type="xsd:boolean"/>
    <xsd:attribute name="Enabled" type="xsd:string"/>
    <xsd:attribute name="Visible" type="xsd:string"/>
    <xsd:attribute name="IsSummary" type="xsd:boolean"/>
    <xsd:attribute name="IsHeader" type="xsd:boolean"/>
    <xsd:attribute name="HelpText" type="xsd:string"/>
    <xsd:attribute name="Link" type="xsd:string"/>
    <xsd:attribute name="Description" type="xsd:string"/>
    <xsd:attribute name="ExpandArea" type="xsd:boolean"/>
    <xsd:attribute name="Hint" type="xsd:string"/>
    <xsd:attribute name="AutoPostback" type="xsd:string"/>
    <xsd:attribute name="RightsLevel" type="my:requiredString"/>
    <xsd:attribute name="Value" type="xsd:string"/>
    <xsd:attribute name="Handler" type="my:requiredString"/>
    <xsd:attribute name="ImageUrl" type="xsd:string"/>
    <xsd:attribute name="RedirectUrl" type="xsd:string"/>
    <xsd:attribute name="ClickBehavior" type="xsd:string"/>
    <xsd:attribute name="EnableMode" type="xsd:string"/>
    <xsd:attribute name="ValueType" type="xsd:string"/>
    <xsd:attribute name="Condition" type="xsd:string"/>
    <xsd:element name="ObjectControlConfiguration">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="my:ObjectDataSource" minOccurs="0" maxOccurs="32"/>
                <xsd:element ref="my:XmlDataSource" minOccurs="0" maxOccurs="32"/>
                <xsd:element ref="my:Panel"/>
                <xsd:element ref="my:Events" minOccurs="0" maxOccurs="1"/>
            </xsd:sequence>
            <xsd:attribute ref="my:TypeName"/>
            <xsd:anyAttribute processContents="lax" namespace="http://www.w3.org/XML/1998/namespace"/>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="ObjectDataSource">
        <xsd:complexType>
            <xsd:sequence/>
            <xsd:attribute ref="my:TypeName"/>
            <xsd:attribute ref="my:Name"/>
            <xsd:attribute ref="my:Parameters"/>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="XmlDataSource">
        <xsd:complexType  mixed="true">
      <xsd:sequence>
        <xsd:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
      </xsd:sequence>
      <xsd:attribute ref="my:Name"/>
      <xsd:attribute ref="my:Parameters"/>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Panel">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="my:Grouping" minOccurs="1" maxOccurs="16"/>
            </xsd:sequence>
            <xsd:attribute ref="my:Name"/>
            <xsd:attribute ref="my:DisplayAsWizard"/>
            <xsd:attribute ref="my:Caption"/>
            <xsd:attribute ref="my:AutoValidate"/>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Grouping">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="my:Help" minOccurs="0"  maxOccurs="1"/>
                <xsd:element ref="my:Control" minOccurs="1" maxOccurs="256"/>
                <xsd:element ref="my:Events" minOccurs="0" maxOccurs="1"/>
            </xsd:sequence>
            <xsd:attribute ref="my:Name"/>
            <xsd:attribute ref="my:Caption"/>
            <xsd:attribute ref="my:Description"/>
            <xsd:attribute ref="my:Enabled"/>
            <xsd:attribute ref="my:Visible"/>
            <xsd:attribute ref="my:IsHeader"/>
            <xsd:attribute ref="my:IsSummary"/>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Help">
        <xsd:complexType>
            <xsd:sequence/>
            <xsd:attribute ref="my:HelpText"/>
            <xsd:attribute ref="my:Link"/>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Control">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="my:Help" minOccurs="0"  maxOccurs="1"/>
                <xsd:element ref="my:CustomProperties" minOccurs="0"  maxOccurs="1"/>
                <xsd:element ref="my:Options" minOccurs="0"  maxOccurs="1"/>
                <xsd:element ref="my:Buttons" minOccurs="0"  maxOccurs="1"/>
                <xsd:element ref="my:Properties" minOccurs="0"  maxOccurs="1"/>
                <xsd:element ref="my:Events" minOccurs="0" maxOccurs="1"/>
            </xsd:sequence>
            <xsd:attribute ref="my:Name"/>
            <xsd:attribute ref="my:TypeName"/>
            <xsd:attribute ref="my:Caption"/>
            <xsd:attribute ref="my:Enabled"/>
            <xsd:attribute ref="my:Visible"/>
            <xsd:attribute ref="my:Description"/>
            <xsd:attribute ref="my:ExpandArea"/>
            <xsd:attribute ref="my:Hint"/>
            <xsd:attribute ref="my:AutoPostback"/>
            <xsd:attribute ref="my:RightsLevel"/>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="CustomProperties">
        <xsd:complexType mixed="true">
            <xsd:sequence>
                <xsd:any minOccurs="0" maxOccurs="unbounded" namespace="##targetNamespace" processContents="lax"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Options">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="my:Option" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
            <xsd:attribute ref="my:ValueType"/>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Option">
        <xsd:complexType>
            <xsd:simpleContent>
                <xsd:extension base="xsd:string">
                    <xsd:attribute ref="my:Value"/>
                    <xsd:attribute ref="my:Caption"/>
                    <xsd:attribute ref="my:Hint"/>
                </xsd:extension>
            </xsd:simpleContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Buttons">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="my:Button" minOccurs="1" maxOccurs="8"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Button">
        <xsd:complexType>
            <xsd:simpleContent>
                <xsd:extension base="xsd:string">
                    <xsd:attribute ref="my:Name"/>
                    <xsd:attribute ref="my:Caption"/>
                    <xsd:attribute ref="my:Hint"/>
                    <xsd:attribute ref="my:ImageUrl"/>
                    <xsd:attribute ref="my:ClickBehavior"/>
                    <xsd:attribute ref="my:RedirectUrl"/>
                    <xsd:attribute ref="my:Enabled"/>
                    <xsd:attribute ref="my:Visible"/>
                    <xsd:attribute ref="my:EnableMode"/>
                </xsd:extension>
            </xsd:simpleContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Properties">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="my:Property" minOccurs="1" maxOccurs="32"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Property">
        <xsd:complexType>
            <xsd:simpleContent>
                <xsd:extension base="xsd:string">
                    <xsd:attribute ref="my:Name"/>
                    <xsd:attribute ref="my:Value"/>
                    <xsd:attribute ref="my:Condition"/>                 
                </xsd:extension>
            </xsd:simpleContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Events">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element ref="my:Event" minOccurs="1" maxOccurs="16"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
    <xsd:element name="Event">
        <xsd:complexType>
            <xsd:simpleContent>
                <xsd:extension base="xsd:string">
                    <xsd:attribute ref="my:Name"/>
                    <xsd:attribute ref="my:Handler"/>
          <xsd:attribute ref="my:Parameters"/>
        </xsd:extension>
            </xsd:simpleContent>
        </xsd:complexType>
    </xsd:element>
    <xsd:simpleType name="requiredString">
        <xsd:restriction base="xsd:string">
            <xsd:minLength value="1"/>
        </xsd:restriction>
    </xsd:simpleType>
  <xsd:simpleType name="requiredAlphanumericString">
    <xsd:restriction base="xsd:string">
      <xsd:pattern value="[A-Za-z0-9_]{1,128}"/>
    </xsd:restriction>
  </xsd:simpleType>
    <xsd:simpleType name="requiredAnyURI">
        <xsd:restriction base="xsd:anyURI">
            <xsd:minLength value="1"/>
        </xsd:restriction>
    </xsd:simpleType>
    <xsd:simpleType name="requiredBase64Binary">
        <xsd:restriction base="xsd:base64Binary">
            <xsd:minLength value="1"/>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:schema>

Apêndice B: XSL de Resumo Predefinido

Esta secção mostra o XSL de Resumo completo fornecido com Microsoft Identity Manager 2016 SP1.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
  <xsl:template name="output-attribute-value">
    <xsl:param name="attribute"/>
    <xsl:param name="type"/>
    <xsl:choose>
      <xsl:when test="$type='Binary'">
        <xsl:value-of select="$attribute" disable-output-escaping="yes"/>
      </xsl:when>
      <xsl:when test="$type='Text'">
        <xsl:text xml:space="preserve" disable-output-escaping="yes">(text data)</xsl:text>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="translate($attribute,' ','&#160;')" disable-output-escaping="yes"/>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template name="output-modified-value">
    <xsl:param name="name"/>
    <xsl:param name="attribute1"/>
    <xsl:param name="text1"/>
    <xsl:param name="attribute2"/>
    <xsl:param name="text2"/>
    <xsl:param name="type"/>
    <tr class="listViewRow" style="height:22px;">
      <xsl:if test="position() mod 2 != 0">
        <td class="commonSummaryListViewCellBR ms-vb">
          <xsl:value-of select="$name" disable-output-escaping="yes"/>
        </td>
        <xsl:choose>
          <xsl:when test="$attribute1 and $attribute1!=''">
            <td class="commonSummaryListViewCellBR ms-vb">
              <xsl:call-template name="output-attribute-value">
                <xsl:with-param name="attribute" select="$attribute1"/>
                <xsl:with-param name="type" select="$type"/>
              </xsl:call-template>
            </td>
          </xsl:when>
          <xsl:otherwise>
            <td class="commonSummaryListViewCellBR ms-vb">
              <xsl:copy-of select="$text1"/>
            </td>
          </xsl:otherwise>
        </xsl:choose>
        <xsl:choose>
          <xsl:when test="$attribute2 and $attribute2!=''">
            <td class="commonSummaryListViewCellBR ms-vb">
              <xsl:call-template name="output-attribute-value">
                <xsl:with-param name="attribute" select="$attribute2"/>
                <xsl:with-param name="type" select="$type"/>
              </xsl:call-template>
            </td>
          </xsl:when>
          <xsl:otherwise>
            <td class="commonSummaryListViewCellBR ms-vb">
              <xsl:copy-of select="$text2"/>
            </td>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:if>
      <xsl:if test="position() mod 2 != 1">
        <td class="ms-alternating commonSummaryListViewCellBR ms-vb">
          <xsl:value-of select="$name" disable-output-escaping="yes"/>
        </td>
        <xsl:choose>
          <xsl:when test="$attribute1 and $attribute1!=''">
            <td class="ms-alternating commonSummaryListViewCellBR ms-vb">
              <xsl:call-template name="output-attribute-value">
                <xsl:with-param name="attribute" select="$attribute1"/>
                <xsl:with-param name="type" select="$type"/>
              </xsl:call-template>
            </td>
          </xsl:when>
          <xsl:otherwise>
            <td class="ms-alternating commonSummaryListViewCellBR ms-vb">
              <xsl:copy-of select="$text1"/>
            </td>
          </xsl:otherwise>
        </xsl:choose>
        <xsl:choose>
          <xsl:when test="$attribute2 and $attribute2!=''">
            <td class="ms-alternating commonSummaryListViewCellBR ms-vb">
              <xsl:call-template name="output-attribute-value">
                <xsl:with-param name="attribute" select="$attribute2"/>
                <xsl:with-param name="type" select="$type"/>
              </xsl:call-template>
            </td>
          </xsl:when>
          <xsl:otherwise>
            <td class="ms-alternating commonSummaryListViewCellBR ms-vb">
              <xsl:copy-of select="$text2"/>
            </td>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:if>
    </tr>
  </xsl:template>

  <xsl:template name="output-localized-attribute-value">
    <xsl:param name="locale"/>
    <xsl:param name="attribute"/>
    <xsl:param name="type"/>
    <tr class="listViewRow" style="height:22px;">
      <xsl:if test="position() mod 2 != 0">
        <td class="commonSummaryListViewCellBR ms-vb">
          <xsl:value-of select="$locale" disable-output-escaping="yes"/>
        </td>
        <td class="commonSummaryListViewCellBR ms-vb">
          <xsl:call-template name="output-attribute-value">
            <xsl:with-param name="attribute" select="$attribute"/>
            <xsl:with-param name="type" select="$type"/>
          </xsl:call-template>
        </td>
      </xsl:if>
      <xsl:if test="position() mod 2 != 1">
        <td class="ms-alternating commonSummaryListViewCellBR ms-vb">
          <xsl:value-of select="$locale" disable-output-escaping="yes"/>
        </td>
        <td class="ms-alternating commonSummaryListViewCellBR ms-vb">
          <xsl:call-template name="output-attribute-value">
            <xsl:with-param name="attribute" select="$attribute"/>
            <xsl:with-param name="type" select="$type"/>
          </xsl:call-template>
        </td>
      </xsl:if>
    </tr>
  </xsl:template>

  <xsl:template match="/">
    <xsl:choose>
      <xsl:when test="ModifiedAttributes[@ActionType='Create']">
        <!-- expected XML
        <ModifiedAttributes ActionType="Create">
          <Attribute Name="[attribute's system name]" DisplayName="[attribute's display name]" DataType="[all kinds of ILM data type]" InitializedValue="[the value]"/>
          other <Attribute> elements
        </ModifiedAttributes>
        -->
        <table cellspacing="0" cellpadding="3" class="commonSummaryListViewGridBorder">
          <tr align="left" class="listViewHeader" style="height:22px;">
            <th class="commonSummaryListViewHeaderCellBR">Attribute</th>
            <th class="commonSummaryListViewHeaderCellBR">Value</th>
          </tr>
          <xsl:for-each select="ModifiedAttributes/Attribute">
            <xsl:sort select="@DisplayName" order="ascending"/>
            <tr class="listViewRow" style="height:22px;">
              <xsl:if test="position() mod 2 != 0">
                <td class="commonSummaryListViewCellBR ms-vb">
                  <xsl:value-of select="@DisplayName" disable-output-escaping="yes"/>
                </td>
                <xsl:if test="count(LocalizedValue)!=0">
                  <td class="commonSummaryListViewCellBR ms-vb">
                    <table cellspacing="0" style="width:100%">
                      <tr class="listViewHeader">
                        <th align="left" class="commonSummaryListViewHeaderCellBR">Language</th>
                        <th align="left" class="commonSummaryListViewHeaderCellBR">Status</th>
                      </tr>
                      <xsl:if test="@InitializedValue and @InitializedValue != ''">
                        <xsl:call-template name="output-localized-attribute-value">
                          <xsl:with-param name="locale" select="@Locale"/>
                          <xsl:with-param name="attribute" select="@InitializedValue"/>
                          <xsl:with-param name="type" select="@DataType"/>
                        </xsl:call-template>
                      </xsl:if>
                      <xsl:for-each select="LocalizedValue">
                        <xsl:call-template name="output-localized-attribute-value">
                          <xsl:with-param name="locale" select="@Locale"/>
                          <xsl:with-param name="attribute" select="@InitializedValue"/>
                          <xsl:with-param name="type" select="../@DataType"/>
                        </xsl:call-template>
                      </xsl:for-each>
                    </table>
                  </td>
                </xsl:if>
                <xsl:if test="count(LocalizedValue)=0">
                  <td class="commonSummaryListViewCellBR ms-vb">
                    <xsl:call-template name="output-attribute-value">
                      <xsl:with-param name="attribute" select="@InitializedValue"/>
                      <xsl:with-param name="type" select="@DataType"/>
                    </xsl:call-template>
                  </td>
                </xsl:if>
              </xsl:if>
              <xsl:if test="position() mod 2 != 1">
                <td class="ms-alternating commonSummaryListViewCellBR ms-vb">
                  <xsl:value-of select="@DisplayName" disable-output-escaping="yes"/>
                </td>
                <xsl:if test="count(LocalizedValue)!=0">
                  <td class="ms-alternating commonSummaryListViewCellBR ms-vb">
                    <table cellspacing="0" style="width:100%">
                      <tr class="listViewHeader">
                        <th align="left" class="commonSummaryListViewHeaderCellBR">Language</th>
                        <th align="left" class="commonSummaryListViewHeaderCellBR">Status</th>
                      </tr>
                      <xsl:if test="@InitializedValue and @InitializedValue != ''">
                        <xsl:call-template name="output-localized-attribute-value">
                          <xsl:with-param name="locale" select="@Locale"/>
                          <xsl:with-param name="attribute" select="@InitializedValue"/>
                          <xsl:with-param name="type" select="@DataType"/>
                        </xsl:call-template>
                      </xsl:if>
                      <xsl:for-each select="LocalizedValue">
                        <xsl:call-template name="output-localized-attribute-value">
                          <xsl:with-param name="locale" select="@Locale"/>
                          <xsl:with-param name="attribute" select="@InitializedValue"/>
                          <xsl:with-param name="type" select="../@DataType"/>
                        </xsl:call-template>
                      </xsl:for-each>
                    </table>
                  </td>
                </xsl:if>
                <xsl:if test="count(LocalizedValue)=0">
                  <td class="ms-alternating commonSummaryListViewCellBR ms-vb">
                    <xsl:call-template name="output-attribute-value">
                      <xsl:with-param name="attribute" select="@InitializedValue"/>
                      <xsl:with-param name="type" select="@DataType"/>
                    </xsl:call-template>
                  </td>
                </xsl:if>
              </xsl:if>
            </tr>
          </xsl:for-each>
        </table>
      </xsl:when>
      <xsl:when test="ModifiedAttributes[@ActionType='Modify']">
        <!-- expected XML
        <ModifiedAttributes ActionType="Modify">
          <SingleAttribute Name="[attribute's system name]" DisplayName="[attribute's display name]" DataType="[all kinds of ILM data type]" InitializedValue="[the old value]" SetValue="[the new value]"/>
          other <SingleAttribute> elements
          <MultipleAttribute Name="[attribute's system name]" DisplayName="[attribute's display name]" DataType="[all kinds of ILM data type]" InsertedItem="[inserted items separated by ';']" RemovedItem="[removed items separated by ';']"/>
          other <MultipleAttribute> elements
        </ModifiedAttributes>
        -->
        <table class="commonSummaryListViewGridBorder" cellspacing="0" cellpadding="3">
          <xsl:if test="ModifiedAttributes[count(SingleAttribute)!=0]">
            <tr align="left" class="listViewHeader">
              <th class="commonSummaryListViewHeaderCellBR">Single-Value Attributes</th>
              <th class="commonSummaryListViewHeaderCellBR">Old Value</th>
              <th class="commonSummaryListViewHeaderCellBR">New Value</th>
            </tr>
            <xsl:for-each select="ModifiedAttributes/SingleAttribute">
              <xsl:sort select="@DisplayName" order="ascending"/>
              <xsl:if test="count(LocalizedValue)!=0">
                <tr class="listViewRow">
                  <xsl:if test="position() mod 2 != 0">
                    <td class="commonSummaryListViewCellBR ms-vb">
                      <xsl:value-of select="@DisplayName" disable-output-escaping="yes"/>
                    </td>
                    <td colSpan="2">
                      <table cellspacing="0" cellpadding="0" style="width:100%">
                        <tr align="left" class="listViewHeader">
                          <th class="commonSummaryListViewHeaderCellBR">Language</th>
                          <th class="commonSummaryListViewHeaderCellBR">Old Value</th>
                          <th class="commonSummaryListViewHeaderCellBR">New Value</th>
                        </tr>
                        <xsl:if test="(@InitializedValue and @InitializedValue !='') or (@SetValue and @SetValue != '')">
                          <xsl:call-template name="output-modified-value">
                            <xsl:with-param name="name" select="@Locale"/>
                            <xsl:with-param name="attribute1" select="@InitializedValue"/>
                            <xsl:with-param name="text1">(no initial value)</xsl:with-param>
                            <xsl:with-param name="attribute2" select="@SetValue"/>
                            <xsl:with-param name="text2">(value removed)</xsl:with-param>
                            <xsl:with-param name="type" select="@DataType"/>
                          </xsl:call-template>
                        </xsl:if>
                        <xsl:for-each select="LocalizedValue">
                          <xsl:call-template name="output-modified-value">
                            <xsl:with-param name="name" select="@Locale"/>
                            <xsl:with-param name="attribute1" select="@InitializedValue"/>
                            <xsl:with-param name="text1">(no initial value)</xsl:with-param>
                            <xsl:with-param name="attribute2" select="@SetValue"/>
                            <xsl:with-param name="text2">(value removed)</xsl:with-param>
                            <xsl:with-param name="type" select="../@DataType"/>
                          </xsl:call-template>
                        </xsl:for-each>
                      </table>
                    </td>
                  </xsl:if>
                  <xsl:if test="position() mod 2 != 1">
                    <td class="ms-alternating commonSummaryListViewCellBR ms-vb">
                      <xsl:value-of select="@DisplayName" disable-output-escaping="yes"/>
                    </td>
                    <td colSpan="2">
                      <table cellspacing="0" style="width:100%">
                        <tr align="left" class="listViewHeader">
                          <th class="commonSummaryListViewHeaderCellBR">Language</th>
                          <th class="commonSummaryListViewHeaderCellBR">Old Value</th>
                          <th class="commonSummaryListViewHeaderCellBR">New Value</th>
                        </tr>
                        <xsl:if test="(@InitializedValue and @InitializedValue !='') or (@SetValue and @SetValue != '')">
                          <xsl:call-template name="output-modified-value">
                            <xsl:with-param name="name" select="@Locale"/>
                            <xsl:with-param name="attribute1" select="@InitializedValue"/>
                            <xsl:with-param name="text1">(no initial value)</xsl:with-param>
                            <xsl:with-param name="attribute2" select="@SetValue"/>
                            <xsl:with-param name="text2">(value removed)</xsl:with-param>
                            <xsl:with-param name="type" select="@DataType"/>
                          </xsl:call-template>
                        </xsl:if>
                        <xsl:for-each select="LocalizedValue">
                          <xsl:call-template name="output-modified-value">
                            <xsl:with-param name="name" select="@Locale"/>
                            <xsl:with-param name="attribute1" select="@InitializedValue"/>
                            <xsl:with-param name="text1">(no initial value)</xsl:with-param>
                            <xsl:with-param name="attribute2" select="@SetValue"/>
                            <xsl:with-param name="text2">(value removed)</xsl:with-param>
                            <xsl:with-param name="type" select="../@DataType"/>
                          </xsl:call-template>
                        </xsl:for-each>
                      </table>
                    </td>
                  </xsl:if>
                </tr>
              </xsl:if>
              <xsl:if test="count(LocalizedValue)=0">
                <xsl:call-template name="output-modified-value">
                  <xsl:with-param name="name" select="@DisplayName"/>
                  <xsl:with-param name="attribute1" select="@InitializedValue"/>
                  <xsl:with-param name="text1">(no initial value)</xsl:with-param>
                  <xsl:with-param name="attribute2" select="@SetValue"/>
                  <xsl:with-param name="text2">(value removed)</xsl:with-param>
                  <xsl:with-param name="type" select="@DataType"/>
                </xsl:call-template>
              </xsl:if>
            </xsl:for-each>
          </xsl:if>
          <xsl:if test="ModifiedAttributes[count(MultipleAttribute)!=0]">
            <tr align="left" class="listViewHeader">
              <th class="commonSummaryListViewHeaderCellBR">Multiple-Value Attributes</th>
              <th class="commonSummaryListViewHeaderCellBR">Removed Items</th>
              <th class="commonSummaryListViewHeaderCellBR">Inserted Items</th>
            </tr>
            <xsl:for-each select="ModifiedAttributes/MultipleAttribute">
              <xsl:sort select="@DisplayName" order="ascending"/>
              <xsl:if test="count(LocalizedValue)!=0">
                <tr class="uocSummaryTitleTR">
                  <xsl:if test="position() mod 2 != 0">
                    <td class="commonSummaryListViewCellBR ms-vb">
                      <xsl:value-of select="@DisplayName" disable-output-escaping="yes"/>
                    </td>
                    <td>
                      <table cellspacing="0" style="width:100%">
                        <tr align="left" class="listViewHeader">
                          <th class="commonSummaryListViewHeaderCellBR">Language</th>
                          <th class="commonSummaryListViewHeaderCellBR">Removed Items</th>
                          <th class="commonSummaryListViewHeaderCellBR">Inserted Items</th>
                        </tr>
                        <xsl:if test="(@RemovedItem and @RemovedItem!='') or (@InsertedItem and @InsertedItem!='')">
                          <xsl:call-template name="output-modified-value">
                            <xsl:with-param name="name" select="@Locale"/>
                            <xsl:with-param name="attribute1" select="@RemovedItem"/>
                            <xsl:with-param name="text1">(no removed item)</xsl:with-param>
                            <xsl:with-param name="attribute2" select="@InsertedItem"/>
                            <xsl:with-param name="text2">(no inserted item)</xsl:with-param>
                            <xsl:with-param name="type" select="@DataType"/>
                          </xsl:call-template>
                        </xsl:if>
                        <xsl:for-each select="LocalizedValue">
                          <xsl:call-template name="output-modified-value">
                            <xsl:with-param name="name" select="@Locale"/>
                            <xsl:with-param name="attribute1" select="@RemovedItem"/>
                            <xsl:with-param name="text1">(no removed item)</xsl:with-param>
                            <xsl:with-param name="attribute2" select="@InsertedItem"/>
                            <xsl:with-param name="text2">(no inserted item)</xsl:with-param>
                            <xsl:with-param name="type" select="@DataType"/>
                          </xsl:call-template>
                        </xsl:for-each>
                      </table>
                    </td>
                  </xsl:if>
                  <xsl:if test="position() mod 2 != 1">
                    <td class="ms-alternating commonSummaryListViewCellBR ms-vb">
                      <xsl:value-of select="@DisplayName" disable-output-escaping="yes"/>
                    </td>
                    <td>
                      <table cellspacing="0" style="width:100%">
                        <tr align="left" class="listViewHeader">
                          <th class="commonSummaryListViewHeaderCellBR">Language</th>
                          <th class="commonSummaryListViewHeaderCellBR">Removed Items</th>
                          <th class="commonSummaryListViewHeaderCellBR">Inserted Items</th>
                        </tr>
                        <xsl:if test="(@RemovedItem and @RemovedItem!='') or (@InsertedItem and @InsertedItem!='')">
                          <xsl:call-template name="output-modified-value">
                            <xsl:with-param name="name" select="@Locale"/>
                            <xsl:with-param name="attribute1" select="@RemovedItem"/>
                            <xsl:with-param name="text1">(no removed item)</xsl:with-param>
                            <xsl:with-param name="attribute2" select="@InsertedItem"/>
                            <xsl:with-param name="text2">(no inserted item)</xsl:with-param>
                            <xsl:with-param name="type" select="@DataType"/>
                          </xsl:call-template>
                        </xsl:if>
                        <xsl:for-each select="LocalizedValue">
                          <xsl:call-template name="output-modified-value">
                            <xsl:with-param name="name" select="@Locale"/>
                            <xsl:with-param name="attribute1" select="@RemovedItem"/>
                            <xsl:with-param name="text1">(no removed item)</xsl:with-param>
                            <xsl:with-param name="attribute2" select="@InsertedItem"/>
                            <xsl:with-param name="text2">(no inserted item)</xsl:with-param>
                            <xsl:with-param name="type" select="@DataType"/>
                          </xsl:call-template>
                        </xsl:for-each>
                      </table>
                    </td>
                  </xsl:if>
                </tr>
              </xsl:if>
              <xsl:if test="count(LocalizedValue)=0">
                <xsl:call-template name="output-modified-value">
                  <xsl:with-param name="name" select="@DisplayName"/>
                  <xsl:with-param name="attribute1" select="@RemovedItem"/>
                  <xsl:with-param name="text1">(no removed item)</xsl:with-param>
                  <xsl:with-param name="attribute2" select="@InsertedItem"/>
                  <xsl:with-param name="text2">(no inserted item)</xsl:with-param>
                  <xsl:with-param name="type" select="@DataType"/>
                </xsl:call-template>
              </xsl:if>
            </xsl:for-each>
          </xsl:if>
        </table>
      </xsl:when>
    </xsl:choose>
  </xsl:template>
</xsl:stylesheet>