i

Please enable JavaScript to view this site.

Documentación 9.4

Las actualizaciones SQL son útiles cuando se necesita modificar un gran volumen de instancias de una entidad. La ventaja de utilizar estas actualizaciones es que la modificación se resuelve directamente sobre la base de datos, en lugar de recuperar cada instancia, modificarla y grabarla en forma individual.

 

Si se utiliza el objeto modelo para modificar instancias, es necesario recuperar cada una de ellas, asignar los nuevos valores y ejecutar la operación de actualización por cada instancia. Cuando la cantidad de instancias a modificar es elevada, este procedimiento no es el más performante para este requerimiento.

 

En cambio, con las actualizaciones SQL disponibles en Deyel SDK, se indica una única vez qué campos modificar y qué instancias alcanzar, y la modificación se realiza en forma masiva, lo que hace que el procesamiento sea más rápido y eficiente.

 

Al igual que en las consultas SQL, Deyel aplica automáticamente la privacidad de instancias configurada para la entidad, de modo que solo se modifican las instancias sobre las que el usuario que ejecuta la regla tiene permiso de modificación. Además, Deyel calcula y actualiza automáticamente los datos de auditoría de cada instancia modificada.

Actualizaciones para Sentencias SQL

 

Las actualizaciones sobre las sentencias SQL se pueden realizar mediante el uso de los siguientes objetos.

 

UpdateCriteria: objeto sobre el que se agregan las diferentes partes de la sentencia SQL de actualización. Con el mismo, se puede especificar qué campos de una instancia de entidad modificar y con qué valores, si se trabaja con iterativos o no, así como las condiciones que deben cumplir las instancias a modificar, que se detallan en los ejemplos.

 

Servicio del Formulario - Método executeUpdate(): clase servicio del formulario sobre el cual se realiza la actualización. Contiene la operación executeUpdate(formInstance, updateCriteria), que recibe como parámetros el objeto modelo de la entidad con el que se está trabajando y el objeto UpdateCriteria. Retorna un objeto UpdateResult como resultado.

 

Modelo del Formulario - getter ... QueryName(): clase modelo del formulario sobre la cual se quiere ejecutar la actualización 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 sentencia a generar, tanto para los campos a modificar como para los campos de las condiciones.

 

UpdateResult: objeto que contiene el resultado de la ejecución de la actualización SQL. El mismo informa la cantidad de instancias de la entidad que fueron efectivamente modificadas.

Habilitación de la Funcionalidad

 

La ejecución de actualizaciones SQL se encuentra deshabilitada en forma predeterminada. Para poder utilizarla, es necesario habilitarla mediante la propiedad de configuración SDK_UPDATE_ENABLED. (instalación On Premise)

 

Adicionalmente, la propiedad SDK_UPDATE_MAX_ROWS determina la cantidad máxima de instancias que puede alcanzar una única actualización SQL. Su valor predeterminado es 1.000 instancias. Si la cantidad de instancias que cumplen con las condiciones indicadas supera ese máximo, la actualización no se ejecuta y se informa el error correspondiente.

Métodos

 

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

Métodos para ejecutar con el objeto UpdateCriteria

 

Método

Descripción

Parámetros

addSet(pColumn, pValue)

Agrega a la cláusula SET de la sentencia SQL el campo indicado, con el valor con el que se lo desea actualizar.

String pColumn: representa el identificador del campo del formulario que se desea modificar

 

Tipo Object pValue: contiene el valor con el que se actualiza el campo contenido en pColumn

addSet(pIterativeName, pColumn, pValue)

Agrega a la cláusula SET de la sentencia SQL el campo de iterativo indicado, con el valor con el que se lo desea actualizar.

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 desea modificar

 

Tipo Object pValue: contiene el valor con el que se actualiza el campo contenido en pColumn

addSetNull(pColumn)

Agrega a la cláusula SET de la sentencia SQL el campo indicado, asignándole el valor nulo.

String pColumn: representa el identificador del campo del formulario que se desea dejar sin valor

addSetNull(pIterativeName, pColumn)

Agrega a la cláusula SET de la sentencia SQL el campo de iterativo indicado, asignándole el valor nulo.

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 desea dejar sin valor

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 para un campo iterativo. 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 >= para un campo 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

 

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 para un campo 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

 

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 menor o igual. Con valor "True", se utiliza <=, "False", <

addConditionLower(pIterativeName, pColumn, pValue, useLowerOrEqual)

Agrega a la sentencia SQL la condición < o <= par un campo 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

 

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 menor 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 != para un campo 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

 

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 = par un campo 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

 

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 para un campo 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 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 para un campo 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 que se busca que sea nulo

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 las instancias a modificar

addConditionIN(pIterativeName, pColumn, pValues)

