i

Please enable JavaScript to view this site.

Documentación 8.7

Las consultas SQL son útiles cuando se trabaja con grandes volúmenes de datos. Una gran ventaja de usar estas consultas es que permiten recuperar solo la información que se necesita, en lugar de cargar todo el objeto modelo.

 

Si se utiliza el objeto SearchCriteria para buscar datos, se recuperan los objetos completos para esa entidad, aunque solo se necesite, por ejemplo, los identificadores de las instancias. Esto significa que se está cargando más información de la necesaria.

En cambio, con las consultas SQL disponibles en Deyel SDK, se pueden recuperar únicamente los datos específicos requeridos, lo que hace que el procesamiento sea más rápido y eficiente.

 

Otra gran ventaja de utilizar consultas SQL con Deyel SDK es la posibilidad de realizar operaciones JOIN entre entidades, una funcionalidad que no está disponible en SearchCriteria.

Búsquedas para Consultas SQL

 

Las búsquedas sobre las consultas SQL se pueden realizar mediante el uso de los siguientes objetos.

 

QueryCriteria: objeto sobre el que se agregan las diferentes partes de la consulta SQL. Con el mismo, se puede especificar qué campos recuperar de una instancia de entidad, si se trabaja con iterativos o no, así como el orden y agrupamiento de la búsqueda, las condiciones de límite y otras operaciones que se detallan en los ejemplos.

 

Servicio del Formulario - Método executeQuery(): clase servicio del formulario sobre el cual se realiza la búsqueda. Contiene la operación executeQuery(formInstance, queryCriteria), que recibe como parámetros el objeto modelo de la entidad con el que se está trabajando y el objeto QueryCriteria. Retorna un objeto QueryResult como resultado.

 

Modelo del Formulario - getter ...  QueryName(): clase modelo del formulario sobre la cual se quiere ejecutar la consulta SQL. Contiene métodos getter para cada uno de los campos modelados, y estos métodos tienen la particularidad de finalizar con QueryName. Deben ser utilizados al añadir las distintas partes de la consulta a generar.

 

QueryResult: objeto que contiene los resultados de la ejecución de la consulta SQL. Los mismos están agrupados por columna (campo de la entidad), lo que significa que, para interactuar con el objeto QueryResult, se indica qué campo se desea recuperar y se obtiene una lista que representa cada una de las filas recuperadas tras la consulta SQL.

Métodos

 

A continuación se describen los métodos para trabajar con los distintos objetos.

Métodos para ejecutar con el objeto QueryCriteria

 

 

Método

Descripción

Parámetros

createSelect(pList)

Crea una sentencia “SELECT” y agrega a la misma los valores presentes en el parámetro pList.

Tipo java.util.List pList: : contiene cada uno de los campos a recuperar del formulario, excluyendo los campos de contenedor iterativo

createSelectWithIterative(pList, pMap)

Crea una sentencia “SELECT” y agrega a la misma los valores presentes en el parámetro pList y pMap.

Tipo java.util.List pList: contiene cada uno de los campos a recuperar del formulario, excluyendo los campos de contenedor iterativo

 

Tipo Java.util.Map pMap: contiene, como clave, el identificador del iterativo. Los campos del iterativo son agregados como valor de la clave del mapa dentro de un objeto java.util.List

addConditionLimits(pPageNumber,pPerPage)

Agrega condiciones de límite a la sentencia SQL junto con la página a recuperar.

pPageNumber: número de página a recuperar

 

pPerPage: número de registros a recuperar en la página. Por defecto, son 100, y como máximo, 10000

addGroupBy(pColumn)

Agrega la cláusula GROUP BY a la sentencia SQL.

String pColumn: representa el identificador del campo del formulario por el que se desea realizar el agrupamiento

addGroupBy(pIterativeName, pColumn)

Agrega la cláusula GROUP BY a la sentencia SQL.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario por el que se desea realizar el agrupamiento

addOrderCriteria(pColumn,pOrderDesc)

Agrega la cláusula ORDER BY a la sentencia SQL.

String pColumn: representa el identificador del campo del formulario por el que se desea realizar el ordenamiento

 

Boolean pOrderDesc:  con valor "True" indica orden descendente, "False", ascendente

addOrderCriteria(pIterativeName,pColumn,pOrderDesc)

Agrega la cláusula ORDER BY a la sentencia SQL considerando campos de iterativo.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario por el que se desea realizar el ordenamiento

 

Boolean pOrderDesc:  con valor "True" indica orden descendente, "False", ascendente

addConditionBetween(pColumn,pValueFrom, pValueTo)

Agrega a la sentencia la condición BETWEEN. El valor buscado estará entre los valores indicados en los parámetros pValueFrom y pValueTo.

String pColumn: representa el identificador del campo del formulario

 

Tipo Object pValueFrom: representa el valor inicial a partir del cual se busca coincidencia con el valor de pColumn

 

Tipo Object pValueTo:  representa el valor final a partir del cual se busca coincidencia con el valor de pColumn

addConditionBetween(pIterativeName,pColumn,pValueFrom, pValueTo)

Agrega a la sentencia la condición BETWEEN. El valor buscado estará entre los valores indicados en los parámetros pValueFrom y pValueTo.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario

 

Tipo Object pValueFrom: representa el valor inicial a partir del cual se busca coincidencia con el valor de pColumn

 

Tipo Object pValueTo:  representa el valor final a partir del cual se busca coincidencia con el valor de pColumn

addConditionGreater(pColumn,pValue, useGreaterOrEqual)

Agrega a la sentencia SQL la condición > o >=.

String pColumn: representa el identificador del campo del formulario  

 

Tipo Object pValue: contiene el valor que se compara para el campo contenido en pColumn

 

