Você está na página 1de 60

Centro de Treinamento CICS

Formação Desenvolvedor Mainframe

Introdução.

Definição. O Cics (Customer Information Control System) é um Job do Mainframe


que controla aplicações iterativas entre a CPU do Mainframe e sua rede
de terminais (vídeos e impressoras) locais e remotas.
Seu objetivo é criar aplicações iterativas com o usuário através de telas.
Para viabilizar este ambiente, o Cics também controla todos os programas
que estão interagindo com os terminais (mostrando as telas e lendo
teclados), assim como todos os arquivos usados por estes programas.
Como conseqüência o Cics funciona como um pequeno sistema
operacional, e dentro de seu Address Space o Cics carrega e controla
todos os programas aplicativos de telas, os buffers de todos os arquivos
abertos e compartilhados pelos programas aplicativos, alem das suas
tabelas próprias para gerenciar todo o conjunto.

Arquitetura do Cics O Cics na verdade não é um programa único, mas sim um conjunto de
módulos independentes e de tabelas, cada módulo exercendo uma função
específica.
Também foi criado o conceito de Código de Transação. Segundo este
conceito os usuários do Cics não executam diretamente os programas
escritos pelos programadores. Os usuários devem invocar um código de
serviço (Transaction Code), e o Cics possui uma tabela (PCT –
Processing Control Table) que associa o código de serviço com um
programa. O Cics usa os 4 primeiros caracteres que encontra na tela
como Transaction Code.
Os programas também não podem acessar diretamente os arquivos
administrados pelo Cics. Para efetuar estes acessos os programas devem
executar o módulo File Control Program (FCP) através de um comando de
Cics.

www.escoladeprogramadores.com.br 1
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

Funcionamento de uma transação Cics.

Os itens abaixo são os exemplos de um roteiro de uma transação no Cics:

1 O usuário digita no terminal os 4 caracteres do código da transação que deseja executar.


2 O terminal (ou o seu micro) transporta o conteúdo desta tela para o Cics.
O Cics armazena a tela recebida na tabela TCT (Terminal Control Table). Esta tabela
3
contém uma entrada para cada terminal da rede.
Em seguida o Cics verifica na tabela TCT se já havia algum serviço (transação) atendendo
4
o terminal que enviou a tela.
Como não existia serviço atendendo o terminal, o Cics inicia um novo serviço, usando
5
como código da transação os 4 caracteres recebidos da tela.
Para isto o Cics consulta sua tabela PCT (Processing Control Table) que associa o código
6
da transação com o programa aplicativo que deve ser executado.
Tendo conseguido o código do programa aplicativo, o Cics carrega-o na memória e inicia a
7
sua execução.
No inicio de sua execução o programa aplicativo executa um comando CICS para mover
8
os dados da tela armazenada na tabela TCT para os campos da sua Working-Storage.
O programa aplicativo executa sua lógica usando os dados da tela recebidos na Working-
9
Storage.
Para acessar arquivos, o programa aplicativo emite um comando para o Cics passando-lhe
10
os dados do arquivo.
Usando a tabela FCT (File Control Table), que contem a descrição e o estado atual de
11 todos os arquivos controlados pelo Cics, o Cics executa o comando solicitado pelo
aplicativo e devolve os resultados.
Terminado o processamento dos dados, o programa aplicativo move os resultados para os
12
campos da tela em sua Working-Storage.
Em seguida o programa aplicativo emite um comando Cics que copia os dados da tela da
13 sua Working-Storage para a entrada correspondente na tabela TCT (Terminal Control
Table), e transmite a tela para o terminal do usuário.
Para encerrar a transação, o programa emite um comando de termino para o Cics, que
14 toma as medidas necessárias para o termino do programa, e apaga o código da transação
da tabela TCT (Terminal Control Table).

www.escoladeprogramadores.com.br 2
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

PROGRAMAÇÃO SOB CICS

 Linguagens suportadas: Assembler, COBOL e PL/I.


 Níveis de programação: Macro Level e Command Level.
 Programas devem ser feitos de forma modular, isto é, divididos em programas menores que
passam o controle entre si, acompanhado de dados ou não.
 A passagem do controle de um programa para outro pode ser feita de forma temporária (LINK)
ou permanente (XCTL).
 Quando a passagem é feita via LINK, o programa que recebe o controle é dito de mais baixo
nível. Quando este terminar, o controle volta para a instrução seguinte ao LINK do programa
chamador.
 Quando a passagem é feita via XCTL, o programa que recebe o controle é dito do mesmo
nível. Quando ele terminar, o controle retorna ao programa chamador de nível mais alto, que
pode ser o próprio CICS.

TRANSAÇÕES E TASKS

Transação é um serviço que foi previamente definido para o CICS através de um código escolhido
pelo usuário. Uma transação corresponde à execução de um ou mais programas.

 Por exemplo:
TR01 - Consulta ao saldo de uma conta
TR02 - Emissão de um pedido de compra

www.escoladeprogramadores.com.br 3
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

Cada execução de uma transação define uma TASK no CICS. Uma transação pode ser executada
concorrentemente por mais de um usuário de terminal.

 Cada execução é uma TASK. O KCP é o módulo do CICS que tem como função principal
controlar as múltiplas Tasks em execução.

PARTICULARIDADES DO PROGRAMA EM COBOL

 Não há definições de arquivos: FDs, SELECTs, no programa e sim na tabela do CICS File
Control Table;
 Programa não emite OPEN/CLOSE. É função do CICS;
 Programa não pode conter STOP RUN, utilizar GOBACK ou RETURN;
 Não codificar:
INPUT-OUTPUT SECTION
FILE SECTION da DATA DIVISION
 Não utilizar:
Report Writer, Segmentation, Sort, Trace;
Count, End job, Flow, Dynam, State, Sysdump, Syst, Test;
Statements COBOL: ACCEPT, CURRENT-DATE, DATE, DAY, READ, WRITE, OPEN,
CLOSE, DISPLAY, EXHIBIT, SIGN IS, UNSTRING, SEPARATE, TIME.

www.escoladeprogramadores.com.br 4
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

 Não esquecer:
1. campo de tamanho no comando EXEC CICS, deve ser definido como S9(4) COMP;
2. a DFHCOMMAREA deve ser o primeiro campo da LINKAGE SECTION;
3. os serviços são solicitados ao CICS via EXEC CICS. O programa não se comunica
direto com o método de acesso;
4. o EXEC CICS HANDLE ABEND ativa, reativa ou cancela um EXIT dentro do programa de
aplicação. Com isso a aplicação pode tratar determinados eventos antes de “abendar”;
5. o EIBAID, (campo do bloco de controle EIB, criado no início da task), é utilizado para
identificar qual a tecla de função/comando que o operador pressionou e assim tomarmos
uma ação dentro do programa;
6. o teste do EIBRESP associado à opção NOHANDLE em substituição ao uso do HANDLE
CONDITION, facilita a leitura do programa: melhor estruturado e mais coerente com o uso
do EIBAID;
7. de emitir copy para os books DFHAID e DFHBMSCA;
8. sempre que possível, gravar informações de erro na fila CSMT;
9. Evite “abends” controlados.

INÍCIO TÍPICO DE UM PROGRAMA

IDENTIFICATION DIVISION.
PROGRAM-ID. MEUPROG.
AUTHOR.
*
* ** OBSERVACOES SINTETICAS
*
ENVIRONMENT DIVISION.

DATA DIVISION.
WORKING-STORAGE SECTION.
01 FILLER PIC X(19) „*** INICIO-WORKING ***‟.
*
* ** AREAS E CAMPOS DA WORKING
*
_______
_______
*
* ** COPY DOS BOOKS DFH E MAPAS BMS
*
COPY DFHAID.
COPY DFHBMSCA.
COPY PG010MS.

LINKAGE SECTION.
01 DFHCOMMAREA PIC X(xx).
PROCEDURE DIVISION.

www.escoladeprogramadores.com.br 5
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

TIPOS DE TRANSAÇÕES

NÃO CONVERSACIONAL: Processa um único input (que é o que deu origem a TASK),
responde e encerra. Ela nunca recebe um segundo input do
terminal, portanto não há uma conversação real.

Exemplo:

CONVERSACIONAL: Esse tipo de transação aguarda que o operador responda a suas


solicitações sem liberar nenhum tipo de recurso até o seu término.

Exemplo:
CICS

Task TR01

R01.
EXEC CICS SEND

TR01 EXEC CICS RECEIVE


----
----
GO TO R01.

www.escoladeprogramadores.com.br 6
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

PSEUDO CONVERSACIONAL: Ao terminar, a transação pseudo-conversacional, libera


recursos e memória, devolvendo o controle ao CICS.
Porém, associa o terminal em uso ao código de uma
transação, que será inicializada quando o próximo input
ocorrer no terminal.

Exemplo:

Task TR02

Task TR01
TR01
EXEC CICS SEND

EXEC CICS RETURN


TRANSID (‘TR02’)

OBSERVAÇÕES

 A transação Conversacional, pelo fato de prender os recursos (memória, arquivos) durante


toda sua existência e de existir uma conversação com o operador deve ser evitada.
 Na transação Pseudo-Conversacional, cada RETURN TRANSID equivale a um syncpoint,
(liberação total dos recursos).

www.escoladeprogramadores.com.br 7
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

PREPARAÇÃO DE UM PROGRAMA

PROGRAMA
FONTE

TRANSLATOR Listagem do
LATOR TRANSLATOR

FONTE
COBOL

COBOL Listagem da
COMPILAÇÃO

MÓDULO
OBJETO

LINKAGE Listagem da
EDITOR LINKEDIÇÃO

MÓDULO
DE CARGA

www.escoladeprogramadores.com.br 8
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

TRANSLATOR

 Traduz comandos EXEC CICS em MOVES e CALLS

EXEC CICS RETURN END-EXEC.

gera:

*EXEC CICS RETURN END-EXEC.

MOVE „00160‟ TO DFHEIV0

CALL „DFHEI1‟ USING DFHEIV0

LINKAGE EDITOR

 Acopla o módulo DFHEI1 ao Programa Objeto.

OBSERVAÇÕES IMPORTANTES:

1. A cada TASK criada cuja aplicação é codificada em COMMAND LEVEL o


DFHEIP cria uma WORKING STORAGE, devidamente inicializada para uso
exclusivo da TASK.

2. Para cada TASK o DFHEIB cria um bloco de controle „READ ONLY‟ chamado
DFHEIB e o endereça para uso da TASK.
O EIB contém informações importantes para a programação.

3. A cada nova versão de uma aplicação catalogada na LOADLIB, é importante


emitir o comando:

CEMT SET PROGRAM (programa) NEWCOPY

www.escoladeprogramadores.com.br 9
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

O COMANDO EXEC CICS


 Sintaxe:

EXEC CICS função opção argumento END-EXEC.


função: serviço que está sendo solicitado ao CICS.
opção: descreve uma das várias opções existentes para a função desejada.
argumento: é o argumento passado para o programa “data-value” ou “data-name”.

 Exemplo:
função

EXEC CICS RECEIVE

MAP (name)
MAPSET (name) argumento
INTO (data-area)

opção

END-EXEC.

 Argumentos possíveis para programas COBOL:


DATA-VALUE REWRITE FILE (name)
LENGTH (data-value)
DATA-AREA REWRITE FILE (name)
LENGTH (data-area)
POINTER-VALUE WAIT EVENT ECADDR (prt-value)
POINTER-REFERENCE GETMAIN SET (ptr-ref)
NAME WRITE FILE (name) SYSID (name)
LABEL HANDLE ABEND label
HHMMSS START INTERVAL (hhmmss)

 Considerações:
DATA-VALUE pode ser o nome de um campo ou uma constante. No caso de um
campo, o formato (PIC) e o tamanho dependem de cada comando.
DATA-AREA pode ser o nome de um campo com o formato (PIC) e o tamanho
correto para o argumento.

NAME pode ser o nome de um campo ou um literal entre aspas.

www.escoladeprogramadores.com.br 10
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

TRATAMENTO DE ERROS

Retorno dos comandos.

Cada um dos comandos acima possui um conjunto especifico de condições de retorno. Por
exemplo, o comando:

EXEC CICS READ FILE(CLIENTE) RIDFLD(CODCLI) END-EXEC

Pode retornar situações como:

Erro Código do erro


Registro não encontrado NOTFND
Arquivo não está aberto NOTOPEN
Erro na leitura IOERR
Arquivo desconhecido FILENOTFOUND

Antes do aparecimento de programas estruturados, para tratar estes retornos em Command


Level, colocava-se antes dos comandos, (no exemplo acima antes do EXEC CICS READ), um
comando HANDLE CONDITION que tem como sintaxe:

EXEC CICS HANDLE CONDITION condição parágrafo END-EXEC.

Este comando define para o Cics os parágrafos para onde a execução do programa será desviada
para cada uma das condições. Ex.:

EXEC CICS HANDLE CONDITION


NOTFND(EMITIR-ERRO-NÃO-EXISTE)
NOTOPEN(ABRIR-ARQUIVO)
IOERR(EMITIR-ERRO-LEITURA)
FILENOTFOUND(ERRO-ARQUIVO-DESCONHECIDO)
END-EXEC.

O comando HANDLE CONDITION não deve ser utilizado em programas estruturados, porque o
desvio para o parágrafo de tratamento do erro é feito por um GO TO do Cobol, que é incompatível
com programas estruturados.

Retorno dos comandos em programas estruturados.

www.escoladeprogramadores.com.br 11
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

Em programas estruturados deve-se adotar o esquema abaixo para capturar retorno dos
comandos:
A – definir na WORKING-STORAGE um campo para capturar o retorno. Este campo deve ser
binário com 4 posições:
05 CAMPO-RETORNO PIC S9(4) COMP.
B – Todos os comandos Command Level que precisarem capturar retorno deverão incluir a
clausula RESP:
RESP(CAMPO-RETORNO)
C – Após o comando deverão ser incluídos comandos Cobol de teste da variável retorno:
EVALUATE CAMPO-RETORNO
WHEN DFHRESP(NORMAL)
MOVE ------
WHEN DFHRESP(NOTFND)
MOVE ------
D – O valor dos retornos a serem testados é conseguido com a macro DFHRESP. O retorno
Normal é dado pela macro e o argumento NORMAL, e para as outras condições devem ser
usados os argumentos de retorno documentados nos comandos correspondentes ao longo da
apostila.
E – Exemplo completo de um comando:

WORKING-STORAGE SECTION.
----------------
05 CAMPO-RET PIC S9(4) COMP.
05 RET-EDITADO PIC –ZZZ9.
-----------------
PROCEDURE DIVISION.
------------------
EXEC CICS READ
FILE(CLIENTE)
RIDFLD(CODCLI)
INTO(REG-CLIENTE)
RESP(CAMPO-RET)
END-EXEC
EVALUATE CAMPO-RET
WHEN DFHRESP(NORMAL)
MOVE ---------
WHEN DFHRESP(NOTFND)
MOVE ‘CLIENTE NAO EXISTE’ TO MSGO
WHEN OTHER
MOVE CAMPO-RET TO RET-EDITADO
MOVE ‘ERRO IMPREVISTO ‘ TO MSGO
MOVE RET-EDITADO TO MSGO(17:5)
END-EVALUATE

www.escoladeprogramadores.com.br 12
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

COMANDOS DE INTERVAL CONTROL

EXEC CICS ASKTIME

[ABSTIME (data-area)]

END-EXEC

 atualiza o “TIME OF DAY” a partir do CLOCK do CICS

 atualiza os campos EIBDATE e EIBTIME

 recupera o horário corrente em número de milisegundos, a partir de


01/01/1900.

EXEC CICS FORMATTIME


ABSTIME (data-area)
DATESEP(‘c’) TIMESEP(‘c’)
DDMMYY (data-area)
TIME (data-area)
END-EXEC

 recupera o valor armazenado, adquirido via ASKTIME, no formato especificado


pelo usuário, (Ver opções no comando).

EXEMPLO:

EXEC CICS ASKTIME ABSTIME(ABSOLUTO)


END-EXEC

EXEC CICS FORMATTIME ABSTIME(ABSOLUTO)


DATESEP(„/‟) TIMESEP(„:‟)
DDMMYY(DATAFOR)
TIME(TIMEFOR)
END-EXEC

OBS: Se ao invés de indicação explicita for especificado DATEFORM(DATAFOR), a data aparece


no formato especificado na SIT.

ABSOLUTO área de 8 bytes em formato compactado.


PIC S9(15) COMP-3
DATAFOR campo de 8 bytes em caracter.
PIC X(8)
TIMEFOR idem.

www.escoladeprogramadores.com.br 13
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

COMANDOS DE PROGRAM CONTROL

EXEC CICS LINK PROGRAM (‘name’)


[COMMAREA (data-area)
[LENGTH (data-value)]]
END-EXEC

CICS
nível 0

PROG A


LINK

RETURN
nível 1

PROG B



RETURN
nível 2

EXEC CICS XCTL PROGRAM (‘name’)


[COMMAREA (data-area)
[LENGTH (data-value)]]
END-EXEC

CICS
nível 0

PROG A PROG B
 •
 •
XCTL •

RETURN RETURN
nível 1

EXEC CICS RETURN


[TRANSID (‘name’)
[COMMAREA (data-area)
[LENGTH (data-value)]]]
END-EXEC

www.escoladeprogramadores.com.br 14
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

USO DA COMMAREA

Podemos passar uma área com dados entre programas ou transações, através da COMMAREA.

 Quando um programa emite um LINK para outro programa.

Nesta caso, o programa chamado tem acesso a mesma COMMAREA do programa que
emitiu o LINK.

 Quando um programa emite um XCTL para um outro programa ou um comando EXEC CICS
RETURN TRANSID( ).

Neste caso, a COMMAREA é copiada para o novo programa ou para a nova transação.

 O programa chamado deve testar o conteúdo do campo EIBCALEN para saber se existe ou
não COMMAREA.

EXEMPLOS DE USO DA COMMAREA

CASO 1 - COMMAREA passada via LINK


PGM0010

WORKING-STORAGE SECTION.
01 PASSAR.
05 CHAVE PIC 99.
05 NOME PIC X(18).

PROCEDURE DIVISION.

EXEC CICS LINK PROGRAM (‘PGM0020’)


COMMAREA (PASSAR)
LENGTH (20)
END-EXEC.
IF CHAVE EQUAL 0
----
----
----
EXEC CICS RETURN
END-EXEC.

www.escoladeprogramadores.com.br 15
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

PGM0020
WORKING-STORAGE SECTION.
LINKAGE SECTION.
01 DFHCOMMAREA.
05 CHAVE PIC 99.
05 NOME PIC X(18).
PROCEDURE DIVISION.
----
IF EIBCALEN EQUAL 0
PERFORM 999-ERRO.
----
----
MOVE 0 TO CHAVE
----
EXEC CICS RETURN
END-EXEC.

CASO 2 - COMMAREA PASSADA VIA RETURN - PGM0010 - TRANSAÇÃO TA01

WORKING-STORAGE SECTION.
01 COMUNICA
02 FLAG-W PIC X(01) VALUE ‘N’.
02 RESTO-W PIC X(50).
_________
_________

LINKAGE SECTION.
01 DFHCOMMAREA.
02 FLAG-L PIC X(01).
02 RESTO-L PIC X(50).
.
PROCEDURE DIVISION.
* A APLICACAO ESTA COMECANDO?
IF EIBCALEN=0
MOVE ‘S’ TO FLAG-W
_________
_________

EXEC CICS RETURN


TRANSID (‘TA01’)
COMMAREA (COMUNICA)
LENGTH(51) END-EXEC.

*A APLICACAO NAO ESTA COMECANDO!


EXEC CICS LINK
PROGRAM(‘PRCA02’)
COMMAREA(DFHCOMMAREA)
LENGTH(EIBCALEN) END-EXEC.
_________
GOBACK.

www.escoladeprogramadores.com.br 16
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

BMS - BASIC MAPPING SUPPORT

O BMS-BASIC MAPPING SUPPORT é uma interface entre o CICS e o programa de aplicação.

Permite tornar o programa de aplicação independente das características do hardware do terminal,


pois baseia-se em pré-definições existentes em tabelas do CICS e informações nos mapas.

MAPAS

Contém a formatação dos campos para input e output, tornando a comunicação com o usuário
mais amigável e segura.

 MAPAS FÍSICOS: Define o posicionamento, valor e atributo dos campos


constantes e de campos variáveis.

 MAPAS LÓGICOS: Define os “layouts” das áreas de saída (para mapas de saída) ou das
áreas de entrada (para mapas de entrada) correspondentes aos
respectivos mapas físicos.

MAPSET

Um conjunto de mapas, utilizados conjuntamente em uma aplicação define um


MAPSET. No entanto, um MAPSET pode ser constituído de um único mapa.

DFHMSD especificação do MAPSET

DFHMDI especificação do 1° mapa

DFHMDF especificação do 1º campo do 1º mapa

DFHMDF especificação do 2º campo do 1º mapa

DFHMDI especificação do 2º mapa

DFHMDF especificação do 1º campo do 2º mapa

DFHMDF especificação do 2º campo do 2º mapa

DFHMSD Fim do MAPSET

www.escoladeprogramadores.com.br 17
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

EXEMPLO

DEFINIÇÃO DO MAPA LÓGICO

www.escoladeprogramadores.com.br 18
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

Continuação: caractere diferente de space na coluna 72 e a próxima linha a partir da coluna 16.

DEFINIÇÃO DO MAPA LÓGICO

 Utiliza o mesmo conjunto de macros especificado no exemplo anterior, com TYPE=DSECT e


LANG=COBOL

MSCURSO DFHMSD TYPE=DSECT, TIOAPFX=YES,


MODE=INOUT,
LANG=COBOL, CTRL={FREEKB, FRSET}
.
.

