Show Menu
TÓPICOS×

Estrutura do formulário

The description of a form is a structured XML document that observes the grammar of the form schema xtk:form .
The XML document of the input form must contain the <form> root element with the name and namespace attributes to populate the form name and namespace.
<form name="form_name" namespace="name_space">
...
</form>

Por padrão, um formulário é associado ao esquema de dados com o mesmo nome e namespace. Para associar um formulário a um nome diferente, defina o atributo entity-schema do <form> elemento como o nome da chave do esquema. Para ilustrar a estrutura de um formulário de entrada, descreva uma interface usando o esquema de exemplo "cus:receipt":
<srcSchema name="recipient" namespace="cus">
  <enumeration name="gender" basetype="byte">    
    <value name="unknown" label="Not specified" value="0"/>    
    <value name="male" label="Male" value="1"/>   
    <value name="female" label="Female" value="2"/>   
  </enumeration>

  <element name="recipient">
    <attribute name="email" type="string" length="80" label="Email" desc="E-mail address of recipient"/>
    <attribute name="birthDate" type="datetime" label="Date"/>
    <attribute name="gender" type="byte" label="Gender" enum="gender"/>
  </element>
</srcSchema>

O formulário de entrada com base no esquema de exemplo:
<form name="recipient" namespace="cus">
  <input xpath="@gender"/>
  <input xpath="@birthDate"/>
  <input xpath="@email"/>
</form>

A descrição dos controles de edição é iniciada a partir do elemento <form> raiz. An edit control is entered in an <input> element with the xpath attribute containing the path of the field in its schema.
O controle de edição se adapta automaticamente ao tipo de dados correspondente e usa o rótulo definido no schema.
Você pode sobrecarregar o rótulo definido em seu esquema de dados adicionando o atributo label ao <input> elemento: <input label="E-mail address" xpath="@name" />
Por padrão, cada campo é exibido em uma única linha e ocupa todo o espaço disponível dependendo do tipo de dados.

Formatação

O layout dos controles se parece com o layout usado em tabelas HTML, com a possibilidade de dividir um controle em várias colunas, elementos de entrelaçamento ou especificar a ocupação do espaço disponível. Lembre-se, no entanto, de que a formatação permite apenas dividir a área para cima por proporções; não é possível especificar dimensões fixas para um objeto.
Para exibir os controles do exemplo acima em duas colunas:
<form name="recipient" namespace="cus">
  <container colcount="2">
    <input xpath="@gender"/>
    <input xpath="@birthDate"/>
    <input xpath="@email"/>
  </container>
</form>

O <container> elemento com o atributo colcount permite forçar a exibição de controles filho em duas colunas.
O atributo colspan em um controle estende o controle pelo número de colunas inseridas em seu valor:
<form name="recipient" namespace="cus">
  <container colcount="2">
    <input xpath="@gender"/>
    <input xpath="@birthDate"/>
    <input xpath="@email" colspan="2"/>
  </container>
</form> 

Ao preencher o atributo type="frame" , o contêiner adiciona um quadro ao redor dos controles filho com o rótulo contido no atributo label :
<form name="recipient" namespace="cus">
  <container colcount="2" type="frame" label="General">
    <input xpath="@gender"/>
    <input xpath="@birthDate"/>
    <input xpath="@email" colspan="2"/>
  </container>
</form>

Um <static> elemento pode ser usado para formatar o formulário de entrada:
<form name="recipient" namespace="cus">
  <static type="separator" colspan="2" label="General"/>
  <input xpath="@gender"/>
  <input xpath="@birthDate"/>
  <input xpath="@email" colspan="2"/>
  <static type="help" label="General information about recipient with date of birth, gender, and e-mail address." colspan="2"/>
</form>

A <static> tag com o tipo separador permite adicionar uma barra separadora com um rótulo contido no atributo label .
Um texto de ajuda foi adicionado usando a <static> tag com o tipo de ajuda. O conteúdo do texto é inserido no atributo label .

Containeres

