CICS - Customer Information Control System - Tutorial IBM Mainframe tutorials



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

CICS - Customer Information Control System - Tutorial IBM Mainframe tutorials - In English

Task - A unidade fundamental de trabalho planejada pelo CICS, como Ler do arquivo, gravar no arquivo, ler na estação de trabalho, gravar na estação de trabalho, iniciar outra tarefa, chamar outra função e assim por diante.

Transaction - Uma entidade para iniciar / invocar uma tarefa para execução.
Uma transação tem de 1 a 4 caracteres.

Uma transação é uma parte do processamento iniciada por uma única solicitação, geralmente pelo usuário final em um terminal.

Uma única transação consistirá em um ou mais programas aplicativos que, ao serem executados, farão o processamento necessário.

Program - Conjunto de instruções para realizar uma tarefa.

LUW (Logical unit of work) - LUW (unidade lógica de trabalho) diz que o trabalho deve ser feito completamente ou não deve ser feito.

NON AID keys - Alfabetos, números, pontuação etc.
O CICS nem mesmo saberá se o usuário pressiona qualquer tecla NON AID, o que significa que ele não pode detectar teclas NON AID quando pressionadas.

AID Keys - As teclas de identificação de atenção são as teclas de função (PF1 a PF24), Enter, CLEAR e PA1 a PA3.
O CICS detecta apenas as teclas AID quando pressionadas.

Depois que o texto é digitado, o CICS assume o controle assim que o usuário pressiona qualquer tecla AID.

PA1 - Alt + PF1

MDT - Modified Data Tag (Tag de dados modificados)

FRSET - Flag ReSET (Sinalizar ReSET)

Control Programs (Programas de controle)

O núcleo do CICS é construído por programas de controle

  • Terminal Control Program (TCP) - é usado para receber mensagens do terminal.
    Ele também mantém os requisitos de comunicação de hardware.

  • Task Control Program (KCP) - é usado para controlar simultaneamente a execução de tarefas e suas propriedades relacionadas.
    Ele também lida com todos os problemas relacionados à multitarefa.

  • Program Control Program (PCP) - é usado para localizar e carregar programas para execução.
    Ele transfere o controle entre dois programas e, no final, retorna o controle para o CICS.

  • File control Program (FCP) - fornece a um programa aplicativo os serviços de leitura, gravação, inserção, atualização ou exclusão de registros em um arquivo.

  • Storage Control Program (SCP) - é usado para alocar ou desalocar a memória na região CICS.

Control Tables (Programas de controle)

As tabelas de controle precisam ser atualizadas de acordo com as informações do aplicativo para a execução bem-sucedida do programa de aplicativo CICS.

  • Terminal Control Table (TCT) - contém os IDs de terminal conectados à região CICS atual.
    Sempre que efetuamos login no terminal CICS, uma entrada é feita no TCT.

  • Program control table (PCT) - contém a ID da transação e o programa associado a ela.

  • Processing Program table (PPT) - contém o nome do programa ou nome do mapset, contador de uso da tarefa, endereço de armazenamento principal, endereço da biblioteca de carregamento, etc.
    Quando o CICS recebe a transação, o nome do programa correspondente é obtido do PCT e carregado.

  • File Control Table (FCT) - contém as informações sobre nomes de arquivos, tipos de arquivos, comprimento de registro, etc.
    Todos os nomes de arquivos usados no CICS devem ser declarados em FCT.

Como é feito o processamento de uma transação?

Depois que o usuário inserir o ID da transação (por exemplo, TN01) no terminal CICS, o primeiro nome do programa correspondente será verificado no PCT.
Uma vez que o programa é encontrado no PCT, ele verifica o endereço de armazenamento principal/endereço da biblioteca de carga para carregar o programa na memória para execução.

Transações do sistema CICS (CICS system transactions)

  • CESN (CICS Execute SigNon) - Esta transação é usada para conectar-se à região CICS.

  • CEDA (CICS Execute Definition and Administration) - Esta transação é usada pelos administradores do CICS para definir as entradas da tabela do CICS e outras atividades administrativas.

  • CEMT (CICS Execute Master Terminal) - Usado para consultar e atualizar o status de ambientes CICS.
    Isso também é usado para carregar um novo programa, carregar uma cópia do programa antigo no CICS após as alterações no programa.

  • CECI (CICS Execute Command Interpreter) - Usado para verificar a sintaxe dos comandos do CICS.
    Aqui, o comando é executado apenas se a sintaxe estiver correta.

  • CEDF (CICS Execute Debug Facility) - Usado para depurar o programa passo a passo que ajuda a localizar os erros.

  • CEAC (CICS Execute Abend Codes) - Usado para localizar a explicação para os códigos de abend do CICS.

  • CESF (CICS Execute Sign oFf) - Usado para desconectar da região CICS.

