Bloquons l'enregistrement d'une commande
Dans cet exemple nous voyons comment empêcher l’enregistrement d’une commande pour un client insolvable. Vu qu’il s’agit d’un système radical, nous allons diviser la procédure en deux scripts.
Le premier donnera une alarme à la sélection du client, tandis que le deuxième ne permettra pas d’enregistrer la commande si le client ou la condition d’impayé ne sont pas changés.
Groupe Script
Fiche
Événement
Valeur Changée
Comme nous avons déjà dit, le premier script sert pour informer l’utilisateur que le client sélectionné pour la commande est bloqué et cela servira pour éviter de créer la commande complète et découvrir seulement à la fin qu’il n’est pas possible l’enregistrer.
if datafield.name() == "gguid_customer" then
t = database.getsql("SELECT insolvent FROM customers WHERE gguid='" .. datafield.getvalue() .. "'")
if t.countrows() > 0 then
rows = t.getrows()
if rows[1].getvalue("insolvent") == 1 then
program.showerror("Attention the customer is insolvent. Could not save order!")
end
end
end
Nous interceptons quand le champ gguid_customer change. Cela est le champ de service du sous-tableau où il stocke le gguid de la sélection exécutée. Il est toujours mieux d’utiliser l’identifiant unique global gguid à la place du nom réel du client, cela permettra de le retrouver même si le nom est changé.
Nous lisons la valeur du champ Insolvent présent dans le tableau clients et vous affichons un message d’erreur si la valeur est un. Ce champ sera certainement un check sur la fiche du client.
Nous poursuivons avec le deuxième script qui va bloquer l’enregistrement de la commande.
Groupe Script
Fiche
Événement
Pre-Enregistrement
t = database.getsql("SELECT insolvent FROM customers WHERE gguid='" .. dataview.getvalue("gguid_customer") .. "'")
if t.countrows() > 0 then
rows = t.getrows()
if rows[1].getvalue("insolvent") == 1 then
errorn.errocode = "E1"
errorn.errormessage ="Attention the customer is insolvent. Could not save order!"
do return end
end
end
Comme vous pouvez noter cela est presque identique au premier, à l’exception de la valeur du gguid qui sera récupéré du dataview. La procédure est identique pour permettre de modifier l’état d’impayé du client. En effet on pourrait ouvrir la fiche de ce dernier et changer la valeur en gardant également la fiche de la commande ouverte.
La partie qui change est celle de la gestion de l’objet errorn. Son travail est de communiquer au logiciel les éventuelles erreurs. Dans ce cas nous forçons une erreur en saisissant un code, un message et en forçant la sortie du script.
Vu qu’il s’agit d’un pre-enregistrement, le logiciel sortira de la procédure Save de la fiche. Le code de l’erreur peut être n’importe quel vu quil nous permet d’identifier quelle partie du script l’a généré.