🧾 BMS no CICS – A Arte de Conversar com o Usuário no Terminal
Salve jovem padawan, continuando nossas aula de CICS, vamos falar sobre as antigas interfaces de usuario, usando o Terminal 3270 e as telas de CICS em BMS (Assembly). Vamos entender o que eram, o que fazem e seu futuro em computação moderna.
Hoje temos webservices muito mais poderosos, o javascript, css e html 5, permitem criação de Front-end poderosos, bonitos com cores, ícones, sons e melhorias admiradas e desejadas pelos usuários, porém antes delas surgirem tudo era tela negra e letras verdes. Esse é o papel do BMS, hoje relegado, em sistemas legados e soluções, que serão migradas e evoluidas.
O BMS serviu bem seu papel, auxiliando na modernização dos processos em papel, para processos em informática, saber sobre BMS permite auxiliar em sua manutenção e possivel migração.
🏛️ O que é BMS?
BMS (Basic Mapping Support) é a linguagem do CICS para criar telas (ou maps) que serão exibidas em terminais 3270, através dos emuladores. Em um tempo onde interface gráfica era um sonho distante, o BMS era (e ainda é!) a ponte entre o usuário e os programas COBOL que rodam por trás das cortinas.
O BMS cuida de dois papéis fundamentais:
- Montar a tela para o usuário (mapa de saída)
- Coletar os dados digitados (mapa de entrada)
🧬 Origem Histórica
Lá pelos anos 70, a IBM percebeu que os desenvolvedores precisavam padronizar a forma de comunicação entre as aplicações e os terminais físicos. Ao invés de escrever código para cada modelo de terminal (e seus offsets malucos), surgiu o BMS como uma abstração amigável. Porém, difícil de programar, por isso criou um sistema simples de macro com somente 3 comandos, para construir essas telas. Ao longo das décadas foram criadas ferramentas para aumentar a produtividade e facilitar esse processo de criação.
É como se a IBM dissesse:
“Relaxa, cria um MAP que a gente cuida de conversar com o terminal!”
💡 Curiosidades que só quem viveu sabe
- A extensão .MAP (ou .BMS) é traduzida por um assembler em três artefatos: MAP, DSECT, e COPYBOOK para uso no COBOL.
- Existe o conceito de symbolic map, que permite que o programa COBOL leia e escreva dados usando nomes de campos legíveis como TELA1-NOMEI (entrada) e TELA1-NOMEO (saída) presentes num copybook/include a ser declarados no programa.
- Um erro clássico de padawan é não alinhar corretamente o LENGTH com o tamanho do campo no MAP. Resultado? Truncamento e dor de cabeça!
- Existem 3 formatos para mapset: physical map, symbolic map e BMS source.
📐 Estrutura do BMS
Um MAPSET básico tem esta carinha:
DFHMSD TYPE=MAP, MODE=INOUT, STORAGE=AUTO, LANG=COBOL, TIOAPFX=YES
TELA1 DFHMDI SIZE=(24,80)
DFHMDF POS=(5,10), LENGTH=10, ATTRB=ASKIP, INITIAL='NOME.....', FIELD=NOME
DFHMDF POS=(5,25), LENGTH=20, ATTRB=UNPROT, FIELD=NOMEI
DFHMSD TYPE=FINALTradução:
- DFHMSD define o mapset
- DFHMDI define o mapa
- DFHMDF define cada campo
- ATTRB controla comportamento (ASKIP = protegido, UNPROT = digitável)
🛠️ Dicas Práticas de Quem Já Apanhou
- Use COPYBOOKs/Includes gerados pelo BMS assembler no seu programa COBOL com COPY TELA1.
- TIOAPFX=YES permite acessar o cabeçalho do terminal (AID key, cursor position, etc).
- Quer bloquear um campo em tempo de execução? Altere dinamicamente o atributo de vídeo via COBOL.
- Utilize MAPONLY ou DATAONLY em EXEC CICS SEND/RECEIVE para performance otimizada.
- Campos HIDDEN (através de ATTRB=PROT, DARK) são ótimos para carregar dados invisíveis ao usuário.
🎯 Exemplo de Programa COBOL com BMS
EXEC CICS SEND MAP('TELA1')
MAPSET('TELA1')
CURSOR
END-EXEC.
EXEC CICS RECEIVE MAP('TELA1')
MAPSET('TELA1')
END-EXEC.
IF TELA1-NOMEI (WS-MAPAREA) = SPACES
DISPLAY 'Nome não informado'
ELSE
DISPLAY 'Nome recebido: ', TELA1-NOMEI
END-IF.🧙♂️ Bellacosa Tips: Segredos da Ordem Jedi do BMS
- Evite MAPs com mais de 20 campos visíveis – isso sobrecarrega o terminal e confunde o usuário.
- Use nomes padronizados, como XXXX-NOMEI, XXXX-IDADEI, etc., para facilitar manutenção.
- Separe MAPSETS por tela/função, evitando mapsets monstruosos com dezenas de mapas.
- Campos numéricos? Valide com COBOL antes de continuar – o BMS não impede letras em campos UNPROT.
- Crie um painel no ISPF para gerar mapas BMS automaticamente com templates – produtividade voa!
- Use e abuse das teclas PF-keys
📚 Conclusão
O BMS é uma joia do legado mainframe. Mesmo parecendo arcaico para os olhos modernos, ele ainda é a base de milhares de sistemas críticos em bancos, governos e indústrias. Dominar BMS é um dos passos para se tornar um Jedi no universo CICS.
Com este artigo, apresentei o legado, pensando no futuro, lembre-se que muitas instituições continuam a usar essa joia do legado, dedique-se a estudar, conhece-la melhor. Visite o site da IBM, inscreva-se nos cursos, aprenda e evolua.
Mais uma vez agradeço sua presença e estarei de olho nos comentarios, para melhorar ainda mais o conteúdo.
☕ Gostou do conteúdo?
Então siga o "Um Café no Bellacosa Mainframe" e compartilhe esse artigo com aquele colega que ainda sofre com o mapa que pisca na tela. 😅
💬 "Quem domina o BMS, domina a comunicação entre o COBOL e o mundo."
Sem comentários:
Enviar um comentário