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')';
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.
-SET &variable = function(arg1, arg2[.LENGTH],..., 'format');
donde:
Es la variable a que se va asignar el resultado.
Es la función.
Son los argumentos de la función.
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.
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.
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.
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.
-IF function(args) relation expression GOTO label1 [ELSE GOTO label2];
donde:
Es la función.
Son los argumentos.
Es un operador que determina la relación entre la función y la expresión; por ejemplo, EQ o LE.
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.
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.
Pasa el control a label2 cuando falla la prueba de -IF.
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:
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.
{-TSO|-MVS} RUN function, input1, input2, ... [,&output]
donde:
Es el sistema operativo.
Es el nombre de la función.
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.
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';
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 |