i
Reglas
La clase modelo contiene los métodos getter y setter para cada uno de los parámetros definidos en una regla avanzada, mientras que la clase servicio contiene la operación a realizar con el modelo.
El nombre del modelo como el nombre del servicio se determinan mediante la propiedad Nombre de la Clase SDK especificada al modelar la regla avanzada.
Por ejemplo si se usa la regla avanzada "taxCalculation", al descargar los fuentes Java de la regla se obtiene un archivo taxCalculation.java representando el modelo y otro archivo taxCalculationService.java con la operación disponible del servicio.
Contenido de la Clase Modelo
El modelo de una regla avanzada contiene:
•Constructor del modelo.
•Métodos getter generales.
•Conjunto de métodos getter y setter de sus parámetros. Los parámetros de salida solamente tienen métodos getter.
Métodos getter generales
Operación |
Descripción |
Parámetro |
---|---|---|
getCdRule() |
Retorna el identificador de la regla. |
|
getCdVersion() |
Retorna la versión de la regla. |
Tipo de Datos
Los parámetros de una regla avanzada tienen su equivalencia con los tipos de datos de campos del formulario.
Contenido de la Clase Servicio
El servicio permite realizar la siguiente operación:
Operación |
Descripción |
Parámetro |
---|---|---|
execute(rule) |
Ejecuta una regla avanzada. |
Rule rule: Modelo de la regla a ejecutar |
Ejemplo de Uso
En el ejemplo se invoca la regla avanzada “taxCalculation”, utilizando las clases de modelo y servicio.
En el modelo se definen los valores para los parámetros de entrada "amount" y "taxRate" mediante sus métodos setter. A continuación se ejecuta el método execute(myRule) del servicio y se obtiene el valor del iva a partir del método getter del parámetro "taxValue".
// Calculo 21% del IVA del Monto Ingresado
|
Cuando una regla se habilita para ser utilizada en la relación con un campo de una entidad o de una página., se genera automáticamente dos parámetros predefinidos: uno de entrada y otro de salida. Estos parámetros requieren ciertas consideraciones para la correcta implementación de la regla.
•La paginación es un requisito fundamental para asegurar una navegación fluida entre los resultados y garantizar su correcta presentación y acceso.
•La implementación del autocompletar es necesaria para que el campo relacionado pueda mostrar sugerencias en tiempo real. Si no se implementa, los usuarios no reciben resultados mientras escriben.
•Los parámetros de entrada pueden ser de cualquier tipo de dato compatible con el modelado de reglas, excepto arreglos o listas, que no están permitidos.
Ejemplo de Implementación de la Regla “getUsersByName”
El objetivo de esta regla es retornar una lista de usuarios cuyos nombres coincidan parcialmente con el texto ingresado en el campo relacionado. Además, como filtro adicional, se aplica la condición que el apellido contenga el texto recibido en el parámetro de entrada “apellido".
Por ejemplo, si el usuario ingresa "Ju" en el campo relacionado y el parámetro de entrada “apellido” es "Perez", los resultados válidos podrían incluir usuarios como: “Juana Perez”, “Juan Perez”, “Julian Costa Perez ”.
Se utilizan los siguientes parámetros de entrada y salida:
•Parámetros de Entrada
input: Objeto de tipo RuleRelationInput, que contiene los criterios de búsqueda y paginación.
apellido: Cadena de texto (String) utilizada como filtro para buscar coincidencias en los apellidos de los usuarios.
•Parámetros de Salida
output: Objeto de tipo RuleRelationOutput, que devuelve la lista de resultados junto con la información de paginación.
Código de Implementación en Java
A continuación se visualiza un ejemplo de cómo implementar la regla "getUsersByName" en Java, que filtra usuarios por nombre y apellido utilizando los criterios de búsqueda y paginación definidos en los parámetros de entrada.
// Inicialización del parámetro de salida output = new RuleRelationOutput();
UserService userService = new UserService(getApiClient()); SearchCriteria searchCriteria = new SearchCriteria();
// Aplicar criterio de selección basado en currentValues if (!input.getCurrentValues().isEmpty()) { searchCriteria.addCriteria(Criteria.in("cdUser", input.getCurrentValues())); } // Aplicar criterio de autocompletar if (input.getLikeValue() != null) { searchCriteria.addCriteria( Criteria.like("dsFirstName", input.getLikeValue())); } // Aplicar criterio adicional definido por el usuario if (apellido != null) { searchCriteria.addCriteria(Criteria.like("dsLastName", apellido)); }
// Aplicar parámetros de paginación searchCriteria.setPage(input.getPage()); searchCriteria.setPageSize(input.getPageSize());
SearchResult<User> searchResult = userService.search(searchCriteria); for (User user : searchResult.getResult()) { // Generación de valores de salida RuleValue ruleValue = new RuleValue(); ruleValue.setCode(user.getUserCode()); ruleValue.setValue(userService._shortDescription(user)); output.getResults().add(ruleValue); }
// Configurar datos de paginación en la respuesta int page = searchResult.getCurrentPage(); int pageSize = searchResult.getSearchCriteria().getPageSize(); int total = searchResult.getTotal(); output.setPaging(new Paging(page, pageSize, total));
|