Saltar al contenido principal
Version: 4.9.0

Dependencies

Cada componente (criterio, grilla, gráfico, etc) puede tener algunas dependencias dentro de su comportamiento y contenido. Una dependencia puede ser lanzada dependiendo de las condiciones o eventos de los componentes.

caution

The element must have the component attribute to make it work. Si el elemento no tiene el atributo del componente, el sistema de dependencias ganó ́t funcionar correctamente.

Esqueleto de XML

<dependency initial="[initial]" source-type="[source-type]" target-type="[target-type]" 
server-action="[server-action]" target-action="[target-action]"
label="[label-to-update]" value="[value]" formule="[formule]"
type="[type]" invert="[invert]" async="[async]" silent="[silent]">
<dependency-element ... />
...
<dependency-action .../>
...
</dependency>

Estructura de dependencias

ElementoUsoVarias instanciasDescripción
dependencyRequiredNoNodo global de la dependencia. Define los atributos de dependencia
dependency-elementRequiredSiCondición para lanzar la dependencia
dependency-actionOptionalSiAction which will be launched if dependency conditions are valid

Atributos de dependencias

AtributoUsoTipoDescripciónValores
initialOpcionalBooleanDependencia se lanzará al cargar la páginaDefault value is false
source-typeOpcionalStringFuente de dependencias (donde se tomarán los datos)See source types. Default value is none
target-typeOpcionalStringDestino de dependencias (donde se aplicará la dependencia)See target types. Default value is none
server-actionOpcionalStringServer action call (when source-type is query)See server action list
target-actionOpcionalStringTarget to call on the server / Name of the criterion, to get its value, when source-type is launcher
labelOpcionalStringEtiqueta a aplicar al objetivoNote: You can use i18n files (locales)
valueOpcionalStringValor a aplicar al objetivo
formuleOpcionalStringFormular para obtener el valor que se aplicará al objetivo
typeOpcionalStringHow to evaluate the conditionsPossible values are and (default) and or.
invertOpcionalBooleanInvert the condition evaluationDefault value is false
asyncOpcionalBooleanEjecutar la acción del servidor de forma asincrónicaDefault value is false
silentOpcionalBooleanEjecutar la acción del servidor sin mostrar la barra de cargaDefault value is false

Tipo de fuente

The source-type attribute refers to the place from we are retrieving the data to apply to the component.

ValueDescripción
noneNo hacer nada (no recuperar valores)
queryEjecutar una consulta para recuperar valores
launcherGet the values from the stored alias defined in target-action
valueGet the values from the value attribute defined on the dependency
labelGet the values from the label attribute defined on the dependency (can be a i18n local)
formuleGet the values from a evaluated formule on the formule attribute defined on the dependency
resetBorrar el valor de destino

Note: source-type="action" is no more needed. Simplemente añada algunas acciones de dependencia a su dependencia y se lanzarán cuando las condiciones sean válidas.

Target type

The target-type attribute refers to the place where we are applying the data retrieved from the source-type or whatever we want to do with the component where the dependency is.

ActionNecesita datosAcción inversaDescripción
noneNononeSe aplica a nada (valor predeterminado)
labelYesnoneApplies the source-type retrieved value to the component label
unitYesnoneApplies the source-type retrieved value to the component unit label
iconYesnoneApplies the source-type retrieved value to the component icon
inputYesnoneApplies the source-type retrieved value to the component value
format-numberYesrestore number formatApplies the source-type retrieved value to the criterion number format (for numeric criteria only)
validateYesnoneApplies the source-type retrieved value to the criterion validation
atributoYesnoneSet an attribute defined on target-action with the source-type retrieved value
verNohideMostrar el componente
ocultarNoshowOcultar el componente
mostrar columnaNohide-columnMostrar la columna (sólo en columnas)
ocultar-columnaNoshow-columnOcultar la columna (aplicable sólo en columnas)
habilitarNodisableActivar el componente
desactivarNoenableDesactivar el componente
set-requeridoNoset-optionalEstablecer el criterio como requerido
establecer-opcionalNoset-requiredEliminar el criterio de validación requerido
set-solo lecturaNoset-editableEstablecer el criterio como sólo lectura
set-editableNoset-readonlyPermite editar el criterio
configurar-visibleNoset-invisibleEstablecer el componente como visible
set-invisibleNoset-visibleEstablece el componente como invisible (similar a ocultar pero manteniendo el criterio oculto)
activar-autorefrescarYesdisable-autorefreshEnable autorefresh and set the autorefresh timer with the source-type retrieved value
desactivar-autorefreshYesenable-autorefreshDisable autorefresh and set the autorefresh timer with the source-type retrieved value