Os containeres permitem agrupar um conjunto de controles. Eles são representados pelo <container> elemento. Eles foram usados acima para formatar controles em várias colunas.
O atributo xpath em um <container> permite simplificar a referência de controles filho. A referência dos controles é então relativa ao <container> pai pai.
Exemplo de um contêiner sem "xpath":
<container colcount="2">
  <input xpath="location/@zipCode"/>
  <input xpath="location/@city"/>
</container>

Exemplo com a adição de "xpath" ao elemento chamado "location":
<container colcount="2" xpath="location">
  <input xpath="@zipCode"/>
  <input xpath="@city"/>
</container>

Tipos de contentores

Contêineres são usados para construir controles complexos usando um conjunto de campos formatados em páginas.

Contêiner de guia

Um contêiner de guia formata dados em páginas que são acessíveis a partir de guias.
<container type="notebook">
  <container colcount="2" label="General">
    <input xpath="@gender"/>
    <input xpath="@birthDate"/>
    <input xpath="@email" colspan="2"/>
  </container>
  <container colcount="2" label="Location">
    ...
  </container>
</container>

O contêiner principal é definido pelo atributo type="notebook" . As guias são declaradas nos contêineres filhos e o rótulo das guias é preenchido a partir do atributo label .
Um recurso style="down|up (por padrão) " força o posicionamento vertical dos rótulos de tabulação abaixo ou acima do controle. Este recurso é opcional. <container style="down" type="notebook"> ... </container>

Lista de ícones

Esse contêiner exibe uma barra de ícones vertical que permite selecionar as páginas a serem exibidas.
<container type="iconbox">
  <container colcount="2" label="General" img="xtk:properties.png">
    <input xpath="@gender"/>
    <input xpath="@birthDate"/>
    <input xpath="@email" colspan="2"/>
  </container>
  <container colcount="2" label="Location" img="nms:msgfolder.png">
    ...
  </container>
</container>

O contêiner principal é definido pelo atributo type="iconbox" . As páginas associadas aos ícones são declaradas nos contêineres secundários. O rótulo dos ícones é preenchido a partir do atributo label .
O ícone de uma página é preenchido a partir do img="<image>" atributo, onde <image> é o nome da imagem correspondente à sua chave composta do nome e do namespace (por exemplo, "xtk:properties.png").
As imagens estão disponíveis no Administration > Configuration > Images nó.

Contêiner de visibilidade

É possível mascarar um conjunto de controles por uma condição dinâmica.
Este exemplo ilustra a visibilidade dos controles no valor do campo "Gênero":
<container type="visibleGroup" visibleIf="@gender=1">
  ...
</container>
<container type="visibleGroup" visibleIf="@gender=2">
  ...
</container>

Um contêiner de visibilidade é definido pelo atributo type="visibleGroup" . O atributo visibleIf contém a condição de visibilidade.
Exemplos de sintaxe de condição:
  • visibleIf="@email='peter.martinezATneeolane.net'" : testa a igualdade em dados do tipo string. O valor de comparação deve estar entre aspas.
  • visibleIf="@gender >= 1 e @gender != 2" : em um valor numérico.
  • visibleIf="@boolean1==true ou @boolean2==false" : teste em campos booleanos.

Habilitar contêiner

Esse contêiner permite ativar ou desativar um conjunto de dados de uma condição dinâmica. Desativar um controle impede que ele seja editado. O exemplo a seguir ilustra a ativação de controles a partir do valor do campo "Gênero":
<container type="enabledGroup" enabledIf="@gender=1">
  ...
</container>
<container type="enabledGroup" enabledIf="@gender=2">
  ...
</container>

Um contêiner de habilitação é definido pelo atributo type="enabledGroup" . O atributo enabledIf contém a condição de ativação.

Controles da lista de memórias

As listas de memória permitem que você edite os elementos da coleção usando o pré-carregamento de dados da lista. Esta lista não pode ser filtrada ou configurada.
Essas listas são usadas em elementos de coleção XML mapeados ou em links de baixo volume.

Lista de colunas

Este controle exibe uma lista de colunas editável com uma barra de ferramentas contendo os botões Adicionar e Excluir.
<input xpath="rcpEvent" type="list">
  <input xpath="@label"/>
  <input xpath="@date"/>
</input>