Agrega a la sentencia SQL la condición IN para un campo 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

 

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 las instancias a modificar

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 las instancias a modificar

addConditionNOTIN(pIterativeName, pColumn, pValues)

Agrega a la sentencia SQL la condición NOT IN para un campo 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

 

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 las instancias a modificar

Métodos para trabajar con el objeto UpdateResult

 

Método

Descripción

Parámetros

getAffectedRows(): int

Devuelve la cantidad de instancias de la entidad que fueron efectivamente modificadas por la sentencia SQL ejecutada.


Método para ejecutar con el objeto Servicio de Formulario

 

Método

Descripción

Parámetros

executeUpdate(formInstance, updateCriteria): UpdateResult

Ejecuta una sentencia SQL de actualización basada en los criterios especificados y devuelve un objeto UpdateResult con el resultado correspondiente.

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

 

updateCriteria: objeto UpdateCriteria 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.Actualización

 

En este ejemplo, se actualiza el estado de las cuentas cuyas ganancias anuales sean mayores a 500.000, asignándoles el estado activo, que corresponde al código "1". Se informa la cantidad de cuentas que fueron modificadas.

 

 
//Creación de objeto UpdateCriteria

UpdateCriteria xUpdateCriteria = new UpdateCriteria();

 

//Creación de objeto modelo

Cuenta xCuenta = new Cuenta();

 

//Creación del servicio para la entidad

CuentaService xCuentaService = new CuentaService(getApiClient());

 

//Campo a modificar y valor con el que se lo actualiza

xUpdateCriteria.addSet(Cuenta.getCdStatusQueryName(), "1");

 

//Agregar condiciones que deben cumplir las cuentas a modificar

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

 

//Ejecución de la actualización y obtención del resultado

UpdateResult xUpdateResult = xCuentaService.executeUpdate(xCuenta, xUpdateCriteria);

 

log("Se modificaron " + xUpdateResult.getAffectedRows() + " cuentas");

 

2.Campos a Modificar

 

Para indicar los campos que se desean modificar, se dispone de dos métodos que permiten incorporar al objeto UpdateCriteria la cláusula SET correspondiente.

 

Primer Método

 

 

addSet(String pColumnName, Object pValue)

 

 

Este método incorpora al objeto UpdateCriteria el campo indicado en pColumnName junto con el valor indicado en pValue, con el que se actualiza dicho campo. El valor debe corresponder con el tipo de dato del campo.

 

 
//Actualiza la razón social de las cuentas alcanzadas

xUpdateCriteria.addSet(Cuenta.getDsCompanyQueryName(), "ACME S.A.");

 

 

Segundo Método

 

 
addSetNull(String pColumnName)

 

 

Este método incorpora al objeto UpdateCriteria el campo indicado en pColumnName, asignándole el valor nulo, es decir, dejándolo sin valor.

 

 
//Deja sin valor las ganancias anuales de las cuentas alcanzadas

xUpdateCriteria.addSetNull(Cuenta.getQtAnualRevQueryName());

 

 

Se pueden agregar tantos campos como se deseen modificar, invocando nuevamente a los métodos correspondientes. Cada campo puede indicarse una única vez: si se agrega un campo que ya había sido agregado previamente, la ejecución de la actualización SQL fallará.

Es obligatorio indicar al menos un campo a modificar. En caso contrario, la ejecución de la actualización SQL fallará.

3.Campos que no Pueden ser Modificados

 

Existen campos administrados por Deyel que no pueden ser modificados mediante una actualización SQL. Si se intenta agregarlos a la cláusula SET, la ejecución de la actualización SQL fallará.

Estos campos son:

•Los campos de auditoría de la instancia, ya que son calculados automáticamente por Deyel: usuario y fecha de alta, usuario y fecha de última modificación.

•El dueño de la instancia, ya que determina la privacidad de la misma.

•El número de secuencia de las filas de un iterativo.

•Los campos internos de la plataforma.

4.Condiciones de Selección de Instancias

 

Al objeto UpdateCriteria se le pueden agregar diversas condiciones, que determinan qué instancias de la entidad son alcanzadas por la actualización. Estas condiciones son las mismas que se encuentran disponibles para las consultas SQL y se utilizan de la misma manera.

 

Es obligatorio indicar al menos una condición. Las condiciones disponibles utilizan 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.

 

Todas las condiciones agregadas deben cumplirse simultáneamente para que una instancia sea alcanzada por la actualización.

 

En el siguiente ejemplo, se actualiza el estado de las cuentas cuya razón social cumpla con el patrón '%ACME%' y cuyas ganancias anuales estén entre 500.000 y 800.000.

 

 
UpdateCriteria xUpdateCriteria = new UpdateCriteria();

 

