|
Quando desenvolve-se programas de aplicação em COMMAND LEVEL, normalmente necessitamos de transferir o
controle para outro programa de aplicação.
Este servico é feito pelo PROGRAM CONTROL PROGRAM ( PCP ), cuja principal finalidade é executar as
funções de gerenciamento dos programas de aplicação, dando acesso aos programas, mapas e tabelas de aplicação.
O PCP executa as seguintes funções:
- localização dos programas de aplicação
- carga de uma tabela, programa de aplicação ou mapa
- liberação de uma tabela ou programa de aplicação que foi anteriormente carregado
- carga do programa de aplicação, se necessário, para execução
- transferencia de controle do CICS para o programa de aplicação e tambem entre os programas de aplicação
- passagem de dados entre programas de aplicação
- término do programa de aplicação
O PCP contém a PROCESSING PROGRAM TABLE ( PPT ), que é o local onde deve ser cadastrado todo programa de
aplicação para que o mesmo possa ser executado pelo CICS.
A PPT Contém as seguintes informações:
- nome do programa
- localização na biblioteca
- linguagem utilizada
- contador de uso do programa
O PCP tambem contem a PROGRAM CONTROL TABLE ( PCT ), que é a tabela utilizada para associar o programa ao
nome da tarefa que será utilizada para invocar a sua execução.
A PCT contém as seguintes informações:
- nome do programa
- nome da task que esta' associada ao programa
Comando LINK
Formato do comando:
| EXEC CICS LINK |
Explicação do argumento |
|
PROGRAM ('NOME PROGRAMA')
|
Especifica o nome do programa para o qual será passado o controle
|
|
COMMAREA (WORK-COMMAREA)
|
Especifica a área que contém os dados que serão passados ao programa chamado.
|
|
LENGTH (+20)
|
Especifica o tamanho da área em que estão os dados que estão sendo passados ao programa chamado.
Deve, obrigatoriamente ser usado, quando for usado 'COMMAREA'.
|
Este comando é utilizado para passar o controle de um programa de aplicação para outro. o programa
chamado é colocado hierarquicamente em nível inferior ao que o chamou, sendo que o programa que o chamou
continua na memória e logo apos o término da execuço do programa chamado, o programa que o chamou recebe
o controle e continua a sua execução com a instrução seguinte ao comando 'LINK'.
Exemplo do comando:
EXEC CICS LINK PROGRAM ('P86851')
COMMAREA(WORK-COMMAREA)
LENGTH (+51)
END-EXEC.
Explicação do exemplo:
O controle da execução será passado ao programa P86851, os dados contidos em WORK-COMMAREA serão passados
ao programa com tamanho de 51 bytes. após a execução do programa P86851 o controle volta e a execução
continua com a proxima instrução.
Condição de exceção:
PGMIDERR: ocorre se o programa nao estiver cadastrado na PPT, ou se o programa estiver em
condição 'DISABLED', ou se o programa nao estiver catalogado.
Comando XCTL
Formato do comando:
| EXEC CICS XCTL |
Explicação do argumento |
|
PROGRAM ('nome programa')
|
Especifica o nome do programa para o qual será passado o controle.
|
|
COMMAREA (WORK-COMMAREA)
|
Especifica a área que contém os dados que serão passados ao programa chamado.
|
|
LENGTH (+20)
|
Especifica o tamanho da área em que estão os dados que estão sendo passados ao programa chamado.
Deve, obrigatoriamente ser usado, quando for usado 'COMMAREA'.
|
Este comando é utilizado para passar o controle de um programa de aplicaçao para outro. o programa chamado
é colocado no mesmo nível hierárquico do programa que o chamou, sendo que o programa que o chamou nao continua
na memória pois sua área é liberada para o CICS, nao havendo, portanto, possibilidade de retorno apenas com
o término da execução do programa chamado. Caso haja a necessidade de retorno ao programa chamador deve-se
usar o comando 'XCTL'.
Exemplo do comando:
EXEC CICS XCTL PROGRAM ('P86851')
COMMAREA(WORK-COMMAREA)
LENGTH (+51)
END-EXEC.
Explicação do exemplo:
O controle da execução será passado ao programa P86851, os dados contidos em WORK-COMMAREA serão passados
ao programa com tamanho de 51 bytes. Após a execução do programa P86851 o controle nao volta e a execucão
comecará na primeira instrução do programa, se o programa chamado emitir um comando chamando este programa.
Condição de exceção:
PGMIDERR: ocorre se o programa nao estiver cadastrado na PPT, ou se o programa estiver em condição
'DISABLED', ou se o programa não estiver catalogado.
Comando RETURN
Formato do comando:
| EXEC CICS RETURN |
Explicação do argumento |
|
TRANSID ('TRANSACAO')
|
Especifica o nome da transação para a qual será passado o controle e deve estar definido na PCT.
|
|
COMMAREA (WORK-COMMAREA)
|
Especifica a área que contém os dados que serão passados ao programa chamado.
|
|
LENGTH (+20)
|
Especifica o tamanho da área em que estão os dados que estão sendo passados ao programa chamado.
Deve, obrigatoriamente ser usado, quando for usado 'COMMAREA'.
|
Este comando é utilizado para passar o controle de um programa de aplicação para outro ou de um programa de
aplicação para o CICS.
A emissão do comando acima sem nenhum argumento faz com que o controle seja passado ao programa de nível
hierárquico superior que pode ser um programa de aplicação ou o proprio CICAS.
Este comando é o mais utilizado em virtude da otimização que ele oferece pois a tarefa ( TASK ) só estará
ativa quando o operador acionar alguma tecla de função programada ( PF ). Enquanto o operador não acionar
alguma 'PF' a tarefa fica 'suspensa'. Isto é possível pois o cics possui a terminal control table ( TCT )
que identifica a tarefa que está associada ao terminal. A 'TCT' será vista com mais detalhes adiante.
EXEC CICS RETURN TRANSID ('P851')
COMMAREA(WORK-COMMAREA)
LENGTH (+51)
END-EXEC.
Explicacão do exemplo:
O controle da execução será passado a transaÕo P851, que deve ter sido definido na 'PCT', os dados contidos em
WORK-COMMAREA serão passados a transação com tamanho de 51 bytes. apos a execução da transação 'P851', o
controle não volta e a execução começará na primeira instrucao do programa, se o programa chamado emitir um
comando chamando este programa.
Condição de exceção:
INVREQ: ocorre se a opãoo 'TRANSID' for utilizada para passar o controle para uma TASK que é executada sem
estar associada a um terminal ( TASK ASSINCRONA ).
Observação:
Quando usa-se a opção 'TRANSID', o programa estara imediatamente debaixo do CICS.
Área de comunicação - COMMAREA
Se um programa de aplicção receber o controle de um outro programa de aplicação através dos comandos 'LINK',
'XCTL' ou 'RETURN' com a opção COMMAREA, a área de comunicação indicada estará disponivel para o programa
chamado no inicio de sua execução. O tamanho da área de comunicação estará disponível no campo eibcalen.
Para receber e transmitir dados via COMMAREA, deve-se definir na linkage section a DFHCOMMAREA em NIVEL 01
com o tamanho da maior area de dados que o programa ira' receber.
Caso a 'DFHCOMMAREA' seja maior que o tamanho da área recebida, deve-se tomar cuidado pois para o CICS o
tamanho da área de comunicação é o tamanho especificado no EIBCALEN.
Caso a 'DFHCOMMAREA' seja menor, ocorrerá truncagem de dados.
É aconselhavel que não se trabalhe diretamente com a area de comunicação, ou seja, deve-se mover a 'DFHCOMMAREA'
para uma área de WORKING e trabalhar com essa area.
|