1. Configuració dels camps del formulari

Normalment, han d’existir registres per a tots els camps dels elements presents a la taula cat_feature (també han de coincidir amb les vistes child que haguem creat al nostre esquema). A continuació, a la taula config_form_fields, tindrem per a cada vista filla un nombre de files que coincideix amb tots els camps que té aquesta vista, per poder-los configurar un per un. De les moltes columnes de config_form_fields, se’n descriu cadascuna per assolir el nivell de configuració desitjat:

Les úniques files que s’han de manipular per personalitzar els formularis dels elements són aquelles en què la columna formname té el prefix:

  • ve_node_*

  • ve_arc_*

  • ve_connec_*

  • ve_gully_*

Posició

  • tabname: per gestionar els formularis dels diferents elements de xarxa, els widgets es gestionen segons la pestanya (tab) on es troben.

Hi ha diferents pestanyes, i cadascuna tindrà el nom corresponent: data, element, document, etc.

Hi ha dos tipus de pestanyes, diferenciades per la disposició del layout. La majoria en tenen un o dos, però les de feature_info tenen els 3 layouts verticals (excepte la pestanya data). Quan hi ha valors a config_form_fields que fan referència a un formulari sense pestanyes, el valor d’aquesta columna serà: main.

  • layoutname: cada pestanya conté tres layouts (1,2,3); el nom de cada layout segueix l’estructura lyt_tabname_(1,2,3). A més, hi ha els layouts lyt_top_1, lyt_bot_1 (fila superior), lyt_bot_2 (fila inferior).

  • layoutorder: és l’ordre del camp dins del seu layout corresponent. Es disposaran en ordre ascendent segons el valor d’aquest camp. Dos camps amb els mateixos valors de layoutname i layout_order se solaparan al formulari.

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

Fig. 1.2 Posicionament dels diferents widgets.

Característiques bàsiques

  • Datatype: tipus de dada. No s’aplica a elements de tipus combo. Els valors possibles són: string, double, date, bytea, boolean, text, integer, numeric.

  • Widgettype: tipus de widget. Els valors possibles són: datetime, label, nowidget, text, image, typeahead, button, check, combo, hyperlink, divider, list, spinbox, hspacer, tableview, multiple_checkbox, multiple_option.

  • label: etiqueta del camp al formulari i a la taula d’atributs. Totalment personalitzable.

  • hidden: true / false, mostrat / no mostrat al formulari i a la taula d’atributs.

  • tooltip: text que es mostra en passar el cursor per damunt de l’etiqueta del camp. Totalment personalitzable.

  • placeholder: valor d’exemple que es mostra quan el camp és buit.

  • iseditable: true / false. El camp es pot / no es pot editar al formulari i a la taula d’atributs.

  • ismandatory: si és true, aquest camp ha de tenir un valor.

  • isparent: true / false. Quan un widget és pare d’un altre, permet recarregar els combos dels fills que han identificat aquest widget com a pare (dv_parent_id).

  • isautoupdate: true / false. Dispara l’actualització del formulari sense esperar l’ok de l’usuari. Vàlid per a camps en què calen recalculs, com ara profunditats o d’altres. Aquesta opció no està disponible per a widgets typeahead.

  • isfilter: true / false. Quan tenim un widget de tipus list, es pot filtrar mitjançant widgets situats a la mateixa pestanya. Aquests widgets poden ser qualsevol, però han de tenir l’atribut isfilter=true. D’especial interès per a ells són les claus vdefault i listFilterSign de widgetcontrols.

Gestió de dominis de valors (combo i typeahead)

La gestió de dominis de valors per a widgets combo i typeahead es controla mitjançant diversos camps:

  • dv_querytext: conté la consulta SQL que retorna dues columnes lògiques, id i idval; en el cas particular de typeahead, totes dues han de correspondre al mateix camp.

  • dv_orderby_id: indica si l’ordenació s’ha de fer per id en lloc de per idval.

  • dv_isnullvalue: permet que la llista accepti valors nuls.

  • dv_parent_id: indica el widget que actua com a pare.

  • dv_querytext_filterc: afegeix condicions de filtratge addicionals en funció del valor del pare.