xUpdateCriteria.addSet(Cuenta.getCdStatusQueryName(), "1");

 

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

xUpdateCriteria.addConditionBetween(Cuenta.getQtAnualRevQueryName(), 500000, 800000);

 

 

A continuación se muestran los métodos disponibles para cada operador.

 

Operador "Entre"

 

 
addConditionBetween(String pColumnName, Object pValueFrom, Object pValueTo)

 

 

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

 

 

 
// Campo no iterativo

// Alcanza las cuentas cuyo campo qtAnualRev esté entre los valores 500.000 y 800.000

xUpdateCriteria.addConditionBetween(Cuenta.getQtAnualRevQueryName(), 500000, 800000);

 

 

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" (>).

 

 
addConditionGreater(String pColumnName, Object pValue, boolean useGreaterOrEqual)

 

 

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

 

 

 
// Campo no iterativo

// Alcanza las cuentas cuyo campo qtAnualRev sea mayor a 500.000

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

 

 

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" (<).

 

 
addConditionLower(String pColumnName, Object pValue, boolean useLowerOrEqual)

 

 

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

 

 

 
// Campo no iterativo

// Alcanza las cuentas cuyo campo qtAnualRev sea menor o igual a 500.000

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

 

 

Operador "Like"

 

 
addConditionLike(String pColumnName, String pValue)

 

 

 
addConditionLike(String pIterativeName, String pColumnName, String pValue)

 

 

Para utilizar la condición "Like", 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.

 

 
// Campo no iterativo

// Alcanza las cuentas cuyo campo dsCompany cumpla con el patrón '%ACME%'

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

 

 

Operador "Distinto"

 

 
addConditionNotEquals(String pColumnName, Object pValue)

 

 

 
addConditionNotEquals(String pIterativeName, String pColumnName, Object pValue)

 

 

 
// Campo no iterativo

// Alcanza las cuentas cuyo campo dsCompany no sea igual a "ACME"

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

 

 

Operador "Igual"

 

 
addConditionEquals(String pColumnName, Object pValue)

 

 

 
addConditionEquals(String pIterativeName, String pColumnName, Object pValue)

 

 

 
// Campo no iterativo

// Alcanza las cuentas cuyo campo cdStatus sea igual a "1"

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

 

 

Operador "No es Nulo"

 

 
addConditionNotNull(String pColumnName)

 

 

 
addConditionNotNull(String pIterativeName, String pColumnName)

 

 

 
// Campo no iterativo

// Alcanza las cuentas cuyo campo cdStatus no sea nulo

xUpdateCriteria.addConditionNotNull(Cuenta.getCdStatusQueryName());

 

 

Operador "Es Nulo"

 

 
addConditionNullable(String pColumnName)

 

 

 
addConditionNullable(String pIterativeName, String pColumnName)

 

 

 
// Campo no iterativo

// Alcanza las cuentas cuyo campo cdStatus sea nulo

xUpdateCriteria.addConditionNullable(Cuenta.getCdStatusQueryName());

 

 

Operador "Está En"

 

 
addConditionIN(String pColumnName, List pValues)

 

 

 
addConditionIN(String pIterativeName, String pColumnName, List pValues)

 

 

 
// Campo no iterativo

// Alcanza las cuentas cuyo campo dsIndustry esté en el conjunto de valores incluidos

// en xElements (4 y 6)

List xElements = new ArrayList();

xElements.add(4);

xElements.add(6);

 

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

 

 

Operador "No Está En"

 

 
addConditionNOTIN(String pColumnName, List pValues)

 

 

 
addConditionNOTIN(String pIterativeName, String pColumnName, List pValues)

 

 

 
// Campo no iterativo

// Alcanza las cuentas cuyo campo dsIndustry no esté en el conjunto de valores incluidos

// en xElements (4 y 6)

List xElements = new ArrayList();

xElements.add(4);

xElements.add(6);

 

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

 

5.Trabajar con Campos de Iterativos

 

Además de los campos de la entidad, se pueden modificar campos que pertenezcan a un contenedor iterativo de la misma, y también se pueden utilizar campos de iterativos en las condiciones de selección.

 

Tanto para modificar un campo de un iterativo como para agregar una condición sobre él, es necesario indicar el identificador del iterativo al que pertenece el campo como primer parámetro del método correspondiente. Si no se lo indica, la ejecución de la actualización SQL fallará.

 

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

 

En el siguiente ejemplo, se actualiza el país de las direcciones registradas como "Argentina" en el iterativo lsAddress de las cuentas cuyo estado sea activo.

 

 
UpdateCriteria xUpdateCriteria = new UpdateCriteria();

CuentaService xCuentaService = new CuentaService(getApiClient());

 

//Campo del iterativo lsAddress a modificar, indicando el iterativo al que pertenece