O sistema operacional permite a execução de uma ou mais tarefas simultaneamente e isso é chamado de multitarefa.
Se uma ou mais tarefas simultâneas usam a mesma cópia do programa, isso é chamado de Multithreading.

RE-Entrancy - Um programa reentrante não pode ser modificado por si mesmo, mas pode entrar novamente em si mesmo e continuar o processamento após uma interrupção do sistema operacional.

Quasi Reentrancy - Uma quase reentrada é um programa de reentrada no ambiente CICS, o que significa que este programa não se modificará por si mesmo e pode entrar novamente para continuar o processamento após uma interrupção do CICS.
Durante a interrupção, executa outras tarefas do CICS, incluindo tarefas do mesmo programa.

BMS (BASIC MAPPING SUPPORT)

O BMS ajuda a desenvolver telas formatadas que são usadas para comunicação entre o Terminal e o programa CICS.

MAP - Um formato de tela única que pode ser projetado usando macros BMS.
Ele pode ter um nome de 1 a 7 caracteres.

MAPSET - Coleção de mapas editados por link para formar um módulo de carregamento.
Ele deve ter uma entrada PPT e pode ter um nome de 1 a 7 caracteres.

O CICS fornece BMS para tornar um dispositivo de programa de aplicativo independente e independente de formato.

BMS Macros:

DFHMSD - Usado para definir o MAPSET e suas características.

DFHMSD - usado para definir uma definição MAPSET ou Gera uma definição MAPSET.
O nome MAPSET é um nome do módulo de carregamento que deve ter uma entrada no PPT.

Parâmetros:

TYPE - usado para definir o mapa e o tipo.
MAP - Mapa físico é criado
DSECT - Mapa simbólico criado
&&SYSPARM - Mapas físicos e simbólicos são criados
Final - fim da codificação do mapset.
MODE - Especifica se o mapset deve ser usado para entrada, saída ou ambos.
IN - apenas para entrada
OUT - Apenas para saída
INOUT - para entrada e saída
LANG - Especifica o idioma do programa aplicativo no qual os mapas de descrição simbólica no conjunto de mapas são copiados.
Este parâmetro será codificado apenas quando DFHMSD TYPE = DSECT
STORAGE
AUTO - Os mapas físicos e simbólicos usarão locais de memória separados.
BASE -
CTRL - usado para definir solicitações de controle de dispositivo.
FREEKB - para desbloquear o teclado
FRSET - para redefinir o MDT para o status zero
ALARM - Para exibir o alarme no tempo de exibição da tela
PRINT - envia o mapa para a impressora
TERM
type - garante a independência do dispositivo e precisa ser codificado apenas quando o terminal não for 3270.
TIOAPFX (Terminal Input Output Area PreFiX)
TIOAPFX - yes - Retoma 12 bytes de espaço de armazenamento na memória para executar comandos CICS no mapa.

DFHMDI - Usado para definir um MAP dentro do Mapset.

SIZE =(Rows, Columns)
especifica o tamanho do mapa a ser exibido ao usuário.
O tamanho padrão é 24 linhas 80 colunas
LINE
Número da linha onde o mapa realmente começa
COLUMN
Número da coluna onde o mapa realmente começa
JUSTIFY
especifica o mapa inteiro ou os campos do mapa são justificados à esquerda ou à direita.
CTRL,TIOAPFX são iguais a DFHMSD

DFHMDF - usado para definir novo campo no mapa.
Temos que codificar a macro DFHMDF para cada campo presente no mapa.

POS (linha, coluna)
especifica a posição do campo no mapa, especificando a linha e a coluna #.
INITIAL
especifica o valor inicial do campo.
Igual à cláusula de valor em cobol. i.e
FLDNAME
contém o valor 'I LOVE CICS'.
LENGTH
especifica o comprimento do campo.
ASKIP
significa salto automático.
Os dados não podem ser inseridos neste campo.
O cursor pula para o próximo campo.
IC (Insert Cursor)
especifica que o cursor precisa ser colocado neste campo quando o mapa é exibido.
Se IC for especificado mais de uma vez, o cursor é colocado no último campo.
PROT
especifica para proteger este campo de inserir ou editar os dados
UNPROT
especifica para desproteger o campo para editar ou inserir os dados
BRT
exibe o campo com intensidade brilhante
DARK
exibe o campo com intensidade escura
NORM
especifica exibição normal
COLOR
é usado para especificar a cor para este campo
PICIN, PICOUT
são usados para especificar o comprimento dos campos de dados usados como entrada/saída.
(usado para especificar a cláusula de imagem para variáveis Cobol de entrada e saída no mapa simbólico)

Aqui está o código-fonte completo da macro BMS para a tela de consulta do cliente, com todas as macros DFHMSD, DFHMDI e DFHMDF.

        PRINT  NOGEN

