Escolar Documentos
Profissional Documentos
Cultura Documentos
Introdução.
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
www.escoladeprogramadores.com.br 2
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
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.
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.
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:
Exemplo:
CICS
Task TR01
R01.
EXEC CICS SEND
www.escoladeprogramadores.com.br 6
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
Exemplo:
Task TR02
Task TR01
TR01
EXEC CICS SEND
OBSERVAÇÕES
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
gera:
LINKAGE EDITOR
OBSERVAÇÕES IMPORTANTES:
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.
www.escoladeprogramadores.com.br 9
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
Exemplo:
função
MAP (name)
MAPSET (name) argumento
INTO (data-area)
opção
END-EXEC.
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.
www.escoladeprogramadores.com.br 10
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
TRATAMENTO DE ERROS
Cada um dos comandos acima possui um conjunto especifico de condições de retorno. Por
exemplo, o comando:
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.:
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.
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
[ABSTIME (data-area)]
END-EXEC
EXEMPLO:
www.escoladeprogramadores.com.br 13
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
CICS
nível 0
PROG A
LINK
RETURN
nível 1
PROG B
RETURN
nível 2
CICS
nível 0
PROG A PROG B
•
•
XCTL •
RETURN RETURN
nível 1
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.
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.
WORKING-STORAGE SECTION.
01 PASSAR.
05 CHAVE PIC 99.
05 NOME PIC X(18).
PROCEDURE DIVISION.
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.
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
_________
_________
www.escoladeprogramadores.com.br 16
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
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 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
www.escoladeprogramadores.com.br 17
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
EXEMPLO
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.
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).
www.escoladeprogramadores.com.br 19
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
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.
www.escoladeprogramadores.com.br 20
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
- 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.
- 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.
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:
EIBAID
www.escoladeprogramadores.com.br 22
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
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.
www.escoladeprogramadores.com.br 23
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
ACESSO A ARQUIVOS
APLICAÇÃO
O arquivo e suas características, bem como as possibilidades de acesso devem estar definido
na FCT (File Control Table)
BDAM
ESDS
www.escoladeprogramadores.com.br 24
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
KSDS
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
REG 4
REG1 REG2
OBSERVAÇÃO:
ESDS RBA
RRDS RRN
www.escoladeprogramadores.com.br 25
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
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
CHAVES
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
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
STARTBR/RESETBR
READNEXT/READPREV
ENDBR
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.
--------
--------
www.escoladeprogramadores.com.br 30
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
REWRITE
READ
registro
DELETE
com opção
UPDATE
UNLOCK
REWRITE/DELETE
REWRITE
DELETE
UNLOCK
www.escoladeprogramadores.com.br 31
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
CONDIÇÕES DE EXCEÇÃO
LENGERR
NOSPACE
INVREQ
ILLOGIC
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
------------------ -----------------
------------------ -----------------
RETURN
CONDIÇÃO DE “DEADLOCK”
ALOCA
AGUARDA
- 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
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:
www.escoladeprogramadores.com.br 34
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
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:
Caminho do CICS para o DB2 são definidos através da Resource Control Table.
Vantagens:
IRLM
DATA
BASE
SERVICE
CICS SYSTEM
DATA
BASE
WORKING-STORAGE SECTION.
EXEC SQL INCLUDE SQLCA END-EXEC.
** expande book SQL-CODE (mensagens de erro).
www.escoladeprogramadores.com.br 36
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
ABEND TASK
SUSPEND TASK
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
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)
EXEMPLO:
EXEMPLOS:
www.escoladeprogramadores.com.br 38
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
EXEMPLO:
TO ROTERRO.
----------
----------
----------
ROTERRO.
----------
----------
----------
www.escoladeprogramadores.com.br 39
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
formato:
option:
ENTER
CLEAR
PF1 A PF24
PA1 A PA3
ANYKEY todas menos ENTER
TRATAMENTO DE TECLAS FUNCIONAIS
OBS:
www.escoladeprogramadores.com.br 40
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
CEDF
CECI / CECS
CEDA
CEMT
Comandos CICS
e em seguida <ENTER>.
www.escoladeprogramadores.com.br 41
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
"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
EIBTIME = 105840
EIBDATE = 95100
ENTER = CONTINUA
PF7 = TELA ANTERIOR
PF8 = TELA ATUAL
ENTER
ENTER
MAPA EXEMPLO
NOME:
ENDEREÇO:
ENTER
www.escoladeprogramadores.com.br 43
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
RESPONSE: NORMAL
PF5= WORKING STORAGE
PF12 = ABEND USER TASK
ENTER
ENTER
MAPA EXEMPLO
NOME: João da Silva
ENTER
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:
TRANSAÇÕES CECS/CECI
www.escoladeprogramadores.com.br 45
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
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.
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.
www.escoladeprogramadores.com.br 47
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
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 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
Arquivo PRODUTO
CODIGO DESCRICAO PRECO
PIC X(6) PIC X(20) PIC 999V99
Colunas
0 1 2 7
1 0 5 0
Linhas
#99:99:99 0 2
#CODIGO... #XXXXXX# 0 5
#DESCRICAO #XXXXXXXXXXXXXXXXXXXX 0 8
#PRECO.... #ZZ9,99 1 0
#XXXXXXXXXXXXXXXXXXX........ 1 5
www.escoladeprogramadores.com.br 51
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
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
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
www.escoladeprogramadores.com.br 54
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
Macro DFHMSD
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.
--- 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,
-- LANG=linguagem,
-- 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).
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.
-- TIOAPFX=YES,
Este argumento deve ser usado sempre quando o programa Cics for escrito em Command
Level.
-- TYPE=FINAL
Macro DFHMDI.
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.
-- SIZE=(linhas,colunas),
Define o tamanho da tela em numero de linhas e colunas.
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.
-- 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:
www.escoladeprogramadores.com.br 57
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
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.
-- POS=posição,
Define a localização do atributo na tela. Seu formato é:
-- 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.
-- 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:
-- 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.:
-- 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(..).
-- 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(..).
-- JUSTIFY=(posição,preenchimento),
www.escoladeprogramadores.com.br 59
Centro de Treinamento CICS
Formação Desenvolvedor Mainframe
CÓDIGOS DE RETORNO
www.escoladeprogramadores.com.br 60