Como desarrollador 4D, probablemente ya ha creado y utilizado fórmulas. Pueden crearse a través de dos comandos, Formula y Formula from string. Este último acaba de ser mejorado en 4D V20 R3 para que pueda ser utilizado sin límites a partir de los componentes.
Fórmulas y contexto de ejecución
Las fórmulas, sea cual sea su contenido, están íntimamente ligadas a la base de datos a partir de la cual se crean. Cuando se llaman, siempre se ejecutan en el contexto en el que fueron creadas.
Esto es válido para los comandos 4D y las funciones como Structure file, pero también para las fórmulas basadas en llamadas a métodos.
Un ejemplo sencillo
Imaginemos un método FormatedCurrentDate que devuelve una cadena formateada.
#DECLARE($format : Integer)->$formatedDate : Text
$formatedDate:=String(Current date; $format)
Este método puede utilizarse dentro de una fórmula, que puede crearse de esta forma:
$formula:=Formula from string("FormatedCurrentDate(System date abbreviated)")
En este caso, la fórmula devolverá la fecha formateada como se esperaba.
$date:=$formula.call()
Cuando el método y la fórmula están en el mismo entorno, todo va bien… pero si este método no compartido está en la base de datos local y la fórmula que intenta utilizar este método se crea dentro de un componente, no podrá ejecutarse.
Un nuevo parámetro está ahora disponible
Se ha añadido un nuevo parámetro a la función Formula from string para que pueda elegir y decidir en qué contexto se ejecutará la fórmula.
#1) SK EXECUTE IN HOST DATABASE
Si volvemos al ejemplo anterior, donde el método no compartido FormatedCurrentDate pertenece a la base de datos local, será posible ejecutarlo de todas formas desde un componente creando la fórmula de la siguiente manera:
$formula:=Formula from string("FormatedCurrentDate(System date abbreviated)";sk execute in host database)
#2) sk ejecutar en base de datos actual
Si se pasa el valor sk execute in current database (o simplemente se omite), entonces la fórmula se ejecutará en la base de datos que creó la fórmula.
Conclusión
Esta nueva opción le permitirá crear fácilmente sus propios componentes de interfaz (para 4D Write Pro, por ejemplo) utilizando métodos o variables de la base de datos local.
Más libertad y más poder significan también más responsabilidad, pero esta apertura sigue siendo muy práctica y permite a los componentes acceder a funciones de sus bases de datos anfitrionas de una forma extremadamente sencilla.
No dude en compartir sus impresiones en el foro.