1. Configuración de campos de formulario

Normalmente, deben existir registros para todos los campos de los elementos presentes en la tabla cat_feature (también deben coincidir con las vistas child que hayamos creado en nuestro esquema). A continuación, en la tabla config_form_fields, tendremos para cada vista hija un número de filas que coincide con todos los campos que tiene esa vista, para poder configurarlos uno a uno. De las muchas columnas de config_form_fields, se describe cada una de ellas para alcanzar el nivel de configuración deseado:

Las únicas filas que deben manipularse para personalizar los formularios de los elementos son aquellas en las que la columna formname tiene el prefijo:

  • ve_node_*

  • ve_arc_*

  • ve_connec_*

  • ve_gully_*

Posición

  • tabname: para gestionar los formularios de los distintos elementos de red, los widgets se gestionan según la pestaña (tab) en la que se encuentran.

Existen distintas pestañas, y cada una tendrá el nombre correspondiente: data, element, document, etc.

Hay dos tipos de pestañas, diferenciadas por la disposición del layout. La mayoría tienen uno o dos layouts, pero las de feature_info tienen los 3 layouts verticales (excepto la pestaña data). Cuando hay valores en config_form_fields que se refieren a un formulario sin pestañas, el valor de esta columna será: main.

  • layoutname: cada pestaña contiene tres layouts (1,2,3); el nombre de cada layout sigue la estructura lyt_tabname_(1,2,3). Además, existen los layouts lyt_top_1, lyt_bot_1 (fila superior), lyt_bot_2 (fila inferior).

  • layoutorder: es el orden del campo dentro de su layout correspondiente. Se dispondrán en orden ascendente según el valor de este campo. Dos campos con los mismos valores de layoutname y layout_order se solaparán en el formulario.

../../../../_images/form-fields.png

Figura 1.2 Posicionamiento de los distintos widgets.

Características básicas

  • Datatype: tipo de dato. No aplica a elementos de tipo combo. Los valores posibles son: string, double, date, bytea, boolean, text, integer, numeric.

  • Widgettype: tipo de widget. Los valores posibles son: datetime, label, nowidget, text, image, typeahead, button, check, combo, hyperlink, divider, list, spinbox, hspacer, tableview, multiple_checkbox, multiple_option.

  • label: etiqueta del campo en el formulario y en la tabla de atributos. Totalmente personalizable.

  • hidden: true / false, mostrado / no mostrado en el formulario y en la tabla de atributos.

  • tooltip: texto que se muestra al pasar el cursor sobre la etiqueta del campo. Totalmente personalizable.

  • placeholder: valor de ejemplo que se muestra cuando el campo está vacío.

  • iseditable: true / false. El campo se puede / no se puede editar en el formulario y en la tabla de atributos.

  • ismandatory: si es true, este campo debe tener un valor.

  • isparent: true / false. Cuando un widget es padre de otro, permite recargar los combos de los hijos que han identificado este widget como su padre (dv_parent_id).

  • isautoupdate: true / false. Dispara la actualización del formulario sin esperar el ok del usuario. Válido para campos en los que se necesitan recálculos, como profundidades u otros. Esta opción no está disponible para widgets typeahead.

  • isfilter: true / false. Cuando tenemos un widget de tipo list, puede filtrarse mediante widgets situados en la misma pestaña. Estos widgets pueden ser cualquiera, pero deben tener el atributo isfilter=true. De especial interés para ellos son las claves vdefault y listFilterSign de widgetcontrols.

Gestión de dominios de valores (combo y typeahead)

La gestión de dominios de valores para widgets combo y typeahead se controla mediante varios campos:

  • dv_querytext: contiene la consulta SQL que devuelve dos columnas lógicas, id e idval; en el caso particular de typeahead, ambas deben corresponder al mismo campo.

  • dv_orderby_id: indica si la ordenación debe hacerse por id en lugar de por idval.

  • dv_isnullvalue: permite que la lista acepte valores nulos.

  • dv_parent_id: indica el widget que actúa como padre.

  • dv_querytext_filterc: añade condiciones de filtrado adicionales en función del valor del padre.

Características avanzadas

stylesheet: campo de tipo json que permite la personalización gráfica de la etiqueta. Consulte las FAQS para ejemplos de este campo.

widgetcontrols: permiten el control avanzado del widget con las siguientes opciones:

autoupdateReloadFields: recarga inmediatamente otros campos si se modifica uno. Actúa en combinación con isautoupdate.

