Vous êtes sur la page 1sur 50

COBOL C I C S - Menu principal

Componentes do CICS e suas funções


Conceitos da execução de uma tarefa em CICS
Formato geral do comando CICS
Acesso as informações do sistema
Definição de telas - basic mapping support ( BMS )
Tratamento de condições de exceção
Controle de programas
Transmissão de dados entre a tarefa e o terminal
Interrupção de processamento
Tratamento de arquivos VSAM
Pesquisa sequencial de arquivos - BROWSE
Memória temporária ( T S )
Dados transitórios ( T D )
Quadro comparativo entre 'TS' e 'TD' (intra partition)
Usando o DL/I com o CICS

CICS - Componentes do CICS e suas funções


O Customer Information Control System (CICS) é um produto IBM que manuseia
aplicacoes on-line.
Ele atua como uma interface entre o sistema operacional e seus programas de
aplicacao.
Para o sistema operacional, ele funciona como uma tarefa unica sendo executada em
uma particao.

O software CICS é composto por:

Módulos de gerência:

São programas que gerenciam o ambiente on-line e fazem o interface entre o


sistema operacional e os programas de aplicação. Cada módulo de gerencia realiza
uma função especial.

Exemplos:

FILE CONTROL PROGRAM ( FCP ) - operações de leitura e gravação em arquivos


TERMINAL CONTROL PROGRAM ( TCP ) - operações de envio e recepção de dados
ao terminal

Tabelas do sistema:
São utilizadas pelo CICS para se definir os equipamentos que podem ser utilizados,
bem como os recursos que serão utilizados em termos de arquivos, programas,
transações, etc. São geradas pelo analista de sistemas responsável pelo
gerenciamento do CICS.
Em virtude dos equipamentos estarem pre-definidos em uma tabela, nao há a
necessidade da definição no programa de aplicação.

Exemplos:

FILE CONTROL TABLE ( FCT ) - definição dos arquivos utilizados por cada programa
de aplicação
TERMINAL CONTROL TABLE ( TCT ) - definição de cada terminal da rede

Blocos de controle:

são utilizados pelo CICS para acesso e atualização das informações modificáveis
(dinamicas), necessárias para a execução do programa de aplicação.

Exemplo:

TASK CONTROL AREA ( TCA ) - contém indicadores de localização para o programa


de aplicação e para a entrada do terminal na TCT

Todos os componentes acima ficam 'residentes' na memória real.

Programas de aplicação:

São os programas escritos pelos usuários para processamento on-line de um


determinado tipo de serviço.
Não fica 'residente' na memória real.

CICS - Conceitos da execucao de uma tarefa em CICS


Pontos principais:

O CICS opera como programa principal


Os programas de aplicação operam sob o CICS
O fluxo de informações entre o usuário e o programa é controlado pelo CICS
Tipicamente, uma transação consiste numa entrada, processamento e uma resposta
imediata (REAL-TIME)
Normalmente, uma transacao e' composta de um programa pequeno e simples para
tratamento de um evento especifico e em tempo real
Os programas nao podem alterar instruções dinâmicas (reentrantes) conforme
veremos adiante
A tarefa (TASK) recebe o controle do CICS e deve devolvê-lo ao CICS

Transação conversacional:

A transação fica sempre ativa


Detem sempre o controle
Esta' sempre esperando intervenção do operador
Muitos recursos ficam 'presos' pela transação
Só devolve o controle ao cics quando o operador terminar o serviço

Transação pseudo-conversacional:

A transação só está ativa quando está sendo executada


Recebe o controle do CICS e o devolve, apos sua execução
Não há intervenção do operador na execução
Prende muito pouco os recursos
A codificação de transações conversacionais comprometem a eficiência e performance
do CICS, portanto a sua utilização é desaconselhada.

Típico uso 'BATCH'

+------------------+
I INICIO I
+------------------+
I CONSISTENCIA I . Um programa grande
+------------------+ . Existe em memória código que
I TESTE DE CODIGOS I não é usado simultaneamente
+------------------+ ou seja, se for feito apenas
I MODULO PRINCIPAL I inclusão, todos os módulos,
+------------------+ mesmo os não utilizados, es-
I INCLUSAO I tarão residentes na memória
+------------------+
I EXCLUSAO I
+------------------+
I ATUALIZACAO I
+------------------+
I FIM I
+------------------+

Típico uso 'REAL TIME'

+------------------+
I I ____________________________________
I I I
I I ______________________ I
I MODULO PRINCIPAL I I I
I I _______ I I
I I I I I
I I +----------+ +----------+ +-----------+
+------------------+ I INCLUSAO I I EXCLUSAO I I ALTERACAO I
I I +----------+ +----------+ +-----------+
I I
I I
I I . Pode ser composto por varios
I I programas
+------------------+ . Tamanhos pequenos e parecidos
I CONSISTENCIA I . Só está na memoria o neces-
+------------------+ sario, ou seja, se não for
feita nenhuma exclusão, o mó-
dulo de exclusão nao será
carregado

CICS - Formato geral do comando CICS


O CICS possui o seu próprio formato de comando, como a seguir:

EXEC CICS
FUNCAO
OPCAO (ARG)
END-EXEC.
Onde:

Função : É uma palavra-chave que descreve a operacao solicitada.


Exemplo: READ, SEND, HANDLE, ETC.

Opção : É uma palavra chave que descreve recursos a disposição em cada função. algumas
opções são seguidas por um argumento entre parenteses.

END-EXEC: Delimitador para comandos para programas cobol. Indica o final de um comando
CICS.

Exemplo para programa COBOL:

EXEC CICS
LINK PROGRAM (PROG01)
COMMAREA (WORK-COMMA)
LENGTH (+150)
END-EXEC.
Como o programa codificado em CICS possui os comandos do CICS e visto que em COBOL não
existe tais comandos, antes de ser compilado ou montado, o programa de aplicação é
processado por um tradutor de comandos, que muda os comandos do CICS em comandos
MOVE e CALL que existem no COBOL.

Durante a execução do programa, estes comandos CALL chamam a rotina de interface do nível
de comando e passam os parâmetros apropriados para a rotina.

A rotina de interface então chama o módulo de gerencia do CICS que é indicado pela função do
comando no programa de aplicação.

CICS - Acesso as informações do sistema


O CICS mantém acompanhamento de certos dados que o programa de aplicação pode necessitar
durante a execução, dados tais como numero da tarefa, hora e data.

O CICS registra este tipo de dados internos em áreas que o programa de aplicação nao tem
acesso direto.
Contudo, o CICS copia os dados num bloco de interface de execução (EIB) que é criado na hora
em que a tarefa é iniciada. Existe um EIB por tarefa.
O tradutor de comandos automaticamente inclui uma copia do EIB no programa de aplicação.

O EIB para uma tarefa armazena informações que o programa de aplicação pode então pesquisar
usando-se os nomes dos campos. segue os nomes de alguns campos e seus conteúdos.

Campo Tamanho Explicação

EIBDATE S9(007) Data em que teve inicio a tarefa. Este campo está no formato
decimal compactado com o seguinte layout: 00AADDD

EIBTIME S9(007) Hora em que teve inicio a tarefa. Este campo está no formato
decimal compactado com o seguinte layout: 0HHMMSS

EIBTRNID X(004) Identificação da tarefa

EIBTRMID X(004) Identificação do terminal que está associado a tarefa

EIBAID X(001) Contém a última tecla de 'função programada' digitada pelo


operador

EIBPOSN S9(004) Posição do cursor na tela na hora da última entrada. este campo
está no formato computational (COMP)

EIBCALEN S9(004) Contem o tamanho da area de comunicacao (COMMAREA)


passada para a TASK. Se nao foi passada nenhuma COMMAREA,
este campo terá o valor igual a zeros. Este campo está no
formato computational (COMP)

Para a atualização da data e hora do sistema há o comando ASKTIME que atualiza os campos
EIBTIME e EIBDATE do EIB, com a data e a hora em que o comando é executado.

Exemplo para programa COBOL:

EXEC CICS
ASKTIME
END-EXEC.

CICS - Definição de telas - BASIC MAPPING SUPPORT ( BMS )


Para a execução de um programa on-line, normalmente há uma tela, onde o usuario interage com o
terminal.
Nesta tela ele digita os dados e recebe as informações que necessita.

Esta tela é definida pelo programador, utilizando os recursos oferecidos pelo BASIC MAPPING
SUPPORT ( BMS ), que tem a função de fazer o interface entre o programa de aplicação e o
'TERMINAL CONTROL PROGRAM ( TCP )'.

O BMS oferece algumas vantagens tais como, independência de dispositivos e independência de


formato de dados.

O BMS trabalha com dois tipos de mapas:

1 - Mapa físico ( MAPSET ) que é catalogado na CIL em formato de 'PHASE'. E' constituído por
caracteres de controle, constantes e dados variáveis do aplicativo.
2 - Mapa lógico ( MAP ) catalogado na SOURCE ( BIBLIOTECA DE DADOS ) em formato de 'BOOK'.
e' constituído somente pelos dados variáveis.

O BMS na entrada remove os caracteres de controle e transfere somente os dados para o


programa de aplicação. na saida, o BMS obtem os dados variáveis do programa de aplicação e
intercala com os caracteres de controle mais as constantes do mapa.

A definição de mapas físicos e lógicos é feita utilizando-se 'MACROS' que seguem a regra
'ASSEMBLER' para a sua codificação.

Para a codificação, deve-se respeitar algumas regras de sintaxe, as quais trancreve-se abaixo:

O nome dos mapas e campos devem comecar na coluna 1 e a codificação das macros, apesar de
poder começar na coluna 2, costuma-se codificar começando na coluna 10. costuma-se, tambem,
codificar os parâmetros necessários para cada macro, a partir da coluna 16, exceto na primeira
linha onde comeca-se a definir na coluna 17.

A codificaçao pode ir até a coluna 71.

A coluna 72 é reservada para ser usada quando deseja-se continuar a definição de uma macro em
uma outra linha, sendo que, a linha a ser continuada deve ter, na coluna 72, um caracter de
continuação diferente de branco e a linha de continuação deve ter a sua codificação iniciada na
coluna 16.

MACRO DFHMSD

Esta macro é utilizada para definir o conjunto de mapas ( MAPSET ).


Um MAPSET pode conter 'um ou mais' mapas.

....+....1....+....2....+....3....+....4....+....5....+....6....+....7..

LABEL DFHMSD TYPE=(MAP/DSECT/FINAL), *


LANG=(ASM/COBOL/PL/I), *
TIOAPFX=(YES/NO), *
MODE=(IN/OUT/INOUT), *
STORAGE=AUTO, *
CTRL=OPCOES, *
TERM=MODELO, *
DATA=(FIELD/BLOCK)

Parâmetros para a macro DFHMSD:

LABEL : deve ser especificado o nome do MAPSET, com, no máximo 7


caracteres

TYPE : MAP - criar mapa fásico.


DSECT - criar mapa lógico.
FINAL - encerra a definição do conjunto de mapas.

LANG : ASM - será gerado o mapa lógico em ASSEMBLER


( DEFAULT ).
COBOL - será gerado o mapa lógico em COBOL.
PL/I - será gerado o mapa lógico em PL/I.
TIOAPFX : YES - indica que deve ser reservada uma área de 12 bytes
no início do mapa,
para o prefixo da TIOA ( TERMINAL INPUT
OUTPUT AREA ). Nesta área
existem caracteres de controle que um programa em
COMMAND LEVEL não
pode utilizar.
NO - sem bytes de controle ( DEFAULT ).

MODE : indica o tipo de utilização do MAPSET. Também será


utilizado na geração do
mapa lógico.
IN - indica que qualquer mapa do MAPSET somente poderá
ser recebido pelo
programa de aplicação.
OUT - Indica que qualquer mapa do MAPSET somente poderá
ser enviado pelo
programa de aplicação.
INOUT - Indica que o programa de aplicação poderá receber
e enviar qualquer
mapa do MAPSET.

STORAGE : AUTO - Será alocada automaticamente uma área para cada


mapa do MAPSET. Se
este parâmetro nao for especificado, os mapas
dentro de um MAPSET
serao 'redefinidos'.

CTRL : Define as caracteristicas a serem aplicadas ao terminal


quando do envio de
qualquer mapa do MAPSET.
ALARM - emite o sinal sonoro ( alarme ) ao enviar o mapa.
FREEKB - destrava o teclado logo apos o envio do mapa para
permitir ao opera-
dor entrar com os dados.
FRSET - restaura o MDT (MODIFIED DATA TAG) de todos os
campos variaveis do
mapa, ou seja, os dados variaveis do mapa sempre
serao transmitidos
para o programa de aplicacao, mesmo que o
operador nao tenha
'alterado' nenhum dado.

TERM : MODELO - modelo do terminal (3270 / 3270-2 / 3270-4,


etc)

DATA : Especifica o formato dos dados FIELD - area de trabalho


em formato de campos.

formato:

+----------------+
I LL I A I DADOS I
+----------------+