INQSET1 DFHMSD TYPE=&SYSPARM,                                          X
               LANG=COBOL,                                             X
               MODE=INOUT,                                             X
               TERM=ALL,                                               X
               DSATTS=COLOR,                                           X
               CTRL=FREEKB,                                            X
               STORAGE=AUTO,                                           X
               TIOAPFX=YES

INQMAP1 DFHMDI SIZE=(24,80),                                           X
               LINE=1,                                                 X
               COLUMN=1

        DFHMDF POS=(1,1),                                              X
               LENGTH=8,                                               X
               ATTRB=(NORM,PROT),                                      X
               COLOR=TURQUOISE,                                        X
               INITIAL='CUSTINQ1'

        DFHMDF POS=(1,32),                                             X
               LENGTH=16,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=TURQUOISE,                                        X
               INITIAL='Customer Inquiry'

TRANSID DFHMDF POS=(1,76),                                             X
               LENGTH=04,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=TURQUOISE,                                        X
               INITIAL='INQ1'

        DFHMDF POS=(3,01),                                             X
               LENGTH=42,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=TURQUOISE,                                        X
               INITIAL='Type a customer number. Then press ENTER.'

        DFHMDF POS=(5,01),                                             X
               LENGTH=24,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=TURQUOISE,                                        X
               INITIAL='Customer number. . . . .'

CUSTNO  DFHMDF POS=(5,26),                                             X
               LENGTH=06,                                              X
               ATTRB=(NORM,UNPROT),                                    X
               COLOR=TURQUOISE,                                        X
               INITIAL='______'

        DFHMDF POS=(5,33),                                             X
               LENGTH=01,                                              X
               ATTRB=ASKIP

        DFHMDF POS=(7,01),                                             X
               LENGTH=24,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=TURQUOISE,                                        X
               INITIAL='Name and Address . . . :'

LNAME   DFHMDF POS=(7,26),                                             X
               LENGTH=30,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=TURQUOISE

FNAME   DFHMDF POS=(8,26),                                             X
               LENGTH=20,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=TURQUOISE

ADDR    DFHMDF POS=(9,26),                                             X
               LENGTH=30,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=TURQUOISE

CITY    DFHMDF POS=(10,26),                                            X
               LENGTH=20,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=TURQUOISE

STATE   DFHMDF POS=(10,47),                                            X
               LENGTH=02,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=TURQUOISE

ZIPCODE DFHMDF POS=(10,50),                                            X
               LENGTH=10,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=TURQUOISE

MESSAGE DFHMDF POS=(23,01),                                            X
               LENGTH=79,                                              X
               ATTRB=(BRT,PROT),                                       X
               COLOR=TURQUOISE

        DFHMDF POS=(24,01),                                            X
               LENGTH=20,                                              X
               ATTRB=(NORM,PROT),                                      X
               COLOR=TURQUOISE,                                        X
               INITIAL='PF3=Exit PF12=Cancel'

        DFHMSD TYPE=FINAL
               END