Note: Some target-type actions have an inverse action, which is executed when dependency conditions are not accomplished. In this case, it's NOT necessary to add another dependency with the inverse action.

Elemento de dependencias

The dependency elements are the definition of the conditions required to launch a dependency.

Esqueleto del elemento de dependencia

<dependency-element id="[id]" column="[column]" attribute="[attribute]" condition="[condition]" row="[row]"
id2="[id2]" column2="[column2]" attribute2="[attribute2]" event="[event]" value="[value]"
optional="[optional]" cancel="[cancel]" view="[view]" alias="[alias]"/>

Atributos del elemento de dependencias

AtributoUsoTipoDescripciónValores
idRequiredStringComponent identifier
columnaOpcionalStringIdentificador de columna del componente (aplicable en las rejillas)
atributoOpcionalStringAtributo a comprobar.See attributes below. Default value is selected
conditionOpcionalStringCondición de comparaciónSee dependency element conditions. Default value is is not empty
filaOpcionalStringNúmero de fila de la cuadrícula para comprobar el atributo
id2OpcionalStringIdentificador de componente a comparar
columna2OpcionalStringIdentificador de columna del componente (aplicable en las rejillas)
atributo2OpcionalStringAtributo a comprobar.
eventoOpcionalStringEvento a comprobarSee events below.
valueOpcionalStringValor a comprobar
optionalOpcionalBooleanMarcar el elemento como opcional. Es útil usar sus valores incluso si están vacíosDefault value is false
cancelOpcionalBooleanCancelar la dependencia si este elemento no ha sido comprobado (útil para eventos obligatorios)Default value is false
viewOpcionalStringName of view where element is placed. Used when you need specify in what context the element on which you want to act is located.Ex.: view = "base"
aliasOpcionalStringNombre a aplicar al elemento de dependencia. Useful for launcher dependency targets
comprobar-valorOpcionalBooleanMarca los valores de este elemento (inicia la dependencia si este elemento cambia)Default value is true

Condiciones del elemento de dependencias

  • eq Values are equal
  • ne Values are not equal
  • contains Value1 contains value2
  • not contains Value1 doesn't contain value2
  • ge Value1 is greater than or equal than value2
  • le Value1 is less than or equal than value2
  • gt Value1 is greater than value2
  • lt Value1 is less than value2
  • in Value1 is in value2 list
  • not in Value1 is not in value2 list
  • is empty Value1 is empty
  • is not empty Value1 is not empty

Attributes

Los atributos son todos los datos que se pueden obtener de un componente AWE. Dependiendo del componente, puede recuperar información distinta de cada uno:

ActionAplicar aDescripción
visibleTodos los componentestrue if component is visible
valueCriteriaObtiene el valor del criterio. This is the default attribute
textoCriteriaGets component visible value
labelCriteriaObtiene etiqueta de componente
unitCriteriaObtiene etiqueta de edición de componente
editableCriteriatrue if component is editable
requeridoCriteriatrue if component is required
selectedValuesSelect and Suggest MultipleObtiene el número de los valores seleccionados del criterio de selección
totalValoresSelectObtiene el número total de valores del criterio de selección
Fila actualGridObtiene el identificador de fila actual
valor actualGridGets column value of the current row (not the selected one). Esto es útil para actualizar los valores de fila sin una selección
preventar Fila actualGridObtiene la fila anterior a la fila actual
prevCurrentRowValueGridGets column value of the previous row to the current row
siguiente Fila actualGridObtiene la siguiente fila a la fila actual
siguiente Valor actualGridGets column value of the next row to the current row
selectedRowGridObtiene el identificador de fila seleccionado
selectedRowValueGridGets column value of the selected row.
anteFilaGridObtiene la fila anterior al identificador seleccionado
prevRowValueGridGets column value of the previous row to the selected one
nextFilaGridObtiene la siguiente fila al identificador seleccionado
nextRowValueGridGets column value of the next row to the selected one
selectedGridNúmero de filas seleccionadas de la cuadrícula
filas seleccionadasGridNúmero de filas seleccionadas de la cuadrícula
modificadas RowsGridNúmero de filas modificadas de la cuadrícula (en cuadrícula multioperativa)
totalRowsGridNúmero total de filas de la cuadrícula (registros)
hasDataColumnGridtrue if the column defined has any data
emptyDataColumnGridtrue if the column defined is empty
fullDataColumnGridtrue if the column defined is full of data

Note: If you want to retrieve a selectedRowValue from a grid column which isn't editable, you must add an event launcher to make sure the dependency is being launched when selecting a row (i.e. event="select-row")

Eventos

Algunos componentes lanzan eventos en algunos casos. Puede capturar esos eventos con un elemento de dependencia para hacer que lancen la dependencia:

EventAplicar aDescripción
clickButton, Context option and ChartsLanzado al pulsar el elemento
seleccionar-filaGridSe lanzó cuando una fila ha sido seleccionada
antes guardar-filaGridLanzado antes de guardar una fila
save-rowGridIniciado al guardar una fila
después-guardar-filaGridIniciado después de guardar una fila
antes de cancelar filaGridEjecutado antes de cancelar guardar una fila
cancelar filaGridSe lanzó al cancelar guardando una fila
pos-cancelar-filaGridEjecutado después de cancelar el guardado de una fila
delete-rowGridIniciado al eliminar una fila
pos-eliminar-filaGridIniciado después de eliminar una fila
add-rowGridLanzado al agregar una fila
pos-añadir-filaGridIniciado después de añadir una fila
check-records-savedGridIniciado al comprobar si los registros han sido guardados
check-records-generatedGridIniciado al comprobar si se han generado registros
check-one-selectedGridSe lanzó al comprobar si hay una fila seleccionada
check-some-selectedGridIniciado al comprobar si hay al menos una fila seleccionada
doble clicChartsSe lanzó al hacer clic dos veces en un punto de gráfico
context-menuChartsSe lanzó cuando se hace clic derecho en un punto de gráfico
zoomChartsSe lanzó al seleccionar un rango (zooming) en un gráfico

Acción de dependencias

Dependency actions are actions launched when a dependency has been activated and the dependency source-type is action. See actions for more information.

Ejemplos

When a button is clicked, update a criterion with a formule

<dependency initial="true" source-type="formule" target-type="input" 
formule="'Valor' + (parseInt('[ButSetVa1]'.substr(5,1),10) + parseInt('[ButSetVa2]'.substr(5,1),10))">
<dependency-element id="ButSetVa3" event="click" />
<dependency-element id="ButSetVa2" />
<dependency-element id="ButSetVa1" />
</dependency>

Validate if a column value is already at the database

<dependency source-type="query" server-action="unique" target-action="AweKeyUni">
<dependency-element id="GrdKeyLst" column="KeyNam" attribute="currentRowValue" />
</dependency>

Enable a button when there is one row selected on a grid

<dependency target-type="enable" initial="true">
<dependency-element id="GrdKeyLst" attribute="selectedRows" condition="eq" value="1" />
</dependency>

Change the numeric format when a criterion value is 4decimales

