La prise de décisions dans les scripts

La prise de décisions est présente dans toutes nos actions, et la création de scripts ne déroge pas à la règle. Parfois, vous voulez simplement qu'une commande s'exécute si une autre condition est vraie ou vous voudrez peut-être traiter des enregistrements d'une table en fonction des données qu'elle contient. ACLScript propose plusieurs méthodes permettant la prise de décision dans les scripts ; toutes ces méthodes utilisent les expressions conditionnelles.

Qu'est qu'une expression conditionnelle ?

Une expression conditionnelle est une expression qui est évaluée sur vrai ou sur faux. Les expressions conditionnelles dictent les actions entreprises dans un script ; elles sont spécifiées par le rédacteur de script.

Cette définition est plutôt technique, mais un simple exemple concret peut vous aider à montrer ce que cela signifie :

Exemple

Alors que vous êtes en train de marcher dans la rue, vous rencontrez quelqu'un que vous connaissez. Il convient de saluer cette personne, mais, quand vous allez la quitter, allez-vous lui dire « Bonne journée » ou « Bon après-midi » ?

La réponse dépend d'une condition simple : est-il plus tard que midi ? Si la réponse est oui, vous dites « Bon après-midi », sinon vous dites « Bonne journée ».

Dans cet exemple, l'expression conditionnelle détermine l'action que vous allez entreprendre (la formule de congé que vous allez utiliser) selon qu'elle est évaluée sur vrai (oui) ou pas.

L'expression de l'exemple précédent pourrait être traduite dans ACLScript comme suit :

COMMENT vérifie si l'heure actuelle est midi (12 h) ou plus
NOW() >= `t120000`

Vous pouvez exécuter cet exemple en copiant la ligne suivante, puis en la collant dans la ligne de commande d'Analytics. Selon l'heure de la journée, l'expression est évaluée sur vrai ou faux :

DISPLAY NOW() >= `t120000`

Astuce

Si la ligne de commande n'est pas visible, sélectionnez Fenêtre > Ligne de commande.

Une fois que vous avez exécuté l'exemple, vous pouvez tenter de modifier la valeur heure littérale de 12 h dans l'expression pour qu'elle soit évaluée sur le contraire.

Décider de l'exécution d'une commande ou pas

Analytics fournit la commande IF pour que vous puissiez décider de l'exécution d'une commande ou pas. La commande nécessite deux entrées :

  • une expression conditionnelle
  • une commande à exécuter si l'expression est vraie

Si l'expression conditionnelle est évaluée sur faux, la commande n'est pas exécutée.

Dire « Bon après-midi »

Pour poursuivre avec l'exemple précédent, essayez de coller le code suivant dans la ligne de commande :

IF NOW() >= `t120000` DISPLAY "Bon après-midi"

S'il est après midi, la commande DISPLAY imprime « Bon après-midi » dans l'onglet de la sortie. Mais s'il est encore le matin là où vous vous trouvez, rien n'est imprimé. Le script n'exécute pas la commande DISPLAY.

Dire « Bonne journée »

Si votre expression est évaluée sur faux, vous voudrez vous demander comment faire en sorte que la commande imprime « Bonne journée ». Alors que certains langages de script fournissent une construction en "ELSE" pour gérer les cas vrai et faux, ce n'est pas le cas d'ACLScript. À la place, vous utilisez une deuxième commande IF avec l'expression contraire.

Tentez de coller cette expression dans la ligne de commande :

IF NOW() < `t120000` DISPLAY "Bonne journée"

Cet exemple fonctionne comme avant, sauf maintenant s'il est avant 12 h, la commande DISPLAY affiche « Bonne journée ».

À quoi cela ressemble-t-il dans un script ?

Jusqu'à présent, les exemples se sont limités à la commande DISPLAY, qui est uniquement disponible à partir de la ligne de commande. Toutefois, dans un script, les mêmes principes s'appliquent. Plutôt que d'indiquer la salutation dans l'onglet d'affichage, dans cet exemple, le script stocke la salutation dans une variable appelée v_salutation:

COMMENT stocke la salutation qui convient selon l'heure du jour
IF NOW() >= `t120000` ASSIGN v_salutation = "Bon après-midi"
IF NOW() < `t120000` ASSIGN v_salutation = "Bonne journée"

Si ce script s'exécute avant midi, la valeur stockée dans la variable est « Bonne journée » ; s'il s'exécute à midi ou plus tard, la valeur stockée dans la variable est « Bon après-midi ». Essayez de coller cela dans votre éditeur de script et de l'exécuter. Vous pouvez vérifier la valeur de la variable dans l'onglet Variables après son exécution.

Décider des enregistrements à traiter

Parfois, vous souhaiterez décider si le script exécute une commande ou pas, comme indiqué ci-dessous, mais il y a aussi des fois où vous souhaiterez qu'une commande s'exécute uniquement sur certains enregistrements d'une table. Il s'agit d'un autre scénario de prise de décision, mais il diffère de celui qui utilise la commande IF.

Dans les situations où vous souhaitez traiter les enregistrements de manière sélective, ACLScript fournit le paramètre IF sur de nombreuses commandes. Lorsque vous utilisez cette méthode, la commande demande que vous spécifiiez une expression conditionnelle comme entrée. L'expression est testée par rapport à chaque enregistrement dans la table ; puis, quand elle est évaluée sur vrai, l'enregistrement est traité :

COMMENT calcule la somme du champ Montant pour les enregistrements ayant une quantité supérieure à 5
TOTAL Montant IF Quantité > 5

Calcul des transactions ayant lieu l'après-midi

Vous pouvez utiliser la même expression conditionnelle NOW( ) >= `t120000` pour calculer la somme de toutes les transactions d'une table ayant eu lieu l'après-midi. Prenez par exemple la table de données de transactions suivante :

Montant_transaction Coût_unitaire Num_produit Date_transaction Quantité
618,3 6,87 070104397 2000-11-17 12:00 90
6705,12 6,87 070104677 2000-11-17 9:30 976
7955,46 6,87 070104657 2000-11-17 14:45 1158
4870,83 6,87 070104327 2000-11-17 15:00 709
10531,71 6,87 070104377 2000-11-17 9:57 1533
5734 47 030414313 2000-10-30 1:00 122
2196 18 030414283 2000-10-30 18:25 122

Pour calculer la somme du champ Montant_transaction, vous utilisez la commande TOTAL :

COMMENT Somme du champ Montant_transaction
TOTAL Montant_transaction

Cette commande traite tous les enregistrements dans la table et calcule un total de 38 611,42 qui correspond à la somme de toutes les transactions.

Pour ajouter une prise de décision à la commande et traiter uniquement les transactions ayant eu lieu à midi ou plus tard, ajoutez le paramètre IF à TOTAL. Vous utilisez la même expression conditionnelle que l'exemple du début, mais vous remplacez NOW( ) par la partie heure de la date de la transaction :

COMMENT Effectue la somme du champ Montant_transaction pour toutes les transactions ayant lieu dans l'après-midi
COMMENT utilise les fonctions pour extraire la partie heure des données dans le champ Date_transaction
TOTAL Montant_transaction IF CTOT(TIME(Date_transaction)) >= `t120000`

Dans la commande, vous devez utiliser certaines fonctions pour isoler la partie heure de la date de la transaction, mais une fois que vous faites cela, la décision est la même expression conditionnelle que l'exemple du début : est-il après midi ? Si la réponse est oui, le montant est inclus dans la somme.

Cette commande calcule un total de 15 640,59, qui correspond à la somme de toutes les transactions de l'après-midi dans la table.