CICS MAP

    Mapa físico
  • Mapa físico é um módulo de carregamento na biblioteca de carregamento que contém as informações sobre como o mapa deve ser exibido.
  • O mapa físico é codificado com macros BMS.
    Isso é usado principalmente pelo CICS e garante a independência do dispositivo no programa de aplicativo.
  • As macros BMS são montadas separadamente e o link editado na biblioteca de carregamento do CICS
    Mapa Simbólico
  • O mapa simbólico é um copybook na biblioteca que é usado pelo programa de aplicativo CICS para enviar e receber mensagens do terminal.
  • O mapa simbólico garante independência de dispositivo e formato para o programa de aplicação
  • O mapa simbólico contém todos os dados variáveis que são copiados para a seção de armazenamento de trabalho do programa.
  • O mapa simbólico está incluído no programa usando a instrução COBOL COPY.
    Campos SKIPPER e STOPPER:
  • Suponha que eu tenha codificado o comprimento de um campo como 10, o que significa que, idealmente, somos capazes de inserir os dados neste campo para até 10 caracteres.
    Mas, quando exibimos o mapa e tentamos inserir os dados no mesmo campo, isso nos permite inserir os dados de mais de 10 caracteres.
    Portanto, para evitar essa situação, usamos os campos skipper e stopper.

  • Os campos do Skipper e do stopper são campos sem nome com comprimento de 1, que precisa ser especificado após o campo real.

  • Campo do Skipper - Quando codificamos o campo do capitão após um campo desprotegido e começamos a inserir o valor no campo, -uma vez que o comprimento especificado é alcançado, o cursor se move para o próximo campo desprotegido.

  • NUMBER DFHMDF POS=(01,01),
    LENGTH=5,
    ATTRB=(UNPROT,IC)
    DFHMDF POS=(01,07),
    LENGTH=1,
    ATTRB=(ASKIP)

    Campo de Stopper - Quando o campo de parada é codificado após um campo desprotegido e começa a inserir o valor neste campo, então, uma vez que o limite é alcançado, o cursor para o seu posicionamento.

    NUMBER DFHMDF POS=(01,01),
    LENGTH=5,				  
    ATTRB=(UNPROT,IC)
    DFHMDF POS=(01,07),
    LENGTH=1,
    ATTRB=(PROT)

    Byte de atributo: (Attribute Byte:)

    O byte de atributo de qualquer campo armazena informações sobre as propriedades físicas do campo.

    0&1 - determinado pelo conteúdo dos bits 2 a 7
    2&3  Proteção e deslocamento
    00 alfanumérico não protegido
    01 numérico desprotegido
    10 batentes protegidos
    11 salto protegido
    4&5 - Intensidade  00 - normal, 01 - normal, 10 - claro, 11 - Sem exibição (escuro)
    6 - Deve ser zero sempre
    7 - Tag de dados modificada. 0 - campo não foi modificado, 1 - campo foi modificado.
    

    Tag de dados modificados (MDT):

    Um sinalizador que contém um único bit e usado para especificar se os dados podem ser transferidos para o sistema ou não.
    Este é o último bit do MDT.

    Se MDT = 0, o campo não é modificado e os dados não podem ser transferidos.

    Se MDT = 1, o campo é modificado e os dados podem ser transferidos

    ENVIAR MAPA: (SEND MAP:)

    Este comando envia dados de saída para o terminal

               EXEC CICS SEND
                    MAP('map-name')
                    MAPSET('mapset-name')
                    [FROM(data-area)]
                    [LENGTH(data_value)]
                    [DATAONLY]
                    [MAPONLY]
                    [CURSOR]
                    [ERASE/ERASEAUP]
                    [FREEKB]
                    [FRSET]
               END-EXEC

    Parâmetros em SEND MAP

    MAP - Nome do mapa que queremos enviar

    MAPSET - Nome do mapset que contém o mapa

    FROM - especifica a área de dados que contém os dados a serem processados

    MAPONLY - especifica que apenas os dados padrão do mapa devem ser gravados

    DATAONLY - especifica que apenas os dados do programa de aplicativo devem ser gravados

    ERASE - Para apagar a tela inteira antes de exibir o que enviamos para o terminal

    ERASEUP - Para apagar os valores em campos desprotegidos

    FRSET - Sinalizador ReSET desliga o MDT no byte de atributo de todos os campos antes de colocar os dados que está enviando.

    CURSOR - para especificar a posição do cursor no terminal.
    Nós movemos -1 para a parte L do campo e então enviamos o mapa para o terminal.

    ALARM, FREEKB e PRINT são iguais

    FORMFEED - Faz com que a impressora seja restaurada para o início da próxima página antes que a saída seja impressa.

    Receba o mapa: (Receive Map:)

    Este comando é usado para receber entrada do terminal.

               EXEC CICS 
                    RECEIVE MAP('map-name')
                    MAPSET('mapset-name')
                    [INTO(data-area)]       
                    [FROM(data-area)]       
                    [LENGTH(data_value)]
               END-EXEC

    Verbos COBOL restritos:

    Instruções de i/o de arquivo como READ, WRITE, REWRITE, CLOSE, OPEN, DELETE e START.

    FILE SECTION e ENVIRONMENT DIVISION.

    Funções do sistema como ACCEPT, DATE/TIME

    Verbos como DISPLAY, MERGE, STOP RUN, GOBACK

    Execute Interface Block (EIB):

    O EIB permite que o programa se comunique com o programa de interface de execução que processa comandos CICS.Mbr< Contém ID do terminal, hora do dia e códigos de resposta.

    Lista de campos no EIB

    EIBAID X (1) Tecla de auxílio pressionada

    EIBCALEN S9 (4) COMP - Comprimento da área de comunicação

    EIBDATE S9 (7) COMP-3 - Contém a data atual do sistema

    EIBTASKN S9 (7) COMP-3 - Contém o número da tarefa

    EIBRCODE X (6) - Código de retorno da última transação

    EIBTRMID X (4) - contém a id do terminal

    EIBTRNID X (4) - contém id de transação

    EIBTIME S9 (7) COMP-3 - contém a hora atual do sistema

    Classificação de programas CICS

    1. Non conversion programs - Programas de não conversão:
      Não é necessária intervenção humana.
      Todas as entradas necessárias precisam ser fornecidas antes de iniciarmos a execução do programa.

    Exemplo - o programa abaixo exibe "Hello World" no terminal

           IDENTIFICATION DIVISION.                                
           PROGRAM-ID. HELLO.
    
           DATA DIVISION.
           WORKING-STORAGE SECTION.
           01 WS-MESSAGE          PIC X(30).                       
    
           PROCEDURE DIVISION.                                     
    
          * SENDING DATA TO SCREEN
    
               MOVE 'HELLO WORLD' TO WS-MESSAGE                
               EXEC CICS SEND TEXT                             
                    FROM (WS-MESSAGE)                          
               END-EXEC                                        
    
          * TASK TERMINATES WITHOUT ANY INTERACTION FROM THE USER
    
               EXEC CICS RETURN END=EXEC.

    1. Conversion Programs: - Programas de conversão:
      o envio de uma mensagem ao terminal e o recebimento da resposta do usuário é chamado de conversa.

    Um aplicativo online permite a conversa entre o usuário e o aplicativo por meio de um par de mensagens SEND (ENVIAR) e RECEIVE (RECEBER).

  • O primeiro sistema envia dados para o terminal e aguarda a resposta do usuário.
  • O tempo necessário para o usuário responder a esta mensagem é chamado de tempo de reflexão, que é muito alto.
  • O usuário fornece a entrada necessária e pressiona a tecla AID.
  • O aplicativo processa a entrada e envia a saída.
  • O programa é carregado no armazenamento principal até que a tarefa termine.

