i
Entidades
La clase modelo contiene las propiedades con sus métodos getter y setter, mientras que la clase servicio contiene las operaciones a realizar con el modelo.
Por ejemplo si se usa la entidad "Account", al descargar los fuentes Java de la entidad se obtiene un archivo account.java representando el modelo y otro archivo accountService.java con las operaciones disponibles del servicio.
Contenido de la Clase Modelo
El modelo de una entidad contiene:
•Constructor del modelo.
•Conjunto de métodos getter y setter de sus campos.
•Conjunto de métodos getter para cada campo para uso en consultas SQL desde Deyel SDK.
•Clases internas que representan el modelo de los contenedores “Múltiples ocurrencias”, si tuviese.
Método particular de la clase modelo
Además de los métodos getter y setter existen métodos particulares relacionados a los campos.
Operación |
Descripción |
Parámetros |
---|---|---|
getReference_”idCampoTipoArchivo”() |
Permite recuperar el objeto FileReference asociado al campo archivo de la instancia. |
Las propiedades del modelo de una entidad pueden tener los siguientes tipos de datos.
Se muestra la equivalencia entre los tipos de datos de campos de la entidad y el modelo Java.
Control |
Tipo de Dato |
Java |
---|---|---|
Texto |
Alfanumérico (longitud) |
String |
Alfanumérico Mayúscula (longitud) |
String |
|
Alfanumérico Extenso |
String |
|
Texto Enriquecido |
String |
|
Número |
Entero |
Integer |
Entero Grande |
Long |
|
Decimal |
Double |
|
Hora |
Hora |
java.sql.Time |
Hora Local |
java.sql.Time |
|
Fecha |
Fecha |
java.sql.Date |
Fecha y Hora |
java.sql.Timestamp |
|
Fecha Local |
java.sql.Timestamp |
|
Fecha y Hora Local |
java.sql.Timestamp |
|
Imagen |
Imagen en Carpeta |
String |
Imagen en Base de Datos |
String |
|
Archivo |
Archivo en Base de Datos |
String |
Check |
Boolean |
Boolean |
Contenido de la Clase Servicio
El servicio permite realizar las siguientes operaciones CRUD (Create, Read, Update, Delete) y búsqueda (search), además de contener métodos particulares, por ejemplo para recuperar archivos de la entidad.
Además, la clase servicio incluye un método específico para ejecutar consultas SQL sobre el modelo correspondiente.
Operación |
Descripción |
Parámetros |
---|---|---|
create(entity) |
Crea una instancia de entidad. |
entity: Clase modelo de la entidad
|
read(entity) |
Lee una instancia de entidad. |
entity: Clase modelo de la entidad
|
update(entity) |
Actualiza una instancia de entidad. |
entity: Clase modelo de la entidad
|
delete(entity) |
Elimina una instancia de entidad. |
entity: Clase modelo de la entidad
|
readCases(entity) |
Permite recuperar las instancias de casos asociadas a una instancia de formulario.
Retorna una lista de casos dado que una instancia de entidad puede estar relacionada a más de un caso. |
entity: Clase modelo de la entidad |
bind(entity,case) |
Permite asociar un caso a una instancia de entidad. |
entity: Clase modelo de la entidad case : Clase modelo del caso |
shortDescription() |
Permite recuperar la descripción corta de la instancia enviada por parámetro. |
formInstance
|
get“idCampo”_description() |
Permite recuperar el valor descriptivo del campo indicado. |
formInstance
|
search(searchCriteria) |
Permite recuperar las instancias de entidad que cumplan con los criterios de búsqueda. |
searchCriteria: Clase que permite definir un conjunto de criterios y parámetros de configuración de búsqueda |
executeQuery(entity, queryCriteria) |
Ejecuta sobre el modelo la consulta generada a través de los distintos métodos disponibles.
|
entity: Clase modelo de la entidad queryCriteria: Clase que permite definir a través de un conjunto de criterios, una consulta SQL |
Ejemplos de Uso
En los ejemplos se utiliza la entidad "Account" y cada ejemplo contiene el uso de la clase modelo "Account" y la clase servicio “AccountService”.
1. Creación del servicio
Este servicio se crea por única vez en la regla y se lo reutiliza en las distintas operaciones.
AccountService accountService = new AccountService(getApiClient()); |
2. Creación de una instancia de la entidad
Se crea una instancia de la clase modelo “Account”, se le asignan valores a sus propiedades y utilizando la clase servicio “AccountService” se guarda la nueva cuenta con los valores asignados, mediante el método create(account).
Account account = new Account() ; Integer accountNumber = accountService.create(account); log("Account created with account number:"+ accountNumber);
|
3. Lectura de una instancia de la entidad
Para obtener los datos de una cuenta existente se crea una instancia de la clase modelo “Account”, se indica el identificador elegido mediante el correspondiente método setter y se lee dicha instancia utilizando el método read(account) de la clase servicio “AccountService”. La instancia contiene todas sus propiedades y las mismas pueden consultarse mediante los correspondientes métodos getter. En el ejemplo se leen las propiedades dsCompany, dtOpening, dtStore y dtLastUpdate.
Account account = new Account(); Integer readAccountNumber = 50000 ; |
4. Modificación de una instancia de la entidad
Para modificar los datos de una cuenta existente se crea una instancia de la clase modelo “Account”, se indica el identificador elegido mediante el correspondiente método setter y se lee dicha instancia utilizando el método read(account) de la clase servicio “AccountService”. A continuación se modifica la propiedad dsCompany utilizando el correspondiente método setter y se invoca el método update(account) del servicio para actualizar la cuenta.
Account account = new Account();
|
5. Eliminación de una instancia de la entidad
Para eliminar una cuenta existente, se crea una instancia de la clase modelo “Account”, se indica el identificador de la misma mediante el correspondiente método setter. A continuación se invoca el método delete(account) del servicio para eliminar la instancia.
Account account = new Account(); account = accountService.read(account);
|
6. Uso de campos tipo archivos e imagen
Para recuperar un archivo relacionado a una instancia de una entidad se debe utilizar el correspondiente método get+<fieldname>+(entity) de la clase servicio “AccountService”.
En este ejemplo se invoca al método getFlLogo(account) de la clase servicio “AccountService” que permite recuperar el archivo correspondiente a un logo asociado a un objeto File.
Account account = new Account(); |
7. Uso de objetos internos
Los objetos internos representan el conjunto de campos modelados en contenedores de múltiples ocurrencias.
En este ejemplo se instancian dos nuevos objetos internos “Account.PhoneLine” y se asignan valores a sus propiedades nrPhone y tpPhone.
Se puede guardar una lista nueva de objetos “Account.PhoneLine” con el método setPhoneLine(lsPhones) o bien agregar a la lista actual dos instancias del objeto “Account.PhoneLine”.
|
8. Lectura de casos asociados a instancias de entidades
En el ejemplo se recupera el caso asociado a una instancia de entidad y se ejecuta dicho caso.
Para utilizar este ejemplo además de la entidad "Cuenta" (Account) se debe modelar el proceso "Alta de Cuenta" (Account Registration) que utiliza dicha entidad. El caso se puede iniciar manualmente o iniciar mediante métodos de Deyel SDK.
Para leer los casos asociados a una instancia de entidad, se crea una instancia de la clase modelo “Account”, se indica el identificador elegido mediante el correspondiente método setter. Se instancia el servicio “AccountService” y utilizando el método readCases(account), se recupera la lista “Cases” con los casos asociados a la instancia con identificador 10.
Teniendo la lista “Cases”, la misma se puede recorrer para recuperar algunos o todos sus casos. Se instancia el servicio “AccountRegistration” y utilizando el método execute(accountRegistrationCase) se ejecuta el primer caso asociado.
Tanto la instancia de la entidad como la del caso deben estar creadas.
Account account = new Account(); account.setId(10);
AccountService accountService = new AccountService(getApiClient()); List<Cases> listOfCases = accountService.readCases(account);
AccountRegistration accountRegistrationCase = new AccountRegistration(listOfCases.get(0));
AccountRegistrationService accountRegistrationService = AccountRegistrationService(getApiClient()); accountRegistrationService.execute(accountRegistrationCase);
|
9. Asociar un caso a una instancia de entidad
En el ejemplo se lee un caso asociado a una instancia de la entidad "Account". para luego asociar dicho caso a una instancia de la entidad "Contact", quedando ambas instancias asociadas al mismo caso.
Se lee el caso asociado a la instancia de la entidad "Account" con el método readCases(account), descripto en el ejemplo 8.
Se asocia el caso a la instancia de la entidad "Contact", con el método bind(contact,accountRegistrationCase).
Solo se puede vincular un caso a una instancia de entidad, si existe una relación entre la entidad y el proceso al que pertenece el caso a asociar.
Account account = new Account(); account.setId(10);
AccountService accountService = new AccountService(getApiClient()); List<Cases> listOfCases = accountService.readCases(account);
AccountRegistration accountRegistrationCase = (AccountRegistration) listOfCases.get(0); AccountRegistrationService accountRegistrationService = AccountRegistrationService(getApiClient());
Contact contact = new Contact(); contact.setId(20);
ContactService contactService = new ContactService(getApiClient());
contactService.bind(contact,accountRegistrationCase);
|
10. Recuperar el código y la descripción del valor de un campo asociado a una lista de valores
Para utilizar este ejemplo la lista de valores “Estados” debe estar modelada en Deyel y se deben haber ingresado valores para la misma.
Código |
Valor Descriptivo |
---|---|
1 |
Activo |
2 |
Inactivo |
Se debe relacionar un campo de la entidad “Account” con la lista de valores “Estados”.
Cuando un campo tiene definida una relación, el contenido puede utilizar su código o su valor descriptivo.
En este ejemplo se recupera el código del campo asociado a la lista de valores.
String stateCode = account.getAccountState(); //Retorna:1
|
Mientras que en el siguiente se recupera la descripción del campo asociado a la lista de valores.
String stateDescription = accountService.getAccountSate_description(account); //Retorna: Activo
|
El código se recupera mediante el objeto modelo y la descripción se recupera mediante el objeto servicio.
11. Modificación de instancias de una entidad con commit o rollback
En este ejemplo se declara una variable que representa el servicio del objeto que se va a actualizar. Mediante su utilización, se recupera la lista de instancias existentes y es recorrida con la sentencia FOR. Por cada una de ellas se redefine el servicio obteniendo el cliente API propio, se calcula y actualiza el valor del IVA, y se intenta realizar un comando commit o un comando rollback a la base de datos conectada, según corresponda.
protected void run() throws java.lang.Exception { TestFormService xTestFormService = new TestFormService(getApiClient()); SearchCriteria xSearchCriteria = new SearchCriteria(); List<TestForm> xListResult = xTestFormService.search(xSearchCriteria).getResult(); for (int j = 0; j < xListResult.size(); j++) { try { xTestFormService = new TestFormService(getOwnApiClient()); TestForm xElement = xListResult.get(j); xElement.setValorDelIVA((tasadeiva * montoentrada) / 100); xTestFormService.update(xElement); ownConnectionCommit(); } catch (Exception e) { ownConnectionRollback(); } } } |
Las búsquedas sobre las instancias de las entidades se pueden realizar mediante el uso de los siguientes objetos.
Criteria: representa criterios para realizar búsquedas sobre los datos de las entidades. Se compone de elementos que pueden ser campos y valores, conectados por operadores.
Operador |
Descripción |
---|---|
eq |
Igual |
neq |
Distinto |
gt |
Mayor |
gte |
Mayor igual |
lt |
Menor |
lte |
Menor igual |
between |
Entre |
betweene |
Entre y admite iguales |
nbetween |
Fuera del rango |
like |
Contiene |
nlike |
No contiene |
startsWith |
Inicia con |
nstartsWith |
No inicia con |
in |
Incluido |
nin |
No incluido |
endsWith |
Finaliza con |
nendsWith |
No finaliza con |
isNull |
Es nulo |
notNull |
No es nulo |
SearchCriteria: objeto que agrupa las condiciones de búsqueda (objeto Criteria), además permite parametrizar el orden del resultado, el tamaño de la página de lectura y la cantidad de páginas que se van a recuperar. La lectura por páginas se utiliza dado que el volumen de datos de una entidad puede ser muy grande.
Servicio de la Entidad: clase servicio de la entidad sobre el que se está haciendo la búsqueda. Contiene la operación search(searchCriteria) que debe recibir como parámetro el objeto SearchCriteria y retorna el objeto SearchResult.
Ejemplo:
SearchResult searchResult = accountService.search(searchCriteria);
SearchResult: objeto que contiene los resultados de la búsqueda. Contiene una lista de instancias de la entidad, las cuales son instancias del modelo correspondiente, por ejemplo “Account”. Este objeto permite conocer la cantidad total de páginas de lectura resultantes de la búsqueda, el tamaño de cada página y la cantidad de páginas a recuperar.
Ejemplos de Búsqueda
1. Búsqueda
En este ejemplo se recupera una lista de cuentas con estado activa, donde dicho estado corresponde al código "1". Se define una cantidad de 15 líneas por página de lectura y el número de páginas a recuperar. Los resultados son ordenados por nombre de la compañía en forma ascendente.
|
2. Tipos de constructores para los criterios de búsquedas
En este ejemplo se crea un objeto Criteria y se definen diferentes condiciones de búsqueda utilizando los operadores "igual", "distinto", "mayor", "mayor igual", "menor", "menor igual", "entre", "entre y admite iguales", "fuera de rango", "contiene", "no contiene", "inicia con", "no inicia con", "incluido", "no incluido", "finaliza con", "no finaliza con", "es nulo", "no es nulo".
// Igual cdStatus= 1 corresponde a una cuenta activa
|
Deyel utiliza para los campos con tipo “fecha” el tipo de dato java.sql.Date, por lo que se debe hacer la transformación de java.util.Date a java.sql.Date, cuando se requiere crear un objeto con este tipo de dato.
// Contiene
// Finaliza con // Criteria.endsWith("dsCompany","Corporation"); // Criteria.nendsWith("dsCompany","Corporation");
// Es nulo // Criteria.isNull("CdStatus"); // Criteria.notNull("CdStatus"); |
3. Operaciones sobre el objeto de resultados
El objeto SearchResult es un objeto iterativo y como tal se puede recorrer de distintas formas.
En el ejemplo se utiliza una sentencia FOR para iterar sobre cada una de las instancias que cumplen con las condiciones de búsqueda de las propiedades dsIndustry y qtScore, recuperando las propiedades idAccount y dsCompany.
SearchCriteria searchCriteria = new SearchCriteria(); |
Navegación entre las Entidades Relacionadas
Si la entidad “Contact” tiene una relación con la entidad “Account”, se puede recuperar la cuenta relacionada desde una regla de negocio, a partir de un contacto.
Se crea una instancia de la clase modelo “Contact” y se recupera el identificador de la cuenta mediante el correspondiente método getter.
A continuación se crea una instancia de la clase modelo “Account” indicando en el método setter el identificador recuperado del contacto y se lee la instancia de la cuenta utilizando el método read(myAccount) de la clase servicio “AccountService”.
Contact contact = new Contact() ;
|