Nesta seção: |
É possível chamar uma função com o Dialogue Manager das seguintes formas:
O Dialogue Manager converte um argumento numérico para o formato de precisão dupla. Isto ocorre quando o valor do argumento for numérico, e não há impacto causado pelo formato esperado pela função. Isto significa que você deve ter cuidado ao fornecer argumentos para uma função no Dialogue Manager.
Se a função esperar uma string alfanumérica e a entrada for uma string numérica, resultados incorretos ocorrerão devido à conversão para o formato de precisão dupla com ponto flutuante. Para resolver este problema, anexe um caractere não numérico ao fim da string, mas não conte este caractere extra no comprimento do argumento.
As variáveis de data do Dialogue Manager, como &YYMD, retornam data de legado alfanuméricas, e não um formato de data (um desvio de uma data de base). Se uma função necessitar de um desvio de data em vez de uma data de legado, você deverá converter qualquer variável de data para um desvio de data (utilizando a função DATECVT) antes de utilizá-la como um argumento. Em seguida, é possível converter o resultado de volta para uma data de legado, novamente com a função DATECVT. Por exemplo:
-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')';
Como: |
É possível armazenar o resultado de uma função em uma variável com o comando -SET.
Uma variável do Dialogue Manager contém apenas dados alfanuméricos. Se a função retornar um valor numérico para uma variável do Dialogue Manager, o valor será truncado em um número inteiro e convertido para o formato alfanumérico antes de ser armazenado na variável.
-SET &variable = function(arg1, arg2[.LENGTH],..., 'format');
onde:
É a variável para a qual o resultado será atribuído.
É a função.
São os argumentos de função.
Retorna o comprimento da variável. Se uma função necessitar do comprimento de uma string de caracteres como um argumento de entrada, é possível solicitar a string de caracteres e, em seguida, utilizar o comprimento com o sufixo .LENGTH.
É o formato do resultado entre aspas simples. Não é possível especificar uma variável do Dialogue Manager para o argumento de saída a não ser que você utilize o sufixo .EVAL. No entanto, é possível especificar uma variável para um argumento de entrada.
AYMD adiciona 14 dias ao valor de &INDATE. A variável &INDATE é definida previamente no procedimento com o formato de ano-mês-dia com seis dígitos.
-SET &OUTDATE = AYMD(&INDATE, 14, 'I6');
O formato da data de saída é um inteiro de seis dígitos (I6). Emborda o formato indique que a saída é um número inteiro, ela é armazenada na variável &OUTDATE como uma string de caracteres. Por esta razão, se você exibir o valor de &OUTDATE, você não verá barras separando o ano, mês e dia.
Como: |
É possível criar ramificações com base no resultado de uma função chamando-a a partir do comando -IF do Dialogue Manager.
Se um comando que se ramifica se expande por mais de uma linha, continue-o na próxima colocando um traço (-) na primeira coluna.
-IF function(args) relation expression GOTO label1 [ELSE GOTO label2];
onde:
É a função.
São os argumentos.
É um operador que determina a relação entre a função e a expressão, por exemplo, EQ ou LE.
É um valor, expressão lógica ou função. Não coloque um número literal entre aspas simples a não ser que contenha uma vírgula ou espaço em branco integrado.
São os nomes definidos por usuários com até 12 caracteres. Não utilize espaços em branco integrado ou o nome de qualquer comando do Dialogue Manager, exceto -QUIT e -EXIT. Não utilize uma palavra que pode ser confundida com uma função ou uma operação lógica ou aritmética.
O texto do rótulo pode preceder ou seguir o critério -IF no procedimento.
Passa o controle para label2 quando há falha no teste -IF.
O resultado da função AYMD fornece uma condição para um test -IF. Uma de duas solicitações é executada, dependendo do resultado da função:
-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
O procedimento processa da seguinte forma:
Como: |
É possível chamar uma função que contém apenas argumentos alfanuméricos a partir de um comando -TSO RUN ou -MVS RUN do Dialogue Manager. Este tipo de função desempenha uma tarefa específica, mas normalmente não retorna um valor.
Se uma função necessita de um argumento no formato numérico, você deve convertê-la para o formato de precisão dupla com ponto flutuante utilizando a função ATODBL, pois, diferentemente do comando -SET, o comando RUN de um sistema operacional não converte automaticamente um argumento numérico para o formato de precisão dupla.
{-TSO|-MVS} RUN function, input1, input2, ... [,&output]
onde:
É o sistema operacional.
É o nome da função do
São os argumentos. Separa o nome da função e cada argumento com uma vírgula. Não coloque um literal alfanumérico entre aspas simples. Se uma função necessitar do comprimento de uma string de caracteres como um argumento, é possível solicitar a string de caracteres e, em seguida, utilizar o sufixo .LENGTH para testar o comprimento.
É uma variável do Dialogue Manager. Inclua este argumento caso a função retorne um valor. Caso contrário, omita-o. Se você especificar uma variável de saída, é necessário predefinir seu comprimento utilizando um comando -SET.
Por exemplo, se a função retornar um valor com 8 bytes, defina a variável com oito caracteres entre aspas simples antes da chamada da função:
-SET &output = '12345678';
O exemplo a seguir chama a função CHGDAT a partir de um comando -MVS RUN:
-SET &RESULT = '12345678901234567'; -MVS RUN CHGDAT, YYMD., MXDYY, &YYMD, &RESULT -TYPE &RESULT
Information Builders |