Desvantagem - o tempo de pensar é muito alto para programas de conversão.

Programa de pseudo-conversação:

Aqui, o sistema não irá esperar pela resposta do usuário, em vez disso, encerra a transação, uma vez que envia dados para o terminal.
A transação será iniciada novamente quando o usuário pressionar qualquer tecla AID.

Após o término, o sistema aloca os recursos usados por esta transação para outras transações, o que faz a -melhor utilização dos recursos.

COMMAREA - é usado para passar dados entre tarefas.
Declaramos WS-COMMAREA na WORKING-STORAGE SECTION

DFHCOMMAREA - é uma área de memória especial alocada pelo CICS para cada tarefa.
É usado para passar dados entre programas da mesma transação ou de transações diferentes.
Isso deve ser declarado na seção de ligação sob o nível 01.
O comprimento de ws-commarea e dfhcommarea deve ser o mesmo.

       WORKING-STORAGE SECTION.
       01  WS-COMMAREA.   
           05 WS-DATA PIC X(10).  

       LINKAGE SECTION.
       01  DFHCOMMAREA.
           05 LK-DATA PIC X(10).

Declaração RETURN:

Os dois tipos são declarações de retorno são:

  1. Declaração de retorno sem condição, que encerra a tarefa e a transação.

               EXEC CICS RETURN
    
               END-EXEC

  2. Instrução de retorno com condição, quando o retorno é emitido com a instrução de ID de transação (TRNSID), o controle retorna para o CICS com o próximo ID de transação.

               EXEC CICS RETURN
                    TRNSID(‘TRANSID’),
                    [COMMAREA(WS-COMMAREA)]
               END-EXEC

DFHAID é um copybook fornecido pelo CICS que contém um conjunto pré-codificado de variáveis usadas por programas de aplicativos.
Este copybook pode ser incluído no programa aplicativo pela declaração COPY DFHAID.

Modificando dinamicamente os atributos de um campo:

Para modificar os atributos de um campo, devemos -incluir o copybook DFHATTR fornecido pelo CICS no programa de aplicativo.
O atributo pode ser escolhido na lista de variáveis desse caderno e movido para a variável simbólica com o sufixo A.

Tratamento de arquivos CICS

Ordem aleatória - Random order

Ordem sequencial - Sequential Order

Acesso aleatório (Random access)

A maioria dos acessos a arquivos são aleatórios on-line porque as transações não são agrupadas e classificadas em nenhuma ordem.

Os comandos usados para processamento aleatório

READ O comando READ lê um registro de um arquivo usando a chave primária.

Sintaxe:

           EXEC CICS READ
                FILE('name')
                INTO(data-area)
                RIDFLD(data-area)
                LENGTH(data-value)
                KEYLENGTH(data-value)
           END-EXEC.

FILE - nome do arquivo que possui 8 caracteres e deve ser colocado entre aspas. O nome do arquivo deve ter uma entrada em FCT
INTO - uma área de dados (variável) na qual o registro deve ser lido.
RIDFLD - contém a chave do registro que precisa ler
LENGTH - o número máximo de caracteres que podem ser lidos na área de dados especificada
KEYLENGTH - Comprimento da chave

Exemplo:

       IDENTIFICATION DIVISION.                                         
       PROGRAM-ID. HELLO.                                               

       DATA DIVISION. 
       WORKING-STORAGE SECTION.
       01  WS-STD-REC-LEN    PIC S9(4) COMP.
       01  WS-STD-KEY-LEN    PIC S9(4) COMP.
       01  WS-STD-REC-KEY    PIC 9(3).
       01  WS-STD-REC        PIC X(70).

       PROCEDURE DIVISION.

           MOVE +70           TO WS-STD-REC-LEN.
           MOVE ‘100’         TO WS-STD-REC-KEY.
           MOVE 3             TO WS-STD-KEY-LEN.

           EXEC CICS READ
                FILE ('FL001')
                INTO (WS-STD-REC)
                LENGTH (WS-STD-REC-LEN)
                RIDFLD (WS-STD-REC-KEY)
                KEYLENGTH (WS-STD-KEY-LEN)
           END-EXEC.

