CICS - Controle de programas


Volta a página anterior

Volta ao Menu Principal


Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

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:

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

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.

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.

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.

Exemplo do comando:

    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.