Show Menu
TEMAS×

Estructura del formulario

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>

De forma predeterminada, un formulario está asociado al esquema de datos con el mismo nombre y Área de nombres. Para asociar un formulario con un nombre diferente, establezca el atributo entity-esquema del <form> elemento en el nombre de la clave de esquema. Para ilustrar la estructura de un formulario de entrada, describa una interfaz con el esquema de ejemplo "cus:destinatario":
<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>

Formulario de entrada basado en el esquema de ejemplo:
<form name="recipient" namespace="cus">
  <input xpath="@gender"/>
  <input xpath="@birthDate"/>
  <input xpath="@email"/>
</form>

La descripción de los inicios de controles de edición del elemento <form> raíz. Se introduce un control de edición en el elemento <input> con el atributo xpath que contiene la ruta de acceso al esquema.
El control de edición se adapta automáticamente al tipo de datos correspondiente y utiliza la etiqueta definida en el esquema.
Puede sobrecargar la etiqueta definida en su esquema de datos agregando el atributo label al <input> elemento: <input label="E-mail address" xpath="@name" />
De forma predeterminada, cada campo se muestra en una sola línea y ocupa todo el espacio disponible en función del tipo de datos.

Formato

El diseño de los controles es similar al diseño utilizado en las tablas HTML, con la posibilidad de dividir un control en varias columnas, entrelazar elementos o especificar la ocupación del espacio disponible. Recuerde, sin embargo, que el formato solo le permite dividir el área por proporciones; no se pueden especificar dimensiones fijas para un objeto.
Para mostrar los controles del ejemplo anterior en dos columnas:
<form name="recipient" namespace="cus">
  <container colcount="2">
    <input xpath="@gender"/>
    <input xpath="@birthDate"/>
    <input xpath="@email"/>
  </container>
</form>

El <container> elemento con el atributo de recuento permite forzar la visualización de controles secundarios en dos columnas.
El atributo colspan de un control extiende el control por el número de columnas introducidas en su valor:
<form name="recipient" namespace="cus">
  <container colcount="2">
    <input xpath="@gender"/>
    <input xpath="@birthDate"/>
    <input xpath="@email" colspan="2"/>
  </container>
</form> 

Al rellenar el atributo type="frame" , el contenedor agrega un marco alrededor de los controles secundarios con la etiqueta contenida en el 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>

Se puede utilizar un <static> elemento para dar formato al formulario 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>

La <static> etiqueta con el tipo de separador permite agregar una barra de separador con una etiqueta incluida en el atributo de etiqueta .
Se agregó un texto de ayuda con la <static> etiqueta con el tipo de ayuda. El contenido del texto se introduce en el atributo label .

Contenedores

Los contenedores permiten agrupar un conjunto de controles. Están representados por el <container> elemento . Se utilizaron arriba para dar formato a los controles en varias columnas.
El atributo xpath de una <container> permite simplificar la referencia de los controles secundarios. La referencia de los controles es relativa al <container> elemento principal.
Ejemplo de un contenedor sin "xpath":
<container colcount="2">
  <input xpath="location/@zipCode"/>
  <input xpath="location/@city"/>
</container>

Ejemplo con la adición de "xpath" al elemento llamado "location":
<container colcount="2" xpath="location">
  <input xpath="@zipCode"/>
  <input xpath="@city"/>
</container>

Tipos de contenedor

Los contenedores se utilizan para construir controles complejos mediante un conjunto de campos formateados en páginas.

Contenedor de tabulación

Un contenedor de ficha da formato a los datos de las páginas a las que se puede acceder desde las fichas.
<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>

El contenedor principal está definido por el atributo type="bloc" . Las fichas se declaran en los contenedores secundarios y la etiqueta de las fichas se rellena desde el atributo label .
Una función style="down|up (de forma predeterminada) " fuerza la posición vertical de las etiquetas de tabulación debajo o encima del control. Esta función es opcional. <container style="down" type="notebook"> ... </container>

Lista de iconos

Este contenedor muestra una barra de iconos vertical que permite seleccionar las páginas que se van a mostrar.
<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>

El contenedor principal está definido por el atributo type="iconbox" . Las páginas asociadas con los iconos se declaran en los contenedores secundarios. La etiqueta de los iconos se rellena desde el atributo label .
El icono de una página se rellena desde el img="<image>" atributo, donde <image> es el nombre de la imagen correspondiente a su clave formada por el nombre y la Área de nombres (por ejemplo, "xtk:properties.png").
Las imágenes están disponibles desde el Administration > Configuration > Images nodo.