<dependency source-type="formule" target-type="format-number" initial="true" 
formule="{vMin: '-999999', mDec: [NumHid], aSign:' JPY', pSign:'s', aPad:true}">
<dependency-element id="Txt" condition="eq" value="4decimales" />
</dependency>

Change the validation of a time criterion

<dependency source-type="value" target-type="validate" value="{textLE:['TimReq']}">
<dependency-element id="CalReq" condition="eq" name="Cal" />
<dependency-element id="Cal" condition="eq" name="CalReq" />
</dependency>

Launch two actions when a criterion value changes

<dependency initial="true">
<dependency-element id="CalReq" />
<dependency-action type="server" server-action="data" target-action="ProAllLst" target="SelReq" />
<dependency-action type="server" server-action="data" target-action="ProAllLst" target="SelMulReq" />
</dependency>

Make a criterion not visible (but keeping the place) when a criterion value is oculta

<dependency target-type="set-invisible" initial="true">
<dependency-element id="Txt" condition="eq" value="oculta" />
</dependency>

Make a criterion editable (not readonly) when a criterion value is edita

<dependency target-type="set-editable" initial="true">
<dependency-element id="Txt" condition="eq" value="edita" />
</dependency>

Fill a criterion unit label with the result of a query when a checkbox gets checked

<dependency source-type="query" target-type="unit" server-action="data" target-action="ModSel">
<dependency-element id="ChkBoxVa2" condition="eq" value="1" />
</dependency>

Show a component when the column value of the selected row of a grid is not equal to awemadora02

<dependency target-type="show" initial="true">
<dependency-element id="GrdSta" column="Als" attribute="selectedRowValue" condition="ne" value="awemadora02"/>
<dependency-element id="GrdSta" event="select-row"/>
</dependency>

Use a dependency just in the selected row

<dependency initial="true" target-type="enable">
<dependency-element id="GridName" attribute="selectedRow" condition="eq" id2="GridName" attribute2="currentRow"/>
</dependency>

Note: If you want to retrieve a selected row value from a grid column which isn't editable, you must add an event launcher to make sure the dependency is being launched when selecting a row (i.e. event="select-row")

Validate a criterion using a Java method

Dependency

<criteria label="PARAMETER_TEXT" id="TxtVal" variable="TxtVal" component="text">
<dependency source-type="query" server-action="validate" target-action="ValidateBankAccount">
<dependency-element id="TxtVal"/>
</dependency>
</criteria>

Query

<query id="ValidateBankAccount" service="ValidateBankAccount">
<variable id="BankAccount" type="STRING" name="TxtVal" />
</query>

Service

<service id="ValidateBankAccount">
<java classname="com.almis.awe.test.Validation" method="validateBankAccount">
<service-parameter type="STRING" name="BankAccount" />
</java>
</service>

Java method

public class Validation {

// PATTERNS
private static final String BANK_ACOUNT = "^[0-9]{4}\\-[0-9]{4}\\-[0-9]{2}\\-[0-9]{10}$";
private static final Pattern BANK_ACCOUNT_PATTERN = Pattern.compile(BANK_ACOUNT, 0);

public ServiceData validateBankAccount(String bankAccount) throws AWException {
ServiceData check = new ServiceData();
Matcher matchAccount = BANK_ACCOUNT_PATTERN.matcher(bankAccount);
if (!matchAccount.matches()) {
check.setType(AnswerType.WARNING);
check.setMessage(LocalSingleton.getInstance().getLocal("ERROR_MESSAGE_WRONG_BANK_ACCOUNT", bankAccount));
}
return check;
}
}

Añadir una clase a un elemento HTML cuando ocurre un evento

Bell Animation

A veces necesitamos mostrar un consejo en la pantalla para notar a los usuarios que algo ha sucedido en el back-end como una nueva entrada en la base de datos o similar. Vamos a explicar cómo agregar dos nombres de clase ("animado" y "faa-slow" para ajustar la velocidad animada) a un elemento HTML para animar un icono de campana y mostrar un número sobre el icono que representa una serie de errores en la aplicación. Al pulsar este botón, la campana detiene la animación y muestra un diálogo con una cuadrícula que muestra los detalles del error.