Boolean useGreaterOrEqual: indica si se usa o no el operador mayor o igual. Con valor "True", se utiliza >=, "False", >

addConditionGreater(pIterativeName, pColumn, pValue, useGreaterOrEqual)

Agrega a la sentencia SQL la condición > o >=.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario  

 

Tipo Object pValue: contiene el valor que se compara para el campo contenido en pColumn

 

Boolean useGreaterOrEqual: indica si se usa o no el operador mayor o igual. Con valor "True", se utiliza >=, "False", >

addConditionLike(pColumn, pValue)

Agrega a la sentencia SQL la condición LIKE.

String pColumn: representa el identificador del campo del formulario  

 

String pValue:  contiene el valor para la condición LIKE

addConditionLike(pIterativeName, pColumn, pValue)

Agrega a la sentencia SQL la condición LIKE.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario  

 

String pValue:  contiene el valor para la condición LIKE

addConditionLower(pColumn, pValue, useLowerOrEqual)

Agrega a la sentencia SQL la condición < o <=.

String pColumn: representa el identificador del campo del formulario  

 

Tipo Object pValue: contiene el valor que se compara para el campo contenido en pColumn

 

Boolean useLowerOrEqual:  indica si se usa o no el operador mayor o igual. Con valor "True", se utiliza <=, "False", <

addConditionLower(pIterativeName, pColumn, pValue, useLowerOrEqual)

Agrega a la sentencia SQL la condición < o <=.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario  

 

Tipo Object pValue: contiene el valor que se compara para el campo contenido en pColumn

 

Boolean useLowerOrEqual:  indica si se usa o no el operador mayor o igual. Con valor "True", se utiliza <=, "False", <

addConditionNotEquals(pColumn, pValue)

Agrega a la sentencia SQL la condición !=.

String pColumn: representa el identificador del campo del formulario  

 

Tipo Object pValue: contiene el valor que se compara para el campo contenido en pColumn

addConditionNotEquals(pIterativeName, pColumn, pValue)

Agrega a la sentencia SQL la condición !=.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario  

 

Tipo Object pValue: contiene el valor que se compara para el campo contenido en pColumn

addConditionEquals(pColumn, pValue)

Agrega a la sentencia SQL la condición =.

String pColumn: representa el identificador del campo del formulario  

 

Tipo Object pValue: contiene el valor que se compara para el campo contenido en pColumn

addConditionEquals(pIterativeName, pColumn, pValue)

Agrega a la sentencia SQL la condición =.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario  

 

Tipo Object pValue: contiene el valor que se compara para el campo contenido en pColumn

addConditionNotNull(pColumn)

Agrega a la sentencia SQL la condición IS NOT NULL.

String pColumn: representa el identificador del campo del formulario que se busca que no sea nulo

addConditionNotNull(pIterativeName,pColumn)

Agrega a la sentencia SQL la condición IS NOT NULL.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario que se busca que no sea nulo

addConditionNullable(pColumn)

Agrega a la sentencia SQL la condición IS NULL.

String pColumn: representa el identificador del campo del formulario que se busca que sea nulo

addConditionNullable(pIterativeName,pColumn)

Agrega a la sentencia SQL la condición IS NULL.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario que se busca que sea nulo

addConditionNOTIN( pColumn, pValues)

Agrega a la sentencia SQL la condición NOT IN.

String pColumn: representa el identificador del campo del formulario

 

List pValues: Este parámetro es una lista de valores (List) que serán usados en la cláusula NOT IN de la sentencia SQL. Cada valor en esta lista representa un valor que debe ser excluido de los resultados

addConditionNOTIN(pIterativeName, pColumn, pValues)

Agrega a la sentencia SQL la condición NOT IN.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario

 

List pValues: Este parámetro es una lista de valores (List) que serán usados en la cláusula NOT IN de la sentencia SQL. Cada valor en esta lista representa un valor que debe ser excluido de los resultados

addConditionIN(pColumn, pValues)

Agrega a la sentencia SQL la condición IN.

 

String pColumn: representa el identificador del campo del formulario

 

List pValues: Este parámetro es una lista de valores (List) que serán usados en la cláusula IN de la sentencia SQL. Cada valor en esta lista representa un valor que debe ser incluido en los resultados

addConditionIN(pIterativeName, pColumn, pValues)

Agrega a la sentencia SQL la condición IN.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario

 

List pValues: Este parámetro es una lista de valores (List) que serán usados en la cláusula IN de la sentencia SQL. Cada valor en esta lista representa un valor que debe ser incluido en los resultados

addJOIN(pColumn, pObjectRelation, pKeyObjectRelation)

Agrega la cláusula INNER JOIN a la sentencia SQL. Se realiza JOIN en donde el campo pColumn sea igual al campo pKeyObjectRelation del objeto pObjectRelation.

String pColumn:  representa el identificador del campo del formulario con el que se busca el JOIN asociado al campo representado por el campo pKeyObjectRelation del objeto pObjectRelation

 

Tipo objeto pObjectRelation: representa el objeto modelo sobre el cual se ejecuta un INNER JOIN

 

String pKeyObjectRelation: representa el identificador del campo del formulario del objeto modelo pObjectRelation

addSum(pColumn)

Agrega la función SUM a la sentencia SQL.

String pColumn: representa el identificador del campo del formulario sobre el que se realiza la función SUM

addSum(pIterativeName, pColumn)

Agrega la función SUM a la sentencia SQL.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario sobre el que se realiza la función SUM

addCount(pColumn)

Agrega la función COUNT a la sentencia SQL.

String pColumn: representa el identificador del campo del formulario sobre el que se realiza la función COUNT