Contenedor de visibilidad

Puede enmascarar un conjunto de controles mediante una condición dinámica.
Este ejemplo ilustra la visibilidad de los controles en el valor del campo "Género":
<container type="visibleGroup" visibleIf="@gender=1">
  ...
</container>
<container type="visibleGroup" visibleIf="@gender=2">
  ...
</container>

El atributo type="visibleGroup" define un contenedor de visibilidad. El atributo visibleIf contiene la condición de visibilidad.
Ejemplos de sintaxis de condición:
  • visibleIf="@email='peter.martinezATneeolane.net'" : prueba la igualdad en los datos de tipo cadena. El valor de comparación debe estar entre comillas.
  • visibleIf="@gender >= 1 y @gender != 2" : en un valor numérico.
  • visibleIf="@boolean1==true o @boolean2==false" : prueba en campos booleanos.

Habilitar contenedor

Este contenedor le permite habilitar o deshabilitar un conjunto de datos de una condición dinámica. Al deshabilitar un control se evita que se edite. El siguiente ejemplo ilustra la habilitación de controles desde el valor del campo "Género":
<container type="enabledGroup" enabledIf="@gender=1">
  ...
</container>
<container type="enabledGroup" enabledIf="@gender=2">
  ...
</container>

El atributo type="enabledGroup" define un contenedor de habilitación. El atributo enabledIf contiene la condición de activación.

Controles de lista de memoria

Las listas de memoria permiten editar los elementos de la colección mediante la precarga de datos de lista. Esta lista no se puede filtrar ni configurar.
Estas listas se utilizan en elementos de recopilación asignados a XML o en vínculos de bajo volumen.

Lista de columnas

Este control muestra una lista de columnas editable con una barra de herramientas que contiene los botones Añadir y Eliminar.
<input xpath="rcpEvent" type="list">
  <input xpath="@label"/>
  <input xpath="@date"/>
</input>

El control de lista debe rellenarse con el atributo type="list" y la ruta de la lista debe hacer referencia al elemento de colección.
The columns are declared in the child <input> tags of the list. La etiqueta de columna y el tamaño se pueden forzar con los atributos label y colSize .
Las flechas de orden se agregan automáticamente cuando se agrega el atributo order="true" al elemento de recopilación en el esquema de datos.
Los botones de la barra de herramientas se pueden alinear 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.

Ampliar una lista

La inserción y edición de los datos en una lista se puede introducir en un formulario de edición independiente.
<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>

El formulario de edición se completa desde el <form> elemento en la definición de lista. Su estructura es idéntica a la de un formulario de entrada. El Detail botón se agrega automáticamente cuando se completa el atributo zoom="true" en la <input> etiqueta de la lista. Este atributo permite iniciar el formulario de edición de la línea seleccionada.
Añadir el atributo zoomOnAdd="true" fuerza la llamada al formulario de edición cuando se inserta un elemento de lista.

Propiedades de lista

  • noToolbar : oculta la barra de herramientas (con el valor "true")
  • toolbarCaption : sobrecarga la etiqueta de la barra de herramientas
  • toolbarAlign : modifica la posición de la barra de herramientas (valores posibles: "vertical"|"horizontal")
  • img : muestra la imagen asociada con la lista
  • formulario : sobrecarga el formulario de edición del elemento de destino
  • zoom : agrega el Zoom botón para editar el elemento de destino
  • zoomOnAdd : inicia el formulario de edición en la adición
  • xpathChoiceTarget : además, inicia el formulario de selección en el vínculo introducido

Campos no editables

Para mostrar un campo y evitar que se edite, utilice la <value> etiqueta o complete el atributo readOnly="true" en la <input> etiqueta .
Ejemplo en el campo "Género":
<value value="@gender"/>
<input xpath="@gender" readOnly="true"/>

Botón de radio

Un botón de radio permite elegir entre varias opciones. Las <input> etiquetas se utilizan para lista de las opciones posibles y el atributo checkValue especifica el valor asociado a la opción.
Ejemplo en el 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"/>

Casilla de verificación