DFHMSD TYPE=FINAL
OBS:O nome do MAPSET deve constar da PPT.

O mapa físico deve ser catalogado em uma LOADLIB conhecida do CICS e o mapa lógico em
uma SOURCE LIB (Copy Library do COBOL).

SAÍDA GERADA PELO MAPA LÓGICO

www.escoladeprogramadores.com.br 19
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

UTILIZANDO O MAPA LÓGICO EXEC CICS SEND MAP („name‟)


MAPSET („name‟)
WORKING-STORAGE SECTION. FROM (data-area)
[DATAONLY | MAPONLY] [ALARM]
-------------
[CURSOR (data-value)]
------------- [ERASE] [FREEKB] [FRSET]
END-EXEC
COPY MSCURSO.
------------- EXEC CICS RECEIVE MAP („name‟)
MAPSET („name‟)
INTO (data-area)
END-EXEC

OBS: Toda a vez que for emitido um RECEIVE MAP para recebimento de dados não formatados
ou toda a vez que o usuário apertar uma tecla funcional sem entrar dados o programa sai pela
condição de MAPFAIL.

EXEMPLOS DE COMANDOS DE BMS

EXEC CICS SEND MAP(„MACURSO‟) MAPSET(„MSCURSO‟)


MAPONLY END-EXEC.

EXEC CICS RECEIVE MAP(„MACURSO‟) MAPSET(„MSCURSO‟)


INTO(MACURSOI) END-EXEC.

www.escoladeprogramadores.com.br 20
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

ALTERANDO DINAMICAMENTE OS BYTES DE ATRIBUTO

- Existe um BOOK no ambiente Cics (DFHBMSCA) com a maior parte das configurações de
atributo prontas. Para alterar um atributo na tela devemos mover para o sub-campo
atributo (sufixo A) um dos valores mostrados na tabela abaixo.

Atributos Valor Hexa BOOK


DFHBMSCA

ASKIP - BRT OFF 8 F8 DFHBMASB