O controle de lista deve ser preenchido com o atributo type="list" e o caminho da lista deve se referir ao elemento de coleção.
The columns are declared in the child <input> tags of the list. O rótulo e o tamanho da coluna podem ser forçados com os atributos label e colSize .
As setas de ordem de classificação são adicionadas automaticamente quando o atributo order="true" é adicionado ao elemento de coleta no esquema de dados.
Os botões da barra de ferramentas podem ser alinhados horizontalmente:
<input nolabel="true" toolbarCaption="List of events" type="list" xpath="rcpEvent" zoom="true">
  <input xpath="@label"/>
  <input xpath="@date"/>
</input>

The toolbarCaption attribute forces the horizontal alignment of the toolbar and enters the title above the list.

Ampliação de uma lista

A inserção e edição dos dados em uma lista podem ser inseridas em um formulário de edição separado.
<input nolabel="true" toolbarCaption="List of events" type="list" xpath="rcpEvent" zoom="true" zoomOnAdd="true">
  <input xpath="@label"/>
  <input xpath="@date"/>

  <form colcount="2" label="Event">
    <input xpath="@label"/>
    <input xpath="@date"/>
  </form>
</input>

O formulário de edição é preenchido a partir do <form> elemento na definição da lista. Sua estrutura é idêntica à de um formulário de entrada. O Detail botão é adicionado automaticamente quando o atributo zoom="true" é preenchido na <input> tag da lista. Esse atributo permite iniciar o formulário de edição da linha selecionada.
Adicionar o atributo zoomOnAdd="true" força o formulário de edição a ser chamado quando um elemento de lista é inserido.

Propriedades da lista

  • noToolbar : oculta a barra de ferramentas (com o valor "true")
  • toolbarCaption : sobrecarrega o rótulo da barra de ferramentas
  • toolbarAlign : modifica o posicionamento da barra de ferramentas (possíveis valores: "vertical"|"horizontal")
  • img : exibe a imagem associada à lista
  • formulário : sobrecarrega o formulário de edição do elemento direcionado
  • zoom : adiciona o Zoom botão para editar o elemento direcionado
  • zoomOnAdd : inicia o formulário de edição na adição
  • xpathChoiceTarget : além disso, inicia o formulário de seleção no link inserido

Campos não editáveis

Para exibir um campo e impedir sua edição, use a <value> tag ou preencha o atributo readOnly="true" na <input> tag .
Exemplo no campo "Gênero":
<value value="@gender"/>
<input xpath="@gender" readOnly="true"/>

Botão de opção

Um botão de opção permite escolher entre várias opções. As <input> tags são usadas para listar as opções possíveis e o atributo checkValue especifica o valor associado à escolha.
Exemplo no campo "Gênero":
<input type="RadioButton" xpath="@gender" checkedValue="0" label="Choice 1"/>
<input type="RadioButton" xpath="@gender" checkedValue="1" label="Choice 2"/>
<input type="RadioButton" xpath="@gender" checkedValue="2" label="Choice 3"/>

Caixa de seleção

Uma caixa de seleção reflete um estado Booliano (selecionado ou não). Por padrão, esse controle é usado pelos campos "Booliano" (true/false). Uma variável com um valor padrão de 0 ou 1 pode ser associada a esse botão. Esse valor pode ser sobrecarregado pelos atributos checkValue .
<input xpath="@boolean1"/>
<input xpath="@field1" type="checkbox" checkedValue="Y"/>

Campo de expressão

Um campo de expressão atualiza um campo dinamicamente de uma expressão; a <input> tag é usada com um atributo xpath para inserir o caminho do campo a ser atualizado e um atributo expr contendo a expressão de atualização.
<!-- Example: updating the boolean1 field from the value contained in the field with path /tmp/@flag -->
<input expr="Iif([/tmp/@flag]=='On', true, false)" type="expr" xpath="@boolean1"/>
<input expr="[/ignored/@action] == 'FCP'" type="expr" xpath="@launchFCP"/>

Contexto dos formulários

A execução de um formulário de entrada inicializa um documento XML contendo os dados da entidade que está sendo editada. Este documento representa o contexto do formulário e pode ser usado como um espaço de trabalho.

Atualização do contexto

