Lógica y Eventos
FlowFields
Dificultad: 6/10En las bases de datos normales, si entras en un albarán y quieres mostrar siempre la "Suma Total de Euros" a pagar, creas un campo y programas triggers para que se actualice sumando cada vez que añadan, editen o borren una línea. Un FlowField te libera de todo ese trabajo sucio.
Concepto de Campos Calculados Dinámicamente
Un FlowField *no existe* físicamente en la base de datos como un número estático guardado en su cajita. Actúa como un *embudo vivo*. Su valor está siempre vacío hasta que una pieza de interfaz (una pantalla), o un código lo "calcula" pidiendo su refresco explícito.
¿Qué logra? Ahorra espacio de almacenamiento masivo y evita errores fatales si un trigger se salta la actualización.
Funciones Soportadas e Implementación
Un FlowField requiere un FieldClass = FlowField; y una fórmula matemática expresada con
CalcFormula. Las operaciones que soporta por detrás la base de datos SQL son limitadas:
- Sum: Suma lo que valga un campo de otra tabla (ej. Facturas -> Factura Líneas -> Sum(Importe)).
- Average: Hace la media.
- Exist: Devuelve True (un Boolean) si existe al menos 1 registro en otra tabla que cumpla el vínculo.
- Count: Cuenta cuántas líneas de otra tabla coinciden con el enlace.
- Min / Max: Extrae el valor numérico (o fecha) menor o mayor de la otra tabla.
- Lookup: Se trae y muestra un campo de texto u otra cosa de otra tabla, de forma pasiva, sin guardarlo.
field(50; "Importe del Préstamo Activo"; Decimal)
{
FieldClass = FlowField;
// Calcula la SUMA del campo "Saldo".
// Donde el "Nº Socio" del préstamo coincida con el "Nº" del Socio que estoy viendo.
CalcFormula = Sum("Detalle de Préstamos".Saldo
where("Nº Socio" = field("No.")));
}