CICS - Controle de programas
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:
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:
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:
Formato do comando:
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. Aapó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.
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'.
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.
PGMIDERR: ocorre se o programa nao estiver cadastrado na PPT, ou se o programa estiver em ondição 'DISABLED', ou se o programa não estiver catalogado.
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.
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.