Una casilla de verificación refleja un estado booleano (seleccionado o no). De forma predeterminada, los campos "Boolean" (true/false) utilizan este control. Con este botón se puede asociar una variable que toma un valor predeterminado de 0 o 1. Este valor se puede sobrecargar mediante los atributos checkValue .
<input xpath="@boolean1"/>
<input xpath="@field1" type="checkbox" checkedValue="Y"/>

Campo de expresión

Un campo de expresión actualiza un campo dinámicamente desde una expresión; la <input> etiqueta se utiliza con un atributo xpath para introducir la ruta del campo que se va a actualizar y un atributo expr que contiene la expresión de actualización.
<!-- 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 de los formularios

La ejecución de un formulario de entrada inicializa un documento XML que contiene los datos de la entidad que se está editando. Este documento representa el contexto del formulario y se puede utilizar como espacio de trabajo.

Actualización del contexto

Para modificar el contexto del formulario, utilice la <set expr="<value>" xpath="<field>"/> etiqueta , donde <field> es el campo de destino, y <value> es la expresión o el valor de actualización.
Ejemplos de uso de la <set> etiqueta:
  • <set expr="'Test'" xpath="/tmp/@test" /> :: coloca el valor 'Test' en la ubicación temporal /tmp/@test1
  • <set expr="'Test'" xpath="@lastName" /> :: actualiza la entidad en el atributo "lastName" con el valor 'Test'
  • <set expr="true" xpath="@boolean1" /> :: establece el valor del campo "boolean1" en "true"
  • <set expr="@lastName" xpath="/tmp/@test" /> :: se actualiza con el contenido del atributo "lastName"
El contexto del formulario se puede actualizar al inicializarlo y cerrarlo mediante las etiquetas <enter> y <leave> .
<form name="recipient" namespace="cus">
  <enter>
    <set...
  </enter>
  ...
  <leave>
    <set...
  </leave>
</form>

Las etiquetas <enter> y <leave> se pueden utilizar en las páginas <container> (tipos "bloc de notas" y "iconbox").

Idioma de expresión

Se puede utilizar un lenguaje de macro en la definición del formulario para realizar pruebas condicionales.
La <if expr="<expression>" /> etiqueta ejecuta las instrucciones especificadas en la etiqueta si se comprueba la expresión:
<if expr="([/tmp/@test] == 'Test' or @lastName != 'Doe') and @boolean2 == true">
  <set xpath="@boolean1" expr="true"/>
</if>

La <check expr="<condition>" /> etiqueta combinada con la <error> etiqueta evita la validación del formulario y muestra un mensaje de error si no se cumple la condición:
<leave>
  <check expr="/tmp/@test != ''">
    <error>You must populate the 'Test' field!</error> 
  </check>
</leave>

Asistentes

Un asistente lo guía a través de un conjunto de pasos de entrada de datos en forma de páginas. Los datos introducidos se guardan al validar el formulario.
Un asistente tiene la siguiente estructura:
<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>

La presencia del atributo type="Wizard" en el <form> elemento permite definir el modo de asistente en la construcción del formulario. Las páginas se completan a partir de <container> elementos, que son elementos secundarios del <form> elemento. El <container> elemento de una página se rellena con los atributos de título del título y desc para mostrar la descripción bajo el título de la página. Los botones Previous y Next se agregan automáticamente para permitir la navegación entre páginas.
El Finish botón guarda los datos introducidos y cierra el formulario.

Métodos SOAP

La ejecución del método SOAP se puede iniciar desde una <leave> etiqueta rellenada al final de una página.
La <soapcall> etiqueta contiene la llamada para el método con los siguientes parámetros de entrada:
<soapCall name="<name>" service="<schema>">
  <param type="<type>" exprIn="<xpath>"/>  
  ...
</soapCall>

El nombre del servicio y su esquema de implementación se introducen mediante los atributos name y service de la <soapcall> etiqueta .
Los parámetros de entrada se describen en los <param> elementos de la <soapcall> etiqueta .
El tipo de parámetro debe especificarse mediante el atributo type . Los tipos posibles son los siguientes:
  • cadena : cadena de caracteres
  • booleano : Booleano
  • byte : Entero de 8 bits
  • short : Entero de 16 bits
  • long : Entero de 32 bits
  • short : Entero de 16 bits
  • doble : Número de punto flotante de precisión de doble
  • DOMElement : nodo element-type
El atributo exprIn contiene la ubicación de los datos que se pasarán como parámetro.
Ejemplo :
<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>