Característiques avançades

stylesheet: camp de tipus json que permet la personalització gràfica de l’etiqueta. Consulteu les FAQS per a exemples d’aquest camp.

widgetcontrols: permeten el control avançat del widget amb les opcions següents:

autoupdateReloadFields: recarrega immediatament altres camps si se’n modifica un. Actua en combinació amb 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 només si el camp pare té determinats valors.

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 del que l’usuari pot escriure mitjançant una expressió regular en widgets de text lliure.

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

Atès que el caràcter \\ està reservat pel sistema per a PostgreSQL, l’actualització s’ha de fer amb \\\\ perquè n’apareguin dos a la fila, de manera que la sintaxi emmagatzemada i la que s’utilitzarà siguin [\\d]+:[0-5][0-9]:[0-5][0-9]

maxMinValues: estableix un valor màxim per a camps numèrics en widgets de text lliure.

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 camps multilínia per escriure amb intro.

spinboxDecimals: estableix un nombre concret de decimals per al widget spinbox (vdef 2).

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

widgetdim: dimensions del widget.

vdefault _value: valor per defecte del widget. Té sentit per a aquells widgets que no pertanyen a dades de feature, ja que els valors per defecte es defineixen en els que l’usuari ja té establerts a config_param_user. D’especial interès per a widgets de filtre.

vdefault_querytext: valor per defecte del widget basat en el resultat de la consulta. Té sentit per a aquells widgets que no pertanyen a dades de feature, ja que els valors per defecte es defineixen en els que l’usuari ja té establerts a config_param_user. D’especial interès per a widgets de filtre.

listFilterSign: signe (LIKE, ILIKE, =, >, < ) per a camps de tipus filtre. Si s’omet, s’usarà ILIKE per a llistes de tipus tableview i = per a llistes de tipus tab.

skipSave Value: si aquest valor es defineix com a true, els canvis fets al widget corresponent no es desaran. Per defecte no cal establir res perquè s’assumeix true.

labelPosition: si aquest valor es defineix [top, left, none], l’etiqueta ocuparà la posició relativa respecte al widget. Per defecte s’assumeix left. Si el camp label és buit, labelPosition s’omet.

widgetfunction: es defineix el nom de la funció Python que s’executarà i, si hi són presents, les característiques dels paràmetres addicionals. El fitxer a utilitzar es pot definir amb la clau module; per defecte és el fitxer core/utils/tools_backend_calls.py. Per usar un fitxer diferent de tools_backend_calls.py cal importar-lo a tools_gw.py.

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

linkedobject:

widgettype list: nom de la llista situada a la taula config_form_list que s’ha de vincular. En aquesta taula es configuren la consulta a utilitzar (querytext) i el client amb què es cridarà. Hi ha dos camps a la taula que actualment no tenen codi associat:

listtype: indica com es mostra la llista: tab (elements en vertical per a una pestanya estreta) o en attributetable (elements en tableview per a una amplada més gran)

listclass: classe d’elements mostrats a la llista (icon, icones tipus galeria o list).

Es recomana que les llistes tinguin el nom list_* a la definició de la taula on es creen.

widgettype image: nom de la imatge situada a la taula sys_image que s’ha de vincular. Es recomana que les imatges tinguin el nom img_*

widgettype [text/check/combo/typeahead]: acció (opcional) vinculada al widget (getcatalog, per exemple) que es trobi disponible al diàleg, configurada a config_form_tabs. Es recomana que les accions tinguin el nom action_*

widgettype button: nom d’una icona (opcional) per establir al botó amb la imatge associada situada a la carpeta del plugin icons/backend/20x20. Es recomana que els noms de les icones siguin números simples.png.