addCount(pIterativeName, pColumn)

Agrega la función COUNT a la sentencia SQL.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario sobre el que se realiza la función COUNT

addAVG(pColumn)

Agrega la función AVG a la sentencia SQL.

String pColumn: representa el identificador del campo del formulario sobre el que se realiza la función AVG

addAVG(pIterativeName, pColumn)

Agrega la función AVG a la sentencia SQL.

String pIterativeName: indica el identificador del iterativo al cual pertenece el campo indicado en pColumn

 

String pColumn: representa el identificador del campo del formulario sobre el que se realiza la función AVG

Métodos para trabajar con el objeto QueryResult

 

 

Método

Descripción

Parámetros

getQueryResult(pColumn): List

Devuelve una lista con los valores correspondientes al campo indicado por pColumn.

String pColumn: representa el identificador del campo del formulario del que se desean obtener los valores recuperados

getCountResult(pColumn):List

Devuelve una lista con los resultados de las funciones COUNT para el campo indicado por pColumn.

String pColumn: representa el identificador del campo del formulario para el cual se realizó el conteo

getSumResult(pColumn): List

Devuelve una lista con los resultados de las funciones SUM para el campo indicado por pColumn.

String pColumn: representa el identificador del campo del formulario para el cual se realizó la suma

 

getAVGResult(pColumn): List

 

Devuelve una lista con el promedio (AVG)  correspondiente para el campo indicado en pColumn.

String pColumn: representa el identificador del campo del formulario del cual se desean obtener las filas recuperadas

getExistsMoreResults(): boolean

Devuelve un valor booleano que indica si existen más resultados que cumplen con las condiciones de la sentencia SQL ejecutada y que pueden ser procesados.


Método para ejecutar con el objeto Servicio de Formulario

 

 

Método

Descripción

Parámetros

executeQuery(formInstance, queryCriteria): QueryResult

Ejecuta una sentencia SQL basada en los criterios especificados y devuelve un objeto QueryResult con los resultados correspondientes.

formInstance: objeto del modelo de la entidad con el cual se está trabajando y sobre el que se ejecuta la sentencia SQL.

 

queryCriteria: objeto QueryCriteria que contiene la configuración de la sentencia SQL, configurada a través de los métodos disponibles en dicha clase.

Ejemplos de Ejecución

1.Búsqueda

 

En este ejemplo, se recupera una lista de identificadores de cuentas con estado activo, donde el estado activo corresponde al código "1". Se define una cantidad de 15 registros por página de lectura y se especifica el número de páginas a recuperar. Los resultados se ordenan por nombre de la compañía en forma ascendente.

 

 
//Creación de objeto QueryCriteria

QueryCriteria xQueryCriteria = new QueryCriteria();

 

//Creación de objeto modelo

Cuenta xCuenta = new Cuenta();

 

//Creación del servicio para la entidad

CuentaService xCuentaService = new CuentaService(getApiClient());

 

//Selección del identificador como columna a recuperar

List<String> xColumns = new ArrayList<>();

xColumns.add(Cuenta.getIdAccountQueryName());

 

//Configuración de la consulta para seleccionar las columnas especificadas

xQueryCriteria.createSelect(xColumns);

 

//Agregar condiciones a la consulta

xQueryCriteria.addConditionEquals(Cuenta.getCdStatusQueryName(), "1");

xQueryCriteria.addConditionLimits(151);

xQueryCriteria.addOrderCriteria(Cuenta.getDsCompanyQueryName(), false);

 

//Ejecución de la consulta y obtención de los resultados

QueryResult xQueryResult = xCuentaService.executeQuery(xCuenta, xQueryCriteria);

List instancesResult = xQueryResult.getQueryResult(Cuenta.getIdAccountQueryName());

 

 

2.Creación de la sentencia "SELECT"

 

Para crear una consulta, se  pueden utilizar dos métodos que permiten incorporar al objeto QueryCriteria la sentencia SELECT correspondiente, junto con los campos a recuperar de la entidad.

 

Primer Método

 

 

createSelect(List<String> pColumns)

 

 

Este método incorpora al objeto QueryCriteria la sentencia “SELECT” y agrega a la misma cada uno de los campos de la entidad que se hayan añadido previamente a la lista pColumns. Cada campo agregado a la lista pColumns debe ser un campo que no pertenezca a iterativos.

 

 
//Selección del identificador como columna a recuperar

List<String> xColumns = new ArrayList<>();

xColumns.add(Cuenta.getIdAccountQueryName());

 

//Creación de la sentencia SELECT con las columnas especificadas

xQueryCriteria.createSelect(xColumns);

 

 

Segundo Método

 

 
createSelectWithIterative(List<String> pFilters, Map<String, List<String>> pMap)

 

 

Este método permite agregar al objeto QueryCriteria campos que pertenezcan a un contenedor iterativo de la entidad. Los campos que no pertenecen a iterativos deben incluirse en la lista pFilters, mientras que los campos pertenecientes a iterativos deben agregarse a una lista separada. Esta lista se debe luego añadir a una variable de tipo “HashMap”, utilizando como clave el identificador del iterativo al que pertenecen los campos.

Para trabajar con los campos del iterativo y agregarlos a la variable correspondiente, es necesario utilizar la clase del iterativo, que está incluida dentro del objeto modelo del formulario.

 

 
//Selección del identificador como columna a recuperar

List<String> xColumns = new ArrayList<>();

xColumns.add(Cuenta.getIdAccountQueryName());

 

//Selección del campo dsEmail del contenedor iterativo eMailLine

Map<String,List<String>> xMap = new HashMap<>();

List<String> xIterativeColumns = new ArrayList<>();

xIterativeColumns.add(Cuenta.EMailLine.getDsEmailQueryName());