UPDATE config_form_fields SET widgettype = 'combo', isreload=true, widgetcontrols =
gw_fct_json_object_set_key(widgetcontrols, 'autoupdateReloadFields', '["cat_matcat_id",
"cat_dnom", "cat_pnom"]'::json) WHERE column_id IN ('arccat_id', 'nodecat_id', 'connecat_id')

enableWhenParent: habilita un combo solo si el campo padre tiene determinados valores.

UPDATE config_form_fields SET widgetcontrols = gw_fct_json_object_set_key
(widgetcontrols,'enableWhenParent','[1, 2]'::json) WHERE column_id IN ('state_type')

regexpControl: control de lo que el usuario puede escribir mediante una expresión regular en widgets de texto libre.

UPDATE config_form_fields SET hidden=false, datatype='text', widgetcontrols =
gw_fct_json_object_set_key(widgetcontrols,'regexpControl','[\\d]+:[0-5][0-9]:[0-5][0-9]'::text)
WHERE column_id = 'observ'

Nota

Dado que el carácter \\ está reservado por el sistema para PostgreSQL, la actualización debe hacerse con \\\\ para que aparezcan dos en la fila, de modo que la sintaxis almacenada y la que se utilizará sean [\\d]+:[0-5][0-9]:[0-5][0-9]

maxMinValues: establece un valor máximo para campos numéricos en widgets de texto libre.

UPDATE config_form_fields SET widgetcontrols = gw_fct_json_object_set_key
(widgetcontrols,'maxMinValues','{"min":0.001, "max":100}'::json) WHERE column_id = 'descript'

setMultiline: habilita campos multilínea para escribir con intro.

spinboxDecimals: establece un número concreto de decimales para el widget spinbox (vdef 2).

UPDATE config_form_fields SET widgetcontrols = gw_fct_json_object_set_key(widgetcontrols, 'spinboxDecimals', '3') WHERE column_id = 'descript'

widgetdim: dimensiones del widget.

vdefault _value: valor por defecto del widget. Tiene sentido para aquellos widgets que no pertenecen a datos de feature, ya que los valores por defecto se definen en los que el usuario ya tiene establecidos en config_param_user. De especial interés para widgets de filtro.

vdefault_querytext: valor por defecto del widget basado en el resultado de la consulta. Tiene sentido para aquellos widgets que no pertenecen a datos de feature, ya que los valores por defecto se definen en los que el usuario ya tiene establecidos en config_param_user. De especial interés para widgets de filtro.

listFilterSign: signo (LIKE, ILIKE, =, >, < ) para campos de tipo filtro. Si se omite, se usará ILIKE para listas de tipo tableview y = para listas de tipo tab.

skipSave Value: si este valor se define como true, los cambios realizados en el widget correspondiente no se guardarán. Por defecto no es necesario establecer nada porque se asume true.

labelPosition: si este valor se define [top, left, none], la etiqueta ocupará la posición relativa respecto al widget. Por defecto se asume left. Si el campo label está vacío, labelPosition se omite.

widgetfunction: se define el nombre de la función Python que se ejecutará y, si están presentes, las características de los parámetros adicionales. El fichero a utilizar puede definirse con la clave module; por defecto es el fichero core/utils/tools_backend_calls.py. Para usar un fichero distinto de tools_backend_calls.py debe importarse en tools_gw.py.

{"functionName":"add_document","module":"info", "parameters":{"sourcewidget", "targetwidget"}}

linkedobject:

widgettype list: nombre de la lista situada en la tabla config_form_list que se va a vincular. En esta tabla se configuran la consulta a utilizar (querytext) y el cliente con el que se llamará. Hay dos campos en la tabla que actualmente no tienen código asociado:

listtype: indica cómo se muestra la lista: tab (elementos en vertical para una pestaña estrecha) o en attributetable (elementos en tableview para un ancho mayor)

listclass: clase de elementos mostrados en la lista (icon, iconos tipo galería o list).

Se recomienda que las listas tengan el nombre list_* en la definición de la tabla donde se crean.

widgettype image: nombre de la imagen situada en la tabla sys_image que se va a vincular. Se recomienda que las imágenes tengan el nombre img_*

widgettype [text/check/combo/typeahead]: acción (opcional) vinculada al widget (getcatalog, por ejemplo) que se encuentre disponible en el diálogo, configurada en config_form_tabs. Se recomienda que las acciones tengan el nombre action_*

widgettype button: nombre de un icono (opcional) para establecer en el botón con la imagen asociada situada en la carpeta del plugin icons/backend/20x20. Se recomienda que los nombres de los iconos sean números simples.png.