Leia as opções de comando:

GENERIC é usado quando não sabemos o valor -chave completo.
UPDATE especifica que o registro deve ser obtido para atualização ou exclusão. Ignorar esta opção pressupõe somente leitura.
EQUAL especifica que precisamos do registro cuja chave corresponda exatamente àquela especificada em RIDFLD
GTEQ especifica que queremos o primeiro registro cuja chave seja maior ou igual à chave especificada

           EXEC CICS READ
                FILE('name')
                INTO(data-area)
                RIDFLD(data-area)
                LENGTH(data-value)
                KEYLENGTH(data-value)
                GENERIC
                UPDATE
                EQUAL
                GTEQ
           END-EXEC.

Ler exceções de comando

NOTOPEN - arquivo não aberto
NOTFND - Registro não encontrado no conjunto de dados
FILENOTFOUND - Nenhuma entrada de nome de arquivo em FCT NOTAUTH - Não autorizado a usar o arquivo
DUPKEY - Se mais de um registro satisfaz a condição de chave

O comando WRITE é usado para escrever novos registros em um arquivo

Os parâmetros são iguais aos de leitura, exceto que Os registros de dados serão selecionados da área de dados especificada e gravados em um arquivo.

           EXEC CICS WRITE
                FILE(name)
                FROM(data-area)
                RIDFLD(data-area)
                LENGTH(data-value)
                KEYLENGTH(data-value)
           END-EXEC.

A seguir está o exemplo para escrever um registro no arquivo 'FL001' onde Student-id é a chave primária e um novo registro com 101 alunos id será escrito no arquivo:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  WS-STD-REC-LEN    PIC S9(4) COMP.
       01  WS-STD-KEY-LEN    PIC S9(4) COMP.
       01  WS-STD-REC-KEY    PIC 9(3).
       01  WS-STD-REC        PIC X(70).

       PROCEDURE DIVISION.

           MOVE +70           TO WS-STD-REC-LEN.
           MOVE ‘101’         TO WS-STD-REC-KEY.
           MOVE 3             TO WS-STD-KEY-LEN.
           MOVE '101Mohtahim M TutorialsPoint' TO WS-STD-REC.

           EXEC CICS WRITE
                FILE ('FL001')
                FROM (WS-STD-REC)
                LENGTH (WS-STD-REC-LEN)
                RIDFLD (WS-STD-REC-KEY)
                KEYLENGTH (WS-STD-KEY-LEN)
           END-EXEC.

As exceções de comando WRITE são iguais às exceções de comando de leitura

O comando REWRITE é usado para modificar o registro existente no arquivo.

Antes de REWRITE o registro deve ser lido com o comando READ UPDATE.
Os parâmetros são os mesmos que escrever

           EXEC CICS REWRITE
                FILE (name)
                FROM (data-area) 
                LENGTH (data-value)
           END-EXEC.

Exemplo

       IDENTIFICATION DIVISION.                                         
       PROGRAM-ID. HELLO.                                               

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  WS-STD-REC-LEN    PIC S9(4) COMP.
       01  WS-STD-KEY-LEN    PIC S9(4) COMP.
       01  WS-STD-REC-KEY    PIC 9(3).
       01  WS-STD-REC        PIC X(70).

       PROCEDURE DIVISION.

           MOVE +70           TO WS-STD-REC-LEN.
           MOVE ‘101’         TO WS-STD-REC-KEY.
           MOVE 3             TO WS-STD-KEY-LEN.

           EXEC CICS READ
                FILE ('FL001')
                INTO (WS-STD-REC)
                LENGTH (WS-STD-REC-LEN)
                RIDFLD (WS-STD-REC-KEY)
                KEYLENGTH (WS-STD-KEY-LEN)
                UPDATE
           END-EXEC.

           MOVE '100Mohtahim M TutorialsPnt' TO WS-STD-REC.

           EXEC CICS REWRITE
                FILE ('FL001')
                FROM (WS-STD-REC)
                LENGTH (WS-STD-REC-LEN)
           END-EXEC.

REWRITE exceções de comando

NOTOPEN, LENGERR, NOTAUTH
INVREQ especifica reescrever sem READ anterior com UPDATE
NOSPACE não especifica espaço suficiente no conjunto de dados
O comando DELETE é usado para excluir um registro de um arquivo.
Antes de Excluir, temos que LER o registro com UPDATE
EXEC CICS DELETE FILE ('nome') RIDFLD (dados-valor) END-EXEC.
Delete exceções de comando
NOTOPEN, NOTFOUND, NOTAUTH, INVREQ, FILENOTFOUND

Acesso Sequencial (Sequential Access)

STARTBR(START Browse) informa ao CICS de onde começar a ler o arquivo.

FILE e RIDFLD são iguais a READ.

Apenas GTEQ e EQUAL são permitidos.