Definition of the screen elements

Primero debemos definir el elemento HTML en la pantalla xml, en este caso un elemento "info-button" con un atributo "icon" con un valor "bello" y un atributo "unit". Este último atributo representará el número de errores en la aplicación.

  <info-button style="nav-icon-btn-danger" title="BUTTON_NOTIFICATIONS" icon="bell" id="Warnings" unit="">
...
</info-button>

El siguiente paso es agregar la acción para detener la animación de la campana (quitar el nombre de la clase) y mostrar el diálogo.

  <info-button style="nav-icon-btn-danger" title="BUTTON_NOTIFICATIONS" icon="bell" id="Warnings" unit="">
<button-action type="remove-class" target-action="animated faa-slow" target="#Warnings .fa-bell" />
<button-action type="dialog" target="MessageWarnings" />
</info-button>

La primera acción del botón elimina los nombres de las clases "animadas" y "faa-slow" del elemento HTML apuntado en el atributo "target", en este caso el elemento con el nombre de clase "fa-bell" dentro del elemento con el id "Advertencias".

La segunda acción del botón abre el diálogo con el id "MessageWarnings".

Estas acciones se activan cuando el usuario hace clic en el botón.

Ahora debemos agregar las dependencias requeridas para mostrar los números de errores y agregar los nombres de clase "animados" y "faa-slow". Estas acciones deben ejecutarse cuando los usuarios entren en la pantalla o inicien sesión en la aplicación para que podamos añadir una acción aditiva.

<info-button style="nav-icon-btn-danger" title="BUTTON_NOTIFICATIONS" icon="bell" id="Warnings" unit="">
<button-action type="remove-class" target-action="animated faa-slow" target="#Warnings .fa-bell" />
<button-action type="dialog" target="MessageWarnings" />
<dependency source-type="launcher" target-type="unit" target-action="notification" initial="true">
<dependency-element id="NotificationNumber" alias="notification"/>
</dependency>
<dependency>
<dependency-element id="NotificationNumber" attribute="value" condition="ne" value="0" />
<dependency-action type="add-class" target-action="animated faa-slow" target="#Warnings .fa-bell" />
</dependency>
</info-button>

La primera dependencia es un tipo de "lanzador" que se ejecuta cuando el usuario entra en la pantalla donde este elemento se define gracias al atributo "inicial" establecido en "verdadero". La dependencia, apunta al atributo "unit" del botón info-button y depende de un elemento con un id "NotificationNumber" representado en la etiqueta "dependency-element". Este nuevo elemento se creará en los siguientes pasos.

La segunda dependencia es un tipo de "acción". Esta acción se activará cuando el valor del "elemento de dependencia" (el elemento con un identificador de "NotificationNumber") no sea igual (ne) a cero. Esto se representa con los siguientes atributos: attribute="value" condition="ne" value="0". La acción para esta dependencia es un tipo "add-class", así que cuando se ejecuta esta acción, se añadirá un nombre de clase a un elemento. Esta acción apunta al elemento con el nombre de la clase "fa-bell" dentro del elemento con el id "Advertencias" (atributo "target" en la etiqueta de dependencia-acción), por lo que este elemento recibirá el nombre de la clase descrito en el atributo "target-action" ("animado faa-slow").

Ahora vamos a definir el elemento de dependencia "NotificationNumber". Este elemento será un criterio oculto y tiene un atributo de "carga inicial" definido a "valor" y una "acción objetiva" que apunta a una consulta que debe definirse en "Consultas. ml" en AWE.

<criteria id="NotificationNumber" component="hidden" initial-load="value" target-action="getNotificationErrors" />

Y por último, pero no menos importante, la definición del diálogo.

