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.
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
vdefaultylistFilterSignde 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.