| Bellacosa Mainframe mini curso de cics bms |
☕ Um Café no Bellacosa Mainframe
CICS BMS para Desenvolvedores COBOL – Parte 1
Do Terminal 3270 ao Primeiro Hello World
Salve, jovem Padawan!
Se você está começando sua jornada no universo IBM Z e já ouviu alguém falar frases misteriosas como:
"Precisamos alterar o MAPSET."
"O cursor está parando no campo errado."
"O MDT não está ligado."
"Faz um SEND MAP DATAONLY."
E ficou pensando:
"Que feitiçaria mainframe é essa?"
Pode ficar tranquilo.
Neste artigo vamos iniciar uma jornada pelo BMS (Basic Mapping Support) do CICS. O objetivo é apresentar o assunto pensando em um desenvolvedor COBOL Júnior, explicando desde a origem do BMS até a construção do primeiro mapa funcionando em uma aplicação CICS.
Pegue seu café, abra seu ISPF, reserve uma aba do SDSF e venha comigo.
Um pouco de história
Voltemos algumas décadas.
Estamos nos anos 70.
Não existia navegador.
Não existia JavaScript.
Não existia React.
Não existia Angular.
Nem mesmo Windows.
O usuário corporativo acessava aplicações utilizando terminais burros conectados ao mainframe.
Entre eles destacavam-se:
IBM 3270
IBM 3278
IBM 3279
IBM 3287
A tela típica possuía:
24 linhas
80 colunas
Algo parecido com isto:
----------------------------------------
SISTEMA DE CLIENTES
Codigo....: _____
Nome......: _____________________
Cidade....: _____________________
PF3=Sair PF5=Atualizar
----------------------------------------
A grande questão era:
Como desenhar telas sem colocar coordenadas dentro do programa COBOL?
A IBM criou então o BMS.
Basic Mapping Support.
O nascimento do CICS
CICS significa:
Customer Information Control System
O projeto surgiu em 1968.
Originalmente desenvolvido pela IBM para atender grandes empresas que precisavam de processamento transacional online.
Enquanto o Batch processava milhares de registros durante a madrugada...
O CICS permitia:
consultar saldo;
emitir passagens;
cadastrar clientes;
aprovar empréstimos;
consultar apólices;
efetuar reservas.
Tudo em tempo real.
Hoje ainda existem milhões de transações CICS sendo executadas diariamente.
O que é BMS ?
BMS significa:
Basic Mapping Support
Ele é uma camada intermediária entre:
Programa COBOL
e
Terminal 3270.
Ele esconde detalhes do dispositivo.
O desenvolvedor não precisa conhecer:
Posição física do cursor
Bytes de atributo
Intensidade
Cor
Protocolo 3270
Ele apenas manipula variáveis COBOL.
Arquitetura do BMS
Programa COBOL
│
│
▼
+----------------+
| Symbolic Map |
+----------------+
│
▼
+----------------+
| BMS |
+----------------+
│
▼
+----------------+
| Physical Map |
+----------------+
│
▼
Terminal 3270
Uma analogia moderna
Imagine:
HTML
CSS
JavaScript
O BMS faz papel semelhante.
| Mundo Web | Mundo CICS |
|---|---|
| HTML | Physical Map |
| Javascript | COBOL |
| Browser | Terminal 3270 |
| DOM | Symbolic Map |
| Framework | BMS |
O que é um MAP ?
MAP é uma tela.
Exemplo:
Tela Login
Tela Consulta
Tela Menu
Tela Inclusão
Cada tela é um MAP.
Exemplo
LOGIN
Usuário:
Senha:
ENTER=Entrar
PF3=Sair
Outro MAP
MENU
1 Consultar
2 Alterar
3 Incluir
PF3 Sair
O que é um MAPSET ?
Mapset é um conjunto de mapas.
Pode possuir:
LOGIN
MENU
CONSULTA
ALTERAÇÃO
INCLUSÃO
CONFIRMAÇÃO
Tudo agrupado.
Exemplo:
SISTCLI DFHMSD
Dentro dele
LOGIN DFHMDI
MENU DFHMDI
CONSUL DFHMDI
ALTERA DFHMDI
Physical Map
É um módulo executável.
Gerado pelo assembler.
Fica em:
DFHRPL
Exemplo
CLIENTES
O CICS carrega automaticamente.
Symbolic Map
Copybook COBOL.
Vai para:
COPYLIB
SYSLIB
Exemplo
CLIENTEM
As três macros do BMS
Existem apenas três macros principais.
DFHMSD
Mapset
DFHMDI
Mapa
DFHMDF
Campo
DFHMSD
É o cabeçalho.
Exemplo
CLIENTE DFHMSD TYPE=&SYSPARM,
LANG=COBOL,
MODE=INOUT,
STORAGE=AUTO,
TIOAPFX=YES,
CTRL=(FREEKB)
TYPE
MAP
DSECT
FINAL
LANG
COBOL
PLI
ASM
MODE
IN
OUT
INOUT
STORAGE
AUTO
BASE=MAP-IOAREA
TIOAPFX
Recomendado:
TIOAPFX=YES
Reserva 12 bytes para BMS.
DFHMDI
Define uma tela.
Exemplo
HELLOMAP DFHMDI
SIZE=(24,80)
DFHMDF
Define campo.
Exemplo
MSG DFHMDF POS=(5,10),
LENGTH=20,
ATTRB=PROT,
INITIAL='HELLO WORLD'
Nosso primeiro Hello World
Chegou a hora.
Fonte BMS
HELLO DFHMSD TYPE=&SYSPARM,
LANG=COBOL,
MODE=OUT,
TIOAPFX=YES
TELA1 DFHMDI SIZE=(24,80)
DFHMDF POS=(1,25),
LENGTH=30,
ATTRB=(PROT,BRT),
INITIAL='HELLO WORLD BMS'
DFHMDF POS=(22,2),
LENGTH=40,
ATTRB=(ASKIP),
INITIAL='PF3 SAIR'
DFHMSD TYPE=FINAL
END
O que este mapa faz?
Exibe:
HELLO WORLD BMS
PF3 SAIR
Usuário não consegue alterar nada.
Todos campos são protegidos.
Geração do Symbolic Map
O assembler cria um copybook.
Exemplo
01 TELA1O.
05 FILLER PIC X(30).
01 TELA1I.
05 FILLER PIC X(30).
Programa COBOL
Nosso primeiro programa.
IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.
DATA DIVISION.
WORKING-STORAGE SECTION.
COPY HELLO.
PROCEDURE DIVISION.
EXEC CICS SEND
MAP('TELA1')
MAPSET('HELLO')
ERASE
FREEKB
END-EXEC.
EXEC CICS RETURN
END-EXEC.
O que acontece internamente?
Fluxo:
COBOL
SEND MAP
↓
BMS
↓
Physical Map
↓
Terminal
↓
Usuário visualiza
HELLO WORLD
A magia do BMS
Observe.
No COBOL não existe:
Linha 1
Coluna 25
Brilho
Atributo
3270
Bytes hexadecimais
Tudo está encapsulado.
O desenvolvedor apenas escreve:
SEND MAP
E o CICS faz o restante.
Curiosidade Bellacosa Mainframe
Muitos sistemas bancários escritos entre 1980 e 1995 continuam utilizando exatamente a mesma tecnologia apresentada neste artigo.
Alguns processam milhões de transações por dia.
Muitos deles executam em máquinas IBM z16 e z17, utilizando telas BMS desenvolvidas há mais de 30 anos.
É bastante comum encontrar mapas criados em 1987, recompilados diversas vezes ao longo das décadas, ainda em plena operação em seguradoras, bancos, empresas aéreas e grandes varejistas.
E isso talvez seja uma das maiores demonstrações da longevidade e da estabilidade da plataforma IBM Z.
Continua...
Na Parte 2 veremos:
✓ Compilação passo a passo do BMS
✓ JCL de Assembly
✓ Geração do Physical Map
✓ Geração do Symbolic Map
✓ Linkedit
✓ Cadastro via CEDA
✓ Uso do INSTALL
✓ Comandos CEMT
✓ SEND MAP
✓ RECEIVE MAP
✓ DFHEIBLK
✓ DFHAID
✓ Primeira pseudo-conversação CICS
Sem comentários:
Enviar um comentário