Appeler une fonction à partir d'une commande Dialog Manager

Dans cette section :

Vous pouvez invoquer une fonction avec le gestionnaire de dialogue des manières suivantes :

Le gestionnaire de dialogue convertit un argument numérique au format double-précision. Ceci se produit quand la valeur de l'argument est numérique ; et n'est pas affecté par le format requis par la fonction. Ceci implique que vous devez être très prudents quand vous fournissez des arguments à une fonction dans le gestionnaire de dialogue.

Si la fonction attend une chaîne alphanumérique et que l'entrée est un champ numérique, des résultats correctement survenir à cause de la conversion virgule flottante en double précision. Pour résoudre ce problème, ajoutez un caractère non numérique à la fin de la chaîne, mais ne comptez pas ce caractère supplémentaire dans la longueur de l'argument.

Les variables dates du gestionnaire de dialogue telles que &YYMD retourne des dates existantes alphanumériques, pas un format date (un format dérivé d'une date de base). Si une fonction requière une date dérivée plutôt qu'une date existante, vous devrez convertir toute variable date en cette dérivation de date (via la fonction DATECVT) avant de pouvoir l'utiliser en tant qu'argument. Vous pourrez alors reconvertir le résultat au format de date existant, et ce avec la même fonction DATECVT. Par exemple :

-SET &TODAY_OFFSET=DATECVT(&YYMD , 'I8YYMD' , 'YYMD');
-SET &BEG_CUR_YR=DATEMOV(&TODAY_OFFSET.EVAL , 'BOY');
-SET &CLOSE_DTBOY=DATECVT(&BEG_CUR_YR.EVAL , 'YYMD' , 'I8YYMD')';

Haut de page

x
Affecter le résultat d'une fonction à une variable

Comment :

Vous pouvez stocker le résultat d'une fonction dans une variable avec la commande -SET.

Une variable du gestionnaire de dialogue ne contient que des dates alphanumériques. Si une fonction 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.



x
Syntaxe : Affecter le résultat d'une fonction à une variable
-SET &variable = function(arg1, arg2[.LENGTH],..., 'format');

où :

variable

est la variable à laquelle le résultat sera affecté.

function

est la fonction.

arg1, arg2

sont les arguments de la fonction.

.LENGTH

retourne la longueur de la variable. Si une fonction requiert la longueur d'une chaîne de caractères en tant qu'argument en entrée, vous pouvez obtenir la chaîne de caractères et en déterminer la longueur avec le suffixe .LENGTH.

format

est le format de date entouré par des guillemets simples. Vous ne pouvez pas spécifier une variable du gestionnaire de dialogue pour l'argument de sortie à moins d'utiliser le suffixe .EVAL ; toutefois, vous pouvez spécifier une variable pour un argument en entrée.



Exemple : Invoquer une fonction dans une commande -SET

AYMD ajoute 14 jours à la valeur de &INDATE. La variable &INDATE est renseignée préalablement dans la procédure au format sur six chiffres année-mois-jour.

-SET &OUTDATE = AYMD(&INDATE, 14, 'I6');

Le format de date de sortie est en entier à six chiffres (I6). Bien que le format indique que la sortie soit un entier, il est stocké dans la variable &OUDATE en tant que chaîne de caractères. Pour cette raison, si vous affichez la valeur de &OUDATE, vous ne verrez pas les barres obliques qui séparent l'année, le mois, et le jour.


Haut de page

x
Créer une branche en fonction du le résultat d'une fonction

Comment :

Vous pouvez créer une branche en fonction du le résultat d'une fonction en invoquant celle-ci avec une commande -IF du gestionnaire de dialogue.

Si une commande de création de branche génère plus d'une ligne, continuez à la prochaine ligne en plaçant un tiret (-) dans la première colonne.



x
Syntaxe : Créer une branche en fonction du résultat d'une fonction
-IF function(args) relation expression GOTO label1 [ELSE GOTO label2];

où :

function

est la fonction.

args

sont les arguments.

relation

est un opérateur qui détermine la relation entre la fonction et l'expression, par exemple, EQ et LE.

expression

est une valeur, expression logique, ou fonction. Ne placez pas un littéral entre guillemets simples à moins qu'il ne contienne une virgule ou un espace inséré.

label1, label2

sont des noms définis par utilisateur d'une longueur allant jusqu'à 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 de mots qui puissent être confondus avec une fonction, ou une opération logique ou arithmétique.

Le texte label peut précéder ou suivre le critère -IF dans la procédure.

ELSE GOTO

Passe le contrôle sur label2 quand le test -IF échoue.



Exemple : Créer une branche en fonction du résultat d'une fonction.

Le résultat de la fonction AYMD fournit une condition pour un test -IF. L'une des requêtes est exécutée, en fonction du résultat de la fonction :

   -LOOP 
1. -IF &INDATE EQ 0 GOTO EXIT; 
2. -SET &WEEKDAY = DOWK(&INDATE, 'A4'); 
3. -TYPE START DATE IS &WEEKDAY &INDATE 
4. -IF AYMD(&INDATE, &DAYS, 'I6YMD') LT 960101 GOTO EARLY; 
5. -TYPE LONG PROJECT
   -*EX LONGPROJ
   -RUN
   -GOTO EXIT 
6. -EARLY
   -TYPE SHORT PROJECT
   -*EX SHRTPROJ
   -RUN
   -EXIT

La procédure est la suivante :

  1. Si vous avez entré un 0, elle passe le contrôle sur -EXIT, ce qui arrête l'exécution.
  2. La fonction DOWK obtient le jour de la semaine pour la date de début.
  3. La commande-TYPE affiche le jour de la semaine et la date de début du projet.
  4. La fonction AYMD calcule la date à laquelle le projet sera terminé. Si la date est avant 1er Janvier 1996, la commande-IF crée une branche sur le label EARLY.
  5. Si le projet sera terminé le 1er janvier 1996 ou après, la commande TYPE affiche les mots LONG PROJECT puis quitte le programme.
  6. Si la procédure crée une branche sur le label EARLY, la commande TYPE affiche les mots SHORT PROJECT et quitte le programme.

Haut de page

x
Invoquer une fonction depuis une commande RUN du système d'exploitation.

Comment :

Vous pouvez invoquer une fonction ne contenant que des arguments alphanumériques depuis les commandes du gestionnaire de dialogue -TSO RUN ou -MVS RUN. Ce type de fonction effectue une tâche spécifique mais ne renvoie généralement aucune valeur.

Si une fonction requiert un argument au format numérique, vous devez d'abord le convertir en un format virgule flottante en double précision en utilisant la fonction ATODBL car, à la différence de la commande-SET, une commande RUN du système d'exploitation ne convertit pas automatiquement un argument numérique au format double-précision.



x
Syntaxe : Invoquer une fonction depuis une commande RUN du système d'exploitation.
{-TSO|-MVS} RUN function, input1, input2, ... [,&output]

où :

-TSO|-MVS

est le système d'exploitation.

function

est le nom de la fonction

input1, input2,...

sont les arguments. Séparez le nom de la fonction et chacun des arguments avec une virgule. Ne mettez pas un littéral alphanumérique entre des guillemets simples. Si une fonction requiert la longueur d'une chaîne de caractères en tant qu'argument, vous pouvez obtenir la chaîne de caractères puis en tester la longueur avec le suffixe .LENGTH.

&output

est une variable du gestionnaire de dialogue. Incluez cet argument si la fonction retourne une valeur ; sinon, omettez-le. Si vous spécifiez une variable de sortie, vous devez en prédéfinir la longueur en utilisant une commande -SET.

Par exemple, si la fonction retourne une valeur ayant une longueur de 8 octets, définissez la variable avec huit caractères entre guillemets simples avant d'invoquer la fonction :

-SET &output = '12345678';


Exemple : Invoquer une fonction depuis une commande -RUN du système d'exploitation.

L'exemple suivant invoque la fonction CHGDAT depuis une commande -MVS RUN :

-SET &RESULT = '12345678901234567';
-MVS RUN CHGDAT, YYMD., MXDYY, &YYMD, &RESULT
-TYPE &RESULT

Information Builders