Cómo llamar a una función desde un comando de Dialogue Manager

En esta sección:

Puede llamar a una función con Dialogue Manager de las siguientes formas:

Dialogue Manager convierte los argumentos numéricos al formato de doble precisión. Esto sucede cuando el valor del argumento es numérico; no se ve afectado por el formato esperado por la función. Esto indica que debe tener cuidado a la hora de proporcionar argumentos para una función en Dialogue Manager.

Si la función espera una cadena alfanumérica y la entrada es una cadena numérica, los resultados serán incorrectos debido a la conversión en punto flotante de doble precisión. Para resolver este problema, añada un carácter que no sea numérico al final de la cadena, pero no lo cuente como parte de la longitud del argumento.

Variables de fecha de Dialogue Manager, como las fechas legacy alfanuméricas de devolución &YYMD, no un formato de fecha (un desplazamiento de la fecha base). Si la función requiere un desplazamiento de fecha distinto a la fecha legacy, debe convertir cualquier variable de fecha en un desplazamiento de fecha (con la función DATECVT), antes de usarla como argumento. A continuación, puede reconvertir el resultado en una fecha legacy, mediante la función DATECVT. Por ejemplo:

-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')';

Principio de página

x
Cómo asignar el resultado de una función a una variable

Cómo:

Puede almacenar el resultado de una función en una variable con el comando -SET.

Las variables de Dialogue Manager sólo contienen datos alfanuméricos. Si una función devuelve un valor numérico a una variable de Dialogue Manager, el valor queda truncado en un número entero y se convierte al formato alfanumérico, antes de que se almacene en la variable.



x
Sintaxis: Cómo Asignar el resultado de una función a una variable
-SET &variable = function(arg1, arg2[.LENGTH],..., 'format');

donde:

variable

Es la variable a que se va asignar el resultado.

function

Es la función.

arg1, arg2

Son los argumentos de la función.

.LENGTH

Devuelve la longitud de la variable. Si la función requiere la longitud de la cadena de caracteres como argumento de entrada, puede solicitar la cadena y determinar su longitud con el sufijo .LENGTH.

format

Es el formato del resultado, entre comillas simples. No se puede especificar una variable de Dialogue Manager para el argumento de salida, a menos que utilice el sufijo .EVAL; sin embargo, sí puede especificar una variable para un argumento de entrada.



Ejemplo: Cómo llamar a una función desde un comando -SET

AYMD añade 14 días al valor de &INDATE. La variable &INDATE se ha establecido previamente en el procedimiento, con el formato año-mes-día de seis dígitos.

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

El formato de la fecha de salida es un número entero de seis dígitos (I6). Aunque el formato de la fecha indica que la salida es un número entero, se almacena en la variable &OUTDATE como una cadena de caracteres. Por este motivo, si muestra el valor de &OUTDATE, no podrá ver las barras diagonales que separan el año, el mes y el día.


Principio de página

x
Cómo establecer una bifurcación basada en el resultado de una función

Cómo:

Puede establecer una bifurcación en base al resultado de una función, mediante una llamada a una función desde el comando -IF de Dialogue Manager.

Si el comando de bifurcación abarca más de una línea, continúe por la línea siguiente colocando un guión (-) en la primera columna.



x
Sintaxis: Cómo Establecer una bifurcación basada en el resultado de una función
-IF function(args) relation expression GOTO label1 [ELSE GOTO label2];

donde:

function

Es la función.

args

Son los argumentos.

relation

Es un operador que determina la relación entre la función y la expresión; por ejemplo, EQ o LE.

expression

Es un valor, expresión lógica o función. No coloque un literal entre comillas simples a menos que contenga una coma o un espacio en blanco insertado.

label1, label2

Los nombres definidos por el usuario, con una longitud de hasta 12 caracteres. No use espacios en blanco insertados ni el nombre de otro comando de Dialogue Manager, excepto -QUIT o -EXIT. No use una palabra que pueda confundirse con una función o una operación aritmética o lógica.

El texto de label puede estar situado antes o después de los criterios -IF, en el procedimiento.

ELSE GOTO

Pasa el control a label2 cuando falla la prueba de -IF.



Ejemplo: Cómo establecer una bifurcación basada en el resultado de la función

El resultado de la función AYMD proporciona una condición para una prueba de -IF. Se ejecuta una de dos solicitudes, dependiendo del resultado de la función:

   -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

El procedimiento se procesa del siguiente modo:

  1. Si introduce un 0, el control pasa a -EXIT, que termina la ejecución.
  2. La función DOWK obtiene el día de la semana para la fecha de inicio.
  3. El comando -TYPE muestra el día de la semana y la fecha de inicio del proyecto.
  4. La función AYMD calcula la fecha en que termina el proyecto. Si esta fecha es anterior a Enero 1, 1996, el comando -IF establece una bifurcación en la etiqueta EARLY.
  5. Si el proyecto termina en o después de Enero 1, 1996, el comando TYPE muestra las palabras LONG PROJECT y cierra el programa.
  6. Si el procedimiento se bifurca en la etiqueta EARLY, el comando TYPE muestra las palabras SHORT PROJECT y termina la operación.

Principio de página

x
Cómo llamar a una función desde un comando RUN de sistema operativo

Cómo:

Puede llamar a una función que sólo contenga argumentos alfanuméricos de un comando -TSO RUN o -MVS RUN de Dialogue Manager. Aunque este tipo de función realiza una tarea específica, no suele devolver un valor.

Si una función requiere un argumento en formato numérico, primero debe convertirla al formato de punto flotante de doble precisión, por medio de la función ATODBL, ya que, a diferencia del comando -SET, el comando RUN de sistema operativo no convierte automáticamente los argumentos numéricos a la doble precisión.



x
Sintaxis: Cómo Llamar a una función desde un comando -RUN de sistema operativo
{-TSO|-MVS} RUN function, input1, input2, ... [,&output]

donde:

-TSO|-MVS

Es el sistema operativo.

function

Es el nombre de la función.

input1, input2,...

Son los argumentos. Separe el nombre de la función de cada argumento, mediante una coma. No coloque los literales alfanuméricos entre comillas simples. Si la función requiere la longitud de la cadena de caracteres como argumento, puede solicitar la cadena y después probar su longitud con el sufijo .LENGTH.

&output

Es una variable de Dialogue Manager. Incluya este argumento si la función devuelve un valor; de lo contrario, omítalo. Si especifica una variable de salida, debe definir previamente su longitud, mediante un comando -SET.

Por ejemplo, si la función devuelve un valor de ocho bytes de longitud, defina la variable con ocho caracteres, entre comillas simples, antes de la llamada de función:

-SET &output = '12345678';


Ejemplo: Cómo llamar a una función desde un comando -RUN de sistema operativo

El siguiente ejemplo llama a la función CHGDAT desde un comando -MVS RUN:

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

WebFOCUS