En tant que développeur 4D, vous avez probablement déjà créé et utilisé des formules. Elles peuvent être créées via deux commandes, Formula et Formula from string. Cette dernière vient d’être améliorée dans 4D V20 R3 pour pouvoir être utilisée sans limite à partir des composants !
Formules et contexte d’exécution
Les formules, quel que soit leur contenus, sont intimement liées à la base de données à partir de laquelle elles sont créées. Lorsqu’elles sont appelées, elles sont toujours exécutées dans le contexte dans lequel elles ont été créées.
Ceci est vrai pour les commandes 4D et les fonctions comme Structure file, mais aussi pour les formules basées sur des appels de méthodes.
Un exemple simple
Imaginons une méthode FormatedCurrentDate qui renvoie une chaîne formatée.
#DECLARE($format : Integer)->$formatedDate : Text
$formatedDate:=String(Current date; $format)
Cette méthode peut être utilisée dans une formule, qui peut être créée de cette manière :
$formula:=Formula from string("FormatedCurrentDate(System date abbreviated)")
Dans ce cas, la formule renvoie la date formatée comme prévu.
$date:=$formula.call()
Lorsque la méthode et la formule se trouvent dans le même environnement, tout va bien… mais si cette méthode non partagée se trouve dans la base de données hôte et que la formule qui tente d’utiliser cette méthode est créée dans un composant, elle ne pourra pas s’exécuter.
Un nouveau paramètre est désormais disponible
Un nouveau paramètre a été ajouté à la fonction Formula from string pour vous donner le choix et vous permettre de décider dans quel contexte la formule sera exécutée.
#1) SK EXECUTE IN HOST DATABASE
Si nous revenons à l’exemple précédent, où la méthode non partagée FormatedCurrentDate appartient à la base de données hôte, il sera possible de l’exécuter quand même à partir d’un composant en créant la formule comme suit :
$formula:=Formula from string("FormatedCurrentDate(System date abbreviated)";sk execute in host database)
#2) sk execute in current database
Si la valeur sk execute in current database est passée (ou est simplement omise), alors la formule sera exécutée dans la base de données qui a créé la formule ».
Conclusion
Cette nouvelle option vous permettra de créer facilement vos propres composants d’interface (pour 4D Write Pro, par exemple) en utilisant des méthodes ou des variables de la base de données hôte.
Plus de liberté et plus de puissance, c’est aussi plus de responsabilité, mais cette ouverture reste très pratique et permet aux composants d’accéder aux fonctions de leurs bases de données hôtes de manière extrêmement simple.
N’hésitez pas à nous faire part de vos impressions sur le forum !