<dialog id="MessageWarnings" modal="true" style="modal-lg" label="SCREEN_TEXT_WARNINGS" icon="exclamation-triangle" help="HELP_SCREEN_TEXT_PRINT_EMAIL">
<tag type="div" style="modal-body row">
<window label="BUTTON_NOTIFICATIONS" icon="bell" expandible="vertical">
<grid id="GridMessageWarning" style="height-lg" max="50" server-action="data-silent" target-action="getErrorMessageInfo" autoload="true" autorefresh="30">
...
columns definition
...
</grid>
</window>
</tag>
</dialog>

En este punto hemos creado todos los elementos necesarios en la pantalla. El siguiente paso es definir las consultas que extraen los datos de la base de datos.

Queries

En el archivo "Queries.xml" debemos definir las siguientes etiquetas:

<query id="getErrorMessageInfo" service="getErrorMessageInfo"/>
<query id="getNotificationErrors" service="getErrorMessageInfo">
<field id="errors" alias="value" />
<field id="errors" alias="label" />
</query>

La primera consulta apunta a un servicio llamado "getErrorMessageInfo" definido en el archivo "Services.xml" en AWE. Esta consulta será lanzada por la cuadrícula creada en el diálogo.

La segunda consulta apunta al mismo servicio y espera dos valores uno para un campo "valor" y otro para un campo "etiqueta". Esta consulta será lanzada por los criterios ocultos.

Service

Una vez que las consultas están definidas y apuntan a un servicio, debemos crear este servicio. En el archivo "Services.xml" debemos definir las siguientes etiquetas:

<service id="getErrorMessageInfo">
<java classname="com.isban.smgmi.web.controller.ErrorMessageController" method="getErrorMessageInfo">
</java>
</service>

Este servicio ejecuta el método "getErrorMessageInfo" en la clase "com.isban.smgmi.web.controller.ErrorMessageController".

Java

En el Controlador debemos crear el método "getErrorMessageInfo" y devolver un objeto ServiceData. Este controlador debe llamar a una clase Manager.

public class ErrorMessageController extends AWEController {
public ServiceData getErrorMessageInfo() throws AWException {

// Get event manager
ErrorMessageManager errorMessageManager = new ErrorMessageManager();

return errorMessageManager.getErrorMessageInfo();
}
}

En la definición de Gestor debemos crear una acción de llenado del cliente para cargar datos en la cuadrícula de diálogo y una acción de cliente seleccionada para cargar datos en criterios ocultos.

public class ErrorMessageManager extends AWEManager {

/**
* Get error info
*
* @return
* @throws AWException
*/
public ServiceData getErrorMessageInfo() throws AWException {
...
ClientAction fillErrorGrdAction = new ClientAction("fill");
fillErrorGrdAction.setSilent("true");
fillErrorGrdAction.setTarget("GridMessageWarning");

DataList errorGrdParametersDatalist = new DataList();
Integer rowIndex = 0;
for (ErrorBean error : errorList) {
HashMap<String, CellData> parametersRow = new HashMap<String, CellData>();
parametersRow.put("id", new CellData(rowIndex));

...
// add columns data
...

errorGrdParametersDatalist.getRows().add(parametersRow);
rowIndex++;
}
// Set records
errorGrdParametersDatalist.setRecords(rowIndex);

fillErrorGrdAction.addParameter("datalist", errorGrdParametersDatalist);

// Notification Number
ClientAction selectCrtNotificationNumberAction = new ClientAction("select");
selectCrtNotificationNumberAction.setTarget("NotificationNumber");
selectCrtNotificationNumberAction.setSilent("true");

errorListSize = errorList.size();
ArrayNode notifNumberArrayNode = JsonNodeFactory.instance.arrayNode();
notifNumberArrayNode.add(String.valueOf(errorListSize));
selectCrtNotificationNumberAction.addParameter("values", new CellData(notifNumberArrayNode));

// Adds clients actions
serviceData.addClientAction(selectCrtNotificationNumberAction);
serviceData.addClientAction(fillErrorGrdAction);
...
}