ASKIP - BRT ON 9 F9
ASKIP - NORM OFF 0 F0 DFHBMASK
ASKIP - NORM ON 1 F1 DFHBMASF
ASKIP - DRK OFF @ 7C
ASKIP - DRK ON ´(aspas 7D
PROT ALFA BRT OFF Y E8 DFHPROTI
PROT ALFA BRT ON Z E9
PROT ALFA NORM OFF -(hifen) 60 DFHBMPRO
PROT ALFA NORM ON / 61 DFHBMPRF
PROT ALFA DRK OFF % 6C DFHPROTN
PROT ALFA DRK ON _(under 6D
UNPROT ALFA BRT OFF H C8 DFHBMBRY
UNPROT ALFA BRT ON I C9 DFHUNIMD
UNPROT ALFA NORM OFF spaces 40 DFHBMUNP
UNPROT ALFA NORM ON A 41 DFHBMFSE
UNPROT ALFA DRK OFF < 4C DFHBMDAR
UNPROT ALFA DRK ON ( 4D DFHUNNOD
UNPROT NUM BRT OFF Q D8 DFHUNNUB
UNPROT NUM BRT ON R D9 DFHUNINT
UNPROT NUM NORM OFF & 50 DFHBMUNN
UNPROT NUM NORM ON J D1 DFHUNNUM
UNPROT NUM DRK OFF * 5C
UNPROT NUM DRK ON ) 5D DFHUNNON

- O valor DFHALL da área DFHBMSCA é usado para reconstituir (RESET) os valores


originais do atributo de um campo.
- Exemplo: Se desejarmos mostrar na tela o campo ACCTNO com as características
ASKIP, BRT e OFF, usaremos o código:
- MOVE DFHBMASB TO ACCTNOA.
- Ou também:
- MOVE „9‟ TO ACCTNOA.

- O sub-campo de dados (sufixo O) deverá conter o texto a ser mostrado no campo. Ex: Se
o valor de ACCTNO foi lido de um arquivo para o campo ACCTNO-ARQ então o código
será:
MOVE ACCTNO-ARQ ACCTNOO.

www.escoladeprogramadores.com.br 21
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

WORKING-STORAGE SECTION.
COPY DFHBMSCA,
DFHBMUNP - DESPROTEGIDO
DFHBMPRO - PROTEGIDO
DFHBMBRY - BRILHANTE
DFHBMASK - AUTOSKIP
DFHBMFSE - DESPROTEGIDO/MDT SET
DFHBMPRF - PROTEGIDO/MDT SET

PROCEDURE DIVISION.

MOVE DFHBMASK TO CODIGOA

MOVE LOW-VALUES TO CODIGOO

EXEC CICS SEND MAP ...

Exec Interface Block (EIB)

Para fornecer dados do sistema (data, hora, terminal etc.), o Cics mantém dentro dos programas
de aplicação uma área de informações chamada Exec Interface Block (EIB). O pre-compilador de
comandos Cics insere na Linkage Section dos programas fontes uma copia desta área, e, portanto
os programas Cics podem consultar qualquer campo desta área. Os principais campos estão
descritos abaixo:

Campo Formato Descrição


EIBAID PIC X. Contem o código da tecla usada para enviar a ultima
tela (ENTER, PF1 etc.). Veja tabela em seguida.
EIBCALEN PIC S9(4) COMP. Comprimento da Common Area(Comandos LINK,
START etc.)
EIBCPOSN PIC S9(4) COMP. Posição do cursor na tela (valor entre 0 e 1919).
EIBDATE PIC S9(7) COMP-3. Data da transação no formato CAADDD (C = século).
EIBDS PIC X(8). Nome do ultimo arquivo acessado.
EIBFN PIC XX. Código do ultimo comando Cics executado (Ver
manuais IBM).
EIBRCODE PIC X(6). Return Code do ultimo comando executado.
EIBRESP PIC S9(8) COMP. Código da condição (Handle Condition) gerada pelo
ultimo comando.
EIBRESP2 PIC S9(8) COMP. Complemento do EIBRESP.
EIBTASKN PIC S9(7) COMP-3. Numero seqüencial atribuído pelo Cics para a
transação.
EIBTIME PIC S9(7) COMP-3. Hora da task no formato HHMMSS.
EIBTRMID PIC X(4). Código do terminal.
EIBTRNID PIC X(4). Código da transação.

EIBAID

www.escoladeprogramadores.com.br 22
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

Os valores retornados em EIBAID são os seguintes:


Tecla Caracter Valor Hexa(EBCDIC)
ENTER „ (aspas simples) 7D
PF1 1 F1
PF2 2 F2
PF3 3 F3
PF4 4 F4
PF5 5 F5
PF6 6 F6
PF7 7 F7
PF8 8 F8
PF9 9 F9
PF10 : 7A
PF11 # 7B
PF12 @ 7C
PA1 % 6C
PA2 > 6E
PA3 , (Virgula) 6B
CLEAR - (Hifen) 6D

As teclas PA1, PA2 e PA3 são teclas exclusivas do terminal do Mainframe. Elas não transmitem
os dados teclados, somente transmitem o sinal mostrado na tabela acima.

TESTE DE TECLAS FUNCIONAIS


 Após a utilização de uma tecla funcional, o campo EIBAID é posicionado de acordo
com a tecla pressionada.
 Procedimento de teste:
1. copiar o book DFHAID na WORKING-STORAGE SECTION.
2. testar o campo EIBAID com os nomes gerados via DFHAID.
 EXEMPLO:
WORKING-STORAGE SECTION
COPY DFHAID
DFHENTER
DFHCLEAR
DFHPA1
.
DFHPF1
.
PROCEDURE DIVISION.

EXEC CICS RECEIVE MAP _______

IF EIBAID IS EQUAL DFHPF12 THEN


__________
______________
_________________

www.escoladeprogramadores.com.br 23
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

CONTROLE DE ARQUIVOS - Comandos, Opções e condições

ACESSO A ARQUIVOS

APLICAÇÃO

EXEC CICS READ


FILE („ARQ1‟)

E.I.P. F.C.P. ARQ1

 O arquivo e suas características, bem como as possibilidades de acesso devem estar definido
na FCT (File Control Table)

 Arquivos suportados pelo FIle Control:


VSAM
KSDS
ESDS
RRDS

BDAM

PESQUISA A ARQUIVOS VSAM

ESDS

 todo registro é identificado pelo seu RBA.

 adição somente no final do arquivo.

 atualização INPLACE permitida sem alteração de tamanho.

 deleção não permitida.

 normalmente usado para pesquisa seqüencial.

100 100 100


------
bytes bytes bytes

RBA=0 RBA=100 RBA=300 RBA=450

www.escoladeprogramadores.com.br 24
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

KSDS

 registros podem ser acessados seqüencialmente ou diretamente através de campo chave.

 registros podem ser incluídos, atualizados e deletados.

 todo CLUSTER KSDS é constituído de uma área de índice e uma área de dados.

 espaços livres devem ser projetados dentro do CIs e dos CAs para minimizar a ocorrência de
”splits”.

RRDS

 cada registro é acessado por sua posição específica dentro do arquivo.

 cada registro possui um espaço, de tamanho idêntico, reservado dentro do arquivo.

 os registros podem ser acessados seqüencialmente ou diretamente pelo número relativo do


registro no arquivo.

REG 4

REG1 REG2

espaço 1 espaço 2 espaço 3 espaço 4 espaço 5

OBSERVAÇÃO:

 em todo acesso a arquivo VSAM é necessário informarmos um campo


identificador:

KSDS CHAVE COMPLETA OU PARCIAL

ESDS RBA

RRDS RRN

www.escoladeprogramadores.com.br 25
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

EXEC CICS READ FILE („name‟)


LENGTH (data-area)
RIDFLD (data-area)
INTO (data-area)
[KEYLENGTH (data-value)]
[GENERIC]
[RBA | RRN]
[GTEQ | EQUAL]
END-EXEC

PESQUISA A ARQUIVOS VSAM

WORKING-STORAGE SECTION.
01 REGISTRO.
-----------
-----------
-----------
-----------
01 MAPAI.
------------
------------
------------
------------
05 MATI PIC X(6).
------------
------------
------------
------------
01 TAMREC PIC S9(4) COMP.
-------------
-------------
-------------
-------------
PROCEDURE DIVISION.
EXEC CICS RECEIVE MAP(„MAPA‟) - - MAPSET(--)
END-EXEC.
MOVE 100 TO TAMREC.
EXEC CICS READ FILE(„ARQ1‟) RIDFLD(MATI)
INTO(REGISTRO) LENGTH(TAMREC)
END-EXEC.

www.escoladeprogramadores.com.br 26
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

EXEMPLO DE PESQUISA A ARQUIVO

CHAVES

12500 13870 21325 23500 28120

ARGUMENTO DE PESQUISA: 13100


PESQUISA COMPLETA MAIOR OU IGUAL
REGISTRO OBTIDO: 13870
PESQUISA GENÉRICA MAIOR OU IGUAL
TAMANHO DO ARGUMENTO DE PESQUISA: 3

ARGUMENTO DE PESQUISA: 200


REGISTRO OBTIDO: 21325

PESQUISA GENÉRICA IGUAL


TAMANHO DO ARGUMENTO DE PESQUISA: 2
ARGUMENTO DE PESQUISA: 22
REGISTRO NÃO ENCONTRADO

www.escoladeprogramadores.com.br 27
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

CONDIÇÕES DE EXCEÇÃO
ENDFILE
PREVISTAS
NOTFND

INVREQ
ERROS FILENOTFOUND
ILLOGIC

IOERR
EXTERNAS DISABLED
NOTOPEN

- ERROR - QUALQUER CONDIÇÃO DIFERENTE DE NORMAL.


- ILLOGIC - ERRO INTERNO DO VSAM

PESQUISAR BYTES 1 E 2 DO EIBRCODE


BYTE1 - VSAM RETURN CODE
BYTE2 - VSAM ERROR CODE

EXEMPLO DE TESTE DE CONDIÇÃO DE ERRO

WORKING-STORAGE SECTION
--------
--------
--------
01 CODERRO PIC S9(8) COMP.
--------
--------

PROCEDURE DIVISION.
--------
--------
--------
EXEC CICS READ FILE(„ARQ1‟) RESP(CODERRO)
END-EXEC.
IF CODERRO IS EQUAL TO DFHRESP(NORMAL) THEN
--------
--------
--------
ELSE
IF CODERRO IS EQUAL TO DFHRESP(NOTFND) THEN
--------
--------
--------

www.escoladeprogramadores.com.br 28
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

BROWSE - PRINCIPAIS COMANDOS

STARTBR/RESETBR

EXEC CICS STARTBR FILE(„name‟) RIDFLD(data-area)


[KEYLENGTH(data value) [GENERIC ]]
[REQID(data-value)] [RBA | RRN]
[GTEQ|EQUAL]
END-EXEC

READNEXT/READPREV

EXEC CICS READNEXT FILE („name‟) INTO (data-area)


LENGTH (data-area) RIDFLD (data-area)
[KEYLENGTH (data-value)] [RBA | RRN]
REQID (data-value)
END-EXEC

ENDBR

EXEC CICS ENDBR FILE(„name‟) REQID(data-value)

www.escoladeprogramadores.com.br 29
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

EXEMPLO DE “BROWSE”

WORKING-STORAGE SECTION.
--------
--------
--------
05 CHAVE PIC X(8)
05 CODERRO PIC S9(8) COMP.
--------
--------
--------
PROCEDURE DIVISION.
--------
--------

MOVE VALOR TO CHAVE

EXEC CICS STARBR FILE(„ARQ1‟) RIDFLD(CHAVE)


RESP(CODERRO) END-EXEC.

IF CODERRO IS EQUAL DFHRESP(NORMAL)


PERFORM ROT-LER UNTIL CODERRO
EQUAL DFHRESP(ENDFILE)
EXEC CICS ENDBR FILE(„ARQ1‟) END-EXEC
ELSE
GO TO ROTERRO.
---------
---------
---------
ROT-LER.

EXEC CICS READNEXT FILE(„ARQ1‟) INTO( )


LENGTH ( ) RIDFLD(CHAVE) RESP(CODERRO)
END-EXEC
----------
----------
----------
ROTERRO.
---------
---------

www.escoladeprogramadores.com.br 30
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

ATUALIZAÇÃO DE REGISTROS VSAM

REWRITE
READ
registro
DELETE
com opção
UPDATE
UNLOCK

REWRITE/DELETE

REWRITE

EXEC CICS REWRITE FILE (name)


FROM (data-area)
LENGTH (data-value)
END-EXEC

DELETE

EXEC CICS READ FILE („name‟)


RIDFLD (data-area)
INTO (data-area) UPDATE
END-EXEC

EXEC CICS DELETE FILE („name‟) [GENERIC


NUMREC (data-area)]
[RBA/RRN]
END-EXEC

EXEC CICS DELETE FILE („name‟)


RIDFLD (data-area)

UNLOCK

EXEC CICS UNLOCK FILE (name)

www.escoladeprogramadores.com.br 31
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

CONDIÇÕES DE EXCEÇÃO

 LENGERR

 NOSPACE

 INVREQ

 ILLOGIC

ILLOGIC - bytes 1 e 2 do campo EIBRCODE

VSAM RETURN CODE

VSAM ERROR CODE

EXEMPLO DE ATUALIZAÇÃO DE ARQUIVO

MOVE valor TO CHAVE.


EXEC CICS READ FILE („ARQ1‟) RIDFLD (CHAVE)
INTO (ARQENT) LENGTH (RECL) UPDATE
RESP (CODERRO)
END-EXEC.
IF CODERRO IS NOT EQUAL DFHRESP (NORMAL)
GO TO ROTERRO.
* ATUALIZA OS CAMPOS DO REGISTRO
EXEC CICS REWRITE FILE („ARQ1‟) FROM (ARQENT)
LENGTH (RECL) RESP (CODERRO)
END-EXEC.
IF CODERRO IS NOT EQUAL DFHRESP (NORMAL)
GO TO ROTERRO.

ATUALIZAÇÃO EM MODO CONVERSACIONAL


READ FILE („ARQNC‟) UPDATE
SEND MAP
RECEIVE MAP
REWRITE FILE („ARQNC‟)

OBS: O Control Interval que contém o registro lido para atualização fica sob
controle exclusivo até o REWRITE.

www.escoladeprogramadores.com.br 32
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

ATUALIZAÇÃO EM MODO PSEUDO CONVERSACIONAL

TRANSAÇÃO : TRU1 TRANSAÇÃO: TRU2

------------------ -----------------

------------------ -----------------

READ FILE („ARQ01‟) RECEIVE MAP

SEND MAP READ FILE („ARQ01‟) UPDATE

RETURN TRANSID („TRU2‟) REWRITE („ARQ01‟)

RETURN

- O EXEMPLO ACIMA FUNCIONA ?

CONDIÇÃO DE “DEADLOCK”

READ REGISTRO 1 READ REGISTRO 2


UPDATE UPDATE

ALOCA

CI1 REGISTRO 1 REGISTRO 2 CI1

READ REGISTRO 2 READ REGISTRO 1


UPDATE UPDATE

AGUARDA

PARA EVITAR DEADLOCKS:

- todos os programas que acessam os mesmos conjuntos de arquivos devem emitir read com
opção UPDATE na mesma ordem.
- procurar reter o C.I. durante o menor período de tempo possível
OBS: CICS controla ‘DEADLOCKS’ via ‘ABEND’ da TASK por tempo.

www.escoladeprogramadores.com.br 33
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

ADIÇÃO DE UM NOVO REGISTRO

EXEC CICS WRITE FILE („name‟)


FROM (data-area)
LENGTH (data-value)
RIDFLD (data-area)
[RBA | RRN] [MASSINSERT]
END-EXEC

 a opção MASSINSERT deve ser utilizada quando se deseja incluir um conjunto


de registros em ordem de chave crescente.

 após o término da operação de MASSINSERT deve ser emitido o comando


„UNLOCK‟.

EXEMPLO DE ADIÇÃO
------------
------------
------------
EXEC CICS WRITE FILE(„ARQNC‟) RIDFLD(CHAVE)
FROM(ENTRADA) LENGTH(RECL) RESP(CODERRO)
END-EXEC.
IF CODERRO IS NOT EQUAL DFHRESP(NORMAL)
GO TO ROTERRO
---------------
---------------
---------------

OBSERVAÇÃO:

 em arquivos ESDS o registro é sempre adicionado no fim do arquivo e o RBA do


registro volta em RIDFLD.

 em arquivos KSDS se já existir registro com a mesma chave ocorre a condição


DUPREC.

www.escoladeprogramadores.com.br 34
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

ACESSANDO ARQUIVOS SQL/DS ou DB2

 Comando EXEC SQL requer uso de Translator especial, que transforma o EXEC SQL em
CALL.

programa
fonte

translator
SQL

fonte sem
SQL

translator
EXEC CICS

fonte sem
EXEC CICS

compilador

módulo
objeto

Linkage
Editor

módulo
de carga

www.escoladeprogramadores.com.br 35
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

OBSERVAÇÕES:

 DB2 executa em região fora CICS.

 Integridade dos dados é do próprio do DB2.

 Caminho do CICS para o DB2 são definidos através da Resource Control Table.

 Vantagens:

estrutura de dados maleável

independência da aplicação em relação a modificação dos dados.

IRLM

DATA

BASE

SERVICE

CICS SYSTEM

DATA

BASE

ACESSANDO TABELAS DB2/SQL

WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC.
** expande book SQL-CODE (mensagens de erro).

EXEC SQL INCLUDE .... END-EXEC.


*** copy do layout de cada tabela

EXEC SQL DECLARE CURSORn


CURSOR FOR SELECT ....
PROCEDURE DIVISION.
EXEC SQL SELECT nome-col1, nome-col2, ...
INTO :nome-col1, :nome-col2, ...
FROM userid.nome da tabela
WHERE ....
ORDER BY
001-ROTINA-ERRO.
EXEC SQL ROLLBACK
EXEC CICS SYNCPOINT ROLLBACK
NOHANDLE END-EXEC.

www.escoladeprogramadores.com.br 36
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

TRATAMENTO DE CONDIÇÕES DE EXCEÇÃO/ERRO

 via RESP (---) dentro do próprio comando.

 deixando que assumido o tratamento „DEFAULT‟ conforme o erro ocorrido.

ABEND TASK
SUSPEND TASK

 desviar para uma rotina comum ou específica de tratamento de erro.

 colocando a opção NOHANDLE no comando e testando o campo EIBRCODE.

 Após a execução do comando, testar o campo EIBRESP com o código específico da condição
a ser validada.

00 OK
01 ERROR
.
.
.
13 NOT FOUND
14 DUPREC
87 OPEN ERROR

TRATAMENTO DE CONDIÇÕES DE ERRO

 via codificação da instrução “HANDLE CONDITION” antes da codificação comandos aos quais
ela se aplica.

 podemos codificar várias instruções “HANDLE CONDITION” a última ação especificada para
tratamento de um certo erro é considerada.

EXEMPLO:

www.escoladeprogramadores.com.br 37
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

---------
--------
HANDLE CONDITION NOTFND(ROT1)
----------
----------
----------
HANDLE CONDITION NOTFND(ROT2)

EXEC CICS READ DATASET (------)


RIDFLD (CHAVE) ---------- END-EXEC

 em qualquer instrução a opção NOHANDLE desativa o tratamento de erro para qualquer


exceção ocorrida.

EXEMPLO:

HANDLE CONDITION NOTFND(ROT1) DSIDERR(ROT2)

EXEC CICS READ DATASET ( ) RIDFLD(CHAVE)

NOHANDLE ------ END-EXEC

TRATAMENTO DE CONDIÇÕES DE EXCEÇÃO

EXEC CICS HANDLE CONDITION (label)


condition (label) condition (label) ----
END-EXEC

EXEMPLOS:

1) EXEC CICS HANDLE CONDITION NOTFND(ROTNAO)


ERROR(ROTERRO) END-EXEC

2) EXEC CICS HANDLE CONDITION NOTFND(ROTNAO)


