Auxílios do VisualAge Generator

Instrução DXFR

DXFR transfere o controle para outro programa ou programa. O programa atual termina e quaisquer arquivos abertos são fechados.

>>-DXFR----+-programa-+---+-----------+---+----------+--;------><
           '-EZEAPP---'   '-registro--'   '-(NONCSP--'
 

Atributo Descrição
programa Nome do aplicação ou programa a ser iniciado.
EZEAPP Palavra de função especial usada para especificar dinamicamente o nome do programa em instrução DXFR. Essa função especial permite alterar o nome do programa transferido-para dentro de um programa.
registro Nome de qualquer registro usado no programa atual. As informações do registro são usadas para inicializar o registro do armazenamento de trabalho do programa transferido-para. Os dados do registro têm que ser compatíveis com o registro esperado pelo programa transferido-para.

O armazenamento de trabalho compatível tem que ser definido para o programa que é o objeto da transferência. Se for especificado um registro de armazenamento de trabalho em DXFR, só os dados da estrutura serão transferidos. Nenhum item de dados de nível 77 será transferido.

Se o armazenamento de trabalho receptor não for do mesmo tamanho que o transferido, será usado o tamanho menor para a transferência. Se a área receptora for maior, o registro do armazenamento de trabalho principal do programa transferido será iniciado com base no tipo de dados (espaços em branco para dados de caracteres e zero para dados numéricos). A inicialização é feita antes de o registro transferido que porventura exista ser levado para o registro de armazenamento de trabalho primário.

Se a definição do registro especificado na instrução DXFR não for compatível com a definição do registro do armazenamento de trabalho primário do programa transferido-para, poderão ocorrer nele resultados imprevisíveis, entre os quais encerramento anormal e travamento da exibição. Eis algumas condições que podem causar incompatibilidades entre os dois registros:

  • Os registros diferem no comprimento
  • Os limites de campo dos dois registros não são iguais
  • Os tipos de dados são diferentes (por exemplo: o campo é definido como caractere no registro usado na instrução DXFR, mas o programa transferido-para espera que o campo seja de dados DBCS).
NONCSP Indica que o programa de destino é não-VisualAge Generator. A opção pode ser especificada na instrução DXFR ou na tabela de ligação numa instrução :DXFRLINK. A opção é necessária quando se gera o programa para ambiente COBOL. Transferências a programas VisualAge Generator e não-VisualAge Generator são geradas de modo diferente nesses ambientes.

Se a opção NONCSP for especificada, a implementação de DXFR dependerá do ambiente. Veja mais informações em "Ambientes de Destino para DXFR".

Considerações sobre Definição para DXFR

Pode-se especificar tanto o nome do programa quanto a palavra de função especial EZEAPP. EZEAPP permite mudar dinamicamente o nome do programa transferido-para num programa.

DXFR é designado para transferir o controle para outro programa, mas ficando na mesma transação CICS ou IMS/VS. No caso de ambientes que não suportam transações, DXFR fornece função semelhante dentro da mesma unidade de execução.

DXFR não pode ser usada a partir de programa chamado. Não é possível transferir usando DXFR para uma transação principal que tem um primeiro mapa definido. Se a transferência de controle for para outro programa, terá que ser definida como transação principal ou batch principal.

Considerações sobre geração de DXFR

A entrada da tabela de ligação que especifica ligação estática para ambientes de host não-CICS MVS e o programa de destino são um programas gerados que chamam programas PL/I e os programas que não estão usando LE/370.

Ambientes de Destino para DXFR

Ambiente Considerações de Compatibilidade
VM CMS A transferência para programas não-VisualAge Generator é feita por meio da macro OS XCTL. O registro é passado como parâmetro. Para DXFRs de programas não-VisualAge Generator, o tamanho máximo do registro é 32757.

Consulte o documento VisualAge Generator Client/Server Communications Guide para saber mais sobre transferência do controle do programa.

As seguintes restrições aplicam-se a quem usa programas gerados como segmentos salvos:

  • Se o segmento salvo for um programa inicial, não será possível transferir com instrução DXFR que usa XCTL ou XFER para outros programas
  • Não se pode transferir com instrução DXFR que usa XCTL ou XFER para programa que é carregado como segmento salvo
VM batch Igual a VM CMS.
CICS para MVS/ESA DXFR é implementada por meio do comando XCTL CICS, tanto para programas VisualAge Generator quanto não-VisualAge Generator. O registro é passado por meio da opção COMMAREA de XCTL. Os dados são iniciados no primeiro byte da área comum. O tamanho máximo do registro é 32763.

Apenas em ambientes CICS ocorre commit em DXFR quando um PSB é programado para o horário do DXFR. A opção de geração /NOSYNCDXFR pode ser usada para evitar que ocorra commit num CICS quando o programa que está sendo transferido e o transferido-para usam a mesma PSB (têm o mesmo nome de parte PSB especificado na definição do programa). Consulte a seção sobre opções de geração no documento VisualAge Generator Generation Guide para conhecer detalhes.

Consulte o documento VisualAge Generator Client/Server Communications Guide para saber mais sobre transferência do controle do programa.