A navegação de arquivos é estritamente somente leitura, portanto, UPDATE não é permitido.

Sintaxe:

           EXEC CICS
                STARTBR FILE ("name")
                RIDFLD (data-value)
                KEYLENGTH(data-value)
                GTEQ/EQUAL/GENERIC
           END-EXEC.

READNEXT é para prosseguir com a leitura do registro começando do primeiro registro e em sequência um por um

READPREV é continuar lendo o arquivo de trás para frente.

RIDFLD contém a chave do registro que é lido atualmente.

Syntax:

           EXEC CICS READNEXT/READPREV
                FILE ('name')
                INTO (data-value)
                LENGTH (data-value)
                RIDFLD (data-value)
           END-EXEC

RESETBR redefine o ponto inicial do arquivo no meio da navegação

Sintaxe:

           EXEC CICS
                RESETBR    FILE ('name')
                RIDFLD (data-value)
                GTEQ
           END-EXEC.

ENDBR nos permite encerrar a navegação assim que terminarmos de ler o arquivo sequencialmente

Sintaxe:

           EXEC CICS
                ENDBR FILE ('name')
           END-EXEC.

CICS - Tratamento de Erros

Os comandos de tratamento de erros do CICS são:

Handle condition especifica o rótulo (para) para o qual o controle deve ser passado quando a condição surge.
Devemos incluir o nome da condição e um rótulo para o qual o controle deve ser passado.

Exemplo:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO.

       PROCEDURE DIVISION.

           EXEC CICS HANDLE CONDITION
                DUPKEY(X0000-DUPKEY-ERR-PARA)
                NOTFND(X000-NOT-FOUND-PARA)
                ERROR(X0000-GEN-ERR-PARA)
           END-EXEC.

       X0000-DUPKEY-ERR-PARA.
           DISPALY 'Duplicate Key Found'.

       X0000-NOT-FOUND-PARA.
           DISPLAY 'Record Not Found'.

       X0000-GEN-ERR-PARA.
           DISPLAY 'General Error'.

De acordo com o programa acima, se a condição DUPKEY surgir, o controle será passado para X0000-DUPKEY-ERR-PARA

Handle Abend:

Quando um programa termina de forma anormal, o CICS procura uma saída de abend ativa começando de um nível lógico de um programa de aplicativo para os níveis mais altos.
O controle é dado à primeira saída abend ativa encontrada.

Exemplo:

           EXEC CICS HANDLE ABEND
                PROGRAM(name)
                LABEL(Label)
                CANCEL
                RESET
           END-EXEC

O nome do programa ou rótulo é usado para transferir o controle para o programa ou para quando ocorre um abend.
CANCEL cancela HANDLE CONDITIONS anterior

O comando ABEND termina a tarefa de forma anormal.
Podemos definir códigos de abend definidos pelo usuário usando este comando

           EXEC CICS ABEND>
                ABCODE(code)
           END-EXEC.

Exemplo:

       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO.

       PROCEDURE DIVISION.
 
           EXEC CICS ABEND
                ABCODE(D100)
           END-EXEC.

Ignore condition especifica que nenhuma ação deve ser executada quando ocorre um abend ou erro específico.

Sintaxe:

           EXEC CICS IGNORE CONDITION
                CONDITION(para)
           END-EXEC

Nohandle especifica que nenhuma ação deve ser executada para quaisquer condições de exceção que possam ocorrer durante a execução de comandos do CICS.
Ele pode ser usado com READ, WRITE, DELETE, etc.

Sintaxe:

           EXEC CICS
                program statements
                NOHANDLE
           END-EXEC.

Exemplo - o programa abaixo não será encerrado de forma anormal se a instrução de leitura falhar

       IDENTIFICATION DIVISION.
       PROGRAM-ID. HELLO.

       PROCEDURE DIVISION.

           EXEC CICS READ
                FILE('FILE1')
                INTO(WS-FILE-REC)
                RIDFLD(WS-STDID)
                NOHANDLE
           END-EXEC.

Comandos usados para serviços de controle de programa

O comando XCTL é usado para passar o controle de um programa para outro programa do mesmo nível.
Ele não espera o controle de volta (semelhante à instrução goto).

O exemplo abaixo transfere o controle para o programa 'prog2' com 100 bytes de dados

       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROG1.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01  WS-COMMAREA    PIC X(100).

       PROCEDURE DIVISION.

           EXEC CICS XCTL
                PROGRAM ('PROG2')
                COMMAREA (WS-COMMAREA)
                LENGTH (100)
          END-EXEC.

O comando LINK é usado para transferir o controle para outro programa de nível inferior.

       IDENTIFICATION DIVISION.
       PROGRAM-ID. PROG1.

       DATA DIVISION.
       WORKING-STORAGE SECTION.
       01 WS-COMMAREA    PIC X(100).

       PROCEDURE DIVISION.
           EXEC CICS LINK
                PROGRAM ('PROG2')
                COMMAREA (WS-COMMAREA)
                LENGTH (100)
           END-EXEC.