xUpdateCriteria.addSet(Cuenta.getLsAddressQueryName(),

 Cuenta.LsAddress.getDsCountryQueryName(), "República Argentina");

 

//Condición sobre un campo del iterativo, indicando el iterativo al que pertenece

xUpdateCriteria.addConditionEquals(Cuenta.getLsAddressQueryName(),

 Cuenta.LsAddress.getDsCountryQueryName(), "Argentina");

 

//Condición sobre un campo de la entidad

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

 

UpdateResult xUpdateResult = xCuentaService.executeUpdate(new Cuenta(), xUpdateCriteria);

 

log("Se modificaron " + xUpdateResult.getAffectedRows() + " cuentas");

 

 

Al trabajar con campos de iterativos, deben tenerse en cuenta las siguientes consideraciones.

 

Las condiciones indicadas sobre un iterativo también determinan qué filas del mismo se modifican. En el ejemplo anterior, solamente se actualizan las filas del iterativo cuyo país sea "Argentina", y no la totalidad de las filas de las cuentas alcanzadas. Si no se indica ninguna condición sobre el iterativo, se modifican todas sus filas.

 

Se modifican las filas existentes del iterativo. Una actualización SQL no permite agregar ni eliminar filas de un contenedor iterativo. Si se necesita modificar la cantidad de filas, debe utilizarse la operación de actualización sobre el objeto modelo de la instancia.

 

La cantidad de instancias modificadas no contempla las filas de los iterativos. El método getAffectedRows() informa la cantidad de instancias de la entidad que fueron modificadas, y no la cantidad de filas de iterativos que fueron modificadas.

6.Privacidad de Instancias

 

Cuando la entidad se encuentra configurada con privacidad de instancias, Deyel agrega automáticamente a la sentencia SQL la condición de privacidad correspondiente a la acción de modificación, de modo que la actualización alcanza únicamente a:

•las instancias que no tienen dueño asignado,

•las instancias cuyo dueño es el usuario que ejecuta la regla,

•las instancias de los subordinados del usuario que ejecuta la regla, habilitados para modificación, y

•las instancias de los usuarios que el usuario que ejecuta la regla subroga.

 

Si el usuario tiene un permiso global de modificación sobre la entidad, la actualización alcanza a la totalidad de las instancias que cumplen con las condiciones indicadas.

 

Esta condición se agrega siempre y no puede ser modificada desde la regla. Adicionalmente, el usuario que ejecuta la regla debe tener habilitada la función de modificación sobre la entidad.

7.Datos de Auditoría

 

Deyel calcula y actualiza automáticamente los datos de auditoría de cada instancia modificada, registrando el usuario que ejecuta la regla como usuario de última modificación y el momento de la ejecución como fecha de última modificación.

 

Los datos de alta de la instancia se conservan sin cambios.

 

Como se indicó anteriormente, estos campos no pueden ser modificados desde la regla.

 

Cuando la actualización modifica únicamente campos de un iterativo, los datos de auditoría de la instancia a la que pertenece se actualizan igualmente.

8.Restricciones

 

La ejecución de una actualización SQL falla en los siguientes casos:

•La funcionalidad no se encuentra habilitada en la instalación.

•El usuario que ejecuta la regla no tiene habilitada la función de modificación sobre el formulario.

•No se indicó ningún campo a modificar.

•No se indicó ninguna condición de selección de instancias.

•Se indicó un mismo campo a modificar más de una vez.

•Se intentó modificar un campo administrado por Deyel.

•Se indicó un campo de iterativo sin indicar el iterativo al que pertenece, o un campo que no pertenece al iterativo indicado.

•Se utilizaron campos de otra entidad. A diferencia de las consultas SQL, las actualizaciones SQL no permiten realizar operaciones JOIN entre entidades.

9.Consideraciones

 

Una actualización SQL modifica las instancias directamente sobre la base de datos. Por lo tanto, a diferencia de la operación de actualización sobre el objeto modelo de la instancia, no se ejecutan:

•las validaciones configuradas en el modelador para la acción de modificación,

•las validaciones de relaciones con otras entidades,

•las reglas de negocio asociadas a la modificación de la instancia,

 

Si alguno de estos procedimientos es necesario, debe utilizarse una consulta SQL para recuperar los identificadores de las instancias y luego ejecutar la operación de actualización sobre el objeto modelo de cada una de ellas. El procesamiento es más lento, pero conserva la totalidad del ciclo de vida de la instancia.

 

La actualización se ejecuta dentro de la misma transacción que el resto de la regla, por lo que si la regla falla luego de la actualización, las modificaciones se revierten junto con el resto de la transacción.

 

Cada ejecución de una actualización SQL queda registrada en la consola de ejecución.

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