| Bellacosa Mainframe e a terceira parte do mini curso CICS BMS |
☕ Um Café no Bellacosa Mainframe
CICS BMS para Desenvolvedores COBOL – Parte 3
Construindo uma Aplicação Real: Cadastro de Clientes, Pseudo-Conversação e Troubleshooting
"Até agora aprendemos o que é BMS, como criar mapas, compilá-los, instalá-los no CICS e navegar entre SEND MAP, RECEIVE MAP e HANDLE AID. Agora chegou a hora de montar uma aplicação semelhante às encontradas em bancos, seguradoras e empresas de telecomunicações."
Pegue mais um café, abra uma sessão do IPCS, outra do SDSF e vamos colocar a mão na massa.
O Projeto
Nosso sistema será composto por uma transação chamada:
CLI1
Associada ao programa:
CLICAD
Utilizando o MAPSET:
CLIMAP
Nossa tela
Visualmente teremos:
----------------------------------------------------------
CADASTRO DE CLIENTES
Codigo.......: _______
Nome.........: ___________________________
CPF..........: ___________
Cidade.......: ___________________________
Telefone.....: ___________
Email........: ___________________________
Mensagem.....:
PF3=Sair PF5=Limpar PF7=Consultar
----------------------------------------------------------
O MAPSET
DFHMSD
CLIMAP DFHMSD TYPE=&SYSPARM,
MODE=INOUT,
LANG=COBOL,
STORAGE=AUTO,
TIOAPFX=YES,
CTRL=(FREEKB)
DFHMDI
TELA01 DFHMDI SIZE=(24,80)
Campos protegidos
Labels.
Nunca serão alterados.
Exemplo:
DFHMDF POS=(5,2),
LENGTH=10,
INITIAL='Codigo:',
ATTRB=(ASKIP,NORM)
DFHMDF POS=(6,2),
INITIAL='Nome:',
LENGTH=10,
ATTRB=(ASKIP)
Campos de entrada
Código
CODIGO DFHMDF POS=(5,15),
LENGTH=6,
ATTRB=(UNPROT,IC),
PICIN='9(6)'
Observe.
IC
Cursor inicial.
Nome
NOME DFHMDF POS=(6,15),
LENGTH=30,
ATTRB=UNPROT
CPF
CPF DFHMDF POS=(7,15),
LENGTH=11,
ATTRB=(UNPROT,NUM)
Cidade
CIDADE DFHMDF POS=(8,15),
LENGTH=25,
ATTRB=UNPROT
Mensagem
Protegida.
Sempre enviada.
MSG DFHMDF POS=(22,2),
LENGTH=70,
ATTRB=(PROT,FSET,BRT)
O MDT
Muitos iniciantes demoram a entender.
MDT significa:
Modified Data Tag
Indica se um campo foi alterado.
Se não estiver ligado.
Campo não chega ao COBOL.
FSET
Força transmissão.
ATTRB=(FSET)
Excelente para mensagens.
Datas.
Campos protegidos.
Bloqueando campos
Imagine uma consulta.
Usuário não pode alterar.
Mudamos.
De:
UNPROT
Para:
PROT
Alternando dinamicamente
Muito comum.
Modo Inclusão.
Nome -> UNPROT
Modo Consulta.
Nome -> PROT
Posicionando cursor
Existe um truque elegante.
MOVE -1 TO NOMEL
Depois:
EXEC CICS SEND MAP
CURSOR
END-EXEC
BMS procura.
Campo cujo L=-1.
Cursor aparece ali.
Tratando PF Keys
COPY DFHAID
COPY DFHAID.
Avaliando
EVALUATE EIBAID
WHEN DFHENTER
PERFORM GRAVA
WHEN DFHPF3
PERFORM SAIR
WHEN DFHPF5
PERFORM LIMPA
WHEN DFHPF7
PERFORM CONSULTA
WHEN OTHER
PERFORM ERRO
END-EVALUATE
PF3
EXEC CICS RETURN
END-EXEC
PF5
Limpa campos.
MOVE SPACES TO TELA01O
SEND novamente.
PF7
Consulta.
DB2.
VSAM.
IMS.
Pode ser qualquer backend.
A Arquitetura em 3 Camadas
Poucos percebem.
Já fazíamos isso nos anos 80.
Camada Apresentação
BMS
MAPSET
Camada Negócio
COBOL
CLICAD
Camada Dados
DB2
VSAM
IMS
Visualmente:
Terminal
│
MAPSET
│
COBOL
│
DB2
Pseudo-Conversação
Talvez o conceito mais importante.
Não existe programa residente.
CICS trabalha com tarefas curtas.
Fluxo
Usuário
↓
EXECUTA CLI1
↓
Programa
↓
SEND MAP
↓
RETURN
===================
Usuário ENTER
===================
Nova Task
↓
RECEIVE MAP
↓
Valida
↓
DB2
↓
SEND MAP
Primeira chamada
IF EIBCALEN = ZERO
PERFORM PRIMEIRA-VEZ
END-IF
Retorno
IF EIBCALEN > ZERO
PERFORM RETORNO
END-IF
COMMAREA
Persistência.
Entre tasks.
01 WS-COMM.
05 WS-CODIGO PIC 9(6).
05 WS-MODO PIC X.
RETURN
EXEC CICS RETURN
TRANSID('CLI1')
COMMAREA(WS-COMM)
LENGTH(100)
END-EXEC
Troubleshooting
MAPFAIL
Muito comum.
Usuário apertou PF3.
Sem digitação.
RESP=36
INVREQ
Comando inválido.
Exemplo:
SEND DATAONLY
Antes de MAPONLY.
LENGERR
Tamanho incorreto.
ASRA
Favorito dos desenvolvedores.
Normalmente:
S0C7
S0C4
S0CB
CEDF
Melhor amigo.
Debug online.
CEDF ON
Executa.
Comando por comando.
CECI
Excelente ferramenta.
Testar comandos.
Exemplo.
CECI INQUIRE PROGRAM(CLICAD)
Curiosidades
SDF II
Editor gráfico.
Muito usado.
Década de 80.
Desenhava telas.
Gerava BMS.
Cores
Suportava:
Azul
Branco
Verde
Turquesa
Vermelho
Amarelo
Easter Egg Mainframe
Alguns programadores escondiam mensagens.
Campos DRK.
Exemplo.
DFHMDF POS=(24,1),
ATTRB=(DRK,PROT),
INITIAL='MAY THE COBOL BE WITH YOU'
Usuário nunca via.
Mas um dump IPCS entregava.
Releases do CICS
1970
Primeiros CICS.
1980
BMS consolidado.
1990
SDF II.
2000
CICS TS.
2010
Web Services.
2020
REST.
JSON.
zOS Connect.
2025+
CICS TS 6.x.
IA.
OpenTelemetry.
APIs modernas.
Considerações Finais
Aprender BMS é muito mais do que aprender a desenhar telas 3270.
É compreender a forma como milhares de aplicações críticas foram construídas.
É entender pseudo-conversação.
É conhecer a origem das arquiteturas em camadas.
É perceber que muitos conceitos considerados modernos já estavam presentes em aplicações escritas décadas atrás.
E talvez esta seja a principal lição do universo IBM Z:
A tecnologia muda.
Interfaces mudam.
Frameworks desaparecem.
Mas sistemas bem projetados atravessam gerações.
No próximo café do Bellacosa Mainframe, continuaremos explorando os bastidores do CICS, porque, no IBM Z, sempre existe mais um comando, mais um control block e mais uma curiosidade esperando para ser descoberta.
Sem comentários:
Enviar um comentário