LOAD é usado para carregar um programa ou tabela

           EXEC CICS LOAD
                PROGRAM(‘name’)
           END-EXEC
   

RELEASE é usado para liberar um programa ou tabela

           EXEC CICS RELEASE
                PROGRAM(‘name’)
           END-EXEC
   

RETURN é usado para retornar o controle para o próximo nível lógico superior

           EXEC CICS RETURN
                PROGRAM ('name')
                COMMAREA (data-value)
                LENGTH (data-value)
           END-EXEC.

Operações de controle de intervalo:

ASKTIME solicita a data e hora atuais ou o carimbo de data/hora.
Posteriormente, isso pode ser movido para a variável de armazenamento de trabalho no programa.

           EXEC CICS ASKTIME
                [ABSTIME(WS-TIMESTAMP)]
           END-EXEC.

FORMATTIME formata o carimbo de data/hora no formato necessário.

           EXEC CICS FORMATTIME
                ABSTIME(WS-TIMESTAMP)
                [YYDDD(WS-DATE)]
                [YYMMDD(WS-DATE)]
                [YYDDMM(WS-DATE)]
                [DATESEP(WS-DATE-SEP)]
                [TIME(WS-TIME)]
                [TIMESEP(WS-TIME-SEP)]
           END-EXEC.

Qualquer transação na região CICS pode acessar a área de trabalho comum e há apenas um CWA para toda a região CICS.

Transaction work area (TWA) é usada para passar dados entre os programas aplicativos que pertencem à mesma transação.
A TWA existe apenas durante a transação.

-Temporary Storage Queue (TSQ)

  • Uma fila de registros que são criados, lidos e excluídos por diferentes tarefas ou programas na mesma região CICS.
  • Um registro dentro de um TSQ é identificado pelo número do item e pode ser lido sequencialmente ou diretamente.
  • Os registros no TSQ ficam acessíveis até que o TSQ seja explicitamente excluído.
  • Os TSQs podem ser gravados no armazenamento principal ou no armazenamento auxiliar no DASD.
  • Os TSQs podem ser acessados por programas e transações da mesma região CICS.

WRITEQ TS permite que você grave registros em um TSQ.

Se essa fila não existir, uma será criada e gravará os registros nela.

O TSQ é identificado por um ID de fila de 1-8 bytes.

           EXEC CICS WRITEQ TS
                QUEUE ('queue-name')
                FROM (queue-record)
                [LENGTH (queue-record-length)]
                [ITEM (item-number)]
                [REWRITE]
                [MAIN /AUXILIARY]
           END-EXEC.

  • QUEUE - especifica o nome do TSQ.
  • FROM - especifica o registro a ser escrito na fila
  • LENGTH - especifica o comprimento do registro
  • ITEM - especifica o número do item a ser atribuído ao registro
  • REWRITE - é usado para atualizar o registro existente na fila
  • Opção MAIN/AUXILIARY - é usada para armazenar o registro em PRINCIPAL/AUXILIAR
  • AUXILIARY - é o padrão

READQ TS TS permite que você leia os dados em TSQ

           EXEC CICS READQ TS
                QUEUE ('queue-name')
                INTO (queue-record)
                [LENGTH (queue-record-length)]
                [ITEM (item-number)]
                [NEXT]
           END-EXEC.
p>NEXT especifica o próximo item de dados lógico a ser lido

DELETEQ TS permite que você exclua um TSQ inteiro

           EXEC CICS DELETEQ TS
                QUEUE ('queue-name')
           END-EXEC.

Transient Data Queue (TDQ) é a fila que pode ser criada e excluída rapidamente.

O conteúdo da Fila pode ser lido apenas uma vez, pois é destruído após a execução da leitura.

Permite apenas acesso sequencial.

TSQ identificado por 1 a 4 char nome chamado destinationID que deve ser registrado no DCT (tabela de controle de destino).

Intrapartition TDQ - Permite acesso sequencial e, uma vez que o registro é lido, ele é excluído da fila.

Extrapartition TDQ - Depois que o registro é lido, o registro não é excluído da fila.

WRITEQ TD - usado para gravar em TDQ e eles são sempre gravados em um arquivo

           EXEC CICS WRITEQ TD
                QUEUE ('queue-name')
                FROM (queue-record)
                [LENGTH (queue-record-length)]
           END-EXEC.

READQ TD - usado para ler o TDQ

           EXEC CICS READQ TD
                QUEUE ('queue-name')
                INTO (queue-record)
                [LENGTH (queue-record-length)]
           END-EXEC.

DELETEQ TD - usado para excluir o TDQ

           EXEC CICS DELETEQ TD
                QUEUE ('queue-name')
           END-EXEC


© Copyright IBM Mainframe tutorials.