Skip to content

Edición Pasiva Condicional (passive_conditional_edit)

La automatización passive_conditional_edit se ejecuta inmediatamente antes de persistir una fila en la base de datos (durante un evento BEFORE INSERT o BEFORE UPDATE). Evalúa una condición lógica sobre los datos de la fila y sobrescribe una columna objetivo (target_field) según el resultado.


  1. Evaluación de Condición: Al guardar la fila, el motor evalúa la regla en la propiedad condition.
  2. Asignación Condicional:
    • Si se cumple: El campo target_field se completa con el valor definido en then_value.
    • Si NO se cumple: El campo target_field se completa con el valor definido en else_value.
  3. Resolución de Valores Dinámicos: Los términos de la condición (var_a, var_b) y los resultados (then_value, else_value) pueden ser literales fijos o extraerse dinámicamente del registro mediante prop(columna).

Resolución de Expresiones y Propiedades Virtuales

Section titled “Resolución de Expresiones y Propiedades Virtuales”

Para evaluar condiciones y resolver los valores en prop(...), el motor cuenta con soporte para evaluar las siguientes reglas de modelado avanzado configuradas en las propiedades:

  • Lookups Recursivos (lookup): Resuelve valores de columnas en tablas foráneas siguiendo relaciones definidas. Por ejemplo, t6c7,t2c1 indicará al motor que lea el ID en t6c7, busque esa fila en su respectiva tabla y traiga el valor de la columna t2c1.
  • Fórmulas Matemáticas (math): Resuelve operaciones aritméticas estándar (ej. t14c12 + t14c2). Admite la palabra clave {snapshot:columna} para hacer referencia al valor anterior del campo antes de ser editado (solo en actualizaciones).
  • Sumatoria Externa (sum_from): Suma dinámicamente valores de una columna en una tabla externa que coincidan con ciertos criterios (ej. sumar facturas asociadas a un cliente).
  • Sumatoria por Partición (sum_over_partition): Suma valores de una o varias columnas de la misma tabla, agrupados por criterios y excluyendo la fila actual.
  • Sumatoria de Objetos en Lista (sum_obj_list): Suma los valores de registros relacionados mediante una lista de objetos (ObjectList), resolviendo la unión a través de su tabla junction correspondiente.

Estructura de propiedades requeridas dentro de rules para una automatización de tipo passive_conditional_edit:

  • condition: Objeto que define la comparación lógica:
    • var_a: Primer término de la comparación. Admite literales o prop(columna).
    • operator: Operador lógico. Soportados: eq (=), neq (<>), lt (<), lte (<=), gt (>), gte (>=).
    • var_b: Segundo término de la comparación. Admite literales o prop(columna).
  • target_field: Columna física del registro actual que se va a actualizar con el resultado.
  • then_value: Valor a asignar si la condición es verdadera. Admite literales o prop(...).
  • else_value: Valor a asignar si la condición es falsa. Admite literales o prop(...).

En este ejemplo, comparamos el valor de la columna t0c1 con el de t0c2. Si t0c1 es menor que t0c2 (t0c1 < t0c2), la columna destino t0c3 se completará con "valor A". De lo contrario, se guardará "valor B":

{
"condition": {
"var_a": "prop(t0c1)",
"operator": "lt",
"var_b": "prop(t0c2)"
},
"target_field": "t0c3",
"then_value": "valor A",
"else_value": "valor B"
}