Translate

sábado, 2 de maio de 2020

CICS BMS para Desenvolvedores COBOL – Parte 2

Bellacosa Mainframe apresenta a Parte II do mini curso CICS BMS


☕ Um Café no Bellacosa Mainframe

CICS BMS para Desenvolvedores COBOL – Parte 2

Da Codificação do MAPSET até a Instalação no CICS

"No primeiro artigo aprendemos a desenhar nosso primeiro mapa. Agora chegou a hora de colocá-lo em produção dentro do CICS."

Pegue seu café, abra o SDSF, reserve uma aba do JESMSGLG e vamos continuar nossa jornada.


O que produz um MAPSET?

Muitos desenvolvedores iniciantes acreditam que um mapa BMS gera apenas uma tela.

Na verdade ele produz dois artefatos distintos.

Mapa Físico

MAPSET Source
        │
Assembler
        │
        ▼
 Physical Map
        │
     DFHRPL

Exemplo

CLIENTES

É utilizado pelo CICS.


Mapa Simbólico

MAPSET Source
        │
Assembler
        │
SYSPUNCH
        │
        ▼
Symbolic Map
        │
COPYLIB

Exemplo

CLIENTEM

Será utilizado pelo COBOL.


Utilizando &SYSPARM

Muito elegante.

Ao invés de manter dois fontes.

Errado

TYPE=MAP


TYPE=DSECT

Correto

TYPE=&SYSPARM

Assembly

Mapa físico

PARM='MAP'

Mapa simbólico

PARM='DSECT'

Compilando um BMS

Etapa 1

Assembler

Etapa 2

Linkedit

Etapa 3

Instalação CICS


Exemplo JCL

Symbolic


//ASM EXEC PGM=ASMA90,
 // PARM='OBJECT,NODECK'




//SYSIN DD DSN=USER.BMS(CLIENTE)


//SYSPUNCH DD DSN=USER.COPYLIB(CLIENTE)



Physical

//ASM EXEC PGM=ASMA90




//SYSLMOD DD
DSN=CICS.LOAD(CLIENTE)




Linkedit


//LKED EXEC PGM=IEWL



//SYSLMOD DD
DSN=CICS.LOAD(CLIENTE)





Onde fica cada objeto?

ObjetoBiblioteca
Physical MapDFHRPL
Programa COBOLDFHRPL
Symbolic MapCOPYLIB
JCLPROCLIB
BMS FonteSOURCELIB

CEDA

Definir recursos.

Menu clássico.

CEDA DEF MAPSET(CLIENTE)

Exemplo

CEDA DEF MAPSET(CLIENTE)

GROUP(BANCO)

DESCRIPTION(Clientes)




INSTALL

Após definir.

Necessário instalar.

CEDA INSTALL GROUP(BANCO)

ou

CEDA INSTALL MAPSET(CLIENTE)

Verificando

Com CEMT

CEMT INQ MAPSET(CLIENTE)

Resultado

Enabled

Installed



CEMT

Comando preferido dos administradores.

Consultar

CEMT I MAPSET

Desabilitar

CEMT SET MAPSET(CLIENTE)
DISABLED

Habilitar

CEMT SET MAPSET(CLIENTE)
ENABLED

Nosso primeiro RECEIVE

Programa envia.

Usuário digita.

Programa recebe.




EXEC CICS RECEIVE

MAP('TELA01')

MAPSET('CLIENTE')

INTO(TELA01I)

END-EXEC



O EIB

Executive Interface Block

Equivale ao SQLCA.

DB2

SQLCA

CICS

EIB


DFHEIBLK

Copy automático.

Não precisa incluir.


Campos úteis.


EIBTRNID

Transação.

CLI1

EIBTRMID

Terminal.

A123

EIBTASKN

Task atual.


EIBCALEN

Comprimento da COMMAREA.

Muito importante.


EIBAID

Tecla pressionada.


DFHAID

Copybook.

COPY DFHAID.

ENTER

DFHENTER

PF3

DFHPF3

PF5

DFHPF5

PF7

DFHPF7

PF8

DFHPF8

CLEAR

DFHCLEAR

Tratando teclas



EVALUATE EIBAID


WHEN DFHENTER


PERFORM PROCESSA



WHEN DFHPF3


PERFORM SAIR




WHEN DFHPF5


PERFORM REFRESH




WHEN DFHPF7


PERFORM PAGEUP




WHEN DFHPF8


PERFORM PAGEDOWN




WHEN OTHER


PERFORM ERRO



END-EVALUATE




HANDLE AID

Muito elegante.

Instala um roteador.



EXEC CICS HANDLE AID


DFHENTER(PROC1)

DFHPF3(PROC2)

DFHPF7(PROC3)

DFHPF8(PROC4)

ANYKEY(PROC5)


END-EXEC




Pseudo Conversação

Um dos conceitos mais importantes do CICS.

Não mantemos programa residente.

Fluxo:



Usuário


↓

EXECUTA


↓

PROGRAMA


↓

SEND MAP


↓

RETURN


TRANSID


COMMAREA


↓

Task termina



==================



Usuário ENTER



==================



Nova Task


↓

RECEIVE


↓

PROCESSA


↓

SEND


↓

RETURN




EIBCALEN

Primeira execução?

Ou retorno?



IF EIBCALEN = ZERO


PERFORM PRIMEIRA-VEZ


ELSE


PERFORM RETORNO



END-IF




Primeira pseudo-conversação




IF EIBCALEN = ZERO


PERFORM MONTA-TELA


ELSE


PERFORM PROCESSA


END-IF




EXEC CICS RETURN


TRANSID('CLI1')

COMMAREA(WS-COMM)


LENGTH(100)


END-EXEC




Curiosidades Bellacosa Mainframe

Durante os anos 80 e 90 era comum encontrar MAPSETs contendo 40 ou 50 telas.

Muitos bancos utilizavam convenções curiosas:

CLI001


CLI002


CLI003


CLI999




Algumas equipes chamavam a última tela de erro de:

TELAMORTE


ABEND01


SOC4MAP


LASTMAP




Easter Egg Mainframe

Pouca gente sabe, mas muitos desenvolvedores antigos escondiam mensagens em campos DRK (Dark).

Exemplo:

DFHMDF POS=(24,1),
LENGTH=20,
ATTRB=(DRK,PROT),
INITIAL='BELLACOSA RULES'

O usuário nunca via.

Mas bastava descarregar a TIOA em um dump IPCS para encontrar a mensagem.


Continua na Parte 3

Na próxima etapa construiremos um Sistema de Cadastro de Clientes completo, contendo:

✔ Cadastro, Consulta e Alteração;

✔ Campos protegidos e desbloqueados;

✔ Cursor dinâmico;

✔ FSET, MDT e FRSET;

✔ Mensagens de erro;

✔ PF3, PF5, PF7 e PF8;

✔ Múltiplos mapas no mesmo MAPSET;

✔ Fluxograma completo de navegação;

✔ Troubleshooting de MAPFAIL, INVREQ, LENGERR e ASRA;

✔ Curiosidades sobre SDF II, 3279 colorido e a evolução do BMS até o CICS TS 6.x.


Sem comentários:

Enviar um comentário