i

Please enable JavaScript to view this site.

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.

Clases internas que representan el modelo de los contenedores “Múltiples ocurrencias”, si tuviese.

Tipos de Datos

 

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.

 

 

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

 

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.

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() ;
account.setNuIdentifNumber("010000123");
account.setDsIndustry("1");              // 1= Agricultura
account.setDsSource("7");                // 7= Redes Sociales
account.setDsCompany("Trees Company");
account.setDtOpening((Date) new java.util.Date());
account.setFlLogo(new File("/photo.png"));
account.setCdStatus("1");                // 1= Activa

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 ;
account.setIdAccount(readAccountNumber);
account = accountService.read(account) ;
 
// Una vez leído se puede seguir trabajando
String dscompany = account.getDsCompany();
Date   dtopening = account.getDtOpening();
 
// Datos de auditoría
Timestamp dtStore = account.getDtStore();
Timestamp dtLastUpdate = account.getDtLastUpdate();
 

 

 

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();
account.setIdAccount(50000);
account = accountService.read(account);
 
// Una vez leído actualizamos
account.setDsCompany("Trees Company");
accountService.update(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.setIdAccount(50000);
accountService.delete(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();
account.setIdAccount(50000);
 
//  Lectura de la cuenta
account = accountService.read(account);
 
//  Lectura de la imagen logo
File logo = accoountService.getFlLogo(account);
 
//  Asignar un nuevo logo a la cuenta
account.setFlLogo(new File("Path"));
accountService.update(account);
 

 

 

7. Uso de objetos internos

 

Los objetos internos representan el conjunto de campos modelados en contenedores iterativos.

 

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”.

 

 
Account.PhoneLine phones= new Account.PhoneLine();
phones.setNrPhone("01149834589");
phones.setTpPhone("Line phone");
 
Account.PhoneLine phones1= new Account.PhoneLine();
phones1.setNrPhone("0115123987");
phones1.setTpPhone("Cell phone");
 
List<Account.PhoneLine> lsPhones = new ArrayList();
lsPhones.add(phones);
lsPhones.add(phones1);
account.setPhoneLine(lsPhones);
 
// Otra opción es
account.getPhoneLine().add(phones);
account.getPhoneLine().add(phones1);
 

Búsquedas

 

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

 

 

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

 

1. Búsquedas

 

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.

 

 
SearchCriteria searchCriteria = new SearchCriteria();
 Criteria criteria1 =
          Criteria.eq("CdStatus","1");
 searchCriteria.addCriteria(criteria1);
 searchCriteria.setPageSize(15);
 searchCriteria.setPage(1);
 searchCriteria.addOrderAsc("DsCompany");
 
 
SearchResult searchResult =
             accountService.search(searchCriteria);
 List<Account> instancesResult = searchResult.getResult();
 

 

 

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 y contiene.

 

 

// Igual          cdStatus= 1 corresponde a una cuenta activa
  Criteria criteria =  Criteria.eq("CdStatus""1");
 
// Distinto       cdStatus= 1 corresponde a una cuenta activa
// Criteria criteria =  Criteria.neq ("CdStatus","1");
 
// Mayor
// Criteria criteria = Criteria.gt ("qtScore", 20) ;
 
// Mayor igual
// Criteria criteria = Criteria.gte ("qtStore", 20) ;
 
// Menor
// Criteria criteria = Criteria.lt  ("qtStore", 50) ;
 
// Menor igual
// Criteria criteria = Criteria.lte ("qtStore", 50) ;
 
// Entre
// Criteria  criteria = Criteria.between ("dtOpening",
// Date.valueOf("01/01/1990"), Date.valueOf("01/01/2020"));
 
// Entre y admite iguales
// Criteria  criteria =  Criteria.betweene("dtOpening",
// Date.valueOf("01/01/1990"), Date.valueOf("01/01/2020"));
 
// Fuera de rango
// Se Utiliza Formato YYYY-MM-DD
// SimpleDateFormat format =
//      new SimpleDateFormat("yyyy-MM-dd");
// Date dateFrom =
//      new Date(format.parse( "1990-01-01" ).getTime());
// Date dateTo =
//      new Date(format.parse( "2020-01-01" ).getTime());
//
// Criteria criteria =
//        Criteria.nbetween ("dtOpening", dateFrom ,dateTo );
 
// Contiene       En un objeto interno
// Criteria criteria = Criteria.like("eMailLine/dsEmail",
//         "yahoo.com.ar");

 

 

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
// Criteria criteria = Criteria.like("dsCompany","Inc.");
 
// No contiene
// Criteria criteria = Criteria.nlike("dsCompany","Inc.");
 
// Inicia con
// Criteria criteria = Criteria.startsWith("dsCompany","The");
 
// No inicia con
// Criteria criteria = Criteria.nstartsWith("dsCompany","The");
 
// Incluido       dsIndustry = 6 es Comunicaciones, 8 Educación
// Criteria criteria =
// Criteria.in("dsIndustry", Arrays.asList("6", "8" ));
 
// No Incluido     dsIndustry 6 es Comunicaciones, 8 Educación
// Criteria criteria =
// Criteria.nin("dsIndustry", Arrays.asList("6", "8" ));
 

 

 

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();
 searchCriteria.setPageSize(15);
 searchCriteria.addOrderDesc("idAccount");
 
 // Cuentas con industria igual a comunicaciones
 searchCriteria.addCriteria
    (Criteria.eq("dsIndustry""6"));
 
// Cuentas con puntuación mayor a 20
 searchCriteria.addCriteria
         (Criteria.gt("qtScore"20)  );
 
 // Recorre todas las cuentas del resultado de búsqueda
 String stringData1 = "";
 for (Account account : searchResult) {
     stringData1 += " - " + account.getIdAccount()
                  + " - " + account.getDsCompany();
 }
 // Si solo necesito la primera hoja de resultados
 SearchResult<Account> resultFirstPage =
         accountService.search(searchCriteria);
 List<Account> firstList = resultFirstPage .getResult();
 
 String stringData = "";
 stringData += " Amount of data " + firstList.size();
 stringData += " Pages " + resultFirstPage .getPages();
 stringData += " Actual Page " +
                    resultFirstPage .getCurrentPage();
 

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() ;
Integer idAccount  = contact.getIdCompany();
// Recupero el id de una cuenta de un contacto
// y leo la cuenta con ese id
 
Account myAccount = new Account();
myAccount.setIdAccount(idAccount);
myAccount = accountService.read(myAccount);

 

Envianos tu comentario
Compartir en Twitter Compartir en Linkedin Enviar por Email Imprimir