version 6.5
Exécution des commandes dans des boucles 'Au cas ou'
Dans de nombreux exemples de ce manuel, on utilise une structure de programmation particulière. Ces exemples exécutent des séries de commandes en utilisant l'instruction Au cas ou de manière peu orthodoxe.
En fait, de nombreuses fonctionnalités des commandes Internet de 4D Internet requièrent l'exécution complète d'une séquence de commandes. L'échec d'une seule commande de la séquence étant suffisant pour interrompre la poursuite du processus, l'utilisation de Si imbriqués sur de nombreux niveaux serait fastidieux :
Si (SMTP_New($smtp_id)=0) Si (SMTP_Host ($smtp_id;<>pref_Serveur)=0) Si (SMTP_From ($smtp_id;vDe)=0) Si (SMTP_To ($smtp_id;vA)=0) etc, etc Fin de si Fin de si Fin de si Fin de si
La solution employée dans ce manuel consiste à s'appuyer sur la manière dont 4D exécute les instructions Au cas ou. Chaque condition d'une instruction Au cas ou est exécutée par 4D pour déterminer si la valeur renvoyée est Vraie ou Fausse. Lorsque chaque condition d'une instruction Au cas ou renvoie une valeur fausse, toutes les conditions sont donc exécutées. Les lignes suivantes remplacent le code décrit plus haut :
$EnvoyeOK:=Faux `Ce "drapeau" indique si tous les appels ont été transmis Au cas ou : (SMTP_New ($smtp_id)#0) : (SMTP_Host ($smtp_id;<>pref_Serveer)#0) : (SMTP_From ($smtp_id;vDe)#0) : (SMTP_To ($smtp_id;vA)#0) : (SMTP_Subject ($smtp_id;vSujet)#0) : (SMTP_Body ($smtp_id;vMessage)#0) : (SMTP_Send ($smtp_id)#0) Sinon $EnvoyeOK:=Vrai `Le message a été composé et envoyé Fin de cas Si ($smtp_id#0) `Si un message a été créé en mémoire, nous devons l'effacer maintenant $OK:=SMTP_Clear ($smtp_id) Fin de si
Dans cet exemple, chaque commande renvoie l'erreur 0 (zéro) si son exécution s'est déroulée correctement. Pour pouvoir évaluer chaque condition, 4D doit en fait exécuter chaque ligne. Comme chaque condition compare le résultat à "différent de zéro", la valeur renvoyée est toujours Fausse et 4D ne trouve pas de condition à laquelle s'arrêter jusqu'à ce que l'une des commandes échoue. Si chaque commande est exécutée correctement, 4D poursuit l'exécution de la méthode jusqu'à la condition Sinon dans laquelle le drapeau $EnvoyeOK prend la valeur Vraie afin d'indiquer que le message a été composé et envoyé sans incident.
Recommandations pour une réponse automatique à un courrier POP3 ou IMAP
Si vous envisagez de mettre en place, à l'intérieur de votre base de données, un système de messagerie permettant notamment aux utilisateurs de "répondre" aux courriers qu'ils ont reçu, voici quelques recommandations tirées de la RFC 822 :
L'adresse électronique de l'"Expéditeur" (Sender) ne doit recevoir que des réponses relatives à des problèmes de distribution de courrier et non des réponses se rapportant au sujet traité dans le message. En l'absence d'en-tête "Expéditeur" (Sender), les problèmes doivent être envoyés à l'adresse figurant dans l'en-tête "Emetteur(s)" (From).
L'adresse de l'"Expéditeur" (Sender) ne doit jamais être utilisée avec des automates. L'automate devra plutôt utiliser l'en-tête "Réponse à" (Reply-To) ou "Emetteur(s)" (From) pour répondre à un message, le choix de l'en-tête le plus approprié dépendant des facteurs indiqués ci-dessous.
Si l'en-tête "Réponse à" (Reply-To) existe et contient une ou plusieurs adresses, les réponses doivent alors être adressées aux personnes de cette liste. Les adresses de l'en-tête "Réponse à" (Reply-To) ont priorité sur celles figurant dans l'en-tête "Emetteur(s)" (From). En l'absence d'en-tête "Réponse à" mais en présence d'un en-tête "Emetteur(s)", les réponses doivent être envoyées aux adresses indiquées dans ce dernier.
Ces recommandations ont pour seul but de faciliter la prise de décision lorsque l'adressage du courrier est géré par programmation dans le cas d'actions de type "Réponse". Une fois le message de réponse créé, l'utilisateur final peut parfaitement annuler ces paramétrages par défaut avant d'envoyer le message.