Como Chamar uma Função a partir de um Comando do Dialogue Manager

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

Topo da página

x
Como Atribuir o Resultado de uma Função a uma Variável

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.



x
Sintaxe: Como Atribuir o Resultado de uma Função a uma Variável
-SET &variable = function(arg1, arg2[.LENGTH],..., 'format');

onde:

Variável

É a variável para a qual o resultado será atribuído.

Função

É a função.

arg1, arg2

São os argumentos de função.

.LENGTH

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.

formato

É 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.



Exemplo: Como Chamar uma Função a partir de um Comando -SET

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.


Topo da página

x
Como Criar Ramificações com Base no Resultado de uma Função

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.



x
Sintaxe: Como Criar Ramificações com Base no Resultado de uma Função
-IF function(args) relation expression GOTO label1 [ELSE GOTO label2];

onde:

Função

É a função.

args

São os argumentos.

relação

É um operador que determina a relação entre a função e a expressão, por exemplo, EQ ou LE.

expressão

É 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.

label1, label2

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.

ELSE GOTO

Passa o controle para label2 quando há falha no teste -IF.



Exemplo: Como Ramificar com Base no Resultado da Função

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:

  1. Se você inserir um 0, ele passará o controle para -EXIT, que terminará a execução.
  2. A função DOWK obtém o dia da semana para a data de início.
  3. O comando -TYPE exibe o dia da semana e a data de início do projeto.
  4. A função AYMD calcula a data que o projeto irá terminar. Se esta data for anterior a 1º de janeiro de 1996, o comando -IF se ramificará para o rótulo EARLY.
  5. Se o projeto estiver agendado para ser concluído no dia 1º de janeiro de 1996 ou numa data posterior, o comando TYPE irá exibir as palavras LONG PROJECT and será fechado.
  6. Se o procedimento se ramificar para o rótulo EARLY, o comando TYPE exibirá as palavras SHORT PROJECT e será fechado.

Topo da página

x
Como Chamar uma Função a partir de um Comando RUN do Sistema Operacional

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.



x
Sintaxe: Como Chamar uma Função a partir de um Comando -RUN do Sistema Operacional
{-TSO|-MVS} RUN function, input1, input2, ... [,&output]

onde:

-TSO|-MVS

É o sistema operacional.

Função

É o nome da função do

input1, input2,...

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.

&saída

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


Exemplo: Como Chamar uma Função a partir de um Comando -RUN do Sistema Operacional

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