Translate

quarta-feira, 13 de agosto de 2025

🧾 BMS no CICS – A Arte de Conversar com o Usuário no Terminal

 

🧾 BMS no CICS – A Arte de Conversar com o Usuário no Terminal

4,424 followers

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=FINAL

Traduçã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

  1. Use COPYBOOKs/Includes gerados pelo BMS assembler no seu programa COBOL com COPY TELA1.
  2. TIOAPFX=YES permite acessar o cabeçalho do terminal (AID key, cursor position, etc).
  3. Quer bloquear um campo em tempo de execução? Altere dinamicamente o atributo de vídeo via COBOL.
  4. Utilize MAPONLY ou DATAONLY em EXEC CICS SEND/RECEIVE para performance otimizada.
  5. 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