Translate

Mostrar mensagens com a etiqueta bms. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta bms. Mostrar todas as mensagens

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."

 




terça-feira, 18 de dezembro de 2012

🔥 Como Criar uma Tela CICS BMS – Guia Definitivo Passo a Passo

 


🔥 Como Criar uma Tela CICS BMS – Guia Definitivo Passo a Passo



☕ Introdução — Antes do HTML, existia o BMS

Antes de React, Angular e CSS, o mainframe já fazia interface rica — só que com disciplina, regra e respeito ao terminal.

No mundo CICS, tela não é arte.
Tela é contrato, estado, performance e sobrevivência em produção.

Vamos do zero absoluto até a tela rodando, sem pular etapas.


🧱 Conceitos Fundamentais (Sem isso, tudo quebra)

📌 O que é BMS?

BMS (Basic Mapping Support) é a linguagem declarativa usada para definir telas CICS.

Ela descreve:

  • Campos

  • Posições

  • Atributos

  • Proteção

  • Entrada e saída de dados

📌 BMS não tem lógica.
Ele só descreve como a tela se comporta.


🧠 MAP vs MAPSET — A confusão clássica

ConceitoO que é
MAPSETConjunto de mapas (arquivo fonte BMS)
MAPUma tela individual dentro do MAPSET

📌 Analogia Bellacosa:

  • MAPSET = arquivo HTML

  • MAP = página individual

  • FIELD = input / label



🧭 Passo a Passo — Criando uma Tela CICS BMS


1️⃣ Criar o Fonte BMS (MAPSET)

Exemplo básico:

MAPSET01 DFHMSD TYPE=MAP,MODE=INOUT,LANG=COBOL,TERM=3270

Parâmetros importantes:

  • TYPE=MAP → indica que é um MAPSET

  • MODE=INOUT → entrada e saída

  • LANG=COBOL → gera copybook COBOL

  • TERM=3270 → terminal padrão

📌 Erro comum: esquecer LANG=COBOL → não gera copybook.


2️⃣ Definir um MAP (Tela)

MAP01 DFHMDI SIZE=(24,80),LINE=1,COLUMN=1

O que isso faz:

  • Cria uma tela de 24x80

  • Posiciona no canto superior

📌 Um MAPSET pode ter vários MAPs.


3️⃣ Definir Campos (DFHMDF)

Exemplo:

CAMPO1 DFHMDF POS=(5,10), LENGTH=10, ATTRB=(UNPROT,IC), INITIAL='Digite:'

Parâmetros essenciais:

ParâmetroFunção
POSLinha e coluna
LENGTHTamanho
ATTRBAtributos
INITIALTexto inicial

🎛️ Atributos Importantes (Onde mora o poder)

AtributoFunção
PROTCampo protegido
UNPROTCampo editável
ICCursor inicial
MDTCampo alterado
BRTBrilho
ASKIPPula o campo

📌 Erro clássico: esquecer MDT → CICS acha que o campo não mudou.


4️⃣ Finalizar o MAPSET

DFHMSD TYPE=FINAL END

📌 Sem isso, não compila.



⚙️ Workflow de Compilação (Onde muitos erram)

1️⃣ Fonte BMS
2️⃣ Assembler
3️⃣ Gera MAPSET (LOAD)
4️⃣ Gera COPYBOOK
5️⃣ COPYBOOK entra no programa COBOL
6️⃣ Programa SEND/RECEIVE MAP

📌 BMS não é compilado como COBOL.


🧪 Usando o MAP no Programa COBOL

Enviar a tela:

EXEC CICS SEND MAP('MAP01') MAPSET('MAPSET01') ERASE END-EXEC

Receber dados:

EXEC CICS RECEIVE MAP('MAP01') MAPSET('MAPSET01') END-EXEC

📌 O COPYBOOK gerado contém:

  • campos de entrada

  • campos de saída

  • indicadores MDT


🚀 Otimização — Dicas Bellacosa de Produção

✅ Boas práticas

  • Campos pequenos → menos tráfego

  • Use PROT para labels

  • Use UNPROT só onde necessário

  • Evite mapas gigantes

  • Reutilize MAPSETs

❌ Erros comuns

  • Um MAP por MAPSET sem necessidade

  • Tela cheia de campos UNPROT

  • Esquecer MDT

  • Misturar lógica com tela

  • Hardcode de posição no COBOL


🧠 Hierarquia Mental do BMS (Grave isso)

MAPSET ├── MAP │ ├── FIELD │ ├── FIELD │ └── FIELD

📌 Se você entende isso, não se perde mais.


🧯 Erros Clássicos em Produção

ProblemaCausa
Tela não apareceMAPSET não instalado
Campos vaziosMDT ausente
Cursor erradoIC mal posicionado
Dump AEIMMAP inexistente
Dados não chegamRECEIVE errado

🎓 Guia de Estudo Rápido

  1. Entenda MAPSET vs MAP

  2. Crie tela simples

  3. Compile e gere copybook

  4. Faça SEND

  5. Faça RECEIVE

  6. Trate MDT

  7. Otimize


💬 Comentário El Jefe Midnight Lunch

“Quem domina BMS, domina o ritmo do CICS.”


🏁 Conclusão Bellacosa

Tela CICS não é UI.
É contrato, estado e performance.

🔥 Quem respeita o BMS:

  • evita ABEND

  • entrega rápido

  • sobrevive em produção