Le Gestionnaire de Dialogue fait partie de langage WebFOCUS permettant de contrôler l'exécution des composants de votre application et son flux en utilisant des variables et des commandes. Vous pouvez contrôler dynamiquement l'exécution de procédures, ce qui vous donne plus de flexibilité dans la conception d'applications. Le Gestionnaire de Dialogue vous permet aussi d'utiliser des variables dans vos procédures et fournit des valeurs au moment de l'exécution.
Les méthodes suivantes sont des exemples d'utilisation du Gestionnaire de Dialogue :
Pour le Gestionnaire de dialogue, vous pouvez créer des IF, GOTO, étiquettes, et répétitions. Vous pouvez aussi ouvrir la zone de dessin du Gestionnaire de dialogue et créer n'importe quel autre élément manuellement.
Pour les descriptions et la syntaxe, consultez Référence de la syntaxe du gestionnaire de dialogue.
Commande |
Description |
---|---|
-* |
est une ligne de commentaire sans action associée. |
‑CLOSE ddname |
Ferme le fichier ‑READ ou ‑WRITE. |
-CLOSE * |
Ferme tous les fichiers -READ et -WRITE ouverts. |
-DEFAULT -DEFAULTS |
Pré-configure les valeurs initiales pour la substitution de variable. |
-EXIT |
Exécute des commandes empilées et renvoie à l'invite WebFOCUS. |
-GOTO |
Établit une branche inconditionnelle. |
-HTMLFORM |
Pour utilisation avec l'interface Web de WebFOCUS. |
-IF |
Contrôle brancheS et tests en fonction des résultats des tests. |
-INCLUDE |
Incorpore dynamiquement une procédure dans une autre. |
-label |
Nom fourni par l'utilisateur identifiant la cible de -GOTO ou -IF. |
-PASS |
Renseigne le mot de passe directement. |
-READ |
Lit les enregistrements d'un fichier séquentiel. |
-READFILE |
Lit les champs basés sur le Fichier Maître dans les variables du gestionnaire de dialogue. |
-REPEAT |
Exécuter une boucle. |
-RUN |
Exécute toutes les commandes empilées WebFOCUS et retourne à la procédure pour les traitements suivants. |
-SET |
Affecte une valeur à une variable. |
-TYPE |
Entre un message d'information à l'écran ou un autre appareil de sortie. |
-WRITE |
Écrit un enregistrement dans un fichier séquentiel. |
-? SET parameter
&myvar |
Capture la valeur d'un paramètre configurable dans &myvar. |
-? &[variablename] |
Affiche les valeurs de variables amper actuellement définies. |
Vous pouvez écrire des procédures contenant des variables dont les valeurs ne sont connues qu'au moment de l'exécution, permettant ainsi à l'utilisateur de personnaliser la procédure en fournissant des valeurs différentes à chaque exécution. Les variables se répartissent entre deux catégories :
Vous pouvez modifier votre application au moment de l'exécution avec entrée utilisateur et conditions d'environnement en utilisant les procédures du Gestionnaire de Dialogue, qui incluent les commandes et les variables.
Dans App Studio, les procédures stockées sont référées en tant que procédures.
Au moment où votre pile FOCSTACK est prête à être exécutée, les événements suivants sont survenus :
Remarque : toute commande FOCUS peut être placée dans une procédure, incluant la commande EXEC. Lorsqu'une commande EXEC est traitée dans une procédure, les commandes venant de la nouvelle procédure sont placées en haut de la pile puis exécutées.
Dans cette section :
Référence : |
Vous pouvez utiliser l'éditeur de texte intégré WebFOCUS, TED, ou invoquer votre éditeur système depuis WebFOCUS avec la commande IEDIT pour créer des procédures contenant la fonctionnalité du gestionnaire de dialogue. IEDIT est particulièrement utile avec des fichiers à longueur variable ou des fichiers dont les longueurs d'enregistrements sont supérieures à 80 caractères.
TED et IEDIT possède deux fonctionnalités très utiles pour la création et l'édition des procédures :
Ces options représentent un complément pour les options FILE et SAVE qui sont communes aux autres éditeurs.
En plus des commandes et des variables du gestionnaire de dialogue qui affectent directement le flux du contrôle dans une application, vous pouvez aussi utiliser des commandes pour :
Vous pouvez aussi créer une procédure de profil qui définit les conditions de démarrage et peut inclure des commandes du gestionnaire de dialogue.
création de procédures
En particulier, il est recommandé d'utiliser des commentaires dans un en-tête de procédure pour fournir la date, la version, et toute autre information importante. Un tiret suivi d'un astérisque (-*) marquent le début d'un commentaire.
Ils ne sont visibles que lors de la visualisation des contenus de la procédure via l'éditeur et sont strictement réservés aux développeurs.
-*
Vous pouvez placer un commentaire au début ou à la fin d'une procédure, ou encore entre deux commandes. Un commentaire ne peut pas être placé sur la même ligne que une commande.
L'entrée suivante est valide :
. . . -*Version 2 06/10/00 -RUN
L'expression suivante invalide :
-RUN -*Version 2 06/10/00
L'exemple suivant place un commentaire au début d'une procédure.
-* Version 1 08/26/02 HRINFO Procedure TABLE FILE CENTHR . . .
Vous pouvez utiliser la commande -TYPE pour envoyer un message à l'affichage pendant le traitement d'une procédure. Typiquement, le message remplit les besoins suivants :
-TYPE envoie le message vers l'affichage dès qu'il est rencontré en cours de traitement de la procédure. La syntaxe est :
-TYPE[+|0|1] text
ou
-label TYPE text
où :
Il s'agit du message qui doit être envoyé. Le message est envoyé vers l'écran, suivi d'un champ ligne. Il reste à l'écran jusqu'à ce qu'il soit entièrement défilé ou remplacé par un nouvel écran.
Si vous incluez des guillemets autour du texte, ils seront affichés comme faisant parti du message. (Ceci diffère de l'utilisation de TYPE ou MODIFY, ou les guillemets sont utilisés en tant que délimiteurs et doivent obligatoirement entourer le texte informatif.)
Il s'agit de la cible de -GOTO ou de -IF.
Il s'agit d'entrées optionnelles qui transmettent des caractères de contrôle d'imprimante à l'appareil de sortie. Elles sont particulièrement utiles pour les imprimantes à caractères. Les options + et 1 ne fonctionnent pas sur des terminaux de type IBM 3270.
+ supprime le champ de lignes qui suit l'impression du texte.
0 force un champ ligne avant que le texte du message ne soit affiché.
1 force l'éjection d'une page avant que le texte du message ne soit imprimé.
Si elles sont fournies, ces valeurs doivent suivre -TYPE sans espace.
L'exemple suivant illustre l'utilisation de -TYPE pour informer une application cliente sur les contenus d'un rapport :
-* Version 1 06/26/00 SLRPT Procedure -* Component of Retail Sales Reporting Module -TYPE This report calculates percentage of returns. TABLE FILE SALES . . . END
Vous pouvez fournir et contrôler les mots de passe avec la commande –PASS. Ceci est particulièrement utile pour spécifier un fichier en particulier ou un jeu de fichier qu'un utilisateur donné peut lire ou écrire en l'utilisant. Les mots de passe ont des jeux de fonctions associés via l'utilitaire DBA.
La procédure qui renseigne les mots de passe peut être cryptée de façon à ce que les mots de passe et cette procédure ne puisse pas être entrés et révélés.
Une variable peut aussi être associée avec -PASS de façon à ce que vous soyez invités à renseigner une valeur de mot de passe. Vous pouvez aussi vérifier la valeur du mot de passe et passé ou exécuter une portion de la procédure en fonction de la valeur.
-PASS password
où :
Est un mot de passe ou une variable contenant un mot de passe.
-PASS étant une commande du gestionnaire de dialogue, elle s'exécute immédiatement et elle n'est pas envoyée vers la FOCSTACK. Ceci implique que l'utilisateur n'a pas à entrer le mot de passe avec la commande SET PASS ou SET USER.
Dans cette section : |
Vous pouvez naviguer vers une procédure des manières suivantes :
Vous pouvez effectuer un branchement sans condition qui va transférer le contrôle à un label avec la commande -GOTO.
La première fois via une procédure, le gestionnaire de dialogue note les adresses de tous les labels qu'ils rencontrent de façon à ce qu'ils puissent être trouvé immédiatement si nécessaire. Si le Gestionnaire de dialogue n'a pas stocké l'adresse de l'étiquette dans la commande -GOTO, il continue la recherche de l'étiquette cible dans la procédure. Si aucune étiquette n'est trouvée, il commence la recherche au début de la procédure.
Gestionnaire de dialogue n'effectue aucune action sur le label n'ayant pas un -GOTO correspondant. Si un -GOTO n'a pas un label correspondant, l'exécution s'arrête et un message d'erreur est affiché.
-GOTO label . . . -label [TYPE text]
où :
Est un nom défini par utilisateur jusqu'à une longueur de 12 caractères. N'utilisez pas d'espaces insérés, ni le nom d'une autre commande gestionnaire de dialogue, à l'exception de -QUIT ou -EXIT. N'utilisez pas d'opérations logiques ou arithmétiques, des mots qui peuvent être confondus avec des fonctions, ou des mots réservés tels que CONTINUE.
Le texte label peut précéder ou suivre la commande -GOTO dans la procédure.
Remarque : quand le label fait suite à la commande -GOTO, il n'est pas précédé d'un tiret.
Envoie un message à l'application cliente.
L'exemple suivant commente l'ensemble du code WebFOCUS en utilisant une branche inconditionnelle, sans que l'utilisateur n'ait à entrer -* au début de chaque ligne :
-GOTO DONE TABLE FILE SALES PRINT UNIT_SOLD RETURNS BY PROD_CODE,CITY END -RUN -DONE
Un branchement conditionnel effectué un test des valeurs de variables et en fonction du test, transfert le contrôle à un label dans la procédure avec la commande -IF... GOTO. Ceci aide le contrôle de l'exécution des requêtes et construites une procédure dynamique en choisissant d'exécuter ou pas des parties de la procédure.
Par exemple, vous pouvez vérifier si un fichier d'extraction a été créé à partir d'une source de données en production. Si un tel fichier d'extraction existe, le programme exécute un jeu de rapports vers le processus d'extraction. Signe existe pas, le programme effectuait un branchement autour des rapports et écrit un message dans le fichier journal.
Note: un test IF ne requiert pas que chaque test spécifie un label cible. Cependant, dans un test IF composé, ou une série de tests sont incorporés les uns dans les autres, une étiquette cible spécifiée est requise pour chaque test.
-IF expression [THEN] {GOTO label1|CONTINUE} [ELSE IF...] [ELSE {GOTO label2|CONTINUE}] ;
où :
est une expression valide. Les littéraux n'ont pas besoin d'être entourés avec des guillemets simples à moins qu'ils ne contiennent des virgules espaces vides incorporés.
Est une commande optionnelle qui améliore la lisibilité d'une commande.
Est un nom défini par utilisateur jusqu'à 12 caractères auquel transmettre le contrôle si le test -IF est vrai, N'utilisez pas d'espaces insérés, ni le nom d'une autre commande gestionnaire de dialogue, à l'exception de -QUIT ou -EXIT. N'utilisez pas d'opérations logiques ou arithmétiques, des mots qui peuvent être confondus avec des fonctions, ou des mots réservés tels que CONTINUE.
Le texte label peut précéder ou suivre le critère -IF dans la procédure.
Continue vers la commande faisant suite au point-virgule de la commande -IF.
Remarque : CONTINUE ne peut pas être utilisée en tant que label dans une instruction -IF.
Spécifie un test composé -IF La commande-IF doit obligatoirement se terminer avec un point-virgule pour signaler que toute la logique a été spécifiée.
Passe le contrôle sur label2 quand le test -IF échoue.
Signe commande déploie plus d'une ligne, l'ligne de continuation doit obligatoirement commencer avec un trait d'union et un ou plusieurs espaces.
Dans l'exemple suivant, la requête du premier rapport ou la requête du second rapport seront exécutées, mais pas toutes les deux. Supposons que l'exécution d'une procédure requiert qu'un utilisateur doive soumettre une valeur pour une variable appelée &PROC. L'utilisateur peut saisir SALES ou EMPLOYEE.
1. -IF &PROC EQ 'EMPLOYEE' GOTO EMPLOYEE; 2. -SALES TABLE FILE SALES SUM UNIT_SOLD BY PROD_CODE END 3. -EXIT -EMPLOYEE TABLE FILE EMPLOYEE PRINT PLANT_NAME BY DEPARTMENT END
La procédure est la suivante :
Si la valeur de &PROC avait été EMPLOYEE, le contrôle serait passé à -EMPLOYEE.
La requête sous le label -EMPLOYEE n'est pas exécutée.
Vous pouvez exécuter une fonction la répétition en utilisant cette répétition dans votre procédure via la commande -REPEAT. L'utilisation des boucles peut servir plusieurs tâches. Par exemple, vous pouvez remplir une variable indexée en utilisant une boucle ou bien vous pouvez utiliser la sortie de la requête dans une seconde.
Un processus en boucle peut être exécuté un certain nombre de fois où jusqu'à ce qu'une condition soit vérifiée. Une boucle s'achève quand l'un des événements suivants survient :
Remarque : si vous indiquez un autre -GOTO plus tard dans la procédure pour revenir à la boucle, la boucle redémarre à partir du point auquel elle a quitté.
Remarquez que la commande -SET fournit une autre méthode implémentation des boucles.
Conseil : pendant le traitement de la boucle, la recherche d'étiquette qui indique la cible d'une commande -GOTO ou -REPEAT dure plus longtemps dans une procédure avec variable qu'avec des longueurs d'enregistrements fixés (80 caractères). Pour accélérer l'exécution dans cette situation, considéré le remplacement des boucles par des commandes EX ou -INCLUDE.
-REPEAT label n TIMES
ou
-REPEAT label WHILE condition;
ou
-REPEAT label FOR &variable [FROM fromval] [TO toval] [STEP s]
où :
Identifie le code qui doit être répété (la boucle). Annabelle peut inclure une autre boucle si le label pour la seconde boucle a un nom différent que le premier.
Spécifie le nombre d'exécutions de la boucle. La valeur de n peut être une variable locale, une variable globale, ou une constante. S'il s'agit d'une variable, elle n'est évaluée qu'une seule fois, vous n'avez donc pas à changer le nombre d'exécutions de la boucle. La boucle ne peut être arrêtée qu'en utilisant -QUIT ou -EXIT.
Spécifie la condition qui doit être vérifiée pour l'exécution de la boucle. Cette condition peut consister en n'importe quelle expression logique, qui peut être vrai ou faux. La boucle s'exécutait la condition est vrai.
Remarque : la condition doit obligatoirement être suivie par un point-virgule.
Est la variable qui est testée au démarrage de chaque exécution de la boucle et incrémentée de s à chaque exécution. Elle est comparée aux valeurs fromval et toval, si elles ont été fournies. La boucle est exécutée seulement si &variable est supérieure ou égale à fromval ou inférieure ou égale à toval.
Est une constante qui est comparée avec &variable au départ de chaque exécution de la boucle. La valeur par défaut est 1.
Est une valeur qui est comparée avec &variable au départ de chaque exécution de la boucle. La valeur par défaut est 1,000,000.
Est une constante utiliser pour incrémenté &variable à la fin de chaque exécution de la boucle. Elle peut être positive ou négative. L'incrément par défaut est 1.
Remarque : les paramètres FROM, TO, et STEP peuvent apparaître dans n'importe quel ordre.
Ces exemples illustrent chaque élément syntaxique de -REPEAT.
-REPEAT label n TIMES
Par exemple :
-REPEAT LAB1 2 TIMES -TYPE INSIDE -LAB1 TYPE OUTSIDE
La sortie est :
INSIDE INSIDE OUTSIDE
-REPEAT label WHILE condition;
Par exemple :
-SET &A = 1; -REPEAT LABEL WHILE &A LE 2; -TYPE &A -SET &A = &A + 1; -LABEL TYPE END: &A
La sortie est :
1 2 END: 3
-REPEAT label FOR &variable FROM fromval TO toval STEP s
Par exemple :
-REPEAT LABEL FOR &A STEP 2 TO 4 -TYPE INSIDE &A -LABEL TYPE OUTSIDE &A
La sortie est :
INSIDE 1 INSIDE 3 OUTSIDE 5
L'exemple suivant illustre l'utilisation de -SET pour contrôler une boucle :
1. -DEFAULT &N=0 2. -START 3. -SET &N=&N+1; 4. EX SLRPT -RUN 5. -IF &N GT 5 GOTO NOMORE; 6. -GOTO START 5. -NOMORE TYPE EXCEEDING REPETITION LIMIT -EXIT
La procédure s'exécute de la manière suivante :
Vous pouvez insérer une procédure partielle ou totale dans une autre grâce à la commande -INCLUDE. Une procédure partielle peut contenir un texte d'en-tête, ou du code devrait être inclus au moment de l'exécution en fonction d'un test dans la procédure appelante. Elle s'exécute immédiatement quand elle rencontrée.
Une procédure appelante ne peut pas effectuer de branchement sur un label dans une procédure appelée, et vice versa. Quand une procédure est incluse en utilisant la commande -INCLUDE, la procédure qui est incluse (appelée) à un accès total aux variables définies dans la procédure appelante.
La commande -INCLUDE peut être utilisée des façons suivantes :
-INCLUDE filename [filetype]
où :
est le nom de la procédure WebFOCUS.
Indique le nom de la procédure. Si rien n'est inclus, c'est FOCEXEC qui est supposé.
Dans l'exemple suivant, le gestionnaire de dialogue recherche une procédure appelée DATERPT tel que spécifié par la commande -INCLUDE.
-IF &OPTION EQ 'S' GOTO PRODSALES ELSE GOTO PRODRETURNS; . . . -PRODRETURNS -INCLUDE DATERPT -RUN . . .
Supposons que DATERPT contiennent le code suivant, que le Gestionnaire de Dialogue incorpore au sein de la procédure originale. Le Gestionnaire de Dialogue substitue une valeur pour la variable &PRODUCT dès que -INCLUDE est rencontré. -RUN exécute la requête.
TABLE FILE SALES PRINT PROD_CODE UNIT_SOLD WHERE PROD_CODE EQ '&PRODUCT'; END
L'exemple suivant incorpore un en-tête, qui est stocké en tant que procédure de :
TABLE FILE SALES -INCLUDE SALEHEAD SUM UNIT_SOLD AND RETURNS AND COMPUTE . . .
Le fichier SALEHEAD contient :
HEADING "THE ABC CORPORATION" "RETAIL SALES DIVISION" "MONTHLY SALES REPORT"
Cet en-tête est inclus dans la requête de rapport.
L'exemple suivant incorpore un champ virtuel pour une procédure :
-INCLUDE DEFRATIO TABLE FILE SALES -INCLUDE SALEHEAD SUM UNIT_SOLD AND RETURNS AND RATIO BY CITY . . .
Le fichier DEFRATIO créer un champ virtuel :
DEFINE FILE SALES RATIO/D5.2=(RETURNS/UNIT_SOLD); END
Ce champ virtuel sera dynamiquement inclus avant l'exécution de la requête du rapport.
Tout nombre de différentes procédures peut être invoqué à partir d'une seule procédure appelante.
Vous pouvez aussi imbriquer une procédure au sein d'elle-même, ou d'une manière récursive. Les commandes récursives -INCLUDE ne peuvent excéder quatre niveaux. Pour les commandes non récursives -INCLUDE, le niveau d'imbrication n'est limité que par la mémoire disponible.
Les fichiers de un à quatre sont incorporés dans la procédure originale. Tous les fichiers inclus sont vus comme une partie de la procédure originale.
Une procédure ne peut pas se brancher à un label dans un fichier inclus.
Vous pouvez invoquer une procédure via une autre avec la commande EXEC. La procédure appelée doit être complètement exécutable. Elle agit comme une procédure complètement séparée, avec son propre contenu. Elle ne peut pas utiliser de variables locales (&variables) définies par la procédure appelante (à moins qu'elle ne soit explicitement transmise à la procédure appelée sur la ligne de commande). Cependant, la procédure exécutée (appelée) peuvent utiliser des variables globales (&&variables) qui ont été définies dans la procédure appelante.
Quand une commande EXEC est rencontrée, elle est empilée est exécutée lorsque la commande appropriée du gestionnaire de dialogue est rencontrée.
EX[EC] procedure
où :
est le nom de la procédure.
Vous pouvez inclure des arguments pour la procédure.
Remarque : la syntaxe est identique à la syntaxe d'exécution pour te procédures stockée. Cependant, dans ce contexte, une commande EXEC est incluse sein d'une autre procédure.
Dans l'exemple suivant, une procédure appelle DATERPT:
-IF &OPTION EQ 'S' GOTO PRODSALES ELSE GOTO PRODRETURNS; . . . -PRODRETURNS EX DATERPT . . . -RUN
Dans cette section :
Comment : Référence : |
Vous pouvez créer des procédures qui incluent des variables (aussi appelées variables amper) et leur fournissent des valeurs au moment de l'exécution. Ces variables stockent une chaîne de texte ou de nombres et peuvent être placées n'importe où dans la procédure. Par exemple, une variable peut faire référence à un champ, une commande, un texte descriptif, ou encore un nom de fichier.
Remarque : une variable du gestionnaire de dialogue ne contient que des dates alphanumériques. Si une fonction ou une expression renvoie une valeur numérique vers une variable du gestionnaire de dialogue, la valeur est tronquée en un entier et elle est convertie au format alphanumérique avant d'être stockée dans la variable.
Les variables se répartissent entre deux catégories :
Un sigle esperluette double (&&) dénote des variables globales. Toutes les autres variables du gestionnaire de dialogue commencent avec un sigle esperluette simple (&). Pour cette raison, elles sont connues en tant que variables amper.
Le nombre maximum de variables locale, globale, système, statistique, spéciale, et index disponibles dans une procédure est 1024. Environ 40 sont réservées pour l'utilisation avec FOCUS.
Les variables peuvent être utilisées seulement dans les procédures. Elles sont ignorées si vous les utilisez lors de la création de rapports en direct avec le terminal.
Vous pouvez interroger les variables de chacun des types de variables que vous utilisez.
Les valeurs pour les variables peuvent être fournies de plusieurs façons.
Les noms de variable globale et locale sont définis par l'utilisateur ; les variables statistiques et système ont des noms prédéfinis. Les règles suivantes s'appliquent aux dommages des variables globales et locales :
Une variable positionnelle consiste en un sigle esperluette unique suivi d'une chaîne numérique (par exemple, &1). La valeur d'une variable positionnelle est transmise à la procédure quand elle est exécutée.
&[&]name
où :
Dénote une variable locale. Un symbole amper simple suivie d'une chaîne numérique indique une variable de position.
Dénote une variable globale.
est le nom de la variable. Le nom que vous affectez doit respecter les règles indiquées dans le Gestionnaire de dialogue.
Les variables locales sont identifiées par un cycle esperluette unique (&) précédant le nom de la variable. Elles restent effectivement tout au long de la procédure unique.
Considérez la procédure suivantes, SALESREPORT, dans laquelle &CITY, &CODE1, et &CODE2 sont des variables locales:
TABLE FILE SALES HEADING CENTER "MONTHLY REPORT FOR &CITY" "PRODUCT CODES FROM &CODE1 TO &CODE2" " " SUM UNIT_SOLD AND RETURNS AND COMPUTE RATIO/D5.2 = 100 * (RETURNS/UNIT_SOLD); BY CITY IF CITY EQ &CITY BY PROD_CODE IF PROD_CODE IS-FROM &CODE1 TO &CODE2 END
Supposea une application des valeurs suivantes quand vous appelez une procédure :
EX SLRPT CITY = STAMFORD, CODE1=B10, CODE2=B20
Le Gestionnaire de Dialogue substitue les valeurs pour les variables suivantes :
TABLE FILE SALES HEADING CENTER "MONTHLY REPORT FOR STAMFORD" "PRODUCT CODES FROM B10 TO B20" " " SUM UNIT_SOLD AND RETURNS AND COMPUTE RATIO/D5.2 = 100 * (RETURNS/UNIT_SOLD); BY CITY IF CITY EQ STAMFORD BY PROD_CODE IF PROD_CODE IS-FROM B10 TO B20 END
Quand la procédure est exécutée est terminée : les valeurs STAMFORD, B10, et B20 sont perdues
Les variables globales sont différentes des variables locales car lorsqu'une valeur est fournie, elle restent effectives tout au long de la session WebFOCUS, à moins qu'elles ne soient transformées en une autre valeur via la commande -SET ou effacées par la commande LET CLEAR. Les variables globales sont utiles pour rassembler des valeurs au début de la session de travail pour utilisation par plusieurs procédures ultérieures. Toutes les procédures qui utilisent une variable globale particulière reçoivent la valeur en cours jusqu'à ce que vous quittiez WebFOCUS.
Les variables globales sont spécifiées via l'utilisation d'un sigle esperluette double (&&) précédant le nom de la variable. Il est possible d'avoir une variable globale et une variable locale ayant le même nom. Elles sont distinctes et peuvent avoir des valeurs différentes.
L'exemple suivant illustre l'utilisation de trois variables globales : &&CITY, &&CODE1, &&CODE2. Les valeurs sont substituées dans la première procédure, PROC1, et des valeurs sont retenues est transmises à la seconde procédure, PROC2.
TABLE FILE SALES HEADING CENTER "MONTHLY REPORT FOR &&CITY" SUM UNIT_SOLD AND RETURNS AND COMPUTE RATIO/D5.2 = 100 * (RETURNS/UNIT_SOLD); BY CITY IF CITY EQ &&CITY BY PROD_CODE IF PROD_CODE IS-FROM &&CODE1 TO &&CODE2 END EX PROC2
TABLE FILE SALES HEADING CENTER "MONTHLY REPORT FOR &&CITY AND PRODUCT &&CODE1" PRINT UNIT_SOLD AND RETURNS AND COMPUTE RATIO/D5.2 = 100 * (RETURNS/UNIT_SOLD); BY CITY IF CITY EQ &&CITY IF PROD_CODE EQ &&CODE1 END
WebFOCUS substitue automatiquement les valeurs pour variable système rencontrées dans les requêtes du gestionnaire de dialogue. Par exemple, vous pouvez utiliser la variable système &DATE pour inclure automatiquement la date système dans votre requête.
Les variables fournies par le système ne devraient pas être remplacées. Pour éviter cette possibilité, les variables fournies par les utilisateurs ne doivent pas être affectées avec des noms de variables fournies par le système.
Le tableau suivant décrit les variables système du Gestionnaire de dialogue.
Variable |
Format ou Valeur |
Description |
---|---|---|
&DATE |
MM/DD/YY |
Renvoie la date actuelle. |
&DATEfmt &DATXfmt |
Retourne la date en cours ou la valeur date/heure, où fmt représentant toute date valide au format date/heure. &DATEfmt récupère les espaces vides de fin dans une valeur retournée. &DATXfmt supprime les espaces vides de fin dans la valeur retournée. Remarque : l'utilisation des symboles de concaténation (|) pour supprimer une ponctuation entre composants n'est pas prise en charge. Pour retourner une valeur sans ponctuation entre composants, utilisez &YYMD ou &DATEHYYMDN. Pour des informations sur l'format date et date/heure, consultez le chapitre , Décrire un fichier individuel dans le manuel Décrire les données en langage WebFOCUS. |
Retourne la date en cours ou la valeur date/heure, où fmt représentant toute date valide au format date/heure. Par ce que beaucoup d'options de format de date peuvent être ajoutées au préfixe DATE pour construire l'un de ces noms de variables, vous devriez éviter d'utiliser DATE en tant que préfixe lors de la création d'un nom de variable. |
&DMY |
DDMMYY |
Renvoie la date actuelle. |
&DMYY |
DDMMCCYY |
Renvoie la date actuelle (année sur quatre chiffres). |
&FOCCODEPAGE |
|
Retourne la page de code qui est utilisée par FOCUS. |
&FOCCPU |
milliseconds |
Calcul le temps CPU du système d'exploitation. |
&FOCEXTTRM |
ON OFF |
Indique la disponibilité d'attribut du terminal étendu. |
&FOCFEXNAME |
|
Retourne le nom du FOCEXEC exécuter même s'il a déjà été exécuté avec une commande EX ou une commande ‑INCLUDE au sein d'un autre FOCEXEC. Cette variable est différente de la variable &FOCFOCEXEC parce que &FOCFOCEXEC renvoie le nom du FOCEXEC appelé seulement. |
&FOCFIELDNAME |
NEW OLD NOTRUNC |
Retourne une chaîne indiquant si des noms de champs longs et qualifiés sont pris en charge. Une valeur OLD indique qu'ils ne sont pas pris en charge ; NEW indique qu'ils sont pris en charge ; et NOTRUNC indiquer qu'ils sont pris en charge, mais des troncatures uniques de noms de champs ne peuvent pas être utilisées. |
&FOCFOCEXEC |
|
Gère les opérations de reporting qui utilisent beaucoup de requêtes nommées d'une façon similaire qui sont exécutés en utilisant EX. &FOCFOCEXEC vous permet de déterminer facilement quelle procédure est exécutée. &FOCFOCEXEC peut être spécifié au sein d'une requête ou d'une commande du Gestionnaire de Dialogue pour afficher le nom de la procédure en cours d'exécution. |
&FOCINCLUDE |
|
Gère les opérations de reporting qui font appel à des requêtes nommées de la même façon et qui sont incluses dans l'utilisation -INCLUDE. &FOCINCLUDE peut être spécifié au sein d'une requête ou d'une commande du Gestionnaire de Dialogue pour afficher le nom de la procédure incluse en cours. |
&FICLANGCODE |
Retient le code de langue sur trois caractères, par exemple GER pour GERMAN ou FRE pour FRENCH. Cette variable est vide que la langue est English, AME ou ENG. |
|
&FOCMODE |
CRJE MSO OS TSO |
Identifie l'environnement opérationnel. |
&FOCNEXTPAGE |
|
Établit une numérotation de page consécutive au travers de plusieurs rapports. Lorsqu'un rapport est traité, la variable &FOCNEXTPAGE et renseigner avec le numéro qui suit le dernier numéro de page dans le rapport. Cette valeur peut être utilisée en tant que premier numéro de page dans le rapport suivant, rendant la sortie du rapport provenant de plusieurs requêtes plus lisible et plus utile. |
&FOCPRINT |
ONLINE OFFLINE |
Renvoie le paramètre d'imprimante actuel. |
&FOCPUTLVL |
WebFOCUS PUT level number. |
Par exemple, 9306 oU 9310. &FOCPUTLVL n'est plus pris en charge. |
&FOCQUALCHAR |
. : ! % | \ |
Renvoie le caractère utilisé pour séparer les composants des noms de champ qualifié. |
&FOCREL |
release number |
Identifier le numéro de mise à jour FOCUS. Par exemple, 6.5 oU 6.8. |
&FOCSBORDER |
ON OFF |
Si des bordures solides sont utilisées en mode plein écran. |
&FOCTRMSD |
24 27 32 43 |
Indique afficher hauteur. (Il peut s'agir de n'importe quelle valeur ; les exemples montrés ont des paramètres communs.) |
&FOCTRMSW |
80 132 |
Indique afficher largeur. (Il peut s'agir de n'importe quelle valeur ; les exemples montrés ont des paramètres communs.) |
&FOCTRMTYP |
3270 TTY UNKNOWN |
Identifie le type de terminal. |
&FOCUSER |
|
Renvoie l'ID utilisateur connecté. Similaire à la fonction GETUSER. |
&HIPERFOCUS |
ON OFF |
Renvoie une chaîne montrant si HiperFOCUS est actif. |
&IORETURN |
|
Retourne le code renseigné par l'opération -READ ou -WRITE du Gestionnaire de Dialogue. (0 = succès ; 1= échec.) |
&MDY |
MMDDYY |
Renvoie la date actuelle. Ce format rend cette variable utile pour des comparaisons numériques. |
&MDYY |
MMDDCCYY |
Renvoie la date actuelle (année sur quatre chiffres). |
&RETCODE |
numeric |
Retourne le code de retour renseigné à l'exécution d'une commande du système d'exploitation. Exécute toutes les commandes FOCUS dans le FOCSTACK exactement de la même manière que la commande -RUN. |
&SETFILE |
alphanumeric |
Contient la valeur de la commande SET FILE. |
&TOD |
HH.MM.SS |
Renvoie la date/heure actuelle. Quand vous entrez dans FOCUS, cette variable est mise à jour autant système en cours dans le seul cas où vous exécutez une commande MODIFY, SCAN, ou FSCAN. Pour obtenir le temps exact pendant n'importe quel processus, utilisez la fonction HHMMSS. |
&YMD |
YYMMDD |
Renvoie la date actuelle. |
&YYMD |
CCYYMMDD |
Renvoie la date actuelle (année sur quatre chiffres). |
L'exemple suivant incorpore la variable système &DATE dans une requête. Le pied de page utilise la variable système &DATE pour insérer la date système en cours en pied de page de rapport.
TABLE FILE SALES SUM UNIT_SOLD BY PROD_CODE FOOTING "CALCULATED AS OF &DATE" END
Cet exemple illustre comment utiliser la variable système &FOCFOCEXEC dans une requête pour afficher le nom de la procédure en cours d'exécution :
TABLE FILE EMPLOYEE "REPORT: &FOCFOCEXEC -- EMPLOYEE SALARIES" PRINT CURR_SAL BY EMP_ID END
Si la requête est stockée en tant que procédure appelée SALPRINT, elle produit le résultat suivant à son exécution :
REPORT: SALPRINT -- EMPLOYEE SALARIES EMP_ID CURR_SAL ------ -------- 071382660 $11,000.00 112847612 $13,200.00 117593129 $18,480.00 119265415 $9,500.00 119329144 $29,700.00 123764317 $26,862.00 126724188 $21,120.00 219984371 $18,480.00 326179357 $21,780.00 451123478 $16,100.00 543729165 $9,000.00 818692173 $27,062.00
&FOCFOCEXEC et &FOCINCLUDE peuvent aussi être utiliséS dans des commandes -TYPE. Par exemple, vous avez une procédure nommée EMPNAME contenant :
-TYPE &|FOCFOCEXEC is: &FOCFOCEXEC
Quand EMPNAME est exécuté, la sortie suivante est produite :
&FOCFOCEXEC IS: EMPNAME
Vous pouvez afficher une variable date contenant une année sur 4 chiffres sans séparateur. Les variables sont &YYMD, &MDYY, et &DMYY.
L'exemple suivant montre un rapport utilisant &YYMD :
TABLE FILE EMPLOYEE HEADING "SALARY REPORT RUN ON DATE &YYMD" " " PRINT DEPARTMENT CURR_SAL BY LAST_NAME BY FIRST_NAME END
La sortie est montrée ci-dessous.
WebFOCUS poste beaucoup de statistiques concernant l'ensemble des opérations pendant l'exécution d'une procédure, sous la forme de variables statistiques. Tout comme avec les variables système, WebFOCUS fournit automatiquement des valeurs pour ces variables, à la demande.
Le tableau suivant décrit les variables statistiques du Gestionnaire de dialogue.
Variable |
Description |
---|---|
&ACCEPTS |
Indique le nombre de transactions acceptées. Cette variable ne s'applique qu'avec les requêtes MODIFY. |
&BASEIO |
Indique le nombre d'opérations entrée/sortie effectuées. |
&CHNGD |
Indique le nombre de segments mis à jour. Cette variable ne s'applique qu'avec les requêtes MODIFY. |
&DELTD |
Indique le nombre de segments supprimés. Cette variable ne s'applique qu'avec les requêtes MODIFY. |
&DUPLS |
Indique le nombre de transactions rejetées suite à des valeurs dupliquées dans la source de données. Cette variable ne s'applique qu'avec les requêtes MODIFY. |
&FOCDISORG |
Indique le pourcentage de désorganisation pour un fichier FOCUS. Vous pouvez utiliser ? FILE pour afficher ou tester cette variable, même si la valeur est inférieure à 30 % (le niveau auquel ? FILE affiche le montant de désorganisation). |
&FOCERRNUM |
Indique le dernier numéro d'erreur, au format FOCnnnn, affiché après l'exécution d'une procédure. S'il y a eu plus d'une erreurs, &FOCERRNUM indique le numéro de l'erreur la plus récente. S'il n'y a eu aucune erreur, &FOCERRNUM prend la valeur 0. Elle peut aussi être utilisée pour contrôler le branchement à partir d'une procédure pour exécuter une routine de gestion d'erreur. |
&FORMAT |
Indique le nombre de transactions rejetées à la suite d'une erreur de formatage. Cette variable ne s'applique qu'avec les requêtes MODIFY. |
&INPUT |
Indique le nombre de segments ajoutés à la source de données. Cette variable ne s'applique qu'avec les requêtes MODIFY. |
&INVALID |
Indique le nombre de transactions rejetées à la suite d'une condition valide. Cette variable ne s'applique qu'avec les requêtes MODIFY. |
&LINES |
Indique le nombre de lignes imprimées dans le dernier rapport. Cette variable ne s'applique qu'aux requêtes de rapport. |
&NOMATCH |
Indique le nombre de transactions rejetées suite à une valeur sans correspondance dans la source de données. Cette variable ne s'applique qu'avec les requêtes MODIFY. |
&READS |
Indique le nombre d'enregistrements lus à partir d'un fichier non-FOCUS. |
&RECORDS |
Indique le nombre d'enregistrements extraits du dernier rapport. Cette variable ne s'applique qu'aux requêtes de rapport. |
&REJECTS |
Indique le nombre de transactions rejetées pour d'autres raisons que celles qui ont été spécifiquement enregistrées par d'autres variables statistiques. Cette variable ne s'applique qu'avec les requêtes MODIFY. |
&TRANS |
Indique le nombre de transactions traitées. Cette variable ne s'applique qu'avec les requêtes MODIFY. |
Dans l'exemple suivant, le système calcule la valeur de la variable statistique &LINES. Si &LINES est égale à 0, le contrôle passe à la requête TABLE FILE EMPLOYEE identifiée par le label ‑RPT2. Si la valeur n'est pas 0, le contrôle passe au label ‑REPTDONE, et le traitement est terminé.
TABLE FILE SALES HEADING CENTER "MONTHLY REPORT FOR &CITY" SUM UNIT_SOLD AND RETURNS AND COMPUTE RATIO/D5.2 = 100 * (RETURNS/UNIT_SOLD); BY CITY IF CITY EQ &CITY BY PROD_CODE IF PROD_CODE IS-FROM &CODE1 TO &CODE2 END -RUN -IF &LINES EQ 0 GOTO RPT2 ELSE GOTO REPTDONE; -RPT2 TABLE FILE EMPLOYEE . . . END -RUN -REPTDONE -EXIT
FOCUS fournit des variables spéciales s'appliquant au curseur de la souris, les raccourcis clavier, les fenêtres, et d'autres fonctionnalités.
Deux commandes du Gestionnaire de dialogue vous permettent de :
De plus, vous pouvez émettre deux QUERY (?) commandes depuis l'invite WebFOCUS pour afficher les valeurs de :
? &&
? STAT
Remarque : vous pouvez interroger toutes les variables Gestionnaire de Dialogue (local, global, système et statisitque) à partir d'une procédure stockée en lançant : La syntaxe est :
-? &[&variablename]
où :
Effectuée une seule fois, affiche toutes les variables de tous les types.
Est une variable amper complète ou une chaîne partielle allant jusque 12 caractères. Seules les variables amper commençant par la chaîne spécifiée sont affichées.
La commande affiche le message suivant, suivi d'une liste de variables amper en cours et les valeurs :
CURRENTLY DEFINED & VARIABLES:
Les variables locales n'existant pas à l'extérieur d'une procédure, il n'y a pas de requête similaire disponible pour la ligne de commande WebFOCUS.
Vous pouvez stocker la valeur courante d'un paramètre SET dans une variable et utiliser cette valeur dans une procédure. La syntaxe est :
-? SET parameter &[&]variablename
où :
Existe-t-il un paramètre WebFOCUS valide pouvant faire l'objet d'une requête avec le ? SET ou ? commande ? SET
Est le nom de la variable où la valeur doit être stockée.
Si vous entrez ce qui suit, la valeur stockée dans &ABC devient la valeur de ASNAMES.
-? SET ASNAMES &ABC -TYPE &ABC
Si vous omettez &ABC dans la commande, une variable appelée &ASNAMES contenant la valeur ASNAMES est créée.
Lorsque vous concevez une procédure du gestionnaire de dialogue avec des variables, vous devez toujours décider comment les variables de la procédure vont acquérir des valeurs au moment de l'exécution. Vous pouvez utiliser ou encore combiner les techniques suivantes.
Vous pouvez fournir des valeurs de variables directement dans les procédures, sans inviter l'utilisateur à les entrer, en utilisant les méthodes suivantes :
Vérifier l'entrée utilisateur : pour des valeurs fournies par utilisateur, vous pouvez aussi vérifier l'entrée en la comparant à :
Les règles suivantes s'appliquent aux valeurs pour variable :
Dans tous les contextes, les noms de variable du Gestionnaire de Dialogue sont limités à 100 caractères.
Cet exemple illustre l'utilisation des commandes -DEFAULT et -SET pour fournir des valeurs pour les variables. L'utilisateur final devra fournir la valeur B10 pour &CODE1, B20 pour &CODE2, et SMITH pour ®IONMGR à l'invitation du formulaire HTML.
Les nombres à gauche de l'exemple s'appliquent aux annotations qui suivent :
1. -DEFAULT &VERB=SUM 2. -SET &CITY=IF &CODE1 GT 'B09' THEN 'STAMFORD' ELSE 'UNIONDALE'; 3. -TYPE REGIONAL MANAGER FOR &CITY SET PAGE=OFF 5. TABLE FILE SALES HEADING CENTER "MONTHLY REPORT FOR &CITY" "PRODUCT CODES FROM &CODE1 TO &CODE2" " " &VERB UNIT_SOLD AND RETURNS AND COMPUTE RATIO/D5.1 = 100 * (RETURNS/UNIT_SOLD); BY PROD_CODE IF PROD_CODE IS-FROM &CODE1 TO &CODE2 FOOTING CENTER 4. "REGION MANAGER: ®IONMGR" "CALCULATED AS OF &DATE" END 6. -RUN
La procédure s'exécute de la manière suivante :
REGIONAL MANAGER FOR STAMFORD
TABLE FILE SALES HEADING CENTER "MONTHLY REPORT FOR STAMFORD" "PRODUCT CODES FROM B10 TO B20" " " SUM UNIT_SOLD AND RETURNS AND COMPUTE RATIO/D5.1 = 100 * (RETURNS/UNIT_SOLD); BY PROD_CODE IF PROD_CODE IS-FROM B10 TO B20 FOOTING CENTER "REGION MANAGER: SMITH" "CALCULATED AS OF 06/11/03" END
MONTHLY REPORT FOR STAMFORD PRODUCT CODES FROM B10 TO B20 PROD_CODE UNIT_SOLD RETURNS RATIO --------- --------- ------- ----- B10 103 13 12.6 B12 69 4 5.8 B17 49 4 8.2 B20 40 1 2.5 REGION MANAGER: SMITH CALCULATED AS OF 06/11/03
Les commandes -DEFAULT indiquent les valeurs par défaut pour les variable globales et locales. Cette technique assure que la valeur est bien transmise à la variable de façon à ce que l'utilisateur ne soit pas invité à renseigner cette valeur.
Vous pouvez lancer plusieurs commandes -DEFAULT pour une variable. Si la variable globale, ces commandes -DEFAULT peuvent être entrées dans des FOCEXECs séparés. À tout moment avant qu'une autre méthode ne soit utilisée pour établir une valeur pour une variable, la commande -DEFAULT la plus récente sera prise en compte.
Cependant, dès lors qu'une valeur pour une variable est établie en utilisant une autre méthode (par exemple en entrant une commande -SET, qui récupère une entrée de valeur par l'utilisateur, ou qu'il y une valeur à partir d'un fichier), les commandes -DEFAULT suivantes pour cette variable seront ignorées.
Remarquez que -DEFAULTS et -DEFAULTH sont synonymes de -DEFAULT.
-DEFAULT[S|H] &[&]name=value [...] [;]
où :
est le nom de la variable.
Est la valeur par défaut affectée à la variable.
Est un caractère de ponctuation optionnelle.
Remarque : -DEFAULTS et -DEFAULTH sont synonymes de -DEFAULT.
Dans l'exemple suivant, -DEFAULT renseigne la valeur par défaut de &PLANT pour Boston (BOS) :
-DEFAULT &PLANT=BOS TABLE FILE CENTHR . . .
Vous pouvez affecter une valeur à la valeur en calculant la valeur dans une expression ou en affectant une valeur litérale à la variable avec la commande -SET. Vous pouvez aussi utiliser la phrase IN FILE pour tester si la valeur de ce caractère existe dans un fichier et affecter une variable avec le résultat. La valeur de la variable prend la valeur 1 dans le cas où la valeur testée dans le fichier existe ou la valeur 0 si elle n'existe pas.
Vous pouvez utiliser cette technique pour fournir des dates au Gestionnaire de Dialogue en tant que valeurs de variables.. Une date fournie au Gestionnaire de Dialogue dans une variable ne peut pas avoir une longueur supérieure à 20 caractères, les espaces inclus. Les variables du Gestionnaire de Dialogue n'acceptent des dates à format complet (c'est-à-dire, MDY ou MDYY, dans l'ordre de votre choix).
Si vous travaillez avec des dates à cheval entre deux siècles qui n'incluent pas une année sur quatre chiffres, vous pouvez utiliser les paramètres SET DEFCENT et YRTHRESH.
Si vous souhaitez appliquer une valeur de variable à un nombre, les caractères pris en charge que vous pouvez utiliser sont des chiffres numériques, par exemple le signe -, et une virgule pour représenter les emplacements de décimales suivant. Ces derniers sont les seuls caractères valides que le Gestionnaire de Dialogue prend en charge en tant que nombre, et ce quels que soient les options EDIT ou la valeur du CDN.
-SET &[&]name= {expression|value};
-SET &[&]var3= &var1 IN FILE filename1 [OR &var2 IN FILE filename2 ...];
où :
est le nom de la variable.
est une expression valide. Des expressions peuvent occuper plusieurs lignes, il devez donc terminer la commande avec un point-virgule.
Est une valeur litérale ou une expression logique ou arithmétique affectée à la variable. Si la valeur littérale contient des virgules ou des espaces vides incorporés, vous devez entourer la valeur avec des guillemets simples.
Il s'agit d'une variable qui est remplie avec la valeur 1 si le résultat de l'expression côté droit du signe = a la valeur True, ou bien avec la valeur zéro si le résultat est faux (False).
Est la variable qui contient la valeur à rechercher dans filename1.
Est la variable qui contient la valeur à rechercher dans filename2.
-SET &VAR1 = 'ABC '; -SET &VAR2 = &VAR1 IN FILE FILE1;
Le paramètre DMPRECISION active les commandes -SET du gestionnaire de dialogue pour calculer précisément les valeurs de variable numérique sans avoir à utiliser la fonction FTOA.
Sans la présence ce paramètre, les résultats de calcul numérique sont retournés en tant que nombre entier, bien que les calculs tels quels emploient une arithmétique à double précision. Pour retourner un nombre avec une précision décimale 100 ce paramètre, vous devez entrer le calcul en temps qu'entrée de la sous-routine FTOA, ou vous pouvez spécifier le nombre de décimales qui sont retournées.
La commande SET DMPRECISION donne aux utilisateurs l'option de choisir entre accepter la troncature par défaut pour la portion décimale de la sortie à partir de calcul arithmétique, ou bien de spécifier cinq décimales pour arrondir le résultat.
SET DMPRECISION = {OFF|n}
où :
Tâches spécifiées le troncature sans arrondissement après le point décimale. OFF est la valeur par défaut.
Il s'agit d'un nombre positif entre 019, indiquant la valeur d'arrondissement. Notez que n=0 résulte en une valeur entière arrondie.
Le tableau suivant montre le résultat de la division de 20 par 3 avec avec divers paramètres DMPRECISION (DMP) :
SET DMPRECISION = |
Résultat |
---|---|
OFF |
6 |
0 |
7 |
1 |
6.7 |
2 |
6.67 |
9 |
6.666666667 |
Dans l'exemple suivant, -SET affecte la valeur 14Z ou 14B à la variable &STORECODE, tel que déterminé par l'expression logique IF. La valeur de &CODE est fournie par l'utilisateur final.
-SET &STORECODE = IF &CODE GT C2 THEN '14Z' ELSE '14B'; TABLE FILE SALES SUM UNIT_SOLD AND RETURNS BY PROD_CODE IF PROD_CODE GE &CODE BY STORE_CODE IF STORE_CODE IS &STORECODE END
L'utilisation de guillemets simples entourant un littéral est optionnelle à moins que le littéral ne contiennent des espaces vides incorporés, des virgules, ou des signes égal. Dans ces cas, vous devez les inclure tel qu'illustré ci-dessous :
-SET &NAME='JOHN DOE';
Cet exemple fournit des dates au Gestionnaire de Dialogue en tant que variables. La variable &DELAY prend la valeur égale à la différence de jours entre &LATER et &NOW.
-SET &NOW = 'JUN 30 2002'; -SET &LATER = '2002 25 AUG'; -SET &DELAY = &LATER - &NOW; -TYPE &DELAY
Le FOCEXEC suivant crée un fichier alphanumérique HOLD appelé COUNTRY1 avec les noms des pays présents dans le fichier CAR. Puis il affecte la variable &C égale à FRANCE. La phrase IN FILE renvoie la valeur 1 à &IN1 si FRANCE est présent dans le fichier HOLD et si 0 ne l'est pas :
TABLE FILE CAR PRINT COUNTRY ON TABLE HOLD AS COUNTRY1 FORMAT ALPHA END -RUN -SET &C = 'FRANCE'; -SET &IN1 = &C IN FILE COUNTRY1; -TYPE THE VALUE IS &IN1
La sortie montre que FRANCE est présent dans le fichier COUNTRY1 :
THE VALUE IS 1
Pour indiquer la valeur d'une variable avec -SET, vous devez spécifier une chaîne de caractères sur le côté droit de la commande SET. La chaîne de caractères ne pouvant être placéesur plusieurs lignes, si nécessaire, vous pouvez effectuer une concaténation plus courte des chaînes ou des variables afin de composer la chaîne longue.
La procédure suivante créée une variable nommée &LONG contenant une chaîne longue :
-SET &LONG = 'THIS IS A LONG AMPER VARIABLE. NOTE THAT IN ORDER ' - |'TO SET ITS VALUE USING -SET, YOU MUST CONCATENATE SHORTER STRINGS, ' - |'EACH OF WHICH MUST FIT ON ONE LINE.'; -TYPE &LONG END
La sortie est :
THIS IS A LONG AMPER VARIABLE.NOTE THAT IN ORDER TO SET ITS VALUE USING -SET, YOU MUST CONCATENATE SHORTER STRINGS, EACH OF WHICH MUST FIT ON ONE LINE.
Vous pouvez lire les valeurs de variables depuis un fichier externe, ou les écrire dans un fichier externe avec les commandes -READ et -WRITE respectivement.
Le fichier externe peut-être un fichier à format fixe (dans lequel les données sont stockées dans des colonnes fixées) ou bien dans un fichier à format libre (dans lequel des données sont stockées à l'aide d'un format délimité par virgule).
Vous pouvez aussi lire un fichier en utilisant la commande -READ. La commande -READFILE lit un fichier en commençant par effectuer la lecture de son fichier Maître et crée des variables d'invite de saisie pour le Gestionnaire de Dialogue basées sur les formats ACTUAL pour chaque champ du fichier maître. Puis cette commande lit le fichier puis, si nécessaire, convertit les champs de valeurs numériques en chaîne de caractères alphanumériques retournées vers les variables qui ont été créées. L'affichage des options aux formats USAGE ne sont pas transmises aux variables. Les noms des variables d'invite sont les noms des champs préfixés avec un signe amper (&).
-READ ddname[,] [NOCLOSE] &name[.format.][,] ...
où :
est le nom logique du fichier tel que défini dans WebFOCUS en utilisant ALLOCATE ou DYNAM ALLOCATE.
Un espace après le ddname dénote un fichier à format fixé alors que la virgule dénote un fichier délimité par virgule.
Indique que le fichier devrait être gardé ouvert même si un -RUN est rencontré. Le fichier est fermé lorsque la procédure est terminée ou lorsqu'une commande -CLOSE ou une commande -WRITE suivante est rencontrée.
est le nom de la variable. Vous pouvez spécifier plus d'une variable. L'utilisation de virgules pour séparer les variables est optionnel.
Si la liste des variables est plus longue qu'une seule ligne, finissez la première ligne avec une virgule et débutez la ligne qui suit avec un tiret suivi d'un espace (- ) pour les fichiers délimités par virgule ou un tiret suivi d'une virgule puis d'un espace (-, ) pour les fichiers à format fixe. Par exemple :
fichiers délimités par des virgules
-READ EXTFILE, &CITY,&CODE1, - &CODE2
Fichiers à format fixé
-READ EXTFILE &CITY.A8. &CODE1.A3., -, &CODE2.A3
est le format de la variable. Il peut être alphanumérique (A) ou numérique (N) Notez que ce format doit être délimité avec des points. Le format est ignoré pour des fichiers délimités par des virgules.
Remarque : -SET fournit une méthode alternative pour définir la longueur d'une variable en utilisant le nombre correspondant de caractères entouré de guillemets simples ('). Par exemple, la commande suivante définit la longueur de &CITY sur 8 :
-SET &CITY=' ';
Supposons que EXTFILE est un fichier à format fixe contenant les données suivantes :
STAMFORDB10B20
Pour détecter la fin d'un fichier, le code suivant test la variable système &IORETURN. Quand il n'y a plus d'enregistrement à lire, une valeur égale à zéro ne sera pas trouvée.
-READ EXTFILE &CITY.A8. &CODE1.A3. &CODE2.A3. -IF &IORETURN NE 0 GOTO RESUME; TABLE FILE SALES SUM UNIT_SOLD BY CITY IF CITY IS &CITY BY PROD_CODE IF PROD_CODE IS-FROM &CODE1 TO &CODE2 END -RESUME . . .
-WRITE ddname [NOCLOSE] text
où :
est le nom logique du fichier tel que défini dans WebFOCUS en utilisant ALLOCATE ou DYNAM ALLOCATE.
Indique que le fichier devrait être gardé ouvert même si un -RUN est rencontré. Le fichier est fermé lorsque la procédure est terminée ou lorsqu'une commande -CLOSE ou une commande -READ suivante est rencontrée.
Est n'importe quelle combinaison de variables et de texte. Pour écrire plus d'une ligne, terminez la première ligne avec une virgule (,) et commencer la ligne suivante avec un trait d'union suivi d'un espace (- ).
-WRITE ouvre le fichier pour recevoir le texte et le ferme à la fermeture de la procédure. Lorsque le fichier est réouvert pour écriture, le nouveau matériel remplace l'ancien Pour réouvrir pour ajouter de nouveaux enregistrements plutôt que de remplacer des enregistrements existants, utilisez l'attribut DISP MOD quand vous définissez le fichier au système d'exploitation.
L'exemple suivant réouvre le fichier -PASS pour ajouter un nouveau texte :
DYNAM ALLOC DD PASS DA USER1.PASS.DATA MOD -WRITE PASS &DIV &RED &TEST RESULT IS, - &RECORDS AT END OF RUN
-READFILE [app/]mastername
où :
Est le répertoire d'application dans lequel se trouve le fichier.
Est le nom du fichier maître à lire.
(FOC339) DIALOGUE MANAGER -READ FAILED: CHECK FILEDEF OR ALLOCATION FOR: -READFILE filename
(FOC702) THE OPTION SPECIFIED IS NOT AVAILABLE WITH TEXT FIELDS: fieldname
La requête suivante créée un fichier binaire HOLD, puis elle utilise -READFILE pour lire le premier enregistrement du fichier HOLD et écrit les valeurs qui ont été extraites dans les variables du Gestionnaire de Dialogue. Notez que les noms des variables d'invite sont les noms des champs préfixés avec un signe amper (&) :
TABLE FILE EMPLOYEE PRINT LAST_NAME FIRST_NAME DEPARTMENT CURR_SAL BY EMP_ID ON TABLE HOLD AS READF1 FORMAT BINARY END -RUN -READFILE READF1 -TYPE LAST_NAME IS &LAST_NAME -TYPE FIRST_NAME IS &FIRST_NAME -TYPE DEPARTMENT IS &DEPARTMENT -TYPE CURR_SAL IS &CURR_SAL -TYPE EMP_ID IS &EMP_ID
La sortie est :
> NUMBER OF RECORDS IN TABLE= 12 LINES= 12 HOLDING BINARY FILE... LAST_NAME IS STEVENS FIRST_NAME IS ALFRED DEPARTMENT IS PRODUCTION CURR_SAL IS 11000.00 EMP_ID IS 071382660
La commande -CLOSE ferme affiche externe ouvert avec la commande -READ ou la commande -WRITE avec l'option NOCLOSE. L'option NOCLOSE garde le fichier ouvert même si -RUN est rencontrée.
-CLOSE {ddname|*}
où :
est le ddname du fichier ouvert décrit dans WebFOCUS utilisant une allocation.
Ferme tous les fichiers -READ et -WRITE ouverts.
Quand un utilisateur connaît les valeurs qui sont requises par une procédure, certaines valeurs (ou toutes) peuvent être entrées via la ligne de commande en utilisant EXEC suivi du nom de la procédure. Ceci permet de gagner du temps puisque WebFOCUS a maintenant les valeurs qu'il doit transmettre à toutes les variables locales ou globales, de façon à ce que l'utilisateur ne soit pas invité à les fournir lui-même.
EX[EC] procedure [[&&][variable=]value, ...]
où :
est le nom de la proicédure qui contiendra les valeurs nom/valeur.
est le nom de la variable pour laquelle vous fournissez une valeur. Omettez ceci pour une variable positionnelle.
Pour une variable locale, n'incluez pas l'esperluette dans le nom de la variable.
Pour variable globale, vous devez inclure une double esperluette dans le nom de la variable :
EX SLRPT &&GLOBAL=value, CITY = STAMFORD, CODE1=B10, CODE2=B20
est la valeur que vous donnez à la variable.
Le nom et les paires de valeurs doivent être séparés par des virgules.
Quand la liste des valeurs à fournir dépasse la largeur de l'affichage, insérez une virgule en tant que dernier caractère sur la ligne, puis entrez le reste de la liste sur les lignes suivantes, de cette façon :
EX SLRPT AREA=S, CITY = STAMFORD, VERB=COUNT, FIELDS = UNIT_SOLD, CODE1=B10, CODE2=B20
Vous pouvez librement mixer des variables positionnelles à des variables nommées dans la commande EXEC. Les variables positionnelles sont des valeurs non nommées qui sont passées à la procédure lorsqu'elle est invoquée.
Respectez ces règles :
Il n'est pas nécessaire d'entrée les paires name=value dans l'ordre tel qu'il est rencontré dans la procédure.
Si la variable peut être positionnée (s'il s'agit d'une variable de type nombre), il n'est pas nécessaire de spécifier le nom de la variable dans la commande EXEC. WebFOCUS effectue la correspondance entre les valeurs EXEC et les variables de positionnement lorsqu'elles sont rencontrées dans la procédure.
Considérez la procédure suivante appelée SLRPT:
TABLE FILE SALES HEADING CENTER "MONTHLY REPORT FOR &CITY" SUM UNIT_SOLD AND RETURNS AND COMPUTE RATIO/D5.2 = 100 * (RETURNS/UNIT_SOLD); BY PROD_CODE IF PROD_CODE IS-FROM &CODE1 TO &CODE2 BY CITY IF CITY EQ &CITY END
Vous pouvez fournir des valeurs pour les variables sous la forme de paramètres en utilisant la commande EX de la façon suivante :
EX SLRPT CITY=STAMFORD, CODE1=B10, CODE2=B20
Prenons l'exemple suivant :
TABLE FILE SALES HEADING CENTER "MONTHLY REPORT FOR &1" SUM UNIT_SOLD AND RETURNS AND COMPUTE RATIO/D5.2 = 100 * (RETURNS/UNIT_SOLD); BY PROD_CODE IF PROD_CODE IS-FROM &2 TO &3 BY CITY IF CITY EQ &1 END
La commande EX qui invoque la procédure est la suivante :
EX SLRPT STAMFORD, B10, B20
Cette commande va substituer STAMFORD pour la première variable positionable, B10 pour la seconde, et B20 pour la troisième.
La requête de rapport SLRPT inclure des variables nommées et positionnelles :
TABLE FILE SALES HEADING CENTER "MONTHLY REPORT FOR &CITY" &VERB UNIT_SOLD AND RETURNS AND COMPUTE RATIO/D5.2 = 100 * (RETURNS/UNIT_SOLD); BY PROD_CODE IF PROD_CODE IS-FROM &1 TO &2 BY CITY IF CITY EQ &CITY END
La commande suivante exécute SLRPT et remplit les variables nommées et positionnelles :
EX SLRPT CITY=STAMFORD, B10, B20, VERB=COUNT
&CITY est une variable nommée dont la valeur est STAMFORD.
&1 est une variable de positionnement dans la valeur est B10.
&2 est une variable de positionnement dans la valeur est B20.
&VERB est une variable nommée dont la valeur est COUNT.
Vous pouvez spécifier les variables avec des conditions de format qui seront comparées aux valeurs entrées. Si les valeurs entrées n'ont pas le format spécifié, WebFOCUS génère des messages d'erreur et invite l'utilisateur à renseigner à nouveau les valeurs.
Les formats alphanumériques sont décrits par la lettre A, suivi par le nombre de caractères. Le nombre de caractères doit être entre un et 3968.
Les formats numériques sont décrits par la lettre I, suivi par le nombre de chiffres à entrer. Ce nombre de chiffres peut être entre 1 et 10 (la valeur doit être inférieure à 231-1), et la valeur fournie pour le nombre peut contenir un point décimal.
La description du format doit obligatoirement être entourée de points.
Si vous testez des noms de champ en fonction de valeurs de variables en entrée, spécifiez les formats des variables d'entrée. Si vous ne les spécifiez pas, et que la valeur fournie dépasse la spécification de format du Fichier Maître, la procédure est arrêtée et des messages d'erreur sont affichés. Pour continuer, la procédure doit être à nouveau exécutée. Cependant, si vous incluez le format, et que la valeur fournie dépasse le format, la valeur entrée sera rejetée et l'utilisateur sera invité de nouveaux à la saisir.
Remarque : WebFOCUS stocke toutes les variables du gestionnaire de dialogue en interne sous la forme de codes alphanumériques. Pour effectuer des opérations arithmétiques, le gestionnaire de dialogue convertit la valeur de variable en décimales point flottant à double précision, puis reconvertit le résultat en code alphanumérique, en supprimant les emplacements décimaux. Pour cette raison, n'effectuez pas de tests recherchant des emplacements décimaux dans le code numérique.
Considérez la spécification de format suivante :
&STORECODE.A3.
Aucun message spécial n'est envoyé à l'écran qui détaille le format spécifié. Toutefois, si dans l'exemple ci-dessus, l'utilisateur entre plus de trois caractères alphanumériques, la valeur est rejetée, le message d'erreur FOC291 est affiché, et l'utilisateur doit recommencer.
Vous pouvez utiliser plusieurs techniques de manipulations et de tests des variables du gestionnaire de dialogue.
Pour vous assurer qu'une valeur fournie et valide et qu'elle est utilisée correctement dans la procédure, vous pouvez tester sa présence, son type, et sa longueur. Par exemple, il se peut que vous ne souhaitiez pas effectuer un calcul numérique sur une variable pour laquelle des données alphanumériques ont été fournies.
-IF &name{.LENGTH|.TYPE} rest_of_expression GOTO label...;
où :
Est une variable fournie par utilisateur.
teste la longueur d'une valeur. Si une valeur n'est pas présente, un zéro (0) est transmis à l'expression. Sinon, le nombre de caractères dans la valeur est transmis.
teste le type d'une valeur. La lettre N (numérique) est transmise à l'expression si la valeur peut être interprétée en tant que nombre jusqu'à 231-1 et elle est stockée sur 4 octets au format à virgule flottante. Dans le gestionnaire de dialogue, le résultat d'une opération arithmétique avec des champs numériques est tronqué en un entier après que le résultat d'une expression dans son ensemble ait été calculé. Si la valeur n'a pas pu être interprétée comme étant numérique, la lettre A (alphanumérique) est transmise à l'expression. Si la valeur n'est pas définie, la lettre U est passée à l'expression.
Est ce qui reste d'une expression utilisant &name avec le suffixe spécifié.
Spécifie un label pour le branchement.
Si la longueur de &OPTION est supérieure à un caractère, le contrôle passe au label -FORMAT, qui informe l'application cliente qu'un seul caractère est permis.
-IF &OPTION.LENGTH GT 1 GOTO FORMAT ELSE -GOTO PRODSALES; . . . -PRODSALES TABLE FILE SALES . . . END -EXIT -FORMAT -TYPE ONLY A SINGLE CHARACTER IS ALLOWED.
L'exemple suivant renseigne la variable &WORDLEN avec la longueur d'une chaîne contenue dans la variable &WORD.
&WORD.ENTER WORD. -SET &WORDLEN = &WORD.LENGTH;
Vous pouvez utiliser cette technique lorsque vous souhaitez utiliser une variable pour en renseigner une autre.
Si &OPTION n'est pas alphanumérique, le contrôle passe au label -NOALPHA, qui informe l'application cliente que seuls les caractères alphanumériques sont permis.
-IF &OPTION.TYPE NE A GOTO NOALPHA ELSE - GOTO PRODSALES; . . . -PRODSALES TABLE FILE SALES . . . END -EXIT -NOALPHA -TYPE ENTER A LETTER ONLY.
-IF &name.EXIST GOTO label...;
où :
Est une variable fournie par utilisateur.
tester la présence d'une valeur. Si une valeur n'est pas présente, un zéro (0) est transmis à l'expression. Sinon, une valeur non-zéro est transmise.
Spécifie un label pour le branchement.
Si aucune valeur n'est fournie, &OPTION.EXIST est égal à zéro et le contrôle est passé au label ‑CANTRUN. La procédure envoie un message à l'application cliente, puis quitte. Si une valeur est fournie, le contrôle la transmet au label -PRODSALES.
-IF &OPTION.EXIST GOTO PRODSALES ELSE GOTO CANTRUN; . . . -PRODSALES TABLE FILE SALES . . .
END -EXIT -CANTRUN -TYPE TOTAL REPORT CAN'T BE RUN WITHOUT AN OPTION. -EXIT
L'opérateur .EVAL vous permet de remplacer une variable avec sa valeur immédiatement, rendant possible la modification d'une procédure dynamiquement. L'opérateur .EVAL s'avère particulièrement utile pour modifier le code au moment de l'exécution.
[&]&variable.EVAL
où :
Est une variable locale globale.
Quand la procédure de commande est exécutée, l'expression est remplacée avec la valeur de la variable spécifiée avant que tout autre action ne soit exécutée. La commande qui contient cette valeur est alors réévaluée.
Sans l'opérateur .EVAL, une variable ne peut être utilisée à la place de certaines commandes.
L'exemple suivant illustre l'utilisation de l'opérateur .EVAL dans une expression de sélection d'enregistrements. Les nombres à gauche s'appliquent aux annotations qui suivent la procédure :
1. -SET &R='IF SALARY GT 100000'; 2. -IF &Y EQ 'YES' THEN GOTO START; 3. -SET &R = '-*'; -START 4. TABLE FILE CENTHR SUM SALARY BY PLANT 5. &R.EVAL END
La procédure s'exécute de la manière suivante :
La requête de rapport est empilée.
Sans .EVAL, le Gestionnaire de dialogue interprète une variable une seule fois. Dans l'exemple ci-dessous :
-SET &A='-TYPE'; &A HELLO
Le gestionnaire de dialogue ne reconnaît pas que &A est la commande -TYPE : il n'affiche donc pas le mot HELLO et génère le message d'erreur :
UNKNOWN WebFOCUS COMMAND -TYPE
Ajouter l'opérateur .EVAL à la variable &A active le gestionnaire de dialogue pour interpréter la valeur correctement. Le code
-SET &A='-TYPE'; &A.EVAL HELLO
produit la sortie suivante :
HELLO >>
Vous pouvez ajouter une variable à une chaîne de caractères ou combiner deux variable ou plus et/ou des littéraux. Consultez le manuel Création de rapports avec le langage WebFOCUS pour toutes les informations concernant la concaténation.
Remarque : lorsque vous utilisez des variables, séparez chacune d'entre elles du symbole de concaténation (||) avec un espace.
-SET &name3 = &name1 || &name2;
où :
est le nom de la variable concaténée.
Il s'agit de variables, séparées par un espace et un symbole de concaténation.
Remarque : l'exemple montré utilise une concaténation forte, indiquée par le symbole || . Une concaténation forte déplace tous les espaces de fin de &name1 vers la fin du résultat. À l'inverse, une concaténation faible, indiquée par le symbole | préserve tous les espaces de fin dans &name1.
Vous pouvez ajouter la valeur d'une variable à la valeur d'une autre variable, en créant une variable indexée. Cette fonctionnalité s'applique autant aux variables locales qu'aux variables globales.
Si la valeur indexée est numérique, l'effet est similaire à un tableau (array) utilisé dans les langages de programmation traditionnels. Par exemple, si la valeur de l'index &K varie de 1 à 10, la variable &AMOUNT.&K fait référence à l'une des dix variables, de &AMOUNT1 à &AMOUNT10.
Un index numérique peut être utilisé comme un compteur, il peut être renseigné, incrémenté, et testé dans une procédure.
-SET &name.&index[.&index...] = expression;
où :
Est une variable.
Il s'agit d'une variable numérique ou alphanumérique dont la valeur est ajoutée à &name. Le point est obligatoire.
Quand plus d'un index est utilisé, toutes les valeurs d'index font l'objet d'une concaténation et la chaîne s'ajoute au nom de la variable.
Par exemple, &V.&I.&J.&K est équivalent à &V1120 quand &I=1, &J=12, et &K=0.
est une expression valide. Pour plus d'informations sur les types d'expression que vous pouvez écrire, consultez le manuel Création de rapports en langage WebFOCUS
Une variable indexée peut être utilisée dans une boucle. L'exemple suivant créait l'équivalent d'une boucle DO utilisée dans les langages de programmation traditionnels :
-SET &N = 0; -LOOP -SET &N = &N+1; -IF &N GT 12 GOTO OUT; -SET &MONTH.&N=&N; -TYPE &MONTH.&N -GOTO LOOP -OUT
Dans cet exemple, &MONTH est la variable indexée et &N est l'index. La valeur de l'index est fournie via la commande -SET. La première commande -SET initialise l'index à 0, et la seconde -SET incrémente l'index à chaque fois que la procédure achève une boucle.
Si la valeur d'un index n'est pas définie avant la référence, la commande suppose une valeur vide. Par conséquent, le nom et la valeur de la variable indexée ne changera pas.
Les variables indexées sont incluses dans la limite système 1024, ce qui inclut les variables réservées pour WebFOCUS.
Les chaînes de caractères doivent être entourées par des guillemets simples avant d'être utilisés par la plupart des moteurs de base de données. De plus, les guillemets simples incorporés sont indiqués par deux guillemets simples contigus. WebFOCUS et iWay requiert des guillemets autour des variables qui contiennent des délimiteurs, qui incluent des espaces et des virgules.
Le suffixe QUOTEDSTRING d'une variable du Gestionnaire de dialogue applique les de conversion suivante aux contenus de la variable :
Les commandes du Gestionnaire de Dialogue diffèrent dans la possibilité qu'ils offrent de gérer les chaînes de caractère qui ne sont pas entourés par des guillemets simples et qui contiennent des espaces vides incorporés. Une commande -PROMPT explicite ou implicite peut lire une telle chaîne. La chaîne d'entrée en entier est ensuite entourée par des guillemets simples quand elles sont manipulées par .QUOTEDSTRING.
Remarque : lors de l'utilisation de la commande -SET pour référencer une chaîne de caractères, assurez-vous que cette chaîne est entourée de guillemets simples pour éviter des erreurs.
&var.QUOTEDSTRING
où :
est une variable du Gestionnaire de Dialogue.
L'exemple suivant affiche le résultat du suffixe QUOTEDSTRING sur des chaînes d'entrée.
-SET &A = ABC; -SET &B = 'ABC'; -SET &C = O'BRIEN; -SET &D = 'O'BRIEN'; -SET &E = 'O''BRIEN'; -SET &F = O''BRIEN; -SET &G = OBRIEN'; -TYPE ORIGINAL = &A QUOTED = &A.QUOTEDSTRING -TYPE ORIGINAL = &B QUOTED = &B.QUOTEDSTRING -TYPE ORIGINAL = &C QUOTED = &C.QUOTEDSTRING -TYPE ORIGINAL = &D QUOTED = &D.QUOTEDSTRING -TYPE ORIGINAL = &E QUOTED = &E.QUOTEDSTRING -TYPE ORIGINAL = &F QUOTED = &F.QUOTEDSTRING -TYPE ORIGINAL = &G QUOTED = &G.QUOTEDSTRING
La sortie est :
ORIGINAL = ABC QUOTED = 'ABC' ORIGINAL = ABC QUOTED = 'ABC' ORIGINAL = O'BRIEN QUOTED = 'O''BRIEN' ORIGINAL = O'BRIEN QUOTED = 'O''BRIEN' ORIGINAL = O'BRIEN QUOTED = 'O''BRIEN' ORIGINAL = O''BRIEN QUOTED = 'O''''BRIEN' ORIGINAL = OBRIEN' QUOTED = 'OBRIEN'''
ORIGINAL = ABC QUOTED = 'ABC' ORIGINAL = ABC QUOTED = 'ABC' ORIGINAL = O'BRIEN QUOTED = 'O''BRIEN' ORIGINAL = O'BRIEN QUOTED = 'O''BRIEN' ORIGINAL = O'BRIEN QUOTED = 'O''BRIEN' ORIGINAL = O''BRIEN QUOTED = 'O''''BRIEN' ORIGINAL = OBRIEN' QUOTED = 'OBRIEN'''
Remarque : La commande -SET va retirer les guillemets simples autour de la chaîne. Observez dans l'exemple ci-dessus que le résultat de -SET &B = 'ABC' a été changé en ORIGINAL = ABC (comme on peut le voir dans la sortie), avant la conversion QUOTEDSTRING.
Vous pouvez utiliser -SET pour définir une valeur pour une variable substituée en fonction des résultats d'une expression ou d'une combinaison arithmétique ou logique.
-SET &name = expression;
où :
Il s'agit d'une variable fournie par l'utilisateur dont la valeur est affectée avec l'expression.
Il s'agit d'une expression respectant les règles indiquer dans le Création de rapports avec le langage WebFOCUS, mais avec les limitations définies dans cette rubrique. Le point-virgule (;) après l'expression est requis pour indiquer la fin de la commande SET.
Vous pouvez utiliser l'option de masque de la fonction EDIT avec des variables amper. Vous pouvez insérer des caractères dans une valeur alphanumérique, ou extraire certains caractères d'une valeur.
La fonction TRUNCATE du Gestionnaire de dialogue retire tous les espaces de fin des variables amper du gestionnaire de dialogue et en ajuste la longueur.
La fonction TRUNCATE du gestionnaire de dialogue ne possède qu'un seul argument, la chaîne ou la variable qui doit être tronquée. Si vous essayez d'utiliser la fonction TRUNCATE du gestionnaire de dialogue avec plus d'un argument, le message d'erreur suivant sera généré :
(FOC03665) Error loading external function 'TRUNCATE'
Cette fonction ne peut être utilisée que dans les commandes du gestionnaire de dialogue qui supporte les appels à fonction, telles que -SET et -IF. Il ne peut pas être utilisé dans une commande -TYPE ou en tant qu'argument passé à la procédure.
Remarque : une fonction écrite par l'utilisateur ayant le même nom peut exister sans créer de conflit dans l'application.
-SET &var2 = TRUNCATE(&var1);
où :
Dans le cas où la variable du gestionnaire de dialogue vers laquelle la chaîne de caractères tronquée est retournée. La longueur de cette variable est égale à la longueur de la chaîne originale ou de la variable sans espace de droite vide. Si la valeur d'origine ne contenait que des espaces vides, un espace vide unique ayant la longueur de l'un d'entre est retournée.
Est la variable du gestionnaire de dialogue ou une chaîne de caractère littéral entourée par des guillemets simples ('). Les variables systèmes et statistiques sont permises, ainsi que les variables globales et locales créées par un utilisateur.
L'exemple suivant montre le résultat de la troncature des espaces de fin :
-SET &LONG = 'ABC ' ; -SET &RESULT = TRUNCATE(&LONG); -SET &LL = &LONG.LENGTH; -SET &RL = &RESULT.LENGTH; -TYPE LONG = &LONG LENGTH = &LL -TYPE RESULT = &RESULT LENGTH = &RL
La sortie est :
LONG = ABC LENGTH = 06 RESULT = ABC LENGTH = 03
L'exemple suivant montre le résultat de la troncature d'une chaîne consistée uniquement d'espaces vides :
-SET &LONG = ' ' ; -SET &RESULT = TRUNCATE(&LONG); -SET &LL = &LONG.LENGTH; -SET &RL = &RESULT.LENGTH; -TYPE LONG = &LONG LENGTH = &LL -TYPE RESULT = &RESULT LENGTH = &RL
La sortie est :
LONG = LENGTH = 06 RESULT = LENGTH = 01
L'exemple suivant utilise la fonction TRUNCATE en tant qu'argument pour EDIT :
-SET &LONG = 'ABC ' ; -SET &RESULT = EDIT(TRUNCATE(&LONG)|'Z','9999'); -SET &LL = &LONG.LENGTH; -SET &RL = &RESULT.LENGTH; -TYPE LONG = &LONG LENGTH = &LL -TYPE RESULT = &RESULT LENGTH = &RL
La sortie est :
LONG = ABC LENGTH = 06 RESULT = ABCZ LENGTH = 04
Tout nom de fonction rencontrée dans une expression du gestionnaire de dialogue qui n'est pas reconnu en tant que non standard du système ou de fonction WebFOCUS est considéré par défaut comme une fonction. Ces fonctions sont programmées en externe par les utilisateurs, puis stockés dans bibliothèques mise à disposition au moment référencé. Un ou plusieurs arguments sont passés au programme utilisateur, qui effectue une opération ou un calcul et renvoie une valeur unique ou une chaîne de caractères.
Les variables du gestionnaire de dialogue peuvent recevoir les valeurs de fonction via la commande -SET.
Remarque :
-SET &name = routine(argument,...,'format');
où :
est le nom de la variable dans laquelle le résultat est stocké.
est le nom de la fonction
Représente les arguments qui doivent être passés à la fonction. Les arguments numériques sont convertis au format double précision (D).
est le format prédéfini du résultat. Ceci est utilisé pour reconvertir les résultats numériques en représentation de caractères. La valeur doit figurer entre guillemets simples.
Une variable peut faire référence à une commande WebFOCUS ou à un champ particulier. Cependant, la structure de la commande d'une procédure peut être déterminée par la valeur de la variable.
Dans cet exemple, la variable &FIELD détermine le champ à imprimer dans la requête TABLE.
Dans le fichier nommé SALES, la variable &FIELD peut afficher les valeurs RETURNS, DAMAGED, ou UNIT_SOLD.
TABLE FILE SALES . . . PRINT &FIELD BY PROD_CODE . . .
Dans cette section : |
WebFOCUS stocke toutes les variables amper en tant que chaîne au format alphanumérique, qu'elles contiennent des données alphanumériques ou numériques ou un mélange des deux formats. Il n'existe que deux types de variables disponibles pour les variables ampères : alphanumériques numériques.
Les données saisies pour les variables amper sont déterminées pour des contenus de données seulement. Par conséquent, l'utilisation de guillemets simples autour de valeurs numériques dans une commande –SET n'a aucun effet sur le type de données de la variable amper.
Par exemple, la requête suivante stocke des données numériques dans les variables &A, &B, and &C :
-SET &A=12345; -SET &B='12345'; -SET &C=123.45 -TYPE &A &B &C -TYPE &A.TYPE &B.TYPE &C.TYPE
La sortie montre que &A, &B, et &C en toute le type de données numérique :
12345 12345 123.45 N N N
Lorsqu'une variable amper est affichée, substituée, concaténée, ou rajoutée, il n'y a pas de transformation de la valeur contenue dans la variable amper.
Substitution
-SET &C=123.45 IF RETAIL_COST EQ &C
devient
IF RETAIL_COST EQ 123.45
Aussi, considérez la considération suivante :
-SET &D= &C; -TYPE &D &D.TYPE
La sortie montre que &D à la même valeur que &C et est aussi numérique :
123.45 N
Concaténation
La variable amper &F est créée par concaténation de &A et &C :
-SET &F = &A | &C; -TYPE &F &F.TYPE
La sortie montre que la valeur de &F est la valeur de &A suivie par la valeur de &C, et que le type est numérique :
12345123.45 N
L'exemple suivant crée la variable amper &E en incorporant une esperluette dans la chaîne. L'esperluette n'est pas reconnue en tant que début d'un nom de variable et est traité en tant que symbole alphanumérique dans la chaîne :
-SET &E = 1234&C; -TYPE &E &E.TYPE
La sortie montre que la variable est de type alphanumérique, pas numérique. Il ne s'agit pas de la concaténation de la chaîne '1234' avec la variable &C :
1234&C A
Le même comportement peut être obtenu avec concaténation :
-SET &G = AT&|T; -TYPE &G &G.TYPE
La sortie est :
AT&T A
Quand une variable amper est utilisé dans une expression, il peut s'avérer nécessaire d'opérer une conversion de façon à traiter l'expression. La variable amper utilisée dans l'expression est généralement considérée comme étant littérale, et sa valeur est substituée avant que l'expression ne soit traitée. Par conséquent, la conversion de données nécessaire pour traiter l'expression est accomplie. Les valeurs numériques contenues dans des variables amper sont traitées comme des valeurs entières. Si l'expression peut être évaluée en tant qu'entier, tel sera le cas.
Dans l'exemple suivant, &C a la valeur 123.55. Puis une expression crée &D en ajoutant 100 à &C :
-SET &C=123.55; -SET &D=&C + 100; -TYPE &D &D.TYPE
La sortie montre que &D et numérique et que sa valeur est égale à 123.55+100 tronquée en tant qu'entier de valeur 223 par ce que l'arithmétique entière est utilisée :
223 N
L'expression suivante requière une conversion à double précision, car le littéral numérique (100.49) dans l'expression n'est pas un nombre entier :
-SET &C=123.55; -SET &D=&C + 100.49; -TYPE &D &D.TYPE
La sortie montre que le résultat est tronqué avant que &D ne soit retourné, pendant que l'arithmétique été faite en convertissant la valeur de &C en double précision.
224 N
Si vous souhaitez que le résultat retienne les emplacements des décimales, vous pouvez renseigner le paramètre DMPRECISION en lui affectant la valeur égale au nombre d'emplacements décimaux que vous souhaitez retourner à la variable amper résultante.
Par exemple :
SET DMPRECISION=2 -RUN -SET &C=123.55; -SET &D=&C + 100.49;
Maintenant, le résultat retient les emplacements des décimales :
224.04 N
La façon dont vous traitez les variables numériques amper quand vous les transmettez à une fonction dépend du type de données du paramètre de la fonction.
Lorsque vous utilisez une variable numérique amper en tant que paramètres numériques lors de l'appel d'une fonction, la variables amper est traitée en tant que champ. Étant maintenant un champ, elle ne possède pas de type spécifié, ni dans le fichier Maître ni dans le FOCEXEC, elle prend le type de données par défaut de la double précision.
Notez que lorsque le résultat est renvoyé à la variable de sortie, son type est déterminé par son contenu. S'il ne possède que des nombres et un point décimale, il est numérique. S'il contient d'autres symboles, il est alphanumérique.
Par exemple, la fonction FTOA converti un nombre en précision simple ou double (D ou F) en une chaîne alphanumérique au format spécifié entre les parenthèses second paramètre :
FTOA (number_to_convert, '(format)', 'alpha_output_format' )
L'exemple suivant renseigne &C en 123.55 et le passe à la fonction FTOA pour être converti en une chaîne alphanumérique avec un signe dollar :
-SET &C=123.55; -SET &G=FTOA(&C,'(D7.2M)','A11'); -TYPE &G &G.TYPE
La sortie montre que la chaîne $123.55 a été renvoyée à &G. Vu qu'il comporte un symbole autre que des chiffres numériques et un point décimal, son type est alphanumérique :
$123.55 A
Dans l'exemple suivant, le format renvoyé ne spécifie pas signe dollar :
-SET &A=12345; -SET &G=FTOA(&A/100,'(D7.2)','A11'); -TYPE &G &G.TYPE
Vu que la chaîne renvoyée ne contient que des chiffres numériques et un point décimal, son type est numérique :
123.45 N
Notez que si le nombre avait un autre chiffre, il serait renvoyé avec une virgule, et son type serait alphanumérique :
-SET &A=123456; -SET &G=FTOA(&A/100,'(D7.2)','A11'); -TYPE &G &G.TYPE
La sortie est :
1,234.56 A
Lors de l'utilisation d'une variable numérique amper en tant que paramètre alphanumérique dans un appel de fonction, vous devez convertir la valeur numérique en une chaîne alphanumérique avant de l'utiliser de façon à éviter un échec dû à une erreur de format. Vous pouvez le faire en utilisant l'une des fonctions conçues pour convertir des numériques en alphanumériques, ou vous pouvez effectuer une concaténation d'un caractère alphanumérique en une valeur numérique de façon à l'affecter à un type de données alphanumérique.
Par exemple, l'exemple suivant montre la conversion de &C on une chaîne et renvoie cette chaîne à la variable &G. Ensuite, il retourne &G à la fonction RJUST, qui justifie à droite la valeur et la renvoie à la variable &H:
-SET &C=123.55; -SET &G=FTOA(&C,'(D7.2M)','A11'); -SET &H = RJUST(11,&G,'A11'); -TYPE &G &G.TYPE -TYPE &H &H.TYPE
La sortie est :
$123.55 A $123.55 A
Comment :
Référence : |
Vous pouvez tester et déboguer votre procédure de la manière suivante.
&RETCODE peut être utilisé pour tester le résultat d'une commande du système d'exploitation. Ceci récupère le code de retour du système d'exploitation.
&IORETURN peut être utilisé pour tester le résultat des commandes suivantes :
{-DEFAULT|-SET|EX} &ECHO = {ON|ALL|OFF|NONE}
où :
Affiche les commandes WebFOCUS qui sont étendues et empilées pour exécution.
Affiche les commandes du gestionnaire de dialogue et les commandes WebFOCUS qui sont étendues et empilées pour exécution.
Annule l'affichage des commandes empilées et des commandes du Gestionnaire de Dialogue. Il s'agit de la valeur par défaut.
Empèche l'affichage du code de procédure (renvoyé en écho). À partir du moment où la valeur de &ECHO a été renseignée avec NONE, elle ne peut pas être changée pendant la session ou la connexion.
Par défaut, toute procédure qui ne renseigne pas explicitement la variable &ECHO s'exécute avec la valeur OFF. Vous pouvez changer cette valeur par défaut pour &ECHO avec la commande SET DEFECHO.
SET DEFECHO = {OFF|ON|ALL|NONE}
où :
Établit OFF en tant que valeur par défaut pour &ECHO. OFF est la valeur par défaut.
Établit ON en tant que valeur par défaut pour &ECHO. Affiche les commandes WebFOCUS qui sont étendues et empilées pour exécution.
Établit ALL en tant que valeur par défaut pour &ECHO. ALL affiche les commandes du gestionnaire de dialogue et les commandes WebFOCUS qui sont étendues et empilées pour exécution.
Empèche l'affichage du code de procédure (renvoyé en écho). À partir du moment où la valeur de DEFECHO ou de &ECHO a été renseignée avec NONE, elle ne peut pas être changée pendant la session ou la connexion.
La procédure suivante effectue une requête sur la valeur du paramètre DEFECHO et lance une requête TABLE avec la source de données EMPLOYEE :
? SET DEFECHO -RUN -TYPE ECHO = &ECHO TABLE FILE EMPLOYEE PRINT CURR_SAL CURR_JOBCODE BY LAST_NAME BY FIRST_NAME END -RUN
La sortie de la commande requête montre que DEFECHO est sur OFF (la valeur par défaut) :
DEFECHO OFF
La commande -TYPE montre que la valeur de &ECHO est OFF (la valeur par défaut) :
ECHO = OFF
Vu que &ECHO est sur OFF, les commandes TABLE ne s'affichent pas au moment de l'exécution de la procédure :
NUMBER OF RECORDS IN TABLE= 12 LINES= 12 PAUSE.. PLEASE ISSUE CARRIAGE RETURN WHEN READY PAGE 1 LAST_NAME FIRST_NAME CURR_SAL CURR_JOBCODE --------- ---------- -------- ------------ BANNING JOHN $29,700.00 A17 BLACKWOOD ROSEMARIE $21,780.00 B04 CROSS BARBARA $27,062.00 A17 GREENSPAN MARY $9,000.00 A07 IRVING JOAN $26,862.00 A15 JONES DIANE $18,480.00 B03 MCCOY JOHN $18,480.00 B02 MCKNIGHT ROGER $16,100.00 B02 ROMANS ANTHONY $21,120.00 B04 SMITH MARY $13,200.00 B14 RICHARD $9,500.00 A01 STEVENS ALFRED $11,000.00 A07 END OF REPORT
Maintenant, renseignez DEFECHO=ON et ré-exécutez la procédure.
La sortie de la commande requête montre que DEFECHO est sur ON :
DEFECHO ON
La commande -TYPE montre que la valeur de &ECHO a été change sur ON :
ECHO = ON
Vu que &ECHO est sur ON, les commandes TABLE s'affichent au moment de l'exécution de la procédure :
TABLE FILE EMPLOYEE PRINT CURR_SAL CURR_JOBCODE BY LAST_NAME BY FIRST_NAME END
Puis la sortie affiche :
NUMBER OF RECORDS IN TABLE= 12 LINES= 12 PAUSE.. PLEASE ISSUE CARRIAGE RETURN WHEN READY PAGE 1 LAST_NAME FIRST_NAME CURR_SAL CURR_JOBCODE --------- ---------- -------- ------------ BANNING JOHN $29,700.00 A17 BLACKWOOD ROSEMARIE $21,780.00 B04 CROSS BARBARA $27,062.00 A17 GREENSPAN MARY $9,000.00 A07 IRVING JOAN $26,862.00 A15 JONES DIANE $18,480.00 B03 MCCOY JOHN $18,480.00 B02 MCKNIGHT ROGER $16,100.00 B02 ROMANS ANTHONY $21,120.00 B04 SMITH MARY $13,200.00 B14 RICHARD $9,500.00 A01 STEVENS ALFRED $11,000.00 A07 END OF REPORT
Maintenant, lancez la commande SET DEFECHO = NONE et ré-exécutez la procédure :
SET DEFECHO = NONE
La sortie de la commande requête montre que la valeur de DEFECHO a été changée en NONE :
DEFECHO NONE
La commande -TYPE montre que la valeur de &ECHO est NONE :
ECHO = NONE
DEFECHO ayant la valeur NONE, les commandes TABLE ne s'afficher pas au moment de l'exécution de la procédure. La sortie est :
NUMBER OF RECORDS IN TABLE= 12 LINES= 12 PAUSE.. PLEASE ISSUE CARRIAGE RETURN WHEN READY PAGE 1 LAST_NAME FIRST_NAME CURR_SAL CURR_JOBCODE --------- ---------- -------- ------------ BANNING JOHN $29,700.00 A17 BLACKWOOD ROSEMARIE $21,780.00 B04 CROSS BARBARA $27,062.00 A17 GREENSPAN MARY $9,000.00 A07 IRVING JOAN $26,862.00 A15 JONES DIANE $18,480.00 B03 MCCOY JOHN $18,480.00 B02 MCKNIGHT ROGER $16,100.00 B02 ROMANS ANTHONY $21,120.00 B04 SMITH MARY $13,200.00 B14 RICHARD $9,500.00 A01 STEVENS ALFRED $11,000.00 A07 END OF REPORT
Une fois que la valeur de DEFECHO a été renseignée avec NONE, elle ne peut pas être changée. La commande SET suivante essaie de changer la valeur sur ON, mais la sortie de la commande requête montre qu'elle a toujours la valeur NONE :
SET DEFECHO=ON ? SET DEFECHO DEFECHO NONE
{-DEFAULT|-SET|EX procname} &STACK = {ON|OFF}
où :
est la procédure à exécutée.
Exécute des commandes empilées normalement. Il s'agit de la valeur par défaut.
Empêche l'exécution des commandes empilées. De plus, les variables système (par exemple, &RECORDS ou &LINES) ne sont pas renseignées. Les commandes du Gestionnaire de Dialogue sont exécutées de façon à ce que vous puissiez tester la logique de la procédure.
Remarque : &STACK est généralement utilisé avec &ECHO = ALL à des fins de débogage. L'affichage affiche les commandes du gestionnaire de dialogue en même temps que celles de WebFOCUS avec les valeurs fournies. Vous pouvez visualiser la logique de la procédure.
Si vous utilisez Usage Simultané (Simultaneous Usage - SU), vous devez obligatoirement savoir si le serveur de base de données WebFOCUS est disponible avant de commencer une procédure particulière. La procédure suivante test si SINK1 est disponible avant de lancer PROC1.
? SU SINK1 -RUN -IF &RETCODE EQ 16 GOTO BAD; -INCLUDE PROC1 -BAD -EXIT
La variable système &RETCODE renvoie un code après l'exécution d'une requête. Si la requête résulte en un affichage normal, la valeur de &RETCODE est 0. En cas d'erreur d'affichage, ou si aucun affichage n'est rendu (ce qui peut arriver si la requête ne trouve aucune donnée), la valeur de &RETCODE est 8. (Si l'erreur a lieu sur un ? SU, la valeur de &RETCODE est 16.)
La valeur de &RETCODE est renseignée à la suite de l'exécution de l'une de ses requêtes :
Commande |
NORMAL |
NODISPLAY |
ERROR |
---|---|---|---|
? HOLD |
0 |
8 |
|
? SU* |
0 |
8 |
16 |
? JOIN |
0 |
8 |
|
? COMBINE |
0 |
8 |
|
? DEFINE |
0 |
8 |
|
? USE |
0 |
8 |
|
? LOAD |
0 |
8 |
|
*La valeur &RETCODE de ? SU veut dire : 0 indique que le serveur de base de données WebFOCUS (appelé auparavant machine sink) tourne avec un ou plusieurs utilisateurs, 8 indiquent qu'il tourne sans utilisateur connecté, et 16 indique qu'il y a une erreur de communication avec le serveur.
Vous pouvez tester le statut de n'importe quelle de ces requêtes en vérifiant la variable &RETCODE et en fournissant des instructions de branchement dans votre procédure.
Comment : |
Vous pouvez fournir une commande du système d'exploitation en configurant un environnement dans lequel une requête devra obligatoirement être exécutée. Par exemple, un programme peut changer les répertoires, renommer des fichiers, extraire des fichiers d'une archive, ou effectuer d'autres opérations avant d'exécuter une requête.
Dans cette section : |
|
Cette rubrique fournit une liste alphabétique de toutes les commandes du gestionnaire de dialogue, y compris une description des fonctions et de la syntaxe.
Elle fournit aussi une liste groupée des défauts et limites du gestionnaire de dialogue.
Notez que cette information est aussi présentée dans le chapitre dans le contexte de la tâche à laquelle s'applique.
signale le début d'une ligne de commentaires.
N'importe quel nombre de lignes de commentaires peuvent se suivre les unes les autres, mais chacune doit commencer avec -*. Un commentaire peut être inséré au début ou à la fin d'une procédure, ou encore entre deux commandes. Cependant, il ne peut pas être placé sur la même ligne que une commande.
Utilisez les lignes de commentaires pour documenter une procédure de façon à ce que son but et son historique soit clair pour les autres.
La syntaxe est :
-* text
où :
Est un commentaire. Un espace n'est pas obligatoire entre -* et text.
LA commande ? affiche la valeur en cours d'une variable locale.
La syntaxe est :
-? &[variablename]
où :
Est un nom jusqu'à 12 caractères de long. Si ce paramètre n'est pas spécifié, les valeurs en cours de toutes les variables locales et globales, ainsi que les variables système et statistiques définies sont affichées.
-CLOSE ferme affiche externe ouvert avec la commande -READ ou la commande -WRITE avec l'option NOCLOSE. L'option NOCLOSE garde un fichier ouvert jusqu'à ce que l'opération -READ ou -WRITE soit complétée.
La syntaxe est :
-CLOSE {ddname|*}
où :
est le ddname du fichier ouvert décrit dans WebFOCUS utilisant une allocation.
Ferme tous les fichiers -READ et -WRITE ouverts.
Les commandes -DEFAULT indiquent les valeurs par défaut pour les variable globales et locales. ‑DEFAULT garantit que des valeurs sont toujours fournies aux variables et aide à s'assurer qu'elles s'exécutent correctement.
Vous pouvez lancer plusieurs commandes -DEFAULT pour une variable. Si la variable globale, ces commandes -DEFAULT peuvent être entrées dans des FOCEXECs séparés. À tout moment avant qu'une autre méthode ne soit utilisée pour établir une valeur pour une variable, la commande -DEFAULT la plus récente sera prise en compte.
Cependant, dès qu'une valeur pour la variable est établie en utilisant une autre méthode, les commandes ultérieures -DEFAULT effectuées pour cette variable seront ignorées.
Vous pouvez remplacer les valeurs de -DEFAULT en fournissant des valeurs pour les variables sur la ligne de commande, ou encore en fournissant une valeur avec un -SET ultérieur sur -DEFAULT.
Les valeurs par défaut sont fournies dans d'autres modules WebFOCUS pour anticiper les besoins d'utilisateurs et réduire le nombre d'actions dans des situations où la plupart des utilisateurs désirent un résultat prédéfini.
La syntaxe est :
-DEFAULT[S|H] &[&]name=value [...]
où :
est le nom de la variable.
Est la valeur par défaut affectée à la variable.
-EXIT force une procédure à se terminer. Toutes les commandes empilées sont exécutées et la procédure quitte. Si la procédure était appelée par une autre, la procédure appelante continuerait le traitement.
Utilisez -EXIT pour terminer une procédure après le traitement d'une branche finale qui complète la tâche désirée. La dernière ligne d'une procédure est une commande -EXIT implicite.
La syntaxe est :
-EXIT
Les Transfert -GOTO contrôlent un label spécifié.
Si le Gestionnaire de Dialogue trouve le label, le traitement continu avec la ligne qui le suit. Si le Gestionnaire de Dialogue trouve aucun label, le traitement s'arrête et un message d'erreur est affiché.
La syntaxe est :
-GOTO label
. . . -label [TYPE text]
où :
Le label dans la commande -label est un nom défini par utilisateur pouvant aller jusque 12 caractères pour spécifier la cible -GOTO.
N'utilisez pas d'espaces insérés, ni le nom d'une autre commande gestionnaire de dialogue, à l'exception de -QUIT ou -EXIT. N'utilisez pas de mots qui sont susceptibles d'être confondus avec une fonction, des opérations arithmétiques et logiques, etc.
Envoie un message à l'application cliente.
-IF redirige le flux d'exécution d'une procédure basée sur l'évaluation d'une expression.
Une commande -IF sans un ELSE spécifié explicitement dont l'expression est fausse continue le traitement avec la ligne la suivant immédiatement.
La syntaxe est :
-IF expression [THEN] GOTO label1 [- ELSE GOTO label2] [- ELSE IF...];
où :
Est un nom défini par utilisateur jusqu'à 12 caractères spécifiant la cible de l'action GOTO.
N'utilisez pas d'espaces insérés, ni le nom d'une autre commande gestionnaire de dialogue, à l'exception de -QUIT ou -EXIT. N'utilisez pas de mots qui sont susceptibles d'être confondus avec une fonction, des opérations arithmétiques ou logiques, etc.
est une expression valide. Les littéraux n'ont pas besoin d'être entourés avec des guillemets simples à moins qu'ils ne contiennent des virgules espaces vides incorporés.
Est une commande optionnelle qui améliore la lisibilité d'une commande.
Passe le contrôle sur label2 quand le test -IF échoue.
Spécifie un test composé -IF
Le point-virgule est requis à la fin de la commande, il est ligne de continuation doive obligatoirement commencer par un trait d'union.
-INCLUDE spécifit une autre procédure à incorporer et à exécuter à l'exécution, comme si elle faisait partie de la procédure appelante. La procédure spécifiée peut comprendre une procédure partielle ou complètement développée. Notez qu'une procédure partielle ne s'exécute pas si elle est appelée à l'extérieur de la procédure contenant -INCLUDE.
Lorsque vous utilisez -INCLUDE, vous ne devriez pas effectuer de branchement sur le label à l'extérieur de la procédure spécifiée.
Une procédure peut contenir plus d'un -INCLUDE. Vous pouvez imbriquer autant de -INCLUDEs que nécessaire, mais l'appel à des -INCLUDEs récursifs est limité à quatre niveaux.
Vous pouvez utiliser n'importe quelle commande valide dans un -INCLUDE.
EXEC peut aussi être utilisé pour exécuter une procédure à l'intérieur d'une autre.
La syntaxe est :
-INCLUDE filename [filetype]
où :
Est la procédure à incorporer dans la procédure appelante.
Est le DDNAME de la procédure. Si rien n'est inclus, c'est FOCEXEC qui est supposé.
Le label spécifié dans la commande -label est la cible de la commande -GOTO ou du critère -IF.
La syntaxe est :
-label [TYPE message]
où :
Est un nom fourni par utilisateur jusqu'à 12 caractères identifiant la cible pour une branche.
N'utilisez pas d'espaces insérés, ni le nom d'une autre commande gestionnaire de dialogue, à l'exception de -QUIT ou -EXIT. N'utilisez pas de mots qui sont susceptibles d'être confondus avec une fonction, des opérations arithmétiques ou logiques, etc.
Envoie un message à l'application cliente.
-PASS transmet directement la commande et contrôle les mots de passe. Cette fonctionnalité est particulièrement utile pour spécifier un fichier en particulier ou un jeu de fichier qu'un utilisateur peut lire ou écrire. Les mots de passe ont des jeux de fonctions associés via l'utilitaire DBA.
La procédure qui renseigne les mots de passe peut être cryptée de façon à ce que les mots de passe et cette procédure ne puisse pas être entrés et révélés.
Une variable peut être associée avec -PASS de façon à ce que vous soyez invités à renseigner une valeur de mot de passe.
La commande PASS fournit la même fonction au niveau de commande, tout comme le paramètre PASS de la commande SET.
La syntaxe est :
-PASS password
où :
Est un mot de passe litéral FOCUS ou une variable contenant un mot de passe.
Lit des valeurs depuis un fichier externe. -READ peut accéder aux données sous une forme fixée ou libre.
La syntaxe est :
-READ ddname[,] [NOCLOSE] &name[.format.][,] ...
où :
est le nom logique du fichier tel que défini dans WebFOCUS en utilisant ALLOCATE ou DYNAM ALLOCATE. Un espace après le ddname dénote un fichier à format fixé alors que la virgule dénote un fichier délimité par virgule.
Indique que le ddname devrait être gardé ouvert même si un -RUN est exécuté. Le ddname est fermé lorsque la procédure est terminée ou lorsqu'une commande -CLOSE ou une commande -WRITE suivante est rencontrée.
est le nom de la variable. Vous pouvez spécifier plus d'une variable. L'utilisation d'une virgule pour séparer les variables est optionnel.
Si la liste des variables est plus longue qu'une seule ligne, finissez la première ligne avec une virgule et débutez la ligne qui suit avec un tiret suivi d'un espace (-) pour les fichiers délimités par virgule ou un tiret suivi d'une virgule puis d'un espace (-,) pour les fichiers à format fixe. Par exemple :
fichiers délimités par des virgules
-READ EXTFILE, &CITY,&CODE1,- &CODE2
Fichiers à format fixé
-READ EXTFILE &CITY.A8. &CODE1.A3.,-, &CODE2.A3
est le format de la variable. Il peut être alphanumérique (A) ou numérique (N) Notez que ce format doit être délimité avec des points. Le format est ignoré pour des fichiers délimités par des virgules.
-READFILE liens fichier Maître, puis lit les valeurs dans un fichier dans des variables basées sur les champs qui sont listés dans le fichier Maître.
-READFILE [app/]mastername
où :
Est le répertoire d'application dans lequel se trouve le fichier.
Est le nom du fichier maître à lire.
-REMOTE transmet au serveur l'exécution des commandes au sein des commandes -REMOTE BEGIN et -REMOTE END.
La syntaxe est :
-REMOTE BEGIN commands -REMOTE END
-REPEAT permet les boucles dans une procédure stockée.
Une boucle s'achève quand l'un des événements suivants survient :
La syntaxe est :
-REPEAT label n TIMES -REPEAT label WHILE condition; -REPEAT label FOR &variable [FROM fromval] [TO toval] [STEP s]
où :
Identifie le code qui doit être répété (la boucle). Annabelle peut inclure une autre boucle si le label pour la seconde boucle a un nom différent que le premier.
Spécifie le nombre d'exécutions de la boucle. La valeur de n peut être une variable locale, une variable globale, ou une constante. S'il s'agit d'une variable, elle n'est évaluée qu'une seule fois, vous n'avez donc pas à changer le nombre d'exécutions de la boucle. La boucle ne peut être arrêtée qu'en utilisant -QUIT ou -EXIT.
Spécifie la condition qui doit être vérifiée pour l'exécution de la boucle. Cette condition peut consister en n'importe quelle expression logique, qui peut être vrai ou faux. La boucle est exécutée si la condition est vraie (true).
Remarque : la condition doit obligatoirement être suivie par un point-virgule.
Est la variable qui est testée au démarrage de chaque exécution de la boucle et incrémentée de s à chaque exécution. Elle est comparée aux valeurs fromval et toval, si elles ont été fournies. La boucle est exécutée seulement si &variable est supérieure ou égale à fromval ou inférieure ou égale à toval.
Est une constante qui est comparée avec &variable au départ de chaque exécution de la boucle. La valeur par défaut est 1.
Est une valeur qui est comparée avec &variable au départ de chaque exécution de la boucle. La valeur par défaut est 1,000,000.
Est une constante utiliser pour incrémenté &variable à la fin de chaque exécution de la boucle. Elle peut être positive ou négative. L'incrément par défaut est 1.
Remarque : les paramètres FROM, TO, et STEP peuvent apparaître dans n'importe quel ordre.
-RUN provoque l'exécution immédiate de toutes les WebFOCUS commandes empilées.
À la suite de l'exécution, le traitement de la procédure stockée continue suivant -RUN.
-RUN est généralement utilisé pour effectuer les tâches suivantes :
La syntaxe est :
-RUN
-SET affecte une valeur littérale, ou une valeur calculée dans une expression logique ou arithmétique, à une variable.
Des guillemets simples autour d'une valeur littérale sont optionnels à moins qu'elle contienne un espace vide incorporé, une virgule, ou un signe égal, dans quel cas vous devrez obligatoirement les inclure.
La syntaxe est :
-SET &[&]name= {expression|value};
où :
est le nom de la variable.
est une expression valide. Des expressions peuvent occuper plusieurs lignes, il est donc conseillé de terminer la commande avec un point-virgule.
Est une valeur litérale ou une expression logique ou arithmétique affectée à la variable. Si la valeur littérale contient des virgules ou des espaces vides incorporés, vous devez entourer la valeur avec des guillemets simples.
Transmet des messages informatifs à l'utilisateur à l'affichage. N'importe quel nombre de commandes -TYPE peuvent se suivre les unes les autres, mais chacune d'elle doit commencer par -TYPE.
Les variables substituables peuvent être incorporées en texte. Les valeurs affectées en cours à chaque variable sont affichées dans leur position d'affectation dans le texte.
-TYPE1 et TYPE+ ne sont pas pris en charge par les types d'affichage d'IBM 3270.
TYPE est utilisé de plusieurs façons dans WebFOCUS pour envoyer des messages informatifs vers l'écran. Une commande TYPE est susceptible d'apparaître sur la même ligne en tant que label dans le Gestionnaire de dialogue. Dans MODIFY, TYPE est utilisé pour générer des messages au début et à la fin des processus, à des emplacements sélectionnés dans MATCH ou NOMATCH, NEXT ou NONEXT, et pour envoyer un message à la suite d'une condition de données INVALID.
La syntaxe est :
-TYPE[+] text -TYPE[0] text -TYPE[1] text
où :
Envoie le texte après l'émission d'une éjection de page.
Envoie le texte après le saut d'une ligne.
Envoie le texte mais n'ajoute pas de flux de ligne.
Est une chaîne de caractères qui peut être écrite dans une ligne.
-WRITE écrit des données dans un fichier séquentiel.
Si la commande continue sur un grand nombre de lignes, placez une virgule à la fin de la ligne et un tiret au début de chaque ligne subséquente.
À moins que vous ne spécifiez l'option NOCLOSE, afficher ouvert et fermé quand une procédure se termine avec -RUN, -, ou -QUIT.
Dans TABLE, WRITE est synonyme de SUM; la fonctionnalité est relativement différente de ‑WRITE.
La syntaxe est :
-WRITE ddname [NOCLOSE] text
où :
est le nom logique du fichier tel que défini dans WebFOCUS en utilisant ALLOCATE ou DYNAM ALLOCATE.
Indique que le fichier devrait être gardé ouvert même si un -RUN est rencontré. Le fichier est fermé lorsque la procédure est terminée ou lorsqu'une commande -CLOSE ou une commande -READ suivante est rencontrée.
Est n'importe quelle combinaison de variables et de texte. Pour écrire plus d'une ligne, terminez la première ligne avec une virgule (,) et commencer la ligne suivante avec un trait d'union suivi d'un espace (- ).
Cette rubrique vous fournit une méthode plus simple pour localiser les variables par défaut, les limites du système d'exploitation et de WebFOCUS, les tables de résumé, les règles générales, et les astuces associées.
Règles générales à suivre pour la création de procédures :
Règles générales concernant la fourniture de valeurs pour les variables :
EX SLRPT AREA=S, LOCATION='NY, NY'
Valeurs par défaut du système d'opération, limites et spécifications format.
WebFOCUS |