 |
| Bellacosa Mainframe e o misterio da tela fantasma |
☕ Um Café no Bellacosa Mainframe
O Mistério da Tela Fantasma
Como um Jovem Programador COBOL Descobriu que o Verdadeiro Coração do CICS Não Estava no Código... Mas na Tela que Nunca Existiu
"Existem programas que processam milhões de reais por minuto. Existem programas que controlam companhias aéreas, hospitais, bolsas de valores e bancos inteiros. Mas poucos iniciantes percebem um detalhe curioso: nenhum desses programas conversa diretamente com as pessoas. Existe um intermediário silencioso. Invisível. Elegante. Antigo. Seu nome é BMS."
Capítulo 1 — A Sala Iluminada por Monitores Verdes
Era quase meia-noite.
As luzes do CPD permaneciam acesas como pequenas estrelas artificiais.
Os enormes armários IBM zSeries respiravam lentamente através do som constante dos ventiladores.
O jovem programador observava uma tela 3270.
Nenhum mouse.
Nenhuma janela.
Nenhum botão colorido.
Apenas caracteres verdes sobre um fundo escuro.
Mesmo assim...
milhões de pessoas dependiam daquela tela todos os dias.
Clientes sacavam dinheiro.
Passagens aéreas eram emitidas.
Apólices de seguro eram consultadas.
Hospitais registravam pacientes.
Tudo acontecia ali.
O rapaz abriu seu editor COBOL esperando encontrar comandos que desenhassem caixas, títulos e campos de entrada.
Não encontrou absolutamente nada.
Nenhum comando para desenhar uma janela.
Nenhum botão.
Nenhuma caixa de texto.
Nenhum formulário.
Apenas...
EXEC CICS
SEND MAP('LOGIN')
END-EXEC.
Ele franziu a testa.
— Só isso?
Onde estava a tela?
Quem a desenhava?
Foi naquele instante que o velho administrador sorriu discretamente.
— Você acabou de encontrar o primeiro fantasma do CICS...
O Fantasma chamado BMS
O maior erro de quem começa a estudar CICS é imaginar que o COBOL cria a interface.
Não cria.
Na realidade, existe uma separação extremamente elegante.
O COBOL pensa.
O BMS mostra.
O CICS conversa.
Essa divisão parece óbvia hoje.
Mas quando foi criada, décadas atrás, representava uma revolução tecnológica.
Antes do BMS, existia o caos
Imagine tentar construir um aplicativo moderno sem HTML.
Sem CSS.
Sem formulários.
Sem componentes gráficos.
Agora imagine fazer isso nos anos 70.
Era exatamente essa a realidade.
Cada terminal possuía comandos próprios.
Cada fabricante tinha um protocolo diferente.
Cada modelo de equipamento exigia programação específica.
Um simples campo para digitar uma conta bancária podia exigir dezenas de comandos de baixo nível.
Os programadores gastavam mais tempo desenhando telas do que desenvolvendo regras de negócio.
Foi então que a IBM perguntou:
"E se a tela pudesse ser descrita em vez de programada?"
Assim nasceu o Basic Mapping Support.
O que realmente é um MAP?
A maioria dos iniciantes responde:
"É uma tela."
Não exatamente.
Essa resposta está incompleta.
Um MAP é muito mais parecido com uma planta arquitetônica.
Quando um arquiteto desenha uma casa, ele não constrói a casa.
Ele apenas descreve onde estarão:
paredes
portas
janelas
corredores
tomadas
iluminação
O pedreiro transforma aquela planta em realidade.
O BMS faz exatamente isso.
Ele descreve.
O CICS constrói.
Pense como um diretor de cinema
Imagine um estúdio de Hollywood dos anos 1950.
O diretor entrega um roteiro.
O cenógrafo monta o cenário.
Os atores entram em cena.
O público vê o resultado final.
Quem é quem?
O roteiro é o MAP.
O cenógrafo é o BMS.
Os atores são os usuários.
O diretor é o COBOL.
O teatro inteiro é o CICS.
Sem roteiro...
não existe cenário.
Sem cenário...
não existe espetáculo.
A Anatomia de uma Tela
Uma tela BMS pode parecer simples.
========================================
BANCO BELLACOSA
Conta............. ___________
Senha............. ___________
Valor............. ___________
PF3 Voltar
ENTER Confirmar
========================================
Mas escondidos atrás dessa simplicidade existem dezenas de definições.
Cada elemento possui atributos próprios.
Campo de Entrada
Permite digitação.
__________
O usuário pode alterar.
Campo Protegido
Não aceita alterações.
Muito usado para:
títulos
mensagens
saldo
CPF
agência
Campo Oculto
Pode existir na memória sem aparecer ao usuário.
Muito utilizado para controle interno.
Campo Numérico
Aceita apenas números.
O próprio terminal ajuda na validação.
Campo de Senha
Os caracteres podem ser mascarados.
Algo comum em caixas eletrônicos.
A posição absoluta
Uma curiosidade fascinante.
O BMS trabalha em coordenadas.
Linha.
Coluna.
Exatamente como um tabuleiro de xadrez.
Por exemplo:
Linha 5
Coluna 20
Ali ficará o campo "Conta".
Não existe "arrastar componente".
Tudo é matemático.
O Grande Tradutor
Imagine dois países.
Um fala português.
Outro fala japonês.
Entre eles existe um tradutor.
Esse tradutor chama-se BMS.
O usuário fala:
"Minha conta é 12345."
O COBOL entende:
MOVE CONTAI TO WS-CONTA
Na volta acontece o contrário.
O COBOL produz:
MOVE WS-SALDO TO SALDOO
O usuário vê:
Saldo:
R$ 8.542,30
O BMS traduziu tudo.
SEND MAP
Este talvez seja o comando mais famoso do desenvolvimento CICS.
EXEC CICS
SEND MAP('MENU001')
MAPSET('BANCO')
END-EXEC.
Parece pequeno.
Mas acontece muita coisa.
O CICS:
✔ Localiza o MAP
✔ Monta o buffer
✔ Preenche atributos
✔ Define cursor
✔ Marca campos modificados
✔ Envia ao terminal
Tudo isso acontece em milissegundos.
RECEIVE MAP
Depois do ENTER...
EXEC CICS
RECEIVE MAP('MENU001')
MAPSET('BANCO')
END-EXEC.
Agora o processo é invertido.
O terminal envia apenas aquilo que mudou.
E aqui encontramos um dos segredos mais brilhantes do CICS.
O Mistério dos Campos Invisíveis
Você imaginaria que uma tela inteira fosse enviada de volta ao servidor.
Mas não.
O terminal IBM 3270 é muito mais inteligente.
Ele utiliza um mecanismo chamado:
MDT
Modified Data Tag
Esse pequeno atributo informa:
"Este campo foi alterado."
Então apenas ele é transmitido.
Imagine uma tela com 300 campos.
Você altera somente um.
Somente um atravessa a rede.
Na década de 1970 isso era quase magia.
Hoje chamamos isso de otimização.
Naquela época era pura engenharia de alto nível.
O Curioso Mundo dos Sufixos I e O
Todo iniciante estranha.
Por que aparecem nomes como:
CLIENTEI
CLIENTEO
VALORI
VALORO
A resposta é simples.
"I"
Input.
"O"
Output.
Entrada.
Saída.
O usuário escreve em:
VALORI
O programa responde usando:
VALORO
É uma convenção que sobrevive há décadas.
MAPSET
Imagine um shopping.
Cada loja é um MAP.
O shopping inteiro é o MAPSET.
Num banco podemos ter:
LOGIN
↓
MENU
↓
SALDO
↓
PIX
↓
EXTRATO
↓
EMPRÉSTIMO
↓
CARTÕES
Todos pertencem ao mesmo conjunto.
Isso facilita manutenção.
DFHMSD, DFHMDI e DFHMDF
Esses nomes assustam.
Mas são incrivelmente lógicos.
Imagine construir um prédio.
Primeiro:
DFHMSD
Define o condomínio.
Depois:
DFHMDI
Define um apartamento.
Depois:
DFHMDF
Define cada cômodo.
Ou seja:
MAPSET
↓
MAP
↓
FIELD
Nunca mais você esquecerá essa hierarquia.
O Copybook Fantasma
Existe um momento mágico durante a montagem do BMS.
O compilador gera automaticamente um COPY COBOL.
Algo parecido com:
COPY MAPA001.
O programador praticamente nunca escreve essa estrutura manualmente.
Ela nasce da definição BMS.
Isso garante sincronismo perfeito entre a tela e o programa.
O Ciclo Completo da Vida de uma Tela
Vamos acompanhar uma transação bancária.
Cliente coloca o cartão.
↓
TOR recebe.
↓
AOR executa.
↓
Programa COBOL.
↓
SEND MAP.
↓
Terminal mostra.
↓
Cliente digita.
↓
ENTER.
↓
RECEIVE MAP.
↓
COBOL valida.
↓
Db2 consulta.
↓
VSAM registra.
↓
MQ envia mensagem.
↓
SYNCPOINT confirma.
↓
SEND MAP novamente.
↓
Resposta aparece.
Perceba algo interessante.
O usuário acredita que conversou com um programa.
Na verdade conversou com uma cadeia inteira de tecnologias.
Comparando com a Internet Moderna
Hoje usamos:
HTML
CSS
JavaScript
REST
JSON
React
Angular
Vue
No CICS clássico temos:
MAP
↓
BMS
↓
COBOL
↓
CICS
↓
3270
Os nomes mudaram.
A filosofia continua surpreendentemente parecida:
Separar apresentação da lógica.
Uma Analogia com Inteligência Artificial
Imagine esta conversa.
Você escreve:
"Qual meu saldo?"
A janela do ChatGPT seria o MAP.
O modelo de IA seria o COBOL.
O protocolo que envia sua pergunta e devolve minha resposta seria o BMS.
Curiosamente...
o conceito permanece praticamente o mesmo.
Curiosidades que Pouca Gente Conhece
☕ Curiosidade 1
Os terminais 3270 não enviam cada tecla digitada.
Eles armazenam tudo localmente.
Somente quando ENTER é pressionado ocorre a comunicação.
Isso reduz drasticamente o tráfego.
☕ Curiosidade 2
Um MAP não precisa ocupar a tela inteira.
É possível enviar apenas parte dela.
☕ Curiosidade 3
Os atributos de um campo (protegido, brilhante, oculto, piscante, cor, intensidade) não fazem parte do COBOL.
São controlados pelo BMS.
☕ Curiosidade 4
Em muitos bancos existem MAPS com mais de trinta anos ainda em produção.
Mudaram servidores.
Mudou o hardware.
Mudou o sistema operacional.
O MAP permaneceu.
☕ Curiosidade 5
Grande parte dos aplicativos web modernos acessa exatamente esses mesmos programas COBOL.
A diferença é que hoje existe uma API REST na frente.
O programa continua praticamente igual.
Dicas para Quem Está Começando
✔ Nunca tente desenhar telas no COBOL.
✔ Aprenda SEND e RECEIVE antes de estudar lógica complexa.
✔ Entenda bem Input e Output.
✔ Domine PF Keys.
✔ Estude MDT.
✔ Conheça os atributos dos campos.
✔ Aprenda a ler um MAP antes de programar.
✔ Entenda como o copybook é gerado.
✔ Memorize DFHMSD, DFHMDI e DFHMDF.
✔ Sempre pense na separação entre interface e negócio.
Perguntas Clássicas de Entrevista
O que é um MAP?
É a definição lógica de uma tela utilizada pelo CICS para interação com o usuário.
O que é BMS?
É o componente do CICS responsável por definir, gerenciar e traduzir as telas entre o terminal e o programa COBOL.
Quem desenha a tela?
O BMS.
Quem processa as regras?
O COBOL.
Quem controla a comunicação?
O CICS.
O COBOL conhece o terminal?
Não.
Ele conhece apenas as estruturas geradas pelo MAP.
Easter Egg ☕
Os veteranos costumam brincar que existe um "programador invisível" dentro do CICS.
Quando o iniciante vê apenas:
EXEC CICS SEND MAP
END-EXEC.
Ele pensa:
"Só isso?"
Mas, naquele exato instante, o CICS localiza o MAPSET, interpreta os atributos, monta o buffer 3270, posiciona o cursor, aplica cores, verifica campos protegidos, respeita o MDT, prepara o fluxo de comunicação e envia tudo ao terminal.
É como um mordomo impecável em um romance policial noir: ninguém o nota durante a festa, mas sem ele nada funcionaria.
O Último Mistério do Bellacosa Mainframe
Na manhã seguinte, o jovem programador voltou ao CPD convencido de que finalmente havia entendido como as telas eram criadas.
O velho administrador apenas sorriu e apontou para um monitor 3270.
— Agora você já sabe que a tela não mora dentro do COBOL.
O rapaz concordou.
— Sim... ela mora no BMS.
O veterano balançou a cabeça.
— Ainda não.
Ele caminhou lentamente entre os gabinetes do mainframe e disse:
— O BMS também não é a tela.
É apenas a descrição dela.
A verdadeira tela só existe por alguns milissegundos, quando o CICS interpreta o MAP, monta o fluxo de dados e o terminal a materializa diante dos olhos do usuário. Assim que a transação termina, ela desaparece novamente, como um fantasma que cumpriu sua missão.
O jovem permaneceu em silêncio.
Naquele instante compreendeu uma das maiores elegâncias da arquitetura CICS: o usuário jamais vê o BMS, nunca enxerga o copybook, não conhece o SEND MAP, ignora o RECEIVE MAP e nunca ouvirá falar de DFHMSD, DFHMDI ou DFHMDF. Ainda assim, toda interação depende deles.
É esse o encanto dos grandes sistemas corporativos. Quanto mais perfeita é a engenharia, mais invisível ela se torna.
E talvez este seja o maior segredo do Bellacosa Mainframe: por trás de cada tela aparentemente simples existe uma orquestra silenciosa de componentes trabalhando em perfeita harmonia, provando que, no universo dos mainframes, os verdadeiros heróis quase nunca aparecem em cena.