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
- 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.
|
- 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:
- Declaração de retorno sem condição, que encerra a tarefa e a transação.
EXEC CICS RETURN
END-EXEC
|
- 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.
|