DSIDERR(ROTDAT) END EXEC

 nesse caso qualquer condição de exceção provocará ação DEFAULT.

3) EXEC CICS HANDLE CONDITION NOTFND(ROTNAO)


DSIDERR ERROR(ROTERRO) END-EXEC

www.escoladeprogramadores.com.br 38
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

COMO DESATIVAR AÇÕES INDICADAS VIA HANDLE CONDITION

 incluindo no comando a opção NOHANDLE

 via IGNORE CONDITION


formato:

EXEC CICS IGNORE CONDITION


Condition
EXEC

EXEMPLO:

EXEC CICS IGNORE CONDITION NOTFND DSIDERR


END-EXEC

 a ocorrência das condições acima poderia ser testada pesquisando-se o


EIBRCODE.

EXEC CICS READ DATASET (------)

RIDFLD(CHAVE) ---------- END-EXEC

IF EIBRCODE IS NOT EQUAL LOW-VALUES GO

TO ROTERRO.
----------
----------
----------
ROTERRO.
----------
----------
----------

www.escoladeprogramadores.com.br 39
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

TRATAMENTO DE TECLAS FUNCIONAIS

 teclas PF (dados + byte AID)

 teclas PA ou CLEAR (byte AID)

 testando o byte de AID após o comando RECEIVE:

IF EIBAID IS EQUAL DFHENTER THEN _______

 via HANDLE AID

formato:

EXEC CICS HANDLE AID option (label)


