i
Formularios
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 el formulario "Account (CRM_ACCOUNT)" de la aplicación CRM, al descargar los fuentes Java del formulario 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 un formulario 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 un formulario pueden tener los siguientes tipos de datos.
Se muestra la equivalencia entre los tipos de datos de campos del formulario 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 del formulario.
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 formulario. |
entity: Clase modelo del formulario
|
read(entity) |
Lee una instancia de formulario. |
entity: Clase modelo del formulario
|
update(entity) |
Actualiza una instancia de formulario. |
entity: Clase modelo del formulario
|
delete(entity) |
Elimina una instancia de formulario. |
entity: Clase modelo del formulario
|
readCases(entity) |
Permite recuperar las instancias de casos asociadas a una instancia de formulario.
Retorna una lista de casos dado que una instancia de formulario puede estar relacionada a más de un caso. |
entity: Clase modelo del formulario |
bind(entity,case) |
Permite asociar un caso a una instancia de formulario. |
entity: Clase modelo del formulario 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 formulario 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 del formulario queryCriteria: Clase que permite definir a través de un conjunto de criterios, una consulta SQL |
Ejemplos de Uso
En los ejemplos se utiliza el formulario "Account (CRM_ACCOUNT)" de la aplicación CRM 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 del formulario
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 del formulario
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 del formulario
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 del formulario
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 un formulario 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 formularios
En el ejemplo se recupera el caso asociado a una instancia de formulario y se ejecuta dicho caso.
Para utilizar este ejemplo además del formulario "Cuenta" (Account) se debe modelar el proceso "Alta de Cuenta" (Account Registration) que utiliza dicho formulario. El caso se puede iniciar manualmente o iniciar mediante métodos de Deyel SDK.
Para leer los casos asociados a una instancia de formulario, 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 del formulario 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 formulario
En el ejemplo se lee un caso asociado a una instancia del formulario "Account". para luego asociar dicho caso a una instancia del formulario "Contact", quedando ambas instancias asociadas al mismo caso.
Se lee el caso asociado a la instancia del formulario "Account" con el método readCases(account), descripto en el ejemplo 8.
Se asocia el caso a la instancia del formulario "Contact", con el método bind(contact,accountRegistrationCase).
Solo se puede vincular un caso a una instancia de formulario, si existe una relación entre el formulario 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 del formulario “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 un formulario 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 los formularios se pueden realizar mediante el uso de los siguientes objetos.
Criteria: representa criterios para realizar búsquedas sobre los datos de los formularios. 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 un formulario puede ser muy grande.
Servicio del Formulario: clase servicio del formulario 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 del formulario, 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
En la aplicación CRM, el formulario “Contact (CRM_CONTACT)” tiene una relación con el formulario “Account (CRM_ACCOUNT)” y 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() ;
|