MVS/TSO A transferência para programas não-VisualAge Generator é feita por meio da macro OS XCTL. O registro e EZEDLPSB (se tiver sido usado um PSB no programa que está sendo transferido) são passados como parâmetros. No caso de DXFRs para programas não-VisualAge Generator, o tamanho máximo do registro é 32757.

Todos os programas da mesma unidade de execução têm que compartilhar o mesmo DL/I PSB. A definição da parte PSB pode variar se EZEDLPCB for usada para passar informações na CALL.

Consulte o documento VisualAge Generator Client/Server Communications Guide para saber mais sobre transferência do controle do programa.

MVS batch Chamadas DL/I e arquivos GSAM só são suportados no programa transferido-para se havia PSB especificado para o programa que está sendo transferido e ele faz no mínimo o seguinte:
  • Usar CSPTDLI
  • Associa pelo menos um arquivo ou EZEPRINT a GSAM
  • Usa EZEDLPSB ou EZEDLPCB em qualquer instrução do programa
  • Tiver bancos de dados DL/I diferentes do ELAWORK ou ELAMSG na definição PSB

Do contrário, é como MVS/TSO.

IMS/VS É suportada transferência usando DXFR para um programa não-VisualAge Generator. A opção NONCSP é ignorada. DXFRLINK com LINKTYPE=NONCSP na tabela de ligação não é suportado.

Programas que rodam sob a mesma transação usando DXFR têm que compartilhar o mesmo PSB, têm que ter o mesmo modo de execução e têm que usar a área de rascunho (SPA) do IMS da mesma maneira. Jamais ocorre ponto de commit em DXFR. O uso de SPA é especificado como opção de geração.

Se o programa inicial da transação for um programa batch principal, DXFR para programa de transação principal não será suportado. Se o programa inicial for transação principal, DXFR para programa de batch principal que acessa o PCB da E/S como arquivo serial não será suportado.

IMS BMP Igual a MVS/TSO.
CICS para VSE Igual a CICS para MVS/ESA.
VSE batch DXFR não é suportado para programas não-VisualAge Generator.

Arquivos DL/I CALL só são suportados no programa transferido-para se havia PSB especificado para o programa que está sendo transferido e ele faz no mínimo o seguinte:

  • Usa CSPTDLI.
  • Usa EZEDLPSB ou EZEDLPCB em qualquer instrução do programa
  • Ele tem bancos de dados DL/I que não são ELAWORK ou ELAMSG na definição do PSB

Todos os programas da mesma unidade de execução têm que compartilhar o mesmo PSB.

Consulte o documento VisualAge Generator Client/Server Communications Guide para saber mais sobre transferência do controle do programa.

CICS para OS/2 Igual a CICS para MVS/ESA.
OS/400 O controle é passado diretamente ao programa para ser iniciado por meio da interface OS/400 XCTL. O armazenamento de trabalho é passado como parâmetro usando uma lista padrão de argumentos do sistema. O programa que emite DXFR é removido da pilha de chamadas do programa e não retoma o controle quando o programa iniciado termina.
OS/2 (GUI) Não suportado.
Windows (GUI) Não suportado.
OS/2 (C++) A API DosExecPgm é usada para transferir controle para um programa não-VisualAge Generator. O registro é passado por meio de um bloco de transferência numa memória compartilhada. Consulte o documento VisualAge Generator Client/Server Communications Guide para saber mais sobre como transferir o controle de um programa VisualAge Generator para um programa não-VisualAge Generator.
AIX As chamadas do sistema exec() e fork() são usadas na transferência de controle para um programa não-VisualAge Generator. Consulte o documento VisualAge Generator Client/Server Communications Guide para saber mais sobre como transferir o controle de um programa VisualAge Generator para um programa não-VisualAge Generator.
HP-UX As chamadas do sistema exec() e fork() são usadas na transferência de controle para um programa não-VisualAge Generator. Consulte o documento VisualAge Generator Client/Server Communications Guide para saber mais sobre como transferir o controle de um programa VisualAge Generator para um programa não-VisualAge Generator.
CICS for AIX DXFR é implementado por meio do comando XCTL CICS. O registro é passado por meio da opção COMMAREA de XCTL. Os dados começam no primeiro byte de COMMAREA. O tamanho máximo do registro é 32763.
Windows NT Igual a OS/2 (C++).
CICS para Windows NT Igual a CICS for AIX.
Dispositivo de Teste Nenhum.

Exemplos para DXFR

Para transferir o controle e passar o registro MYRECD para o programa chamado NEWAPP1, digite:

   DXFR NEWAPP1 MYRECD;

Para transferir o controle para outro programa chamado APPL2, digite:

   DXFR APPL2;

Para usar EZEAPP para especificar um nome de variável, digite:

   MOVE 'APPL2' TO EZEAPP;
   DXFR EZEAPP;

Para passar um armazenamento de trabalho para um programa não-VisualAge Generator, digite:

   MOVE 'APPL3' to EZEAPP;
   DXFR EZEAPP COMMON_DATA_RECORD (NONCSP;


[ Início da Página | Página Anterior | Próxima Página | Índice ]