option (label option (label) _____
END-EXEC

option:
ENTER
CLEAR
PF1 A PF24
PA1 A PA3
ANYKEY todas menos ENTER
TRATAMENTO DE TECLAS FUNCIONAIS

EXEMPLO DE HANDLE AID

EXEC CICS HANDLE AID PA1 (LAB1)


ANYKEY (LAB2) PF10 (LAB3)
END-EXEC

OBS:

 se uma rotina não é especificada para uma determinada tecla o controle é


passado para a instrução seguinte ao RECEIVE.

 podem ser colocados vários HANDLE AIDs no programa.

www.escoladeprogramadores.com.br 40
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

TRANSAÇÕES ÚTEIS A INSTALAÇÃO

 CEDF
 CECI / CECS
 CEDA

 CEMT

Comandos CICS

 Para abrir uma nova conexão:


Digitar CICS1 e <ENTER>, em seguida pressionar F3 para não efetuar o signon(logon).

 Para definir uma transação:


Digitar CEDA DEF GR(GPMFnn) TRANS(Mnn1) PROG(GPMFnnNN) e <ENTER>.

 Para instalar uma transação:


Digitar CEDA INS GR(GPMFnn) e <ENTER>.
Se o CICS for reinicializado e a transação já estava definida e instalada:
Digitar CEDA INS GR(GPMFnn) TRANS(Mnn1) e <ENTER>.

 Para definir o CICS com DB2:


Digitar CEDA DEF DB2T e <ENTER> e na tela que é exibida preeencher como segue:

CEDA DEFine DB2Tran( )


DB2Tran ==> Mnn1
Group ==> GPMFnn
Description ==>
Entry ==> GPMFnnNN ou S
Transid ==> Mnn1

e em seguida <ENTER>.

 Para executar transação:


Digitar Mnn1 e <ENTER>.

 Se o mapa for alterado e não foi alterado o programa:


Após a compilação do mapa:
No Cics, digitar CEMT S PROG(MAPxxx1) NEW e <ENTER>.

 Se o mapa e o programa foram alterados:


Após a compilação do programa e do mapa:
No Cics:
Digitar CEMT S PROG(MAPxxx1) NEW e <ENTER>.
Digitar CEMT S PROG(GPMFnnNN) NEW e <ENTER>.

 Para definir o mapa:


Digitar CEDA DEF GR(GPMFnn) Maps(MAPxxx1) e <ENTER>.

www.escoladeprogramadores.com.br 41
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

 Para instalar o mapa:


Digitar CEDA INS GR(GPMFnn) Maps(MAPxxx1) e <ENTER>.

 Para exibir as telas do mapa:


Digitar CECI SEND MAP(TELAnn) Maps(MAPxxx1) ERASE FREEKB e <ENTER>.
Repetir o mesmo procedimento para cada tela.

 Para configurar um arquivo VSAM para o CICS:


Digitar CEDA DEF GR(GPMFnn) FI(ARQNN) e <ENTER>.
Em DSName ==> GP.GERAL.ARQnn
Em RECORDSize ==> nn (tamanho do registro)
Pressionar F11
Em Keylength ==> nn (tamanho da record key)
Pressionar F11
Em RECORDFormat ==> F
Em Add ==> YES
Em BRowse ==> No
Em DELete ==> YES
Em READ ==> Yes
Em UPDATE ==> YES

 Para instalar um arquivo VSAM para o CICS:


Digitar CEDA INS GR(GPMFnn) FI(ARQNN) e <ENTER>.

 Se necessário recompilar um programa CICS com VSAM, o arquivo VSAM poderá


ter que ser fechado antes :
Digitar CEMT S FI(ARQnn) CLOS e <ENTER>.
Após a recompilação e antes da execução da transação, o arquivo VSAM deverá ser
antes aberto:
Digitar CEMT S FI(ARQnn) OPE e <ENTER>.

 Para Efetuar logoff:


Digitar CESF LOGOFF e <ENTER>.

 Sempre que o CICS for derrubado (SHUTDOWN) e reinicializado (START), tanto a


transação como o arquivo VSAM deverão serem reinstalados:
Digitar CEDA INS GR(GPMFnn) TRANS(Mnn1) e <ENTER>.
Digitar CEDA INS GR(GPMFnn) FI(ARQNN) e <ENTER>.

"Não compilar um programa CICS com DB2 e nem consultar a tabela, com a transação CICS
em execução, terminar a transação antes".

"Se for necessário recriar o arquivo VSAM que já foi utilizado pelo CICS, será
necessário fechar o arquivo no CICS, com o seguinte comando:
CEMT S FI(nome_arquivo) CLOS e <ENTER>.
Em seguida, digitar:
CEDA DEL GR(GPMFnn) FI(ARQNN) e <ENTER>.

www.escoladeprogramadores.com.br 42
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

TRANSAÇÃO CEDF

CEDF xxxx

TRANSAÇÃO: xxxx PROGRAMA: yyyyyy


STATUS: PROGRAM INITIATION

EIBTIME = 105840
EIBDATE = 95100

ENTER = CONTINUA
PF7 = TELA ANTERIOR
PF8 = TELA ATUAL

ENTER

TRANSAÇÃO: xxxx PROGRAMA: yyyyyy


STATUS: ABOUT TO EXECUTE COMMAND

EXEC CICS SEND MAP


MAP(„MAPA1‟)
MAPSET(„MAPSET1‟)
ERASE

ENTER = CONTINUE PF5= WORKING STORAGE


PF12 = ABEND USER TASK

ENTER

MAPA EXEMPLO
NOME:

ENDEREÇO:

ENTER

www.escoladeprogramadores.com.br 43
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

TRANSAÇÃO: **** PROGRAMA: yyyyyy


STATUS: COMMAND EXECUTION COMPLETE

RESPONSE: NORMAL
PF5= WORKING STORAGE
PF12 = ABEND USER TASK

ENTER

TRANSAÇÃO: xxxx PROGRAMA: yyyyyy


STATUS: ABOUT TO EXECUTE COMMAND
EXEC CICS RECEIVE MAP
MAP(„MAPA1‟)
MAPSET(„MAPSET1‟)
INTO (AREA1)
ENTER - CONTINUE PF5 - WORKING STORAGE
PF12 - ABEND USER TASK PF3 - END EDF SESSION

ENTER

TRANSAÇÕES ÚTEIS A INSTALAÇÃO

MAPA EXEMPLO
NOME: João da Silva

ENDEREÇO: Rua São Paulo, 100

ENTER

TRANSAÇÃO: **** PROGRAMA: yyyyyy


STATUS: COMMAND EXECUTION COMPLETE

INTO (JOÃO DA SILVA RUA ITARARÉ, 100)

RESPONSE: NORMAL
PF5= WORKING STORAGE
PF12 = ABEND USER TASK PF3 - END EDF SESSION

PF3

www.escoladeprogramadores.com.br 44
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

CEDF PERMITE:

 localizar qualquer área de memória, digitando o endereço da mesma.


 alterar o conteúdo de qualquer área da WORKING-STORAGE.
 apertando ENTER, volta-se ao DISPLAY original.
 através do uso da função STOP CONDITIONS, (PF9), interromper a execução somente na
ocorrência da condição especificada.
 depurar uma transação em qualquer terminal da rede, a partir de um único terminal.

TRANSAÇÕES CECS/CECI

 A transação CECS permite verificar a sintaxe de qualquer comando CICS.

 A transação CECI permite verificar a sintaxe de qualquer comando CICS e, em


seguida, executá-lo.

www.escoladeprogramadores.com.br 45
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

APÊNDICE A: Abends do CICS

Erro Explanação Solução / Ação / Observação

ABM0 O map especificado não foi encontrado Um erro ABM0 significa que o nome do map no
no mapset. programa COBOL não é o mesmo que o nome do map
da macro DFHMDI. Este erro pode ocorrer em um
comando SEND MAP ou RECEIVE MAP.

AEIx Existem vários abends que começam AEIA ERROR


... com AEI ou AEY. Eles indicam que AEID EOF (end of file)
AEYx ocorreu uma exceção, e RESP (ou AEIE EODS
NOHANDLE) não está em uso. O AEIG INBFMH
ultimo caractere indica o erro exato. AEIH ENDINPT
O CICS detectou uma condição de AEII NONVAL
exceção para a qual o comando EXEC AEIJ NOSTART
CICS HANDLE CONDITION não está AEIK TERMIDERR
ativo e a opção RESP ou NOHANDLE AEIL FILENOTFOUND
não está incluída no comando. AEIM NOTFND
AEIN DUPREC
AEIO DUPKEY
AEIP INVREQ
AEIQ IOERR
AEIR NOSPACE
AEIS NOTOPEN
AEIT ENDFILE
AEIU ILLOGIC
AEIV LENGERR (*)
AEIW QZERO
AEIZ ITEMERR
AEI0 PGMIDERR
AEI1 TRANSIDERR
AEI2 ENDDATA
AEI3 INVTSREQ
AEI8 TSIOERR
AEI9 MAPFAIL
AEYA INVERRTERM
AEYB INVMPSZ
AEYC IGREQID
AEYE INVLDC
AEYG JIDERR
AEYH QIDERR
AEYJ DSSTAT
AEYK SELNERR
AEYL FUNCERR
AEYM UNEXPIN
AEYN NOPASSBKRD
AEYO NOPASSBKWR
AEYP SEGIDERR
AEYQ SYSIDERR
AEYR ISCINVREQ
AEYT ENVDEFERR
AEYU IGREQCD
AEYV SESSIONERR
AEYX USERIDERROR
AEYY NOTALLOC
AEYZ CBIDERR
www.escoladeprogramadores.com.br 46
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

AEY0 INVEXITREQ
AEY1 INVPARTNSET
AEY2 INVPARTN
AEY3 PARTNFAIL
AEY7 NOTAUTH
Alguns detalhes
AEI0 = Ocorreu um erro PGMIDERR. Isto ocorre se o
operando SNPNAME= specificou o nome errado do
programa e o TNDGMM executou EXEC CICS LINK
para um programa que não está definido no PPT.

AEI1 = AEI1 é o abend da transação CICS indicando


TRANSIDERR ou código de transação inválido.

AEI9 = Existem duas razões possíveis para que este


abend ocorra:
 O dado a ser mapeado tem um tamanho de zero ou
não contém uma seqüência set-buffer-address
(SBA). Ele se aplica somente a dispositivos 3270.
 O programa emitiu um comando RECEIVE MAP no
qual o operador respondeu pressionando (a)
CLEAR ou uma tecla PA key, (b) ENTER, ou (c)
uma tecla de função sem digitar dados.

AEIV = Existem tres razões possíveis para que este


abend ocorra:
1 – O tamanho do registro (01 RECORD-LENGTH PIC
S9(4) COMP VALUE...) especificado na working-
storage não é igual ao tamanho do registro do arquivo
2 - O tamanho do registro calculado, obtido através da
adição definida no layout da working storage layout não
é igual ao tamanho do registro especificado (RECORD-
LENGTH) ou o tamanho do registro do arquivo
3 - A picture atribuída a RECORD-LENGTH não está
armazenada em um campo de dois bytes. Usualmente
este erro ocorre, porque a picture é S9(8) em vez de
S9(4) ou não é COMP.
AFCA Um dataset não pode ser accessado,
porque ele está desativado.
AICA indica time-out
AKCP AKCP e AKCT indica que ocorreu um
timeout da task.
AKCT AKCP e AKCT indica que ocorreu um
timeout da task.
APCT Um programa não existe ou está
desativado.
(Um erro APCT significa que o nome
do mapset no programa COBOL não é
o mesmo da macro DFHMSD. Este
erro pode ocorrer em um comando
SEND MAP ou RECEIVE MAP)
ASRA Indica um Program Check Exception,  Verifique o tamanho em um campo decimal
equivalente a S0C7 em um programa compactado.
batch.
ATCH ATCH e ATCI indica que a task foi
purgada.
ATCI ATCH e ATCI indica que a task foi
purgada.

www.escoladeprogramadores.com.br 47
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

Códigos EIBRESP (códigos produzidos a partir de chamadas de I/O)

Valor Condição Valor Condição


00 NORMAL 55 ENQBUSY
01 ERROR 56 ENVDEFERR
02 RDATT 57 IGREQCD
03 WRBRK 58 SESSIONERR
04 EOF 59 SYSBUSY
05 EODS 60 SESSBUSY
06 EOC 61 NOTALLOC
07 INBFMH 62 CBIDERR
08 ENDINPT 63 INVEXITREQ
09 NONVAL 64 INVPARTNSET
10 NOSTART 65 INVPARTN
11 TERMIDERR 66 PARTNFAIL
12 FILENOTFOUND 69 USERIDERR
13 NOTFND 70 NOTAUTH
14 DUPREC 72 SUPPRESSED
15 DUPKEY 80 NOSPOOL
16 INVREQ 81 TERMERR
17 IOERR 82 ROLLEDBACK
18 NOSPACE 83 END
19 NOTOPEN 84 DISABLED
20 ENDFILE 85 ALLOCERR
21 ILLOGIC 86 STRELERR
22 LENGERR 87 OPENERR
23 QZERO 88 SPOLBUSY
24 SIGNAL 89 SPOLERR
25 QBUSY 90 NODEIDERR
26 ITEMERR 91 TASKIDERR
27 PGMIDERR 92 TCIDERR
28 TRANSIDERR 93 DSNNOTFOUND
29 ENDDATA 94 LOADING
31 EXPIRED 95 MODELIDERR
32 RETPAGE 96 OUTDESCRERR
33 RTEFAIL 97 PARTNERIDERR
34 RTESOME 98 PROFILEIDERR
35 TSIOERR 99 NETNAMERR
36 MAPFAIL 100 LOCKED
37 INVERRTERM 101 RECORDBUSY
38 INVMPSZ 102 UOWNOTFOUND
39 IGREQID 103 UOWLNOTFOUND
40 OVERFLOW 104 LINKABEND
41 INVLDC 105 CHANGED
42 NOSTG 106 PROCESSBUSY
43 JIDERR 107 ACTIVITYBUSY
44 QIDERR 108 PROCESSERR
45 NOJBUFSP 109 ACTIVITYERR
46 DSSTAT 110 CONTAINERERR
47 SELNERR 111 EVENTERR
48 FUNCERR 112 TOKENERR
49 UNEXPIN 113 NOTFINISHED
50 NOPASSBKRD 114 POOLERR
51 NOPASSBKWR 115 TIMERERR
53 SYSIDERR 116 SYMBOLERR
54 ISCINVREQ 117 TEMPLATERR

www.escoladeprogramadores.com.br 48
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

EIBFN - contém um código que identifica o último comando CICS emitido por uma task.

PIC X(2).

Os códigos abaixo estão em hexadecimal.

Código Comando Código Comando

0202 ADDRESS 0804 READQ TD


0204 HANDLE CONDITION 0806 DELETEQ TD
0206 HANDLE AID 0A02 WRITEQ TS
0208 ASSIGN 0A04 READQ TS
020A IGNORE CONDITION 0A06 DELETEQ TS
020C PUSH HANDLE 0C02 GETMAIN
020E POP HANDLE 0C04 FREEMAIN
0210 ADDRESS SET 0E02 LINK
0402 RECEIVE 0E04 XCTL
0404 SEND 0E06 LOAD
0406 CONVERSE 0E08 RETURN
0408 ISSUE EODS 0E0A RELEASE
040A ISSUE COPY 0E0C ABEND
040C WAIT TERMINAL 0E0E HANDLE ABEND
040E ISSUE LOAD 1002 ASKTIME
0410 WAIT SIGNAL 1004 DELAY
0412 ISSUE RESET 1006 POST
0414 ISSUE DISCONNECT 1008 START
0416 ISSUE ENDOUTPUT 1008 START ATTACH
0418 ISSUE ERASEAUP 1008 START BREXIT
041A ISSUE ENDFILE 100A RETRIEVE
041C ISSUE PRINT 100C CANCEL
041E ISSUE SIGNAL 1202 WAIT EVENT
0420 ALLOCATE 1204 ENQ
0422 FREE 1206 DEQ
0424 POINT 1208 SUSPEND
0426 BUILD ATTACH 1402 WRITE JOURNALNUM
0428 EXTRACT ATTACH 1404 WAIT JOURNALNUM
042A EXTRACT TCT 1406 WRITE JOURNALNAME
042C WAIT CONVID 1408 WAIT JOURNALNAME
042E EXTRACT PROCESS 1602 SYNCPOINT
0430 ISSUE ABEND 1802 RECEIVE MAP
0432 CONNECT PROCESS 1804 SEND MAP
0434 ISSUE CONFIRMATION 1806 SEND TEXT
0436 ISSUE ERROR 1808 SEND PAGE
0438 ISSUE PREPARE 180A PURGE MESSAGE
043A ISSUE PASS 180C ROUTE
043C EXTRACT LOGONMSG 180E RECEIVE PARTN
043E EXTRACT ATTRIBUTES 1810 SEND PARTNSET
0602 READ 1812 SEND CONTROL
0604 WRITE 1C02 DUMP
0606 REWRITE 1E02 ISSUE ADD
0608 DELETE 1E04 ISSUE ERASE
060A UNLOCK 1E06 ISSUE REPLACE
060C STARTBR 1E08 ISSUE ABORT
060E READNEXT 1E0A ISSUE QUERY
0610 READPREV 1E0C ISSUE END
0612 ENDBR 1E0E ISSUE RECEIVE
0614 RESETBR
0802 WRITEQ TD 1E10 ISSUE NOTE
www.escoladeprogramadores.com.br 49
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

1E12 ISSUE WAIT 3604 DELETE EVENT


1E14 ISSUE SEND 3608 ADD SUBEVENT
2002 BIF DEEDIT 360A REMOVE SUBEVENT
2004 DEFINE COUNTER 360E TEST EVENT
2006 GET COUNTER 3610 RETRIEVE REATTACH EVENT
2008 UPDATE COUNTER 3612 RETRIEVE SUBEVENT
200A DELETE COUNTER 3614 DEFINE TIMER
200C REWIND COUNTER 3616 DELETE TIMER
200E QUERY COUNTER 3618 CHECK TIMER
2014 DEFINE DCOUNTER 361A FORCE TIMER
2016 GET DCOUNTER 3802 WEB RECEIVE
2018 UPDATE DCOUNTER 3804 WEB SEND
201A DELETE DCOUNTER 3806 WEB READ
201C REWIND DCOUNTER 3808 WEB STARTBROWSE
201E QUERY DCOUNTER 380A WEB READNEXT
3402 DEFINE ACTIVITY 380C WEB ENDBROWSE
3404 DEFINE PROCESS HTTPHEADER
3406 RUN ACTIVITY 380E WEB WRITE
3408 RUN ACQPROCESS 3810 WEB EXTRACT
340E ACQUIRE PROCESS 3814 WEB RETRIEVE
3410 ACQUIRE ACTIVITYID 3C02 DOCUMENT CREATE
3412 DELETE CONTAINER 3C04 DOCUMENT INSERT
3414 GET CONTAINER 3C06 DOCUMENT RETRIEVE
3416 PUT CONTAINER 3C08 DOCUMENT SET
3418 RESET ACTIVITY 3E0E EXTRACT TCPIP
341A CHECK ACTIVITY 3E10 EXTRACT CERTIFICATE
341C CANCEL ACTIVITY 4802 ENTER TRACENUM
341E CANCEL ACQPROCESS 4804 MONITOR
3420 SUSPEND ACTIVITY 4A02 ASKTIME ABSTIME
3422 SUSPEND ACQPROCESS 4A04 FORMATTIME
3424 RESUME ACTIVITY 5602 SPOOLOPEN
3426 RESUME ACQPROCESS 5604 SPOOLREAD
3428 DELETE ACTIVITY 5606 SPOOLWRITE
342A LINK ACQPROCESS 5610 SPOOLCLOSE
342C LINK ACTIVITY 5E06 CHANGE TASK
342E CANCEL ACQACTIVITY 5E22 WAIT EXTERNAL
3430 RUN ACQACTIVITY 5E32 WAITCICS
3432 LINK ACQACTIVITY 6A02 QUERY SECURITY
3434 SUSPEND ACQACTIVITY 6C02 WRITE OPERATOR
3436 RESUME ACQACTIVITY 6C12 ISSUE DFHWTO
3438 CHECK ACQPROCESS 7402 SIGNON
343A CHECK ACQACTIVITY 7404 SIGNOFF
343C RESET ACQPROCESS 7406 VERIFY PASSWORD
3602 DEFINE INPUT EVENT 7408 CHANGE PASSWORD
7E02 DUMP TRANSACTION
3602 DEFINE COMPOSITE EVENT

Os códigos 82nn e 84nn são usados pelo CICS Front End Programming Interface.

www.escoladeprogramadores.com.br 50
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

APÊNDICE B: Programa Exemplo

A.1 – ESPECIFICAÇÃO DO PROGRAMA.


O objetivo do programa mostrado é, a partir de um código de produto lido em uma tela, ler os
dados do produto em um arquivo VSAM e mostrar na tela a descrição e preço do produto.

Arquivo PRODUTO
CODIGO DESCRICAO PRECO
PIC X(6) PIC X(20) PIC 999V99

A.2 – DESENHO DA TELA.

Colunas
0 1 2 7
1 0 5 0

#ABCD# #CONSULTA DE PRECOS #XX/XX/XXXX 0 1

Linhas
#99:99:99 0 2

#CODIGO... #XXXXXX# 0 5

#DESCRICAO #XXXXXXXXXXXXXXXXXXXX 0 8
#PRECO.... #ZZ9,99 1 0

#XXXXXXXXXXXXXXXXXXX........ 1 5

A.3 – FONTE DO MAPA BMS.


GP99M01 DFHMSD TYPE=DSECT,MODE=INOUT,LANG=COBOL,CTRL=FREEKB,
*
TIOAPFX=YES
MAP001 DFHMDI SIZE=(24,80)
CODTRAN DFHMDF POS=(1,1),LENGTH=4,ATTRB=(UNPROT,FSET),INITIAL='ABCD'
DFHMDF POS=(1,6),LENGTH=0,ATTRB=ASKIP
DFHMDF POS=(1,25),LENGTH=18,ATTRB=(ASKIP,BRT),
*
INITIAL='CONSULTA DE PRECOS'
DATA DFHMDF POS=(1,70),LENGTH=10,ATTRB=ASKIP
HORA DFHMDF POS=(2,70),LENGTH=8,ATTRB=ASKIP
DFHMDF POS=(5,10),LENGTH=9,ATTRB=(ASKIP,BRT),
*
INITIAL='CODIGO...'
CODIGO DFHMDF POS=(5,25),LENGTH=6,ATTRB=(UNPROT,FSET,IC)
DFHMDF POS=(5,32),LENGTH=0,ATTRB=ASKIP
DFHMDF POS=(8,10),LENGTH=9,ATTRB=(ASKIP,BRT),
*
INITIAL='DESCRICAO'
DESCRI DFHMDF POS=(8,25),LENGTH=20,ATTRB=ASKIP
DFHMDF POS=(10,10),LENGTH=9,ATTRB=(ASKIP,BRT),
*
INITIAL='PRECO....'
PRECO DFHMDF POS=(10,25),LENGTH=6,ATTRB=ASKIP,PICOUT='ZZ9,99'
MSG DFHMDF POS=(24,1),LENGTH=79,ATTRB=ASKIP
DFHMSD TYPE=FINAL
END

www.escoladeprogramadores.com.br 51
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

A.4- BOOK GERADO PELA COMPILAÇÃO DO MAPA DA TELA

01 MAP001I.
02 FILLER PIC X(12).
02 CODTRANL COMP PIC S9(4).
02 CODTRANF PICTURE X.
02 FILLER REDEFINES CODTRANF.
03 CODTRANA PICTURE X.
02 CODTRANI PIC X(4).
02 DATAL COMP PIC S9(4).
02 DATAF PICTURE X.
02 FILLER REDEFINES DATAF.
03 DATAA PICTURE X.
02 DATAI PIC X(10).
02 HORAL COMP PIC S9(4).
02 HORAF PICTURE X.
02 FILLER REDEFINES HORAF.
03 HORAA PICTURE X.
02 HORAI PIC X(8).
02 CODIGOL COMP PIC S9(4).
02 CODIGOF PICTURE X.
02 FILLER REDEFINES CODIGOF.
03 CODIGOA PICTURE X.
02 CODIGOI PIC X(6).
02 DESCRIL COMP PIC S9(4).
02 DESCRIF PICTURE X.
02 FILLER REDEFINES DESCRIF.
03 DESCRIA PICTURE X.
02 DESCRII PIC X(20).
02 PRECOL COMP PIC S9(4).
02 PRECOF PICTURE X.
02 FILLER REDEFINES PRECOF.
03 PRECOA PICTURE X.
02 PRECOI PIC X(6).
02 MSGL COMP PIC S9(4).
02 MSGF PICTURE X.
02 FILLER REDEFINES MSGF.
03 MSGA PICTURE X.
02 MSGI PIC X(79).
01 MAP001O REDEFINES MAP001I.
02 FILLER PIC X(12).
02 FILLER PICTURE X(3).
02 CODTRANO PIC X(4).
02 FILLER PICTURE X(3).
02 DATAO PIC X(10).
02 FILLER PICTURE X(3).
02 HORAO PIC X(8).
02 FILLER PICTURE X(3).
02 CODIGOO PIC X(6).
02 FILLER PICTURE X(3).
02 DESCRIO PIC X(20).
02 FILLER PICTURE X(3).
02 PRECOO PIC ZZ9,99.
02 FILLER PICTURE X(3).
02 MSGO PIC X(79).

www.escoladeprogramadores.com.br 52
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

A.5 - PROGRAMA COBOL

IDENTIFICATION DIVISION.
PROGRAM-ID. GP99P01.
*
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SPECIAL-NAMES.
DECIMAL-POINT IS COMMA.
*
DATA DIVISION.
FILE SECTION.
*
WORKING-STORAGE SECTION.
COPY GP99M01.
* AREA PARA LEITURA DO REGISTRO DO PRODUTO
01 REG-PRODUTO.
05 CODIGO PIC X(6).
05 DESCRICAO PIC X(20).
05 PRECO PIC 999V99.
01 VARIAVEIS.
* CAMPO PARA RETORNO DOS COMANDOS CICS
05 RET-CICS PIC S9(4) COMP.
05 RET-CICS-EDIT PIC -ZZZ9.
05 TEM-MAPA PIC X.
05 WS-DATA PIC S9(15) COMP-3.
*
PROCEDURE DIVISION.
P000-PRINCIPAL.
PERFORM P100-INICIO
IF TEM-MAPA = 'S'
PERFORM P200-PROCESSO
END-IF.
PERFORM P300-FINALIZA.
EXEC CICS RETURN
END-EXEC.
*
P100-INICIO.
EXEC CICS RECEIVE
MAP('MAP001')
MAPSET('GP99M01')
INTO(MAP001I)
RESP(RET-CICS)
END-EXEC.
EVALUATE RET-CICS
WHEN DFHRESP(MAPFAIL)
MOVE 'N' TO TEM-MAPA
* PREPARA MAPA PARA SAIDAS
MOVE LOW-VALUES TO MAP001O
WHEN DFHRESP(NORMAL)
MOVE 'S' TO TEM-MAPA
WHEN OTHER
MOVE RET-CICS TO RET-CICS-EDIT
MOVE 'ERRO IMPREVISTO = ' TO MSGO
MOVE RET-CICS-EDIT TO MSGO(19:5)
MOVE 'N' TO TEM-MAPA
END-EVALUATE.
*
P200-PROCESSO.

www.escoladeprogramadores.com.br 53
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

* CARREGA A CHAVE DO VSAM


MOVE CODIGOI TO CODIGO
* PREPARA O MAPA PARA RECEBER AS SAIDA
MOVE LOW-VALUES TO MAP001O
EXEC CICS READ
FILE('PRODUTO')
RIDFLD(CODIGO)
INTO(REG-PRODUTO)
RESP(RET-CICS)
END-EXEC.
EVALUATE RET-CICS
WHEN DFHRESP(NORMAL)
* CARREGA OS CAMPOS DA TELA
MOVE DESCRICAO TO DESCRIO
MOVE PRECO TO PRECOO
MOVE 'LEITURA EFETUADA COM SUCESSO' TO MSGO
WHEN DFHRESP(NOTFND)
MOVE 'PRODUTO NAO EXISTE' TO MSGO
* COLOCA O CURSOR NO CODIGO DO PRODUTO
MOVE -1 TO CODIGOL
WHEN OTHER
MOVE RET-CICS TO RET-CICS-EDIT
MOVE 'ERRO IMPREVISTO = ' TO MSGO
MOVE RET-CICS-EDIT TO MSGO(19:5)
MOVE 'N' TO TEM-MAPA
END-EVALUATE.
*
P300-FINALIZA.
EXEC CICS ASKTIME
ABSTIME(WS-DATA)
END-EXEC.
EXEC CICS FORMATTIME
ABSTIME(WS-DATA)
DDMMYYYY(DATAO)
DATESEP('/')
END-EXEC
EXEC CICS FORMATTIME
ABSTIME(WS-DATA)
TIME(HORAO)
TIMESEP(':')
END-EXEC
IF TEM-MAPA = 'N'
EXEC CICS SEND
MAP('MAP001')
MAPSET('GP99M01')
FROM(MAP001O)
ERASE
END-EXEC
ELSE
EXEC CICS SEND
MAP('MAP001')
MAPSET('GP99M01')
DATAONLY
FROM(MAP001O)
CURSOR
END-EXEC
END-IF.

www.escoladeprogramadores.com.br 54
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

APÊNDICE C: MACROS DA LINGUAGEM BMS

Macro DFHMSD

A sintaxe desta macro é

Label DFHMSD argumentos

O Label desta macro define o nome do MAPSET. Ele deverá ser usado nos programas dentro
dos comandos de leitura e gravação da tela. Este Label também definirá o nome do programa
objeto que o Cics usará para desenhar as telas, e deverá ser padronizado para evitar a
coincidência com nomes de outros programas.

Os argumentos do comando devem ser separados por vírgula e são os seguintes:

--- TYPE=tipo,

Este deve ser o primeiro argumento da macro. Tipo pode ser DSECT ou MAP. Normalmente
pode-se codificar qualquer um dos tipos abaixo, porque o JCL de compilação do mapa compila
a mapa 2 vezes, uma com o tipo DSECT e outra com o tipo MAP.

TYPE=DSECT, Indica que deve ser gerada uma area copy para ser inserida nos
programas Cobol.
TYPE=MAP, Indica que deve ser gerado um modulo objeto do MAPSET, com o nome
do label da macro.

-- MODE=mode,

MODE=IN, As telas serão de INPUT (entrada de dados).


MODE=OUT, As telas serão de OUTPUT (saída de dados).
MODE=INOUT, As telas serão de INPUT e OUTPUT.

-- LANG=linguagem,

LANG=ASM, a linguagem do programa Cics é Assembler.


LANG=COBOL, a linguagem do programa Cics é Cobol.

-- STORAGE=AUTO,
Este parâmetro só deve ser usado se o Mapset contiver mais de um mapa(isto é, se o
programa usa mais de uma tela), e neste caso o parâmetro indica que no Cobol as áreas dos
mapas usarão a mesma área de memória(REDEFINES).

STORAGE=AUTO, As áreas de INPUT e OUTPUT das telas usarão a mesma área de


memória (serão geradas com a clausula REDEFINES).

www.escoladeprogramadores.com.br 55
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

-- CTRL=(PRINT,length,FREEKB,ALARM,FRSET),
Este argumento define varias características do terminal para onde a tela deve ser enviada.
Todas estas características são opcionais, e são descritas abaixo.

CTRL=(PRINT, O terminal é uma impressora remota.


length, Quando o terminal for impressora, contem o comprimento da linha
podendo ser: L40, L64, L80 ou HONEOM. (HONEOM indica um
comprimento padrão definido no Cics).
FREEKB, Libera automaticamente o teclado quando uma tela é enviada ao terminal.
No sistema 3270 os teclados ficam bloqueados enquanto a tela esta
sendo tratada pelo Cics.
ALARM, Aciona o alarme do terminal no envio da tela.
FRSET), Muda as tags MDT de todos os atributos dos campos desprotegidos para
OFF antes de enviar a tela para o terminal.

-- TIOAPFX=YES,
Este argumento deve ser usado sempre quando o programa Cics for escrito em Command
Level.

TIOAPFX=YES, Cria um campo FILLER de 12 posições no inicio da área copy da tela


(usado internamente pelo Cics).

-- TYPE=FINAL

TYPE=FINAL Esta deve ser a ultima linha de um mapa BMS.

Macro DFHMDI.

A macro DFHMDI define uma tela e sua sintaxe é:

Mapa DFHMDI argumentos

Mapa (Na coluna 1) é o nome da tela. Este nome será usado nos programas para leitura e
gravação da tela. Pode ser qualquer palavra limitada em 7 letras.

Os argumentos da macro DFHMDI podem ser:

-- SIZE=(linhas,colunas),
Define o tamanho da tela em numero de linhas e colunas.

SIZE=(linhas, Total de linhas da tela.


colunas), Total de colunas da tela.

www.escoladeprogramadores.com.br 56
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

-- CTRL=(PRINT,length,FREEKB,ALARM,FRSET),
Idêntico a macro DFHMSD. Se usado na macro DFHMDI ele substitui (Overrides) os mesmos
argumentos da DFHMSD. Normalmente é omitido, e o mapa corrente usará os controles do
Mapset.

CTRL=(PRINT,length,FREEKB,ALARM,FRSET) Idem macro DFHMSD

Argumentos pouco usados.


Os argumentos seguintes são de uso pouco freqüente. Servem para se desenhar telas
menores (janelas) sobre o terminal:

-- LINE=posição,
Indica a linha do terminal onde deve ser posicionada esta tela. Posição pode ser um dos 3
valores:
Numero – Um literal numérico indica a posição absoluta da linha.
NEXT – A tela deve ser colocada na próxima linha disponível.
SAME – A tela que a tela deve ser colocada na mesma linha da tela anterior.

-- COLUNN=posição,
Indica a coluna do terminal onde deve ser posicionada a tela. Posição pode ser qualquer dos
valores descritos em LINE.

-- FIELDS=NO,
Informa que esta tela não tem campos.

Macro DFHMDF.

A macro DFHMDF define os atributos sobre a tela. É necessário uma macro DFHMDF para
cada atributo da tela.
Como exemplo, suponhamos que na linha 10 de uma tela desejamos criar uma caixa de texto
para digitar o código do produto. A caixa de texto terá „a sua esquerda um literal descritivo do
campo. A linha 10 terá o seguinte aspecto:

000000000111111111122222222223333
123456789012345678901234567890123
x COD I GO DO PRO DUTOx _ _ _ _ _ x

Note na ilustração que criamos 3 atributos representados pelas letras (x). O código BMS para
esta linha terá 3 macros DFHMDF:

DFHMDF POS=(10,3),INITIAL=´CODIGO DO PRODUTO‟,LENGTH=17...


CODPROD DFHMDF POS=(10,21),LENGTH=5....
DFHMDF POS=(10,27),LENGTH=0,.....

www.escoladeprogramadores.com.br 57
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

A sintaxe da macro DFHMDF é:

nome DFHMDF argumentos

Nome (na coluna 1) é opcional. Se o programa COBOL precisar acessar o campo definido por
esta macro (campo a direita do atributo), então Nome será obrigatório e será o nome da
variável que aparecerá no BOOK da tela.

Os argumentos da macro DFHMDF podem ser:

-- POS=posição,
Define a localização do atributo na tela. Seu formato é:

POS=(linha,coluna), Ex.: POS=(2,2),


O atributo do campo esta na linha 2 coluna 2.

-- LENGTH=comprimento,
Este é o comprimento do campo, não incluindo o atributo. Os campos podem ter comprimento
máximo de 256 caracteres. Quando o comprimento de um campo faz com que ele ultrapasse a
coluna 80 da linha (overflow), o campo continuará na linha seguinte. Se o overflow ocorrer na
última linha o campo, ele continuará na linha 1.
Pode-se definir um campo de comprimento zero se a macro DFHMDF não tiver label (campo
sem nome). Este pseudo-campo não aparecerá na área copy da tela, e servirá somente para
criar um atributo limitador para o campo anterior da tela.

LENGTH=comprimento, Ex.: LENGTH=4,

-- ATTRB=(proteção,brilho,acesso),
Este argumento define as características do atributo do campo. Os valores permitidos em cada
opção do argumento, todos opcionais, são:

ATTRB=(proteção, ASKIP, – Campo protegido. O cursor não parará neste campo


com o uso ta tecla TAB. (Valor default).
PROT, – O campo será protegido, isto é, será bloqueado para
digitação.
UNPROT, – Campo desprotegido, aceitando digitação normal.
UNPROT,NUM – Campo desprotegido somente para teclas
numéricas.
brilho, NORM – Campo com brilho normal (Valor default).
BRT – Campo com brilho intenso.
DRK – Campo invisível.
acesso), FSET – O campo deve ter o atributo MDT sempre ligado (ON).
O terminal transmitirá seu conteúdo para o programa Cics,
mesmo que o operador não digite o campo.
IC – O cursor será colocado neste campo.

-- INITIAL=literal,

www.escoladeprogramadores.com.br 58
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

Esta clausula (opcional), define o conteúdo inicial do campo. Literal deve ser definido com
aspas simples. Ex.:

INITIAL=literal, Ex.: INITIAL=‟XYZ‟,

-- PICIN=mascara,
PICIN define o formato da PICTURE que será gerada na área COBOL do mapa de entrada da
tela. Usado em campos numéricos, porque o BMS formata a área COBOL com o padrão PIC
X(..).

PICIN=mascara, Ex.: PICIN=‟999999V99‟,

Por ex., para a linha do mapa BMS:

VALOR DFHMDF POS=(5,10),PICIN=‟999999V99‟,LENGTH=8,

Será gerado o fonte COBOL:

03 VALOR PIC 999999V99.

-- PICOUT=mascara,
PICOUT define o formato da PICTURE que será gerada na área COBOL do mapa de saída da
tela. Usado em campos numéricos, porque o BMS formata a área COBOL com o padrão PIC
X(..).

PICOUT=mascara, Ex.: PICOUT=‟$$$$$9,99‟,

Por ex., para a linha do mapa BMS:

VALOR DFHMDF POS=(5,10),PICOUT=‟$$$$$9,99‟,

Será gerado o fonte

03 VALOR PIC $$$$$9,99.

Argumentos pouco usados.


Os parâmetros a seguir são de uso pouco freqüente:

-- JUSTIFY=(posição,preenchimento),

JUSTIFY define como o terminal posicionará os dados no campo durante a digitação. O


argumento posição pode ser RIGHT ou LEFT, e o preenchimento pode ser BLANK ou ZERO.
JUSTIFY=(LEFT,), alinha os dados à esquerda do campo.
JUSTIFY=(RIGHT,), alinha os dados à direita do campo.
JUSTIFY=(,BLANK), preenche as posições não digitadas do campo com espaços.
JUSTIFY=(,ZERO), preenche as posições não digitadas do campo com zeros.

www.escoladeprogramadores.com.br 59
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe

ATRIBUTOS E CÓDIGOS DE RETORNO


COPY DFHBMSCA

NOME N/P PIC ITEM FSET FORMATO BMS LITERAL


DFHBMUNP N ALF NORMAL NAO UNPROT space
DFHBMFSE N ALF NORMAL SIM UNPROT, FSET A
DFHBMBVR N ALF BRILHO NAO UNPROT, BRT H
DFHUNIND N ALF BRILHO SIM UNPROT, BRT, FSET I
DFHBMDAR N ALF DARK NAO UNPROT, DRK <
DFHUNNOD N ALF DARK SIM UNPROT, DRK,FSET (
DFHBMUNN N NUM NORMAL NAO UNPROT,NUM &
DFHUNNUM N NUM NORMAL SIM UNPROT,NUM, FSET J
DFHBMUNB N NUM BRILHO NAO UNPROT,NUM, BRT Q
DFHUNINT N NUM BRILHO SIM UNPROT,NUM, BRT, FSET R
N NUM DARK NAO UNPROT,NUM, DRK *
DFHUNNON N NUM DARK SIM UNPROT,NUM, DRK, FSET )
DFHBMPRO P ALF NORMAL NAO PROT -
DFHBMPRF P ALF NORMAL SIM PROT, FSET /
DFHPROTI P ALF BRILHO NAO PROT, BRT Y
P ALF BRILHO SIM PROT, BRT, FSET Z
DFHPROTN P ALF DARK NAO PROT, DRK %
P ALF DARK SIM PROT, DRK, FSET _
DFHBMASK P ASK NORMAL NAO ASKIP 0
DFHBMASF P ASK NORMAL SIM ASKIP, FSET 1
DFHBMASB P ASK BRILHO NAO ASKIP, BRT 8
P ASK BRILHO SIM ASKIP, BRT, FSET 9
P ASK DARK NAO ASKIP, DRK @
P ASK DARK SIM ASKIP, DRK, FSET „

CÓDIGOS DE RETORNO

COD. RET. CONDICAO


01 ERROR
11 TERMIDERR
12 DSIDERR
13 NOTFND
14 DUPREC
15 DUPKEY
16 INVREQ
17 IOERR
18 NOSPACE
19 NOTOPEN
20 ENDFILE
21 ILLOGIC
22 LENGERR
23 QZERO
26 ITEMERR
27 PGMIDERR
36 MAPFAIL
38 INVMPSZ
44 QIDERR

www.escoladeprogramadores.com.br 60

Você também pode gostar