CICS - Transmissão de dados entre a tarefa e o terminal


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 - Transmissão de dados entre a tarefa e o terminal

A transmissão de dados entre a tarefa e o terminal é feita pelo TERMINAL CONTROL PROGRAM ( TCP ).

A principal finalidade do TCP é a de efetuar a comunicação dos programas de aplicação com os terminais.
Enquanto não for terminada a tarefa, a mesma fica 'ATACHADA' com o terminal e sempre que aquele terminal for 'ACIONADO' será verificado se há alguma transação 'ATACHADA' e se houver, qual a transação que está atachada ao mesmo.

Suas principais funções sao:

  • prover a inserção e retirada dos caracteres de controle de transmissão ( protocolo )
  • requisitar o inicio de uma nova tarefa
  • transferir informações do programa para o terminal através de interface com o BMS
  • transferir informações do terminal para o programa tambem através de interface com o BMS

O TCP possui a TERMINAL CONTROL TABLE ( TCT ) que é a tabela de controle de terminais, onde todos os terminais (video, impressora) devem estar cadastrados.

A TCT contém as seguintes informações:

  • caracteristicas do terminal
  • endereco para o cics
  • codigo do terminal
  • informacoes de controle ( ex.: se já existe uma transação 'ATACHADA AO TERMINAL').

Comando SEND MAP

Formato do comando:

EXEC CICS SEND Explicação do argumento
MAPSET ('MAPSET') Especifica o nome do MAPSET em que se encontra o mapa a ser enviado
MAP ('MAPA') Especifica o nome do mapa que deseja-se enviar
FROM (MP8601AO) Especifica a área onde estão os dados a serem enviados.
Se este para metro for omitido, o BMS considera que os dados estão na area de trabalho definida pelo mapa simbólico
MAPONLY Será enviado apenas o mapa, nenhum dado variável será enviado, sómente as constantes serão enviadas
DATAONLY Apenas os dados serão enviados. A opção 'FROM' deve ser especificada
CURSOR (VALOR) Especifica a posição absoluta do CURSOR na tela em relação a zero.
Esta opção pode ser utilizada quando desejarmos alterar a posição do CURSOR daquela definida na tela sendo que 'VALOR' deve ter a PIC S9(04) COMP.
Quando não especificado 'VALOR', o CURSOR será posicionado no primeiro campo da tela que recebeu valor -1 (menos um)
ERASE Limpa toda a tela do terminal antes do mapa ser enviado.
Não é aconselhavel usar esta opção juntamente com a opção 'DATAONLY'
ERASEAUP Limpa todos os campos desprotegidos antes do mapa ser enviado
ALARM Emite um alarme ao enviar o mapa ( usado somente se não foi especificado 'CTRL=ALARM' no BMS
FREEKB Destrava o terminal para digitação de informações ( usado somente se não foi especificado 'CTRL= FREEKB' no BMS
FRSET Restaura o 'MDT'. Todos os campos serão transmitidos ( usado somente se não foi especificado 'CTRL=FRSET' no BMS
PRINT Envia para a impressora. Usado quando o terminal é uma impressora
TERMINAL Envia para o terminal. Usado quando o terminal é o vídeo ( DEFAULT )
ACCUM 'ACUMULA' mapas sem enviar ao terminal
PAGING Os mapas serão guardados em 'TEMPORARY STORAGE' ( TS ).
Esta opção é usada em conjunto com a opção 'ACCUM' para enviar um conjunto de mapas ao terminal

Este comando é utilizado para 'enviar' um mapa para o terminal.

Exemplo do comando:

    EXEC CICS
         SEND MAP ('MP8601A')
         MAPSET ('XP86851')
         ERASE
         CURSOR 
    END-EXEC.

Explicacao do exemplo:

Será enviado para o terminal o mapa MP8601A que pertence ao MAPSET XP86851 e o cursor ficará posicionado no primeiro campo da tela que recebeu valor -1 ( menos um ), sendo que os dados que haviam na tela serão 'REMOVIDOS' antes da exibição do mapa MP8601A.

Condição de exceção:

INVPMSZ: ocorre se for enviado um mapa que nao cabe físicamente no terminal.
Este tipo de erro nao é detectado quando da compilação do mapa físico.

INVREQ: ocorre se após termos enviado vários mapas com as opções 'ACCUM' e 'PAGING', FOR feita uma tentativa de enviar mapa sem estas opções.
Como veremos adiante, todo o acúmulo de mapas deve ser terminado pelo comando 'SEND PAGE'.

OUTROS: TSIOERR, RETPAGE

Comando RECEIVE MAP

Formato do comando:

EXEC CICS RECEIVE Explicação do argumento
MAPSET ('MAPSET') Especifica o nome do MAPSET em que se encontra o mapa a ser recebido.
MAP ('MAPA') Especifica o nome do mapa que deseja-se receber.
INTO (MP8601AI) Especifica a área onde o mapa lógico será recebido.
Se este parametro for omitido, o 'BMS' considera que os dados irão para a área de trabalho definida pelo mapa simbólico.

Este comando é utilizado para 'receber' dados do último mapa exibido no terminal.
Pode ser codificado sem nenhum argumento, porém servirá apenas para o tratamento de funções programadas.

Exemplo do comando:

    EXEC CICS
         RECEIVE MAP ('MP8601A')
         MAPSET ('XP86851')
    END-EXEC.

Explicação do exemplo:

Será recebido do terminal o mapa MP8601A que pertence ao MAPSET XP86851.

Condição de exceção:

MAPFAIL: ocorre se, ao executar o comando, o bms verificar que nao foi digitado nenhum dado pelo operador na tela ( correspondente a tela vazia ).

Comando SEND PAGE

Formato do comando:

EXEC CICS SEND PAGE Explicação do argumento
AUTOPAGE As telas serão enviadas ao terminal logo que este esteja disponível sem intervenção do operador. Usado para impressora.
NOAUTOPAGE As telas serão enviadas ao terminal, uma de cada vez, em respostas aos comandos de paginação do operador.
Normalmente é definida no sistema 'TECLAS PROGRAMADAS' (PF's) para a paginação.
RELEASE Transfere o controle para o nível lógico mais alto (pode ser um programa de aplicação ou o proprio CICS).
É a opção mais utilizada e poder ser utilizada com a opção 'TRANSID'.
TRANSID ('TRANSACAO') Transfere o controle para a transação indicada, logo após a operação se completar (pode ser codificado junto com a opção 'RELEASE' para fazer com que o terminal coloque-se na modalidade pseudo-conversacional, logo após a paginação se completar).
RETAIN Indica que após a paginação ser encerrada o controle será devolvido ao programa de aplicação e esta opção não é muito utilizada pois ela torna o programa conversacional.
Não pode ser especificada juntamente com a opção 'RELEASE' ou 'TRANSID'.

Este comando e' utilizado para 'ENVIAR' varios mapas para o terminal, mapas estes 'ACUMULADOS' anteriormente através da opção 'ACCUM' do comando 'SEND MAP'.

Exemplo do comando:

    EXEC CICS
         SEND PAGE
              NOAUTOPAGE
              RELEASE
              TRANSID ('P851')
    END-EXEC.

Explicação do exemplo:

Será enviado para o terminal o conjunto de mapas anteriormente 'acumulados' ficando a disposição do usuario para paginá-las e após o término da paginação, o controle será devolvido a transacao 'P851'.

Condição de exceção:

  • INVREQ: ocorre se tentar emitir o comando sem que tenha sido 'ACUMULADO' páginas através das opçoes 'ACCUM' E 'PAGING'.
  • OUTROS: TSIOERR, RETPAGE

Comando PURGE MESSAGE

Formato do comando:

EXEC CICS PURGE MESSAGE Não possui argumento

Este comando deleta todas as paginas anteriormente 'ACUMULADAS' atraves da opcao 'ACCUM' do comando 'SEND MAP'.

Este comando deve ser utilizado sempre que ocorrer algum tipo de erro que haja a necessidade de abandonar a paginação, tendo sido emitido algum comando 'SEND MAP' com a opção 'ACCUM'.

Exemplo do comando:

    EXEC CICS
         PURGE MESSAGE
    END-EXEC.

Explicacao do exemplo:

Será deletado todas as páginas anteriormente 'ACUMULADAS' através da opção 'ACCUM' do comando 'SEND MAP'.

Condição de exceção:

TSIOERR: erro de entrada/saida na memória tempóraria.

Observações sobre a transmissão de dados

Caso já esteja no vídeo do operador o mapa que irá enviar bastando sómente limpar os campos digitados, use a opcao 'ERASEAUP'. neste caso 'NÃO SERAO TRANSMITIDOS' as constantes e nem os dados dos mapas, obtendo-se assim uma melhor performance da transmissão do mapa.

Caso já esteja no vídeo do operador o mapa que irá enviar bastando sómente trocar os dados da tela, mantendo o mesmo mapa, use a opção 'DATAONLY'. Neste caso serão transmitidos apenas os dados variáveis do mapa.

Se não for especificado as opções 'DATAONLY' ou 'MAPONLY' no comando 'SEND MAP', será assumido as duas.

Se não for especificado as opções 'AUTOPAGE' ou 'NOAUTOPAGE' no comando 'SEND PAGE', a paginação obedecerá as condições especificadas para o terminal quando da geração do sistema.

Considerações sobre paginação

Por paginação entende-se a açao de acumular uma determinada quantidade de linhas que varia a cada execucão da tarefa.

Em cada tela haverá um mapa de cabeçalho que deverá ser definido no 'BMS' com as opções 'HEADER=YES' e 'JUSTIFY=FIRST'.

Em cada tela haverá tambem um mapa de rodapé que deverá ser definido no 'BMS' com as opções 'TRAILER=YES' e 'JUSTIFY=LAST'.

As linhas restantes serão 'FLUTUANTES', ou seja serão usadas para acumular os dados que devem ser exibidos. Deve ser definido um mapa contendo apenas uma linha e é esta linha que será acumulada. Será acumulado para uma tela a quantidade máxima de linhas que couber entre o cabeçalho e o rodapé.

Caso a quantidade de linhas a serem acumuladas ultrapasse a quantidade máxima permitida para uma tela, no momento em que estiver sendo tentado acumular a linha que ultrapassa a quantidade máxima permitida para a tela, ocorrerá a condicação de exceção 'OVERFLOW'.

Ao ocorrer a condição de exceção 'OVERFLOW', deve-se terminar a construção da página atual e iniciar a construção de nova página, ficando construindo páginas até terminar os dados a serem exibidos.

Após a construção da última página, deve-se emitir o comando 'SEND PAGE' para o término da paginação.

Apos a emissão do comando 'SEND PAGE', os dados ficarão 'ACUMULADOS' para o operador manusea-los.

Para o manuseio dos dados acumulados existem algumas funcões programadas que executam tal tarefa. tais PF's não precisam ser especificadas no programa que acumulou os dados.

Procedimentos necessários para acumular páginas.

  • 1 - Emite-se o comando 'SEND MAP' com a opção 'ERASE' para acumular o cabeçalho.
  • 2 - Pesquisa-se os dados a serem exibidos e se existir, move-los para a linha que deseja-se acumular.
  • 3 - Emite-se o comando 'SEND MAP' para acumular a linha montada no item 2.
  • 4 - Se não ocorrer a condição de exceção 'OVERFLOW' voltar para item 2.
  • 5 - Ocorrendo a condição de exceção 'OVERFLOW', emite-se o comando 'SEND MAP' sem a opção 'ERASE' Para acumular o rodapé e tambem emite-se o comando 'SEND MAP' com a opção 'ERASE' para acumular o cabeçalho para o inicio da construção de uma nova página. Em virtude de termos uma linha não acumulada ( a que provocou o OVERFLOW ) volta-se para o item 3.
  • 6 - Quando não existir mais dados a serem acumulados emite-se o comando 'SEND MAP' sem a opção 'ERASE' para acumular o rodapé e o comando'SEND PAGE' para indicar o término de construção de páginas.
Obs: Todos os comandos 'SEND MAP' deverão ser emitidos com as opções 'PAGING' e 'ACCUM'.

Tratamento de teclas programadas ( PF'S )

Para verificar qual a tecla programada ( PF ) que foi digitada pelo operador existem duas maneiras:

1 - O campo do EIB - 'EIBAID'
2 - O comando - 'HANDLE AID'

O EIBAID é atualizado toda vez que é acionada alguma função programada.

Existe um book catalogado que contem os campos a serem comparados com o EIBAID para a checagem da PF que foi digitada pelo operador. Este book é o DFHAID e pode ser copiado atraves do comando COPY no programa de aplicacao.

01     DFHAID.
   02  DFHNULL  PIC  X(001)  VALUE IS '.'.
   02  DFHENTER PIC  X(001)  VALUE IS QUOTE.
   02  DFHCLEAR PIC  X(001)  VALUE IS '_'.
   02  DFHCLRP  PIC  X(001)  VALUE IS '.'.
   02  DFHPEN   PIC  X(001)  VALUE IS '='.
   02  DFHOPID  PIC  X(001)  VALUE IS 'W'.
   02  DFHMSRE  PIC  X(001)  VALUE IS 'X'.
   02  DFHSTRF  PIC  X(001)  VALUE IS 'H'.
   02  DFHTRIG  PIC  X(001)  VALUE IS '''.
   02  DFHPA1   PIC  X(001)  VALUE IS '%'.
   02  DFHPA2   PIC  X(001)  VALUE IS '>'.
   02  DFHPA3   PIC  X(001)  VALUE IS ','.
   02  DFHPF1   PIC  X(001)  VALUE IS '1'.
   02  DFHPF2   PIC  X(001)  VALUE IS '2'.
   02  DFHPF3   PIC  X(001)  VALUE IS '3'. 
   02  DFHPF4   PIC  X(001)  VALUE IS '4'.
   02  DFHPF5   PIC  X(001)  VALUE IS '5'.
   02  DFHPF6   PIC  X(001)  VALUE IS '6'.
   02  DFHPF7   PIC  X(001)  VALUE IS '7'.
   02  DFHPF8   PIC  X(001)  VALUE IS '8'.
   02  DFHPF9   PIC  X(001)  VALUE IS '9'.
   02  DFHPF10  PIC  X(001)  VALUE IS ':'.
   02  DFHPF11  PIC  X(001)  VALUE IS '#'.
   02  DFHPF12  PIC  X(001)  VALUE IS '@'.
   02  DFHPF13  PIC  X(001)  VALUE IS 'A'.
   02  DFHPF14  PIC  X(001)  VALUE IS 'B'.
   02  DFHPF15  PIC  X(001)  VALUE IS 'C'.
   02  DFHPF16  PIC  X(001)  VALUE IS 'D'.
   02  DFHPF17  PIC  X(001)  VALUE IS 'E'.
   02  DFHPF18  PIC  X(001)  VALUE IS 'F'.
   02  DFHPF19  PIC  X(001)  VALUE IS 'G'.
   02  DFHPF20  PIC  X(001)  VALUE IS 'H'.
   02  DFHPF21  PIC  X(001)  VALUE IS 'I'.
   02  DFHPF22  PIC  X(001)  VALUE IS '-'.
   02  DFHPF23  PIC  X(001)  VALUE IS '.'.
   02  DFHPF24  PIC  X(001)  VALUE IS '<'. 

Comando HANDLE AID

Formato do comando:

EXEC CICS HANDLE AID Explicação do argumento
OPTION (PARAGRAFO) Especifica-se uma opção (tecla), associando-se a ela um parágrafo que receberá o controle do programa caso a tecla seja digitada.

O comando acima é utilizado para especificar um parágrafo que receberá o controle caso seja digitada a tecla especificada na opção.

Existe uma opção especial que engloba todas as PF'S, PA'S E CLEAR, com exceço do ENTER. Caso seja digitado uma tecla que n~ao foi especificada no programa de aplicação, o controle irá para o parágrafo especificado nesta opção.

Esta opção é o ANYKEY.

Uma vez estabelecidas as condiçães de manipulacao de funçães programadas, elas só serão acionadas quando for executado o comando RECEIVE.

Exemplo do comando:

    EXEC CICS    
         HANDLE AID PA1    (0100-PA1)
                    PA2    (0200-PA2)
                    ENTER  (0300-ENTER)
                    ANYKEY (0400-ANYKEY)
    END-EXEC.

Explicacao do exemplo:

  • caso seja digitado a tecla PA1, o controle do programa será desviado para o parágrafo 0100-PA1,
  • caso seja digitado a tecla PA2, o controle do programa será desviado para o parágrafo 0200-PA2,
  • caso seja digitado a tecla ENTER, o controle do programa será desviado para o parágrafo 0300-ENTER e
  • caso seja digitado qualquer outra tecla, o controle do programa será desviado para o parágrafo 0400-ANYKEY.