Para modificar o contexto do formulário, use a <set expr="<value>" xpath="<field>"/> tag, onde <field> é o campo de destino, e <value> é a expressão ou valor de atualização.
Exemplos de uso da <set> tag :
  • <set expr="'Test'" xpath="/tmp/@test" /> : posiciona o valor 'Test' no local temporário /tmp/@test1
  • <set expr="'Test'" xpath="@lastName" /> : atualiza a entidade no atributo "lastName" com o valor "Test"
  • <set expr="true" xpath="@boolean1" /> : define o valor do campo "boolean1" como "true"
  • <set expr="@lastName" xpath="/tmp/@test" /> : atualizações com o conteúdo do atributo "lastName"
O contexto do formulário pode ser atualizado ao inicializar e fechar o formulário pelas tags <enter> e <leave> .
<form name="recipient" namespace="cus">
  <enter>
    <set...
  </enter>
  ...
  <leave>
    <set...
  </leave>
</form>

As tags <enter> e <leave> podem ser usadas no número <container> de páginas ("bloco de anotações" e "caixa de ícones").

Idioma da expressão

Uma linguagem macro pode ser usada na definição do formulário para executar testes condicionais.
A <if expr="<expression>" /> tag executa as instruções especificadas na tag se a expressão for verificada:
<if expr="([/tmp/@test] == 'Test' or @lastName != 'Doe') and @boolean2 == true">
  <set xpath="@boolean1" expr="true"/>
</if>

A <check expr="<condition>" /> tag combinada com a <error> tag impede a validação do formulário e exibe uma mensagem de erro se a condição não for atendida:
<leave>
  <check expr="/tmp/@test != ''">
    <error>You must populate the 'Test' field!</error> 
  </check>
</leave>

Assistentes

Um assistente guia você por um conjunto de etapas de entrada de dados na forma de páginas. Os dados inseridos são salvos quando o formulário é validado.
Um assistente tem a seguinte estrutura:
<form type="wizard" name="example" namespace="cus" img="nms:rcpgroup32.png" label="Wizard example" entity-schema="nms:recipient">
  <container title="Title of page 1" desc="Long description of page 1">
    <input xpath="@lastName"/>
    <input xpath="comment"/>
  </container>
  <container title="Title of page 2" desc="Long description of page 2">
    ...
  </container>
  ...
</form>

A presença do atributo type="Wizard" no <form> elemento permite definir o modo assistente na construção do formulário. As páginas são preenchidas a partir de <container> elementos, que são filhos do <form> elemento. O <container> elemento de uma página é preenchido com os atributos de título do título e desc para exibir a descrição sob o título da página. Os botões Previous e Next são adicionados automaticamente para permitir a navegação entre páginas.
O Finish botão salva os dados inseridos e fecha o formulário.

Métodos SOAP

A execução do método SOAP pode ser iniciada a partir de uma <leave> tag preenchida no final de uma página.
A <soapcall> tag contém a chamada para o método com os seguintes parâmetros de entrada:
<soapCall name="<name>" service="<schema>">
  <param type="<type>" exprIn="<xpath>"/>  
  ...
</soapCall>

O nome do serviço e seu esquema de implementação são inseridos pelos atributos de nome e serviço da <soapcall> tag .
Os parâmetros de entrada são descritos nos <param> elementos sob a <soapcall> tag .
O tipo de parâmetro deve ser especificado pelo atributo type . Os tipos possíveis são os seguintes:
  • string : cadeia de caracteres
  • booleano :Booleano
  • byte : Número inteiro de 8 bits
  • curta : Número inteiro de 16 bits
  • long : Número inteiro de 32 bits
  • curta : Número inteiro de 16 bits
  • duplo : número de ponto flutuante de precisão dupla
  • DOMElement : nó tipo elemento
O atributo exprIn contém o local dos dados a serem transmitidos como parâmetro.
Exemplo :
<leave>
  <soapCall name="RegisterGroup" service="nms:recipient">         
    <param type="DOMElement" exprIn="/tmp/entityList"/>         
    <param type="DOMElement" exprIn="/tmp/choiceList"/>         
    <param type="boolean"    exprIn="true"/>       
  </soapCall>
</leave>