onde: LL - tamanho do campo ( 2 bytes binarios


- HALF - WORD -
PIC S9(04) COMP.
A - byte de atributo do campo
BLOCK - Área de trabalho em formato de bloco. seu uso nao
É recomendado.

MACRO DFHMDI

Esta macro é utilizada para definir um mapa dentro de um conjunto de


mapas.

....+....1....+....2....+....3....+....4....+....5....+....6....+....7..

LABEL DFHMDI SIZE=(LINHAS,COLUNAS), *


LINE=LINHA, *
COLUMN=COLUNA, *
JUSTIFY=(LEFT/RIGHT,FIRST/LAST), *
HEADER=YES/TRAILER=YES, *
TIOAPFX=(YES/NO)

Parâmetros para a macro DFHMDI:

LABEL : Deve ser especificado o nome do mapa lógico, com, no


máximo 7 caracteres.

SIZE : Especifica as dimensões do mapa, e termos de linhas e


colunas.
LINHAS - número máximo de linhas do mapa.
COLUNAS - número máximo de colunas do mapa.

LINE : Especifica qual é a linha inicial do mapa no terminal.

COLUMN : Especifica qual é a coluna inicial do mapa no terminal.

JUSTIFY : Especifica qual é o alinhamento do mapa:


LEFT - O alinhamento do mapa será a esquerda
( DEFAULT ).
RIGHT - O alinhamento do mapa será a direita.

FIRST - Especifica que o mapa é para ser posicionado


como o primeiro mapa de uma nova tela.

LAST - Especifica que o mapa é para ser posicionado no


final da tela que está sendo montada.

HEADER : Especifica que o mapa é um mapa de cabeçalho. Deve ser


usado em conjunto com a opção
'JUSTIFY=FIRST'. Usado em paginação.

TRAILER : Especifica que o mapa é um mapa de rodapé. Deve ser usado


em conjunto com a opção
'JUSTIFY=LAST'. Usado em paginação.
TIOAPFX : YES - Indica que deve ser reservada uma área de 12 bytes
no inicio do mapa, para o prefixo
da TIOA ( TERMINAL INPUT OUTPUT AREA ). Nesta área
existem caracteres de controle que
um programa em COMMAND LEVEL não pode utilizar.
NO - Sem bytes de controle ( DEFAULT )

MACRO DFHMF

Esta macro é utilizada para definir os campos variáves e as


constantes dentro do mapa.

....+....1....+....2....+....3....+....4....+....5....+....6....+....7..

LABEL DFHMDF POS=(LINHA,COLUNA), *


LENGTH=TAMANHO, *
ATTRB=LISTA DE ATRIBUTOS, *
INITIAL='CONSTANTE', *
JUSTIFY=(LEFT/RIGHT,BLANK/ZERO), *
GRPNAME=ITEM DE GRUPO, *
OCCURS=NNN, *
PICIN='MASCARA', *
PICOUT='MASCARA'

Parâmetros para a macro DFHMDF:

LABEL : Deve ser especificado o nome do campo, com, no máximo 7


caracteres. Se o label for omitido,
o campo nao poderá ser acessado pelo programa de
aplicação, ou seja, será definido apenas
uma constante para o mapa.

POS : Especifica a posição do atributo do campo em relação ao


mapa e não a posicao fisica. Em todas
as macros DFHMDF de um determinado mapa, as posições dos
campos devem estar definidos em uma
sequencia crescente, sendo definidos de cima para baixo e
da esquerda para a direita.

LENGTH : Especifica o tamanho do campo ( nao considerar a posição


utilizada pelo atributo ). O tamanho
pode variar de 1 a 256 caracteres.

ATTRB : Especifica as caracteristicas do campo. Somente para


terminais do tipo 3270-X. Para determinar
as caracteristicas do campo, os atributos podem ser
combinados
ASKIP - Provoca um salto automático do CURSOR, ou seja,
não é possível o operador entrar com
dados neste campo. Pode ser utilizado para
definir constantes. O campo fica protegido
e com brilho normal.
PROT - O campo fica protegido.
UNPROT - O campo fica disponível para a entrada de dados.
É UTilizado para definir campos variáveis.
O campofica desprotegido, com brilho normal e
alfanumerico.
NUM - O campo fica disponível para a entrada de dados
numéricos e o hífen ( - ). É utilizado em
conjunto com o atributo UNPROT. O campo fica
desprotegido, com brilho normal e numérico.
BRT - O campo fica brilhante.
NORM - O campo fica com brilho normal.
DRK - Indica que embora o campo exista na tela, não
será exibido, mesmo que existam dados.
É utilizado, por exemplo para definir campos
onde será digitada uma senha.
IC - Indica que o CURSOR ficará posicionado no campo
após o envio do mapa. Caso haja mais de
um IC, o CURSOR ficará posicionado no campo em
que estiver o ultimo IC. Se este parâmetro
for omitido, o CURSOR será posicionado na
primeira linha e na primeira coluna.
FSET - Liga o MDT, ou seja, o campo será transmitido no
envio e na recepção do mapa, independente
se o campo foi ou nao alterado. O DEFAULT é o
MDT desligado.

Observacao - Qualquer um dos atributos poderá ser alterado pelo


programa de aplicação.
- Se o parâmetro ATTRB for omitido, o campo será
considerado com o atributo ASKIP.
- Se qualquer das opções de ATTRB for codificada, o campo
terá as opções de UNPROT e NORM em
acréscimo ao atributo especificado.

INITIAL : Define um conteudo inicial para o campo.

JUSTIFY : Define o alinhamento/preenchimento do campo


LEFT - O alinhamento do campo será a esquerda.
RIGHT - O alinhamento do campo será a direita.
BLANK - O campo será preenchido com brancos.
ZERO - O campo será preenchido com zeros.
Observação - O DEFAULT para JUSTIFY é:
RIGHT, ZERO se o campo for numérico
LEFT, BLANK se o campo for alfanumérico

GRPNAME : Permite que um campo seja subdividido e manipulado pelo


programa de aplicação, ou seja, permite
que seja definido um item de grupo com itens elementares.
As caracterpisticas físicas do item de
grupo são igualmente aplicáveis a todos os itens
elementares. Todos os itens elementares do item
de grupo devem ter os mesmos parâmetros, caso isto não
ocorra será considerado as características
do primeiro item elementar deste item de grupo.

OCCURS : Define n campos de uma só vez. Semelhante a cláusula


OCCURS do COBOL. este parâmetro não pode ser
utilizado em conjunto com o parâmetro 'GRPNAME' na mesma
macro DFHMDF.

PICIN : Define uma máscara de entrada de dados para o campo.

PICOUT : Define uma máscara de saida de dados para o campo.

OBSERVACAO - Caso seja especificado os parâmetros PICIN e PICOUT para


um mesmo campo, as máscaras devem ser do
mesmo tamanho quanto ao número de posições ocupadas.

Exemplo de definicao de MAPSET

....+....1....+....2....+....3....+....4....+....5....+....6....+....7..

XZ00001 DFHMSD TYPE=&SYSPARM, *


LANG=COBOL, *
CTRL=(FREEKB,FRSET,ALARM), *
MODE=INOUT, *
STORAGE=AUTO
*
MZ0001A DFHMDI SIZE=(22,80),LINE=1,COLUMN=1,JUSTIFY=(LEFT,FIRST)
TRANS DFHMDF POS=(01,01),LENGTH=04,ATTRB=(ASKIP,BRT,FSET), *
INITIAL='CURS'
SALVA DFHMDF POS=(01,08),LENGTH=04,ATTRB=(ASKIP,DRK)
DFHMDF POS=(01,20),LENGTH=40,ATTRB=(ASKIP,BRT), *
INITIAL='*** EXEMPLO DE DEFINICAO DE MAPSET ***'
DIA DFHMDF POS=(01,70),LENGTH=02,ATTRB=ASKIP,GRPNAME=DATA
MES DFHMDF POS=(01,72),LENGTH=02,GRPNAME=DATA
ANO DFHMDF POS=(01,74),LENGTH=02,GRPNAME=DATA
DFHMDF POS=(05,01),LENGTH=10,ATTRB=ASKIP,INITIAL='COD. ALUNO'
DFHMDF POS=(05,15),LENGTH=13,ATTRB=ASKIP, *
INITIAL='NOME DO ALUNO'
DFHMDF POS=(05,39),LENGTH=29,ATTRB=(ASKIP,BRT), *
INITIAL='NOTA1 NOTA2 NOTA3 NOTA4 NOTA5'
CODAL DFHMDF POS=(07,01),LENGTH=05,ATTRB=(UNPROT,NUM)
DFHMDF POS=(07,07),LENGTH=01,ATTRB=ASKIP,INITIAL=' '
NOMEAL DFHMDF POS=(07,15),LENGTH=20,ATTRB=ASKIP
NOTAS DFHMDF POS=(07,40),LENGTH=05,ATTRB=ASKIP,OCCURS=5, *
PICOUT='ZZ9,9'
DFHMDF POS=(22,21),LENGTH=40,ATTRB=(PROT,BRT), *
INITIAL='PF3 RETORNAR PA2 SAIR'
*
DFHMSD TYPE=FINAL
END

BOOK retornado com a compilação do MAPSET

1 2 3 4 5 6 7 8
1234567890123456789012345678901234567890123456789012345678901234567890123456780

01 MZ0001AI.
02 FILLER PIC X(012).
02 TRANSL COMP PIC S9(004).
02 TRANSF PIC X(001).
02 FILLER REDEFINES TRANSF.
03 TRANSA PIC X(001).
02 TRANSI PIC X(004).
02 SALVAL COMP PIC S9(004).
02 SALVAF PIC X(001).
02 FILLER REDEFINES SALVAF.
03 SALVAA PIC X(001).
02 SALVAI PIC X(004).
02 DATAL COMP PIC S9(004).
02 DATAF PIC X(001).
02 FILLER REDEFINES DATAF.
03 DATAA PIC X(001).
02 DATAI.
03 DIAI PIC X(002).
03 MESI PIC X(002).
03 ANOI PIC X(002).
02 CODALL COMP PIC S9(004).
02 CODALF PIC X(001).
02 FILLER REDEFINES CODALF.
03 CODALA PIC X(001).
02 CODALI PIC X(005).
02 NOMEALL COMP PIC S9(004).
02 NOMEALF PIC X(001).
02 FILLER REDEFINES NOMEALF.
03 NOMEALA PIC X(001).
02 NOMEALI PIC X(020).
02 NOTASD OCCURS 5 TIMES.
03 NOTASL COMP PIC S9(004).
03 NOTASF PIC X(001).
03 NOTASI PIC X(005).

01 MZ0001AO REDEFINES MZ0001AI.


02 FILLER PIC X(012).
02 FILLER PIC X(003).
02 TRANSO PIC X(004).
02 FILLER PIC X(003).
02 SALVAO PIC X(004).
02 FILLER PIC X(003).
02 DATAO.
03 DIAO PIC X(002).
03 MESO PIC X(002).
03 ANOO PIC X(002).
02 FILLER PIC X(003).
02 CODALO PIC X(005).
02 FILLER PIC X(003).
02 NOMEALO PIC X(020).
02 DFHMS1 OCCURS 5 TIMES.
03 FILLER PIC X(002).
03 NOTASA PIC X(001).
03 NOTASO PIC ZZ9,9.

Explicação da geração do mapa lógico

Para cada macro DFHMDI codificada é criado em COBOL, um NIVEL 01, com o
label especificado na macro, acrescido
do sufixo 'I' se for usada a opção 'MODE=IN' ou acrescido do sufixo 'O'
se for usada a opção 'MODE=OUT'.

Para o MAPSET em que foi especificado 'MODE=INOUT', são gerados DOIS


NIVEIS 01, um com o sufixo 'I' e outro
com o sufixo 'O'. O segundo NIVEL 01 é uma redefinição do primeiro.

Para cada macro dfhmdf codificada são criados UM NIVEL 02 e UM NIVEL 03


com o label especificado na macro
acrescido com sufixos específicos. Notar que o campo só será gerado caso
seja codificado na macro um label.

No NIVEL 02 foi gerado um campo com o label especificado acrescido do


sufixo 'L' para identificar o tamanho do
campo. Foi tambem gerado um campo com o label especificado acrescido do
sufixo 'I' para recepção de dados do campo.

No NIVEL 03 foi gerado um campo com o label especificado acrescido do


sufixo 'A' para identificar o atributo
do campo.

A area MZ0001AO é uma redefinição da área MZ0001AI, por ter sido


especificado na macro DFHMSD o parâmetro
'MODE=INOUT'.

Para cada macro DFHMDF que possui um label especificado, foi gerado um
campo de tamanho (SUFIXO L), um campo de
atributo (SUFIXO A) e um campo de dados (SUFIXO I E/OU O).

Observar que foi gerado o item de grupo 'DATAI' em virtude de termos


codificado o parâmetro 'GRPNAME=DATA' na
macro DFHMDF dos campo DIA, MES E ANO.

Observar que foi gerado uma tabela 'NOTASD' em virtude de termos


codificado o parâmetro 'OCCURS=5' no campo
'NOTAS'. Neste, o sufixo do item de grupo da tabela será 'D' ao inves de
'I'.

Para cada campo foram gerados:

LABEL + SUFIXO L - Nessa área será colocado pelo BMS, o tamanho do


campo ( LENGTH ), ou seja, quantas
posições foram tecladas pelo operador. O campo com
sufixo l é também usado para o
posicionamento do CURSOR, bastando para isso
movimentar -1 ( menos um ) para o mesmo.

LABEL + SUFIXO F - Essa área é um byte de flag. Usado pelo CICS para
saber se o campo foi alterado ou nao.

LABEL + SUFIXO A - Essa area é utilizada pelo programa de aplicação


para alterar o atributo do campo
( ATTRIBUTE ), isto é, quando deseja-se um
atributo diferente do que foi especificado
na codificação da macro DFHMDF.

LABEL + SUFIXO I - Essa area é utilizada pelo programa de aplicação


para trabalhar com os dados de entrada
( INPUT ).

LABEL + SUFIXO O - Essa area é utilizada pelo programa de aplicação


para trabalhar com os dados de saida
( OUTPUT ), sendo esta area uma redefinição da
area de sufixo 'I'.

A seguir estão os atributos que pode-se mover para o campo de sufixo


'A' pelo programa de aplicação.
Para ter estes campos no programa deve-se copiar o layout catalogado
'DFHBMSCA'.

1 2 3 4 5 6 7 8
1234567890123456789012345678901234567890123456789012345678901234567890123456780

01 DFHBMSCA.
02 DFHBMPEM PIC X(001) VALUE IS '.'.
02 DFHBMPNL PIC X(001) VALUE IS '.'.
02 DFHBMASK PIC X(001) VALUE IS '0'.
02 DFHBMUNP PIC X(001) VALUE IS ' '.
02 DFHBMUNN PIC X(001) VALUE IS '&'.
02 DFHBMPRO PIC X(001) VALUE IS '-'.
02 DFHBMBRY PIC X(001) VALUE IS 'H'.
02 DFHBMDAR PIC X(001) VALUE IS '<'.
02 DFHBMFSE PIC X(001) VALUE IS 'A'.
02 DFHBMPRF PIC X(001) VALUE IS '/'.
02 DFHBMASF PIC X(001) VALUE IS '1'.
02 DFHBMASB PIC X(001) VALUE IS '8'.
02 DFHBMEOF PIC X(001) VALUE IS '.'.
02 DFHBMDET PIC X(001) VALUE IS '.'.
02 DFHBMPSO PIC X(001) VALUE IS '.'.
02 DFHBMPSI PIC X(001) VALUE IS '.'.
02 DFHSA PIC X(001) VALUE IS '.'.
02 DFHCOLOR PIC X(001) VALUE IS '.'.
02 DFHPS PIC X(001) VALUE IS '.'.
02 DFHHLT PIC X(001) VALUE IS '.'.
02 DFH3270 PIC X(001) VALUE IS '.'.
02 DFHVAL PIC X(001) VALUE IS 'A'.
02 DFHOUTLN PIC X(001) VALUE IS 'B'.
02 DFHBKTRN PIC X(001) VALUE IS '.'.
02 DFHALL PIC X(001) VALUE IS '.'.
02 DFHERROR PIC X(001) VALUE IS '.'.
02 DFHDFT PIC X(001) VALUE IS '.'.
02 DFHDFCOL PIC X(001) VALUE IS '.'.
02 DFHBLUE PIC X(001) VALUE IS '1'.
02 DFHRED PIC X(001) VALUE IS '2'.
02 DFHPINK PIC X(001) VALUE IS '3'.
02 DFHGREEN PIC X(001) VALUE IS '4'.
02 DFHTURQ PIC X(001) VALUE IS '5'.
02 DFHYELLO PIC X(001) VALUE IS '6'.
02 DFHNEUTR PIC X(001) VALUE IS '7'.
02 DFHBASE PIC X(001) VALUE IS '.'.
02 DFHDFHI PIC X(001) VALUE IS '.'.
02 DFHBLINK PIC X(001) VALUE IS '1'.
02 DFHREVRS PIC X(001) VALUE IS '2'.
02 DFHUNDLN PIC X(001) VALUE IS '4'.
02 DFHMFIL PIC X(001) VALUE IS '.'.
02 DFHMENT PIC X(001) VALUE IS '.'.
02 DFHMFE PIC X(001) VALUE IS '.'.
02 DFHUNNOD PIC X(001) VALUE IS '('.
02 DFHUNIMD PIC X(001) VALUE IS 'I'.
02 DFHUNNUM PIC X(001) VALUE IS 'J'.
02 DFHUNINT PIC X(001) VALUE IS 'R'.
02 DFHUNNON PIC X(001) VALUE IS ')'.
02 DFHPROTI PIC X(001) VALUE IS 'Y'.
02 DFHPROTN PIC X(001) VALUE IS '%'.
02 DFHMT PIC X(001) VALUE IS '.'.
02 DFHMFT PIC X(001) VALUE IS '.'.
02 DFHMET PIC X(001) VALUE IS '.'.
02 DFHMFET PIC X(001) VALUE IS '.'.
02 DFHDFFR PIC X(001) VALUE IS '.'.
02 DFHLEFT PIC X(001) VALUE IS '.'.
02 DFHOVER PIC X(001) VALUE IS '.'.
02 DFHRIGHT PIC X(001) VALUE IS '.'.
02 DFHUNDER PIC X(001) VALUE IS '.'.
02 DFHBOX PIC X(001) VALUE IS '.'.
02 DFHSOSI PIC X(001) VALUE IS '.'.
02 DFHTRANS PIC X(001) VALUE IS '0'.
02 DFHOPAQ PIC X(001) VALUE IS '.'.

CICS - Tratamento de condições de exceção


Comando HANDLE CONDITION

Formato do comando:

EXEC CICS HANDLE


Explicação do argumento
CONDITION

Especifica-se uma condição de erro, associando a ela um


Condição (parágrafo) parágrafo que receberá o controle do programa caso a condição
de exceção ocorra.

o comando acima é utilizado para especificar um parágrafo que receberá o controle caso uma
condição de exceção ( erro de leitura/gravação em um arquivo ) ocorra.

O tratamento de uma determinada exceção prevalece até que seja especificado outro 'HANDLE
CONDITION' para a mesma exceção, ou se for executado o comando que ignore esta condição de
exceção.

A especificação de um 'HANDLE CONDITION' para uma exceção, não elimina o tratamento de


outras condições de exceção anteriormente especificadas.

Existe uma condição especial que engloba todas as condições de exceção que podem ocorrer,
com exceção das condições de exceção que já foram especificadas no programa de aplicação,
estaá condicao é 'ERROR'.
Exemplo do comando:

EXEC CICS
HANDLE CONDITION LENGERR (0100-LENGERR)
DUPKEY (0200-DUPKEY)
ERROR (0300-ERROR)
END-EXEC.

Explicação do exemplo:

Caso ocorra algum erro de tamanho em alguma funcao do COMMAND LEVEL, o controle do
programa será desviado para o parágrafo '0100-LENGERR'.

Caso haja registro em duplicata, o controle do programa será desviado para o paragrafo '0200-
DUPKEY'.

Caso ocorra algum outro tipo de erro que nao esteja previsto no comando, o controle do
programa serÁ desviado para o paragrafo '0300-ERROR'.

Comando IGNORE CONDITION

Formato do comando:

EXEC CICS IGNORE


Explicação do argumento
CONDITION

Condição Pode ser especificado um label para cada condição de exceção.

O comando acima é utilizado para ignorar uma determinada condição de exceção. Caso ocorra a
condição de exceção especificada a execução do programa continuará na instrucao seguinte a
instrução que originou a condição de exceção.

Exemplo do comando:

EXEC CICS
IGNORE CONDITION LENGERR
END-EXEC.

Explicação do exemplo:

Caso ocorra algum erro de tamanho em alguma funcao do COMMAND LEVEL, apos a execução
deste comando, o CICS irá ignora-lo, ou seja, o programa continuará com sua execução
normalmente.

Observação:

Caso nao sejam codificados os comandos HANDLE e nem IGNORE CONDITION para uma
determinada condição de exceção e esta vier a ocorrer, o programa cancelará.
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 Especifica o nome do programa para o qual


PROGRAMA') será passado o controle

COMMAREA
Especifica a área que contém os dados que
(WORK-
serão passados ao programa chamado.
COMMAREA)
Especifica o tamanho da área em que estão os
dados que estão sendo passados ao programa
LENGTH (+20)
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. apó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 Especifica o nome do programa para o qual


programa') será passado o controle.

COMMAREA
Especifica a área que contém os dados que
(WORK-
serão passados ao programa chamado.
COMMAREA)

Especifica o tamanho da área em que estão os


dados que estão sendo passados ao programa
LENGTH (+20)
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.

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 não
estiver catalogado.

Comando RETURN

Formato do comando:

EXEC CICS
Explicação do argumento
RETURN

Especifica o nome da transação para a qual


TRANSID
será passado o controle e deve estar definido
('TRANSACAO')
na PCT.

COMMAREA
Especifica a área que contém os dados que
(WORK-
serão passados ao programa chamado.
COMMAREA)

Especifica o tamanho da área em que estão os


dados que estão sendo passados ao programa
LENGTH (+20)
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.
< comando: do Exemplo>

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.
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 Especifica o nome do MAPSET em que se


('MAPSET') 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 I

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
Explicação do argumento
RECEIVE

MAPSET Especifica o nome do MAPSET em que se


('MAPSET') encontra o mapa a ser recebido.

Especifica o nome do mapa que deseja-se


MAP ('MAPA')
receber.

Especifica a área onde o mapa lógico será


recebido. Se este parametro for omitido, o
INTO (MP8601AI)
'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


Explicação do argumento
PAGE

As telas serão enviadas ao terminal logo que


AUTOPAGE este esteja disponível sem intervenção do
operador. Usado para impressora.

As telas serão enviadas ao terminal, uma de


cada vez, em respostas aos comandos de
NOAUTOPAGE paginação do operador. Normalmente é
definida no sistema 'TECLAS PROGRAMADAS'
(PF's) para a paginação.

Transfere o controle para o nível lógico mais


alto (pode ser um programa de aplicação ou o
RELEASE
proprio CICS). É a opção mais utilizada e poder
ser utilizada com a opção 'TRANSID'.

Transfere o controle para a transação indicada,


logo após a operação se completar (pode ser
TRANSID codificado junto com a opção 'RELEASE' para
('TRANSACAO') 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'.
<>br 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
Explicação do argumento
HANDLE AID

Especifica-se uma opção (tecla), associando-


OPTION
se a ela um parágrafo que receberá o controle
(PARAGRAFO)
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.

CICS - Interrupção de processamento


Comando HANDLE ABEND

Formato do comando:

EXEC CICS
Explicação do argumento
HANDLE ABEND

Especifica-se o nome do programa que


PROGRAM ('nome
receberá o controle caso um ABEND venha a
programa')
ocorrer.

Especifica-se o nome de um parágrafo que


LABEL (paragrafo) receberá o controle do programa caso acorra
um ABEND.

Esta opção cancela a tarefa porém não gera


CANCEL
DUMP (default)

Esta opção faz com que um cancelamento seja


RESET
ignorado.

O comando acima é utilizado para cancelar uma tarefa, ignorar um


cancelamento ou passar o controle do programa para um parágrafo do
programa ou para outro programa.

Todas as opcões deste comando sao mutuamente exclusivas.

Este comando somente terá validade para ABEND'S não previstos em


um comando 'HANDLE CONDITION'.

Exemplo do comando:

EXEC CICS
HANDLE ABEND PROGRAM ('ABENDLI')
END-EXEC.

Explicacao do exemplo:

Caso ocorra algum tipo de abend nao previsto no programa de


aplicação, o controle será passado ao programa 'ABENDLI'.

Comando ABEND

Formato do comando:
EXEC CICS ABEND Explicação do argumento

Indica que é para gerar um DUMP da tarefa e a


ABCODE (WORK-
área indicada comtém o nome para o 'DUMP'
NOME)
ser identificado.

Força o cancelamento de todos os níveis


CANCEL
hierárquicos que estão ligados a tarefa.

O comando acima é utilizado para cancelar voluntariamente uma


tarefa.

Exemplo do comando:

EXEC CICS ABEND ABCODE ('XXYY')


END-EXEC.

Explicacao do exemplo:

Caso este comando seja executado, a tarefa será cancelada e será


gerado um DUMP com a identificacao 'XXYY'.
CICS - Tratamento de arquivos VSAM
Para o manuseio dos arquivos no CICS, existe um modulo chamado
FILE CONTROL PROGRAM ( FCP ), sendo que ele controla todos os
acessos aos arquivos.

O 'FCP' possui a FILE CONTROL TABLE ( FCT ) que é o local onde


estão contidas todas as informações referentes as funções de serviço
(READ, WRITE, REWRITE, DELETE, ETC), previstas para um
determinado arquivo e contém também todas as informações
descritivas referente ao arquivo, portanto não há a necessidade de
definição do arquivo pelo programa de aplicação.

O 'FCP' possui as seguintes funções:

 abrir e fechar arquivos


 controle exclusivo
 recuperação de arquivos
 ler para simples consulta
 ler para posterior atualização
 atualização
 deletar registros
 adicionar registros
 liberar o controle exclusivo
 acessar o arquivo sequencialmente

No manuseio de um arquivo pelo programa de aplicação, ocorrendo


um erro por estar efetuando algo que o VSAM não suporta, ocorrerá a
condição de exceção 'ILLOGIC'.
Comando READ

Formato do comando:

EXEC CICS READ Explicação do argumento

DATASET ('nome
Especifica-se o nome do arquivo a acessar.
arquivo')

INTO (WORK- Especifica-se a área onde deverá ser


AREA) colocadoo registro lido.

RIDFLD (WORK-
Especifica-se a chave do registro a ser lido.
CHAVE)

Especifica-se o tamanho do registro a ser lido.


LENGTH (+100)
opcional se for registro fixo.

Informa que o registro a ser lido sofrerá


UPDATE
posterior atualização.

Indica que a chave informada é parcial, ou


GENERIC
seja, não está sendo informada toda a chave.

Especifica-se o tamanho da chave genérica.


Este argumento é usado em conjunto com a
KEYLENGTH (+10)
opção 'GENERIC' e só pode ser usada para
arquivos KSDS.

O CICS tentará ler um registro com chave


GTEQ
maior ou igual a chave informada.

O CICS tentará ler um registro com chave igual


EQUAL
a chave informada ( DEFAULT ).

Para arquivos ESDS, indica que a area


especificada em 'RIDFLD' contem um RBA e
RBA nao a chave do registro. Neste caso, a area
especificada em 'RIDFLD' deve estar definida
PIC S9(008) COMP.

Este comando é utilizado para uma leitura randômica em um arquivo

Exemplo do comando:

EXEC CICS READ DATASET ('D02TAB')


INTO (WORK-TAB)
RIDFLD (WORK-CHAVE)
LENGTH (+130)
END-EXEC.

Explicacao do exemplo:
O CICS tentará ler um registro no arquivo 'D02TAB' com chave igual ao
conteudo de 'WORK-CHAVE', o registro será colocado em 'WORK-TAB'
e seu tamanho é de 130 bytes.

Condição de exceção:

 DSIDERR: o arquivo informado não consta na 'FCT'.


 NOTOPEN: o arquivo informado está fechado.
 NOTFND: o registro requisitado não existe.
 DUPKEY: o arquivo informado é um índice alternado e existe
mais de um registro com a mesma chave alternada
 INVREQ: não existe, na 'FCT', previsão para a utilização deste
recurso
 OUTROS: ILLOGIC, IOERR, LENGERR.

Comando WRITE

Formato do comando:

EXEC CICS WRITE Explicação do argumento

DATASET ('NOME Especifica-se o nome do arquivo que se deseja


ARQUIVO') acessar.

FROM (WORK- Especifica-se a área onde se encontra o


AREA) registro a ser gravado.

Especifica-se a chave do registro a ser


RIDFLD (WORK-
gravado. Deve ser igual a chave da área de
CHAVE)
dados indicada na opção 'FROM'.

Especifica-se o tamanho do registro a ser


LENGTH (+100)
gravado. Opcional se for registro fixo.

Para arquivos ESDS, indica que a área


especificada em 'RIDFLD' contem um RBA e
RBA não a chave do registro. Neste caso, a área
especificada em 'RIDFLD' deve estar definida
PIC S9(008) COMP.

Inserção em massa de registros. As chaves


devem ser ascendentes. Esta operação deve
MASSINSERT
ser terminada por um 'UNLOCK' para um
posterior acesso ao arquivo.

Este comando é utilizado para fazer adição de registros em um arquivo

A opção 'MASSINSERT' permite a inclusão sequencial de registros no


VSAM, sendo que a partir da inclusão do primeiro registro, o CICS
determinará o controle exclusivo para o programa, que deverá ser
liberado quando não houver mais registros a incluir, através do
comando 'UNLOCK'
Exemplo do comando:

EXEC CICS WRITE DATASET ('D02TAB')


FROM (WORK-TAB)
RIDFLD (WORK-CHAVE)
LENGTH (+130)
END-EXEC.

Explicacao do exemplo:

O CICS tentará incluir um registro no arquivo 'D02TAB' com chave


igual ao conteúdo de 'WORK-CHAVE', O registro será retirado de
'WORK-TAB' e seu tamanho é de 130 bytes.

Condição de exceção:

 DUPREC: o registro informado já existe no arquivo


 NOSPACE: não existe mais espaço no arquivo para a adição de
registros.
 INVREQ:
o não existe, na 'FCT', previsão para a utilização deste
recurso
o o arquivo está definido na 'FCT' como ESDS e
o o comando não possui a opção RBA
o o arquivo está definido na 'FCT' como KSDS e
o o comando possui a opção RBA
 Outros: DSIDERR, ILLOGIC, IOERR, LENGERR, NOTOPEN.

Comando REWRITE

Formato do comando:

EXEC CICS
Explicação do argumento
REWRITE

DATASET ('NOME Especifica-se o nome do arquivo que se deseja


ARQUIVO') acessar.

FROM (WORK- Especifica-se a área onde se encontra o


AREA) registro a ser gravado.

Especifica-se o tamanho do registro a ser


LENGTH (+100)
gravado. Opcional se for registro fixo.

Este comando é utilizado para regravar um registro em um arquivo. o


registro deve ter sido anteriormente recuperado através do comando
'READ' com a opção 'UPDATE'. Após a leitura, seu campo chave não
poderá ser alterado.
Exemplo do comando:

EXEC CICS REWRITE DATASET ('D02TAB')


FROM (WORK-TAB)
RIDFLD (WORK-CHAVE)
LENGTH (+130)
END-EXEC.

Explicação do exemplo:

O CICS tentará regravar um registro no arquivo 'D02TAB' com chave


igual ao conteúdo de 'WORK-CHAVE', o registro será' retirado de
'WORK-TAB' e seu tamanho é de 130 bytes.

Condição de exceção:

 INVREQ:
o Não existe, na 'FCT', previsão para a utilização deste
recurso.
o O registro a ser regravado não foi recuperado através
do comando 'READ' com a opção 'UPDATE'.
o A chave do registro a ser regravado foi alterada pelo
programa de aplicação.
 Outros: DSIDERR, ILLOGIC, IOERR, LENGERR, NOTOPEN,
NOSPACE.

Comando DELETE

Formato do comando:

EXEC CICS
Explicação do argumento
DELETE

DATASET ('NOME Especifica-se o nome do arquivo que se deseja


ARQUIVO') acessar.

Especifica-se a chave do registro a ser


RIDFLD (WORK-
deletado. Obrigatório quando usado a opção
CHAVE)
'GENERIC'

Indica que a chave informada é parcial, ou


seja, nao está sendo informada a chave
GENERIC
completa. todos os registros que possuam
esta chave parcial serao deletados.

Especifica-se o tamanho da chave genérica.


este argumento é usado em conjunto com a
KEYLENGTH (+10)
opção 'GENERIC' e sómente pode ser usada
para arquivos KSDS.

NUMREC (WORK- O CICS COLOCARA' NESTE CAMPO O


NUMERO DE REGISTROS QUE O VSAM
DELETOU. ESTE ARGUMENTO SO' PODE SER
QTD) USADO EM CONJUNTO COM A OPCAO
'GENERIC'. O CAMPO DEVE SER DEFINIDO
COMO PIC S9(004) COMP.

Para arquivos ESDS, indica que a area


especificada em 'RIDFLD' contem um RBA e
RBA nao a chave do registro. Neste caso, a area
especificada em 'RIDFLD' deve estar definida
PIC S9(008) COMP.

Este comando é utilizado para deletar um registro ou, se especificada


uma chave genérica, um grupo de registros.

Caso um registro tenha sido lido com a opção 'UPDATE', este


comando pode ser utilizado para deleta-lo. Neste caso as opcões
'RIDFLD', 'KEYLENGTH', 'GENERIC' e 'NUMREC' não podem ser
utilizadas.

A opção 'GENERIC' não pode ser utilizada para arquivo com a opção
'LOG=YES' na 'FCT'.

Exemplo do comando:

EXEC CICS DELETE DATASET ('D02TAB')


RIDFLD (WORK-CHAVE)
KEYLENGTH (+10)
GENERIC
NUMREC (WORK-QTD)
END-EXEC.

Explicação do exemplo:

O CICS tentará deletar todos os registros que possuam em seu campo


chave as 10 primeiras posições iguais as 10 primeiras posições do
campo 'WORK-CHAVE'. Após efetuada a deleção, o CICS colocará em
'WORK-QTD' o nÚmero de registros que o VSAM deletou.

CONDICAO DE EXCECAO:

 NOTFND: O registro indicado não existe no arquivo. Tal


condição de exceção só acontecerá se o registro nao foi lido
com a opção 'UPDATE'.
 Outros: DSIDERR, ILLOGIC, INVREQ, IOERR, NOTOPEN.

Comando UNLOCK

Formato do comando:

EXEC CICS Explicação do argumento


UNLOCK

DATASET ('NOME Especifica-se o nome do arquivo que se deseja


ARQUIVO') acessar.

Este comando é utilizado para liberar o controle exclusivo obtido


através do comando READ com opção 'UPDATE' ou através de uma
operação de inserção em massa de registros (MASSINSERT).

É utilizado quando um registro foi lido para ser atualizado, porem


determinou-se que a atualização nao irá ocorrer.

O controle exclusivo é feito em todo o 'CONTROL INTERVAL' a que


pertence o registro.

Exemplo do comando:

EXEC CICS UNLOCK DATASET ('D02TAB')


END-EXEC.

Explicação do exemplo:

O CICS liberará o controle exclusivo sobre os registros recuperados


através do comando 'READ' com a opção 'UPDATE' no arquivo
'D02TAB'.

Condição de exceção:

 NOTOPEN: O arquivo informado está fechado.

 Outros: DSIDERR, ILLOGIC, INVREQ, IOERR.


CICS - Pesquisa sequencial de arquivos - BROWSE
O BROWSE é uma ferramenta que permite acessar qualquer tipo de
arquivo sequencialmente.

Comando STARTBR

Formato do comando:

EXEC CICS
Explicação do argumento
STARTBR

DATASET ('NOME Especifica-se o nome do arquivo que se deseja


ARQUIVO') acessar.

RIDFLD (WORK- Especifica-se a chave do registro a ser


CHAVE) posicionado.

Indica que a chave informada é parcial, ou


GENERIC
seja, não está sendo informada a chave toda.
Especifica-se o tamanho da chave genérica.
Este arqgumento é usado em conjunto com a
KEYLENGTH (+10)
opção 'GRENERIC' e só pode ser usada para
arquivos KSDS.

O CICS tentará posicionar em registro com


GTEQ
chave maior ou igual a chave informada.

O CICS tentará posicionar em um registro com


EQUAL
chave igual a chave informada (DEFAULT)

Para arquivos ESDS, indica que a área


especificada em 'RIDFLD' contém um RBA e
RBA não a chave do registro. Neste caso, a área
especificada em 'RIDFLD' deve estar definida
PIC S9(008) COMP.

Este comando é utilizado para especificar o registro em um arquivo,


no qual a pesquisa sequencial terá início. Observar que nenhum
registro é recuperado, apenas o 'POINTER' é posicionado no registro
indicado no comando.

Exemplo do comando:

EXEC CICS STARTBR DATASET ('D02TAB')


RIDFLD (WORK-CHAVE)
GTEQ
END-EXEC.

Explicação do exemplo:

O 'POINTER' do arquivo será posicionado no registro que possua o


campo chave maior ou igual ao campo 'WORK-CHAVE'.

Condição de exceção:

NOTFND: o registro informado não existe no arquivo.


Outros: DSIDERR, NOTOPEN, INVREQ, ILLOGIC, IOERR.

Comando READNEXT

Formato do comando:

EXEC CICS
Explicação do argumento
READNEXT

DATASET ('NOME Especifica-se o nome do arquivo que se deseja


ARQUIVO') acessar.

INTO (WORK-
Especifica-se a área que receberá o registro.
AREA)
Especifica-se a chave do registro a ser
RIDFLD (WORK-
posicionado. Deve ser o mesmo campo
CHAVE)
especificado no comando inicial STARTBR.

Especifica-se o tamanho da chave


'GENERICA'. Apesar de nao possuir a opcao
KEYLENGTH (+10) 'GENERIC' ao se especificar um tamanho
menor do que o tamanho da chave tem-se uma
pesquisa generica.

Especifica-se o tamanho do registro a ser lido.


LENGTH (+100)
Opcional se for registro fixo.

Este comando é utilizado para leitura do próximo registro do arquivo


em ordem sequencial.

Exemplo do comando:>

EXEC CICS READNEXT DATASET ('D02TAB')


INTO (WORK-TAB)
RIDFLD (WORK-CHAVE)
END-EXEC.

Explicação do exemplo:

O cics irá recuperar o próximo registro do arquivo que possua o


campo chave igual ao campo 'WORK-CHAVE' e o registro recuperado
será colocado na área 'WORK-TAB'.

Condiçãoo de exceção:

ENDFILE: ocorre quando for encontrado final de arquivo.

Outros: DSIDERR, NOTOPEN, INVREQ, ILLOGIC, IOERR, LENGERR,


DUPKEY.

Comando READPREV

Formato do comando:

EXEC CICS
Explicação do argumento
READNEXT

DATASET ('NOME Especifica-se o nome do arquivo que se deseja


ARQUIVO') acessar.

INTO (WORK-
Especifica-se a área que receberá o registro.
AREA)

RIDFLD (WORK- Especifica-se a chave do registro a ser


CHAVE) posicionado. Deve ser o mesmo campo
especificado no comando inicial STARTBR.

Especifica-se o tamanho total da chave, pois


KEYLENGTH (+10) não é possivel usar a opção 'GENERIC' para
este comando. Opcional.

Especifica-se o tamanho do registro a ser lido.


LENGTH (+100)
Opcional se for registro fixo.

Este comando é utilizado para leitura do registro anterior do arquivo


em ordem sequencial. Usado apenas em arquivos VSAM.

Exemplo do comando:

EXEC CICS READPREV DATASET ('D02TAB')


INTO (WORK-TAB)
RIDFLD (WORK-CHAVE)
END-EXEC.

Explicacao do exemplo:

O CICS irá recuperar o registro anterior do arquivo que possua o


campo chave igual ao campo 'WORK-CHAVE' e o registro recuperado
será colocado na area 'WORK-TAB'.

Condição de exceção:

ENDFILE: ocorre quando for encontrado final logico do arquivo, uma


vez que foi encontrado o inicio fisico do arquivo.

Outros: DSIDERR, NOTOPEN, INVREQ, ILLOGIC, IOERR, LENGERR,


DUPKEY.

Comando RESETBR

Formato do comando:

EXEC CICS
Explicação do argumento
READNEXT

DATASET ('NOME Especifica-se o nome do arquivo que se deseja


ARQUIVO') acessar.

RIDFLD (WORK- Especifica-se a chave do registro a ser


CHAVE) reposicionado.

Indica que a chave informada é parcial, ou


GENERIC seja, nao está sendo informada a chave
completa.

KEYLENGTH (+10) Especifica-se o tamanho da chave genérica.


Este argumento é usado em conjunto com a
opção 'GENERIC' e sómente pode ser usada
para arquivos KSDS.

O CICS tentará posicionar em registro com


GTEQ
chave maior ou igual a chave informada.

O CICS tentarÁ posicionar em um registro com


EQUAL
chave igual a chave informada ( DEFAULT ).

Para arquivos ESDS, indica que a área


especificada em 'RIDFLD' contém um RBA e
RBA não a chave do registro. Neste caso, a área
especificada em 'RIDFLD' deve estar definida
PIC S9(008) COMP

Este comando é utilizado para reposicionamento de um registro no


arquivo para posterior leitura. Observar que nenhum registro é
recuperado, apenas o 'POINTER' é posicionado no registro indicado
no comando.

Este comando só pode ser executado se tiver sido executado


anteriormente com sucesso o comando 'STARTBR'. A opção 'RIDFLD'
deve especificar a mesma área de dados especificada na opção
'RIDFLD' do comando 'STARTBR' correspondente, porém o conteúdo
desta área pode ser diferente.

Exemplo do comando:

EXEC CICS RESETBR DATASET ('D02TAB')


RIDFLD (WORK-CHAVE)
END-EXEC.

Explicação do exemplo:

O 'POINTER' do arquivo será reposicionado no registro que possua o


campo chave igual ao campo 'WORK-CHAVE'. Notar que 'EQUAL' é
assumido no exemplo do comando acima.

Condição de exceção:

NOTFND: o registro informado não existe no arquivo.

Outros: DSIDERR, NOTOPEN, INVREQ, ILLOGIC, IOERR.

Comando ENDBR

Formato do comando:

EXEC CICS
Explicação do argumento
ENDBR
DATASET ('NOME Especifica-se o nome do arquivo que se deseja
ARQUIVO') acessar.

Este comando é utilizado para terminar o BROWSE em um arquivo.

Este comando é obrigatorio quando for efetivada uma pesquisa


sequencial pois se tal fato não ocorrer, o BROWSE não terminará,
ficará suspenso. Exemplo do comando:

EXEC CICS ENDBR DATASET ('D02TAB')


END-EXEC.

Explicação do exemplo:

O CICS terminará o BROWSE no arquivo 'D02TAB'.

Condição de exceção:

INVREQ: ocorre se o comando for executado sem que tenha sido


executado um comando 'STARTBR' com sucesso.

Outros: DSIDERR, ILLOGIC, NOTOPEN.

Consideracao final sobre a pesquisa sequencial

Se a condição de exceção NOTFND ocorrer durante a pesquisa


sequencial, há a necessidade de codificar o comando RESETBR para
reposicionar em um registro para posterior leitura ou codificar o
comando ENDBR para terminara pesquisa sequencial

CICS - Memória temporária ( T S )


É usada para o armazenamento de dados intermediários do CICS.

É gerada e acessada apenas pelo CICS.

Pode ser acessada por varias tarefas.

Fica armazenado em memória principal ou em memória auxiliar


( DISCO ), até que seja deletada ou o CICS pare de funcionar.

Não é necessário constar em nenhuma tabela.

Cada registro a ser gravado deve possuir um nome. O nome pode


variar em extensão de 1 a 8 caracteres. Deve-se tomar o cuidado de
atribuir uma identificação única para o registro.

Pode ser gravado um ou mais registros com o mesmo nome e dentro


de um conjunto de registros com o mesmo nome, um registro
específico poderá ser acessado.

Comando WRITEQ TS
Formato do comando:

EXEC CICS
Explicação do argumento
WRITEQ TS

Especifica-se o nome de dados atribuido ao


QUEUE ('WORK- registro. Pode ser um literal ou uma área de
NOME') dados contendo o nome a ser atribuido ao
registro.

FROM (WORK- Especifica-se a área onde se encontra o


AREA) registro a ser gravado

Especifica-se o tamanho da área de dados a


LENGTH (+100)
ser gravada.

Se estiver sendo incluído registros, o CICS


coloca neste campo o número do registro
ITEM (WORK- gravado. Se estiver sendo feito atualização,
POSI) deve-se informar o número do registro a ser
alterado através deste campo.
O formato deste campo é PIC S9(004) COMP.

Especifica-se que o regstro cujo número está


REWRITE sendo informado na opção 'ITEM' é para ser
atualizado.

Indica que o registro é para ser armazenado na


memória principal. salvo em raras ocasiões e
MAIN
para pequenas quantidades de registros, esta
opção não deve ser utilizada

Indica que o registro é para ser armazenado na


AUXILIARY
memória auxiliar. Esta opção é o default.

Este comando é utilizado para gravar registros em memória


temporária ( TEMPORARY STORAGE - TS )

Exemplo do comando:

EXEC CICS WRITEQ TS QUEUE ('WORK-


NOME')
FROM (WORK-AREA)
LENGTH (+100)
END-EXEC.

Explicação do exemplo:

O CICS gravará o registro em memoria temporaria ( TS ) com o nome


especificado em 'WORK-NOME', os dados que estão em 'WORK-AREA'
com o tamanho de 100 bytes.
Condição de exceção:

 NOSPACE: ocorre se nao houver mais espaço em memória


para a gravação do registro. A ação padrão do CICS é
suspender a tarefa até existir espaço. Caso nao queira que tal
fato ocorra, deve ser codificado um 'HANDLE CONDITION' para
tal exceção.
 ITEMERR: ocorre se o número especificado em item for
diferente dos números de registros existentes na fila 'TS', caso
use-se a opção 'REWRITE'.
 QIDERR: não existe nenhuma fila 'TS' com o nome
especificado na memória temporária.
 INVREQ: o tamanho do registro a ser gravado é zero.
 LENGERR: o tamanho do registro lido é maior do que o
tamanho especificado na opcao 'LENGTH'.
 Outros: dsiderr, illogic, notopen.

Comando READQ TS

Formato do comando:

EXEC CICS
Explicação do argumento
READQ TS

Especifica-se o nome de dados do registro que


QUEUE ('WORK- se deseja acessar. Pode ser um literal ou uma
NOME') area de dados contendo o nome do registro a
ser lido.

INTO (WORK- Especifica-se a área onde deverá ser colocado


AREA) o registro lido.

LENGTH (+100) Especifica-se o tamanho do registro a ser lido.

Especifica-se o núumero do registro a ser lido.


ITEM (WORK- Esta opção deve ser usada se for necessário
POSI) acessar o registro diretamente.
O formato deste campo é PIC S9(004) COMP.

Especifica que o próximo registro da fila


deverá ser acessado. Esta opção deve ser
NEXT
usada se for necessário acessar o registro
sequencialmente. Esta opção é o DEFAULT.

Este comando é utilizado para ler registros em memória temporária


( TEMPORARY STORAGE - TS )

Exemplo do comando:

EXEC CICS READQ TS QUEUE ('WORK-NOME')


INTO (WORK-AREA)
LENGTH (+100)
END-EXEC.

Explicação do exemplo:

O CICS lerá o próximo registro em memória temporária ( TS ) com o


nome especificado em 'WORK-NOME'. OS dados ficarão em 'WORK-
AREA' com o tamanho de 100 bytes.

Condição de exceção:

 ITEMERR: ocorre se o número especificado em item for


diferente dos numeros de registros existentes na fila 'TS' ou
chegou-se ao final da fila
 Outros: INVREQ, IOERR, LENGERR, QIDERR.

Comando DELETEQ TS

Formato do comando:

EXEC CICS
Explicação do argumento
DELETEQ TS

Especifica-se o nome da fila de dados que se


QUEUE ('WORK- deseja deletar. Pode ser um literal ou uma área
NOME') de dados contendo o nome da fila a ser
deletada.

Este comando é utilizado para deletar registros em memória


temporária ( TEMPORARY STORAGE - TS )

Exemplo do comando:

EXEC CICS DELETEQ TS QUEUE ('WORK-


NOME')

END-EXEC.

Explicação do exemplo:

O CICS deletará a fila de dados em memória temporária ( TS ), ou seja,


deletará todos os registros pertencentes fila especificada.

Deve-se sempre lembrar que o espaço ocupado pelos dados na


memória temporária não é automaticamente liberado apos os dados
serem usados. Consequentemente, quando não necessitar mais dos
dados na memória temporária, deve-se liberar o espaço ocupado
emitindo o comando acima.
Condição de exceção:

QIDERR: ocorre se não existir nenhuma fila de TS com o nome


especificado na opção 'QUEUE'.

CICS - Dados transitórios ( T D )


É usada para o armazenamento de dados transitórios do CICS.

Os dados são disponíveis para processamento 'SEQUENCIAL' para


qualquer tarefa que desejar acessar.

Cada registro a ser gravado deve possuir um nome. O nome pode


variar em extensão de 1 a 4 caracteres.

Deve-se tomar o cuidado de atribuir uma identificação única para o


registro.

Deve ser definido na DESTINATION CONTROL TABLE ( DCT ) o nome


dos dados transitorios. Deve-se, tambem, definir se os dados sao
'INTRA-PARTITION' ou 'EXTRA-PARTITION'.

Os dados gravados em INTRA-PARTITION possuem as seguintes


caracteristicas:

 sao gerados e acessados somente pelo cics


 podem ser gravados por tarefas diferentes
 pode ser lido apenas uma vez
 pode ser definido pelo programador de aplicaçao para ser
deletado logo após a leitura
 são gerados registros sequenciais de tamanho variavel
 ficam armazenados em dispositivos de acesso direto

Os dados gravados em EXTRA-PARTITION possuem as seguintes


caracteristicas:
 pode ser gerado no 'CICS' e acessado via 'BATCH'
 pode ser gerado em 'BATCH' e acessado via 'CICS'
 podem ser gravados por tarefas diferentes
 deve ser definido na 'DCT' como entrada ou saida
 pode ser lido apenas uma vez
 sao gerados registros sequenciais de tamanho fixo ou variavel
 podem ficar armazenados em disco, fita ou impressora

Comando WRITEQ TD

Formato do comando:

EXEC CICS
Explicação do argumento
WRITEQ TD

QUEUE ('WORK- Especifica-se o nome de dados atribuido ao


NOME') registro. Pode ser um literal ou uma area de
dados contendo o nome a ser atribuido ao
registro.

FROM (WORK- Especifica-se a area onde se encontra o


AREA) registro a ser gravado.

Especifica-se o tamanho da área de dados a


LENGTH (+100)
ser gravada.

Este comando é utilizado para gravar registros de dados transitórios


( TRANSIENT DATA - TD )

A opção 'LENGTH' somente precisa ser especificada caso os registros


sejam gravados em outro dispositivo que não seja disco.

Exemplo do comando:

EXEC CICS WRITEQ TD QUEUE ('WORK-


NOME')
FROM (WORK-AREA)
LENGTH (+100)
END-EXEC.

Explicação do exemplo:

O CICS gravará o registro como dados transitórios (TD) com o nome


especificado em 'WORK-NOME', os dados que estão em 'WORK-AREA'
com o tamanho de 100 bytes.

Condição de exceção:

 NOSPACE: ocorre se não houver mais espaço na fila de TD


para a gravação do registro. Esta condição só ocorre quando
se processam destinos de intrapartição.
 NOTOPEN: ocorre se o destino estiver fechado. Esta condição
só ocorre quando se processam destinos de extrapartição.
Estes destinos podem ser abertos e fechados pelo
administrador do CICS.
 QIDERR: não existe nenhuma fila 'TD', definido na 'DCT' com o
nome especificado na opção 'QUEUE'.
 LENGERR: o tamanho do registro lido É maior do que o
tamanho mÁximo da fila definido na 'DCT'. Ocorre também se
for especificado um tamanho errado para registros de tamanho
fixo. Ocorre também se não for codificada a opção 'LENGTH' e
a fila de destino não for disco.
 Outros: ioerr.

Comando READQ TD

Formato do comando:
EXEC CICS
Explicação do argumento
READQ TD

Especifica-se o nome de dados do registro que


QUEUE ('WORK- se deseja acessar. Pode ser um literal ou uma
NOME') area de dados contendo o nome do registro a
ser lido.

INTO (WORK- Especifica-se a área onde deverá ser colocado


AREA) o registro lido.

Especifica-se o tamanho do registro a ser lido.


LENGTH (+100) Não pode ser maior que o tamanho
especificado na 'DCT'.

Este comando é utilizado para ler registros de dados transitórios


( TRANSIENT DATA - TD ) Exemplo do comando:

EXEC CICS READQ TD QUEUE ('WORK-NOME')


INTO (WORK-AREA)
LENGTH (+100)
END-EXEC.

Explicação do exemplo:

O CICS lera' o proximo registro de dados transitorios ( TD ) com o


nome especificado em 'WORK-NOME'. Os dados ficarao em 'WORK-
AREA' com o tamanho de 100 bytes.

Condicao de excecao:

 LENGERR: o tamanho do registro lido é maior do que o


tamanho maximo da fila definido na 'DCT'. Ocorre também se
for especificado um tamanho errado para registros de tamanho
fixo. Ocorre também se nao for codificada a opcao 'LENGTH' e
a fila de destino nao for disco. Ocorre também se nao for
codificada a opcao 'LENGTH' e o registro for de tamanho
variável. O tamanho do registro lido é maior do que o tamanho
especificado na opção 'LENGTH'. Neste caso, a area indicada
na opção será atualizado com o valor real do tamanho do
registro.
 NOTOPEN: ocorre se o destino estiver fechado.
 QIDERR: não existe nenhuma fila 'TD', definido na'DCT' com o
nome especificado na opção 'QUEUE'
 QZERO: não existe nenhum registro armazenado na fila de
dados transitórios ( td )
 Outros: INVREQ, IOERR, LENGERR, QIDERR.

Comando DELETEQ TD
Formato do comando:

EXEC CICS
Explicação do argumento
DELETEQ TD

Especifica-se o nome da fila de dados que se


QUEUE ('WORK- deseja deletar. Pode ser um literal ou uma area
NOME') de dados contendo o nome da fila a ser
deletada.

Este comando é utilizado para deletar registros de uma fila de dados


transitórios ( TRANSIENT DATA - TD )

Este comando será utilizado se a área em que foi gravado o registro de


dado transitório for não-reutilizavel.

Exemplo do comando:

EXEC CICS DELETEQ TD QUEUE


('WORK-NOME')
END-
EXEC.

Explicação do exemplo: O CICS deletará a fila de dados transitórios


( TD ), ou seja, deletará todos os registros pertencentes a fila
especificada.

Condiçao de exceção:

QIDERR: ocorre se nao existir nenhuma fila de TD com o nome


especificado na opcao 'QUEUE'.

CICS - Quadro comparativo entre 'TS' e 'TD' (INTRA-PARTITION)


Item comparado INTRA TD TS

Queue ('NAME') 4 bytes 8 bytes

Dispositivo Disco Memória ou disco

Número de vezes que Apenas uma vez Quantas vezes for


o dado pode ser lido necessaria

Inicia nova tarefa Sim Não

Comandos (DEFAULT WRITEQ TD WRITEQ TS


é TS) READQ TD READQ TS
DELETEQ TD DELETEQ TS

Processamento Em 'BATCH' e Somente no 'CICS"


Em 'CICS'

Acesso Sequencial Direto ou sequencial


Atualização Não Sim

Exemplo de utilização Estatísticas, fazer Auxilia o


interface com o Desenvolvedor na
'BATCH" confecção de
programas

Vous aimerez peut-être aussi