xMap.put(Cuenta.getEMailLineQueryName(), xIterativeColumns);

 

//Creación del select

xQueryCriteria.createSelectWithIterative(xColumns, xMap);

 

 

3.Límites de resultados

 

Al trabajar con consultas SQL en Deyel SDK, es importante tener en cuenta que existe un límite en la cantidad de resultados obtenidos. Este límite se puede ajustar mediante el siguiente método:

 

 
addConditionLimits(int pPageNumber, int pPerPage)

 

 

En este método, el primer parámetro, pPageNumber, indica el número de la página que se desea recuperar, mientras que el segundo parámetro, pPerPage, especifica el número máximo de registros por página.

 

En forma predeterminada, Deyel recupera hasta 100 registros por página, y el límite máximo de registros que se pueden recuperar por página es 10.000. Si se configura un valor superior, la ejecución de la consulta SQL fallará.

 

4.Condiciones de búsqueda

 

Al objeto QueryCriteria se le pueden agregar diversas condiciones de búsqueda para realizar consultas SQL.

 

En el siguiente ejemplo, se crea un objeto QueryCriteria y se definen diferentes condiciones de búsqueda utilizando los operadores "igual", "distinto", "mayor", "mayor igual", "menor", "menor igual", "entre", "like", "es nulo", "no es nulo", “está en” y “no está en” con el método addCondition correspondiente.

 

Para cada tipo de condición, se encuentran disponibles dos métodos:

 

Método para campos pertenecientes a iterativos: Utilizado para agregar condiciones a campos que forman parte de un contenedor iterativo.

 

Método para campos no pertenecientes a iterativos: Utilizado para agregar condiciones a campos que no forman parte de un contenedor iterativo.

 

Operador "Entre"

 

Métodos Disponibles:

 

 
addConditionBetween(String pColumnName, Object pValueFrom, Object pValueTo)

 

 

 
addConditionBetween(String pIterativeName, String pColumnName, Object pValueFrom, Object pValueTo)

 

 

Ejemplo para un campo no iterativo:

 

 
// Campo no iterativo

// Agrega una condición para que el campo qtAnualRev del formulario Cuenta esté entre los valores 500.000 // y 800.000

xQueryCriteria.addConditionBetween(Cuenta.getQtAnualRevQueryName(), 500000800000);

 

 

Ejemplo para un campo de iterativo:

 

 
// Campo de iterativo

// Agrega una condición para que el campo qtAmount del iterativo Producto del formulario Oportunidad esté // entre los valores 5.000 y 10.000

xQueryCriteria.addConditionBetween(Oportunidad.getProductoQueryName(), Oportunidad.Producto.getQtAmountQueryName(), 500010000);

 

 

Operador "Mayor A", "Mayor o Igual A"

 

La distinción entre el uso del operador "mayor o igual" y el operador "mayor" se realiza a través del último parámetro del método correspondiente.

Los valores posibles para este parámetro son:

 

True: Se utiliza el operador "mayor o igual" (>=).

 

False: Se utiliza el operador "mayor" (>).

 

Métodos Disponibles:

 

 
addConditionGreater(String pColumnName, Object pValue, boolean useGreaterOrEqual)

 

 

 
addConditionGreater(String pIterativeName, String pColumnName, Object pValue, boolean useGreaterOrEqual)

 

 

Ejemplos para un campo no iterativo:

 

 
// Campo no iterativo

// Agrega una condición para que el campo qtAnualRev del formulario Cuenta sea mayor a 500.000

xQueryCriteria.addConditionGreater(Cuenta.getQtAnualRevQueryName(), 500000false);

 

 

 
// Campo no iterativo

// Agrega una condición para que el campo qtAnualRev del formulario Cuenta sea mayor o igual a 500.000

xQueryCriteria.addConditionGreater(Cuenta.getQtAnualRevQueryName(), 500000true);

 

 

Ejemplos para un campo de iterativo:

 

 
// Campo de iterativo

// Agrega una condición para que el campo qtAmount del iterativo Producto del formulario Oportunidad sea 

// mayor a 5.000

addConditionGreater(Oportunidad.getProductoQueryName(), Oportunidad.Producto.getQtAmountQueryName(), 5000false);

 

 

 
// Campo de iterativo

// Agrega una condición para que el campo qtAmount del iterativo Producto del formulario Oportunidad sea 

// mayor o igual a 5.000

xQueryCriteria.addConditionGreater(Oportunidad.getProductoQueryName(), Oportunidad.Producto.getQtAmountQueryName(), 5000true);

 

 

Operador “Menor A”, “Menor o Igual A”

 

La distinción entre el uso del operador "menor" y el operador "menor o igual" se realiza a través del último parámetro del método correspondiente. Los valores posibles para este parámetro son:

 

True: Se utiliza el operador "menor o igual" (<=).

 

False: Se utiliza el operador "menor" (<).

 

Métodos Disponibles:

 

 
addConditionLower(String pColumnName, Object pValue, boolean useLowerOrEqual)

 

 

 
addConditionLower(String pIterativeName, String pColumnName, Object pValue, boolean useLowerOrEqual)

 

 

Ejemplos para un campo no iterativo:

 

 
// Campo no iterativo 

// Agrega una condición para que el campo qtAnualRev del formulario Cuenta sea menor a 500.000

xQueryCriteria.addConditionLower(Cuenta.getQtAnualRevQueryName(), 500000false);

 

 

 
// Campo no iterativo 

// Agrega una condición para que el campo qtAnualRev del formulario Cuenta sea menor o igual a 500.000

xQueryCriteria.addConditionLower(Cuenta.getQtAnualRevQueryName(), 500000true);

 

 

Ejemplos para un campo de iterativo:

 

 
// Campo de iterativo 

// Agrega una condición para que el campo qtAmount del iterativo Producto del formulario Oportunidad sea 

// menor a 5.000

xQueryCriteria.addConditionLower(Oportunidad.getProductoQueryName(), Oportunidad.Producto.getQtAmountQueryName(), 5000false);

 

 

 
// Campo de iterativo 

// Agrega una condición para que el campo qtAmount del iterativo Producto del formulario Oportunidad sea 

// menor o igual a 5.000

xQueryCriteria.addConditionLower(Oportunidad.getProductoQueryName(), Oportunidad.Producto.getQtAmountQueryName(), 5000true);

 

 

Operador “Like”

 

Métodos Disponibles:

 

 
addConditionLike(String pColumnName, String pValue)

 

 

 
addConditionLike(String pIterativeName, String pColumnName, String pValue)

 

 

Para utilizar la condición “Like” en una consulta SQL, es necesario enviar el patrón de búsqueda completo como tipo String. Esto incluye los caracteres” %” que se usan como comodines en el patrón.

 

Ejemplo para un campo no iterativo:

 

 

// Campo no iterativo 
// Agrega una condición para que el campo dsCompany del formulario Cuenta cumpla con el patrón '%ACME%'

xQueryCriteria.addConditionLike(Cuenta.getDsCompanyQueryName(),"%ACME%");

 

 

Ejemplo para un campo de iterativo:

 

 
// Campo de iterativo

// Agrega una condición para que el campo dsEmail del iterativo eMailLine del formulario Cuenta cumpla 

// con el patrón '%@gmail.com%'

xQueryCriteria.addConditionLike(Cuenta.getEMailLineQueryName(), Cuenta.EMailLine.getDsEmailQueryName(), "%@gmail.com%");

 

 

Operador “Distinto”

 

Métodos Disponibles:

 

 
addConditionNotEquals(String pColumnName, Object pValue)

 

 

 
addConditionNotEquals(String pIterativeName, String pColumnName, Object pValue)

 

 

Ejemplo para un campo no iterativo:

 

 

// Campo no iterativo 
// Agrega una condición para que el campo dsCompany del formulario Cuenta no sea igual a "ACME"

xQueryCriteria.addConditionNotEquals(Cuenta.getDsCompanyQueryName(),"ACME");

 

 

Ejemplo para un campo de iterativo:

 

 

// Campo de iterativo

// Agrega una condición para que el campo dsEmail del iterativo eMailLine del formulario Cuenta no sea 

// igual a "example@gmail.com"

xQueryCriteria.addConditionNotEquals(Cuenta.getEMailLineQueryName(), Cuenta.EMailLine.getDsEmailQueryName(), "example@gmail.com");
 

 

Operador "Igual"

 

Métodos Disponibles:

 

 

addConditionEquals(String pColumnName, Object pValue)

 

 

 
addConditionEquals(String pIterativeName, String pColumnName, Object pValue)

 

 

Ejemplo para un campo no iterativo:

 

 

// Campo no iterativo
// Agrega una condición para que el campo dsCompany del formulario Cuenta sea igual a "ACME"

xQueryCriteria.addConditionEquals(Cuenta.getDsCompanyQueryName(),"ACME");

 

 

Ejemplo para un campo de iterativo:

 

 
// Campo de iterativo

// Agrega una condición para que el campo dsEmail del iterativo eMailLine del formulario Cuenta sea igual // a "example@gmail.com"

xQueryCriteria.addConditionEquals(Cuenta.getEMailLineQueryName(), Cuenta.EMailLine.getDsEmailQueryName(), "example@gmail.com");

 

 

Operador "No es Nulo"

 

Métodos Disponibles:

 

 
addConditionNotNull(String pColumnName)

 

 

 
addConditionNotNull(String pIterativeName, String pColumnName)

 

 

Ejemplo para un campo no iterativo:

 

 

// Campo no iterativo
// Agrega una condición para que el campo cdStatus del formulario Cuenta no sea nulo

xQueryCriteria.addConditionNotNull(Cuenta.getCdStatusQueryName());

 

 

Ejemplo para un campo de iterativo:

 

 

// Campo de iterativo
// Agrega una condición para que el campo dsEmail del iterativo eMailLine del formulario Cuenta no sea 

// nulo

xQueryCriteria.addConditionNotNull(Cuenta.getEMailLineQueryName(), Cuenta.EMailLine.getDsEmailQueryName());

 

 

Operador "Es Nulo"

 

Métodos Disponibles:

 

 
addConditionNullable(String pColumnName)

 

 

 
addConditionNullable(String pIterativeName, String pColumnName)

 

 

Ejemplo para un campo no iterativo:

 

 

// Campo no iterativo
// Agrega una condición para verificar que el campo cdStatus del formulario Cuenta sea nulo

xQueryCriteria.addConditionNullable(Cuenta.getCdStatusQueryName());

 

 

Ejemplo para un campo de iterativo:

 

 

// Campo de iterativo
// Agrega una condición para verificar que el campo dsEmail del iterativo eMailLine del formulario Cuenta 

// sea nulo

xQueryCriteria.addConditionNullable(Cuenta.getEMailLineQueryName(), Cuenta.EMailLine.getDsEmailQueryName());

 

 

Operador "Está En"

 

Métodos Disponibles:

 

 
addConditionIN(String pColumnName, List pValues)

 

 

 
addConditionIN(String pIterativeName, String pColumnName, List pValues)

 

 

Ejemplo para un campo no iterativo:

 

 

// Campo no iterativo
// Agrega condición que cumple que el campo dsIndustry del formulario Cuenta esté en el conjunto de valores incluidos 

// en xElements (4 y 6)

List xElements = new ArrayList();

xElements.add(4);

xElements.add(6);

xQueryCriteria.addConditionIN(Cuenta.getDsIndustryQueryName(), xElements);

 

 

Ejemplo para un campo de iterativo:

 

 

// Campo de iterativo
// Crea una lista que contenga los países a filtrar (en este caso, solo "Argentina")

List xCountries = new ArrayList();

xCountries.add("Argentina");

// Crea una nueva instancia de QueryCriteria para agregar la condición

xQueryCriteria = new QueryCriteria();

// Agrega la condición que filtra el campo dsCountry del iterativo LsAddress del formulario Cuenta

// esté en el conjunto de valores incluídos en xCountries. En este caso, Argentina.

xQueryCriteria.addConditionIN(Cuenta.getLsAddressQueryName(), Cuenta.LsAddress.getDsCountryQueryName(), xCountries);

 

 

Operador "No Está En"

 

Métodos Disponibles:

 

 
addConditionNOTIN(String pColumnName, List pValues)

 

 

 
addConditionNOTIN(String pIterativeName, String pColumnName, List pValues)

 

 

Ejemplo para un campo no iterativo:

 

 

// Campo no iterativo
// Agrega condición que cumple que el campo dsIndustry del formulario Cuenta no esté en el conjunto de valores incluidos 

// en xElements (4 y 6)

List xElements = new ArrayList();

xElements.add(4);

xElements.add(6);

xQueryCriteria.addConditionNOTIN(Cuenta.getDsIndustryQueryName(), xElements);

 

 

Ejemplo para un campo de iterativo:

 

 

// Campo de iterativo
// Crea una lista que contenga los países a filtrar (en este caso, solo "Argentina")

List xCountries = new ArrayList();

xCountries.add("Argentina");

// Crea una nueva instancia de QueryCriteria para agregar la condición

xQueryCriteria = new QueryCriteria();

// Agregado de condición para verificar que el campo dsCountry del iterativo LsAddress del formulario Cuenta

// no esté en el conjunto de valores incluidos en xCountries. En este caso, Argentina.

xQueryCriteria.addConditionNOTIN(Cuenta.getLsAddressQueryName(), Cuenta.LsAddress.getDsCountryQueryName(), xCountries);

 

 

5.Agrupamiento

 

El uso de la agrupación es útil cuando se desea combinar los resultados con funciones como, por ejemplo, COUNT o SUM. Permite agrupar los resultados recuperados según el campo o columna que se indique.

 

Métodos Disponibles:

 

 
addGroupBy(String pColumnName)

 

 

 
addGroupBy(String pIterativeName, String pColumnName)

 

 

Ejemplo para un campo no iterativo:

 

 

// Campo no iterativo
// Agrupa por el campo cdStatus del formulario Cuenta

xQueryCriteria.addGroupBy(Cuenta.getCdStatusQueryName());

 

 

Ejemplo para un campo de iterativo:

 

 
// Campo de iterativo

// Agrupa por el campo dsCountry del iterativo lsAddress del formulario Cuenta

xQueryCriteria.addGroupBy(Cuenta.getLsAddressQueryName(), Cuenta.LsAddress.getDsCountryQueryName());

 

 

6.Ordenamiento

 

Se puede agregar un criterio de ordenamiento a los resultados de las consultas, ya sea en orden ascendente o descendente. Este criterio se indica mediante un valor booleano en el último parámetro de los métodos disponibles. Los valores posibles son:

 

True: Utiliza el orden descendente.

 

False: Utiliza el orden ascendente.

 

Métodos Disponibles:

 

 
addOrderCriteria(String pColumnName, boolean pOrderDesc)

 

 

 
addOrderCriteria(String pIterativeName, String pColumnName, boolean pOrderDesc)

 

 

Ejemplo para un campo no iterativo:

 

 

// Campo no iterativo
// Ordena por el campo qtAnualRev del formulario Cuenta en orden descendente

xQueryCriteria.addOrderCriteria(Cuenta.getQtAnualRevQueryName());

 

 

 

Ejemplo para un campo de iterativo:

 

 
// Campo de iterativo

// Ordena por el campo dsCountry del iterativo lsAddress del formulario Cuenta en orden ascendente

xQueryCriteria.addOrderCriteria(Cuenta.getLsAddressQueryName(), Cuenta.LsAddress.getDsCountryQueryName(), true);

 

 

7.Funciones de agregación

 

Al objeto QueryCriteria, se le pueden agregar funciones de agregación, tales como COUNT, SUM o AVG. Estas funciones deben aplicarse antes de utilizar los métodos createSelect o createSelectWithIterative.

 

Función “Count”

 

Métodos Disponibles:

 

 
addCount(String pColumnName)

 

 

 

addCount(String pIterativeName, String pColumnName)

 

 

Ejemplo para un campo no iterativo:

 

 

// Campo no iterativo
// Agrega la función COUNT para el campo cdStatus del formulario Cuenta. Se utiliza COUNT 

// para determinar la cantidad de cuentas agrupadas por estado

QueryCriteria xQueryCriteria = new QueryCriteria();

List<String> xList = new ArrayList<>();

 

xList.add(Cuenta.getCdStatusQueryName());

xQueryCriteria.createSelect(xList);

xQueryCriteria.addGroupBy(Cuenta.getCdStatusQueryName());

 

 

Función “SUM”

 

Métodos Disponibles:

 

 

addSum(String pColumnName)

 

 

 

addSum(String pIterativeName, String pColumnName)

 

 

Ejemplo para un campo no iterativo:

 

 

// Campo no iterativo
// Agrega la función SUM para el campo qtAnualRev del formulario Cuenta. Se utiliza la función SUM para 

// determinar la suma de las ganancias anuales de todas las cuentas

QueryCriteria xQueryCriteria = new QueryCriteria();

xQueryCriteria.addSum(Cuenta.getQtAnualRevQueryName());

xQueryCriteria.createSelect(new ArrayList());

 

 

 

Función “AVG”

 

Métodos Disponibles:

 

 

addAVG(String pColumnName)

 

 

 

addAVG(String pIterativeName, String pColumnName)

 

 

Ejemplo para un campo no iterativo:

 

 

// Campo no iterativo
// Agrega la función AVG para el campo qtAnualRev del formulario Cuenta. Se utiliza la función AVG para determinar 

// el promedio de las ganancias anuales de todas las cuentas.

QueryCriteria xQueryCriteria = new QueryCriteria();

String xQTANUALREV = Cuenta.getQtAnualRevQueryName();

xQueryCriteria.addAVG(xQTANUALREV);

xQueryCriteria.createSelect(new ArrayList<>());

xQueryResult = xCuentaService.executeQuery(new Cuenta(), xQueryCriteria);

 

 

Ejemplo para un campo iterativo:

 

 

// Campo iterativo
// Agrega la función AVG para el campo qtSalesPrice del iterativo Items del formulario Nota de Venta. Se utiliza la función AVG para determinar el promedio de precios de venta de los items presentes en la Nota de Venta con dsNumber = 1.

xQueryCriteria = new QueryCriteria();

NotadeVentaService xNotaDeVentaService = new NotadeVentaService(getApiClient());

String xPrecioDeVenta = NotadeVenta.Items.getQtSalesPriceQueryName();

xQueryCriteria.addAVG(NotadeVenta.getItemsQueryName(), xPrecioDeVenta);

xQueryCriteria.addConditionEquals(NotadeVenta.getDsNumberQueryName(),1);

HashMap<String, List<String>> xMap = new HashMap<>();

xMap.put(NotadeVenta.getItemsQueryName(), new ArrayList<>());

xQueryCriteria.createSelectWithIterative(new ArrayList<>(), xMap);

xQueryResult = xNotaDeVentaService.executeQuery(new NotadeVenta(), xQueryCriteria);

xAVGList = xQueryResult.getAVGResult(xPrecioDeVenta);

 

 

8.Join entre entidades

 

Método Disponible:

 

 
addJOIN(String pColumnName, FormInstance pObjectRelation, String pKeyObjectRelation)

 

 

A continuación se muestra un ejemplo que obtiene el nombre de todas las cuentas y los tickets asociados a cada una de ellas. De cada ticket, se recupera el ID y el título del mismo.

 

 
// Crea una instancia del objeto QueryCriteria

QueryCriteria xQueryCriteria =  new QueryCriteria();

 

// Crea una lista de campos a seleccionar

List xList = new ArrayList<>();

 

// Crea instancias de las entidades

Cuenta xCuenta = new Cuenta();

Ticket xTicket = new Ticket();

 

// Crea una instancia del servicio de Cuenta con el cliente de API

CuentaService xCuentaService = new CuentaService(getApiClient());

 

// Agrega  los nombres de los campos a la lista de selección

xList.add(Ticket.getIdTicketQueryName());

xList.add(Ticket.getDsTitleQueryName());

xList.add(Cuenta.getDsCompanyQueryName());

 

// Crea la selección con los campos especificados

xQueryCriteria.createSelect(xList);

 

// Agrega el JOIN entre Cuenta y Ticket

xQueryCriteria.addJOIN(Cuenta.getIdAccountQueryName(),// Campo de unión en Cuenta

 xTicket, // Objeto Ticket (relación con el Ticket)

Ticket.getIdTicketAccountQueryName() // Campo de unión en Ticket

);

 

// Ejecutar la consulta utilizando el servicio de Cuenta

QueryResult xQueryResult = xCuentaService.executeQuery(xCuenta, xQueryCriteria);

// Obtener los resultados de la consulta

List <String> xTicketIds = xQueryResult.getQueryResult(Ticket.getIdTicketQueryName());

List <String> xTicketTitles = xQueryResult.getQueryResult(Ticket.getDsTitleQueryName());

List <String>  xComapanyNames = xQueryResult.getQueryResult(Cuenta.getDsCompanyQueryName());

 

// Itera sobre los resultados y registra la información

for (int i = 0; i < xTicketIds.size(); i++) {

   log("Cuenta : " + xComapanyNames.get(i) + ". Ticket número: " + xTicketIds.get(i) + ". Título: " + xTicketTitles.get(i));

}

 

 

9.Operar sobre los resultados

 

Una vez que se ejecuta una consulta SQL, el objeto QueryResult contiene los resultados agrupados por columna recuperada (campo de entidad). Para interactuar con estos resultados, se pueden utilizar los siguientes métodos:

 

Primer Método: Recupera los resultados para una columna específica de la consulta SQL.

 

 
getQueryResult(String pColumn): List

 

 

Este método permite recuperar los resultados para una columna específica de la consulta SQL. Recibe el nombre del campo del cual se desea obtener los resultados y devuelve una lista que contiene los valores correspondientes a esa columna para cada fila recuperada en la consulta.

 

 
// Recupera la razón social de las cuentas cuyo estado sea “1”

 

// Crea una instancia del objeto QueryCriteria para definir los criterios de la consulta

QueryCriteria xQueryCriteria = new QueryCriteria();

 

// Crea una instancia del servicio para ejecutar la consulta

CuentaService xCuentaService = new CuentaService(getApiClient());

 

// Crea una instancia de la entidad Cuenta

Cuenta xCuenta = new Cuenta();

 

// Define las columnas que se desean recuperar

List xList = new ArrayList <> ();

xList.add(Cuenta.getDsCompanyQueryName()); // Agrega el campo de la razón social a la lista de selección

 

// Configura los criterios de selección de la consulta

xQueryCriteria.createSelect(xList);

 

// Agrega una condición para filtrar cuentas cuyo estado sea "1"

xQueryCriteria.addConditionEquals(Cuenta.getCdStatusQueryName(), "1");

 

// Ejecuta la consulta y obtiene los resultados

QueryResult xQueryResult = xCuentaService.executeQuery( xCuenta, xQueryCriteria);

 

// Recupera la lista de razones sociales desde los resultados de la consulta

List xRazonSocialResults = xQueryResult.getQueryResult(Cuenta.getDsCompanyQueryName());

 

 

Como se puede observar en la última línea del ejemplo se obtienen los resultados para el campo requerido. El tamaño de la lista de los mismos se corresponde con la cantidad de filas que han cumplido con la consulta SQL

 

Si en la generación de la consulta SQL se seleccionaron más de un campo a recuperar, el tamaño de las listas correspondientes siempre será igual para cada campo. Si, por ejemplo, en la sentencia “SELECT” además de recuperar el campo dsCompany, se agrega que se desea recuperar datos del campo qtAnualRev, se debe pedir al objeto QueryResult los resultados para cada uno de estos campos.

 

Para operar sobre cada uno de los elementos de la lista, se puede usar una estructura que permite iterar sobre los elementos. Por ejemplo, usando un bucle for:

 

 
for(int i=0; i < xQtAnualRevResults.size(); i++){

   log("Razón social de cuenta: " + xRazonSocialResults.get(i) + ". Ganancias anuales: " + xQtAnualRevResults.get(i));

}

 

 

Como se puede ver, los tamaños de las listas se corresponden. Por lo tanto, si se seleccionan varios campos, basta con generar un solo iterador y obtener cada dato necesario. Los mismos corresponden a cada fila recuperada de la base de datos.

 

Segundo Método: Recupera los resultados de la función "COUNT" para una columna específica.

 

 

getCountResult(String pColumn): List

 

 

Este método debe recibir el nombre del campo sobre el cual se realizó el conteo. Por ejemplo:

 

 
List xRazonSocialCount = xQueryResult.getCountResult(Cuenta.getDsCompanyQueryName());

 

 

Se devuelve una lista, ya que en una sentencia SQL puede haber más de una función COUNT. Se itera de la misma forma que en el ejemplo del primer método.

 

Tercer Método: Recupera los resultados de la función "SUM" para una columna específica.

 

 
getSumResult(String pColumn): List

 

 

De manera similar a la función COUNT, para obtener los resultados de la función SUM, el método debe recibir el nombre del campo sobre el cual se realizó la suma. Por ejemplo:

 

 
List xRazonSocialCount = xQueryResult.getSumResult(Cuenta.getDsCompanyQueryName());

 

 

Se devuelve una lista dado que en una sentencia SQL puede haber más de una función SUM. Se itera de la misma forma que en el ejemplo del primer método.

 

Cuarto Método: Recupera el resultado de la función "AVG".

 

 
getAVGResult(String pColumn): List

 

 

Al igual que con las funciones COUNT y SUM, para obtener los resultados de la función AVG, el método debe recibir el nombre del campo sobre el que se aplicó la función AVG

Por ejemplo:

 

 
List xAVGList = xQueryResult.getAVGResult(Cuenta.getQtAnualRevQueryName());

 

 

Se devuelve una lista, y si esta no está vacía, el resultado de la función AVG aplicada se obtiene de la posición 0 de la lista.

 

Quinto Método:  Comprueba si hay más resultados que no han sido devueltos debido a los límites establecidos.

 

 
getExistsMoreResults(): boolean

 

 

Este método es fundamental para comprobar si existen más resultados para la consulta SQL generada que no han sido devueltos debido a los límites establecidos, ya sea por valores predeterminados o configurados por el usuario.

 

Si se realiza una consulta que tiene más de 10,000 registros recuperados, la manera de iterar sobre ellos se muestra en el siguiente ejemplo:

 

 

// Se dispone de más de 10.000 cuentas que cumplen con la condición de estado igual a “1”

// Recuperar razón social de las cuentas cuyo estado sea “1”

 

QueryCriteria xQueryCriteria = new QueryCriteria();

CuentaService xCuentaService = new CuentaService(getApiClient());

Cuenta xCuenta = new Cuenta();

 

List xList = new ArrayList();

xList.add(Cuenta.getDsCompanyQueryName());

xQueryCriteria.createSelect(xList);

xQueryCriteria.addConditionEquals(Cuenta.getCdStatusQueryName(), "1");

 

boolean hayMas = true;

int page = 1; //página 1

int perPage = 10000; //10.000 registros por página

 

while(hayMas){

   xQueryCriteria.addConditionLimits(page, perPage);

   QueryResult xQueryResult = xCuentaService.executeQuery( xCuenta, xQueryCriteria);

   List xRazonSocialResults = xQueryResult.getQueryResult(Cuenta.getDsCompanyQueryName());

 

   for(int i=0; i < xRazonSocialResults.size(); i++){

           log("Razón social de cuenta: " + xRazonSocialResults.get(i));

    }

   hayMas = xQueryResult.getExistsMoreResults();

   if(hayMas) {

           page++;

    }

}

 

 

Se establecen 10,000 registros a recuperar por página, se itera sobre la página número 1, se obtienen los datos correspondientes, y se consulta al objeto QueryResult si existen resultados pendientes. Si es así, se incrementa el número de la página para obtener los resultados de la siguiente página.

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