4.27 Action(Create, Save, Cancel, Delete, Nav, Js, Job)
4.27.1 Atributos
| Atributo | Valor por defecto | Tipo | Descripción | |
|---|---|---|---|---|
| id | null | String | Identificador único del componente. Si no tiene id, se le asigna con nomenclatura ${tag}${num}. | |
| route | null | String | Si la acción implica una navegación, identificador del formulario de destino. | |
| type | String | Tipo de acción: Create, Save, Cancel, Delete, Nav, Js, Job | ||
| controller | null | String | Una lista separada por comas de ids de los widgetControllers que se utilizarán para ejecutar la acción. Si no se establece, por defecto se utiliza el mainForm para ejecutar la acción. | |
| registerInHistory | true | Boolean | Si la acción tiene una ruta para realizar una navegación, este atributo define si la ruta debe registrarse en el historial del enrutador. | |
| refresh | all | String | Indica qué parte de la vista actual debe volver a renderizarse tras la ejecución de la acción:
|
|
| restoreView | false | Boolean | Indica si, tras navegar a la vista referenciada por "ruta", debe restaurarse el último estado de la vista. | |
| popHistory | 0 | Integer | Determina si después de completar la acción se debe saltar un registro del historial para evitar volver a la vista actual utilizando la navegación "atrás". | |
<action type="save" route="back" registerInHistory="false" restoreView="true">
<param name="entityId" value="${params.entity_id}" />
</action>
4.27.2 Puntos de invocación de acciones
La invocación de acciones se puede realizar desde distintos puntos:
- Botones del formulario:
...
function accionBotonFormulario(msg) {
vh.setWidgetValue('inputAccionFormulario',msg);
}
...
<input label="Input acción formulario: " id="inputAccionFormulario" />
<button label="Acción botón formulario">
<action type="js">
<param name="method" value="accionBotonFormulario" />
<param name="message" value="Acción botón formulario" />
</action>
</button>

- Desde un componente:
...
function accionComponente(msg) {
vh.setWidgetValue('inputAccionComponente',msg);
}
...
<input label="Accion del componente 1: " id="inputAccionComponente" />
<input label="Accion del componente 2: ">
<action type="js">
<param name="method" value="accionComponente" />
<param name="message" value="Acción componente" />
</action>
</input>

- Desde la botonera principal del formulario:
...
function accionBotoneraFormulario(msg) {
vh.setWidgetValue('inputAccionBotoneraFormulario',msg);
}
...
<input label="Input acción botonera: " id="inputAccionBotoneraFormulario" />
...
<buttonbar type="bottom">
<button label="Save">
<action type="js">
<param name="method" value="accionBotoneraFormulario" />
<param name="message" value="Acción botonera formulario" />
</action>
</button>
<button label="Cancel" route="back"/>
</buttonbar>

<buttonbar type="fab">
<button id="btnFab">
<action id="accionFAB" type="nav" route="formAction-editAction">
<param name="repo" value="pruebaRepo"/>
</action>
</button>
</buttonbar>

Se pueden concatenar acciones:
...
function accionConcatenada1(msg) {
vh.setWidgetValue('inputAccionConcatenada1',msg);
}
function accionConcatenada2(msg) {
vh.setWidgetValue('inputAccionConcatenada2',msg);
}
...
<input label="Input acción concatenada 1: " id="inputAccionConcatenada1" />
<input label="Input acción concatenada 2: " id="inputAccionConcatenada2" />
<button label="Acción concatenada">
<action id="compositeAction">
<action type="js">
<param name="method" value="accionConcatenada1" />
<param name="message" value="Acción concatenada 1" />
</action>
<action type="js">
<param name="method" value="accionConcatenada2" />
<param name="message" value="Acción concatenada 2" />
</action>
</action>
</button>

4.27.3 Tipos de acciones
4.27.3.1 Create
<button label="CRT">
<create route="formActions-listActions">
<param name="repo" value="pruebaRepo"/>
</create>
</button>
<button action="create" label="CRT 2" route="formActions-listActions">
<param name="repo" value="pruebaRepo"/>
</button>
<button label="CRT 3">
<action id="createPlaga" type="create" route="formActions-listActions" >
<param name="repo" value="pruebaRepo"/>
</action>
</button>
4.27.3.2 Save
<button label="SAV">
<save route="formActions-listActions"/>
</button>
<button action="save" label="SAV 2" route="formActions-listActions"/>
<button label ="SAV 3">
<action type="save" route="formActions-listActions">
</action>
</button>
4.27.3.3 Cancel
<button label="CNL">
<cancel route="formActions-listActions"/>
</button>
<button action="cancel" label="CNL 2" route="formActions-listActions"/>
<button label ="CNL 3">
<action type="cancel" route="formActions-listActions">
</action>
</button>
4.27.3.4 Delete
<button label="DEL">
<delete route="formActions-listActions"/>
</button>
<button action="delete" label="DEL 2" route="formActions-listActions"/>
<button label ="DEL 3">
<action type="delete" route="formActions-listActions">
</action>
</button>
4.27.3.5 Nav
<button label="NAV">
<nav route="formActions-listActions"/>
</button>
<button action="nav" label="NAV 2" route="formActions-listActions"/>
<button label ="NAV 3">
<action type="nav" route="formActions-listActions">
</action>
</button>
4.27.3.6 Js
...
<script>
function accionBotonFormulario(msg) {
vh.setWidgetValue('inputAccionFormulario',msg);
}
</script>
...
<input label="Input acción formulario: " id="inputAccionFormulario" />
...
<button label="JS">
<js method="accionBotonFormulario">
<param name="message" value="Acción botón formulario" />
</js>
</button>
<button action="js" label="JS 2" method="accionBotonFormulario">
<param name="message" value="Acción botón formulario" />
</button>
<button label ="JS 3">
<action type="js" method="accionBotonFormulario">
<param name="message" value="Acción botón formulario" />
</action>
</button>
4.27.3.6 Job
<button action="job" label="JOB">
<param name="jobId" value="job_prueba" />
<param name="prueba_id" value="${entity.prueba_id}" />
</button>
<button label ="JOB 2">
<action type="job">
<param name="jobId" value="job_prueba" />
<param name="prueba_id" value="${entity.prueba_id}" />
</action>
</button>
Fichero /jobs/job_prueba.json:
{
"description": "Job prueba",
"requiredContexts": [
"user",
"job"
],
"executionMode": "FG",
"tasks": [
{
"name": "t1",
"reader": {
"type": "sqlreader",
"dbFile": "data/docproject.sqlite",
"sqlQuery": "select d_prueba from prueba where prueba_id='${params.expediente_id}'"
},
"writer": {
"type": "csvWriter",
"outputFile": "prueba.csv"
}
}
]
}
