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

domingo, 18 de fevereiro de 2007

O que é CICS?

 

Bellacosa Mainframe e o que é CICS

O que é CICS?

CICS significa:

Customer Information Control System

É o principal monitor transacional do ambiente Mainframe IBM Z e um dos softwares mais importantes da história da computação corporativa.

Criado pela IBM em 1968, o CICS é responsável por executar milhões de transações online em bancos, seguradoras, governos, companhias aéreas e grandes empresas.


Definição Simples

O CICS é:

um gerenciador de transações online.

Ele permite que milhares de usuários acessem simultaneamente aplicações COBOL, PL/I, C e Java executadas no Mainframe.


Analogia Simples

Imagine um restaurante.

  • O cliente faz o pedido.

  • O garçom recebe.

  • A cozinha prepara.

  • O prato é entregue.

No Mainframe:

Usuário
   ↓
CICS
   ↓
Programa COBOL
   ↓
DB2 / VSAM
   ↓
Resposta

O CICS é o "garçom" que coordena tudo.


Por que o CICS existe?

Sem o CICS, cada usuário precisaria executar diretamente um programa no sistema operacional.

Isso consumiria muitos recursos.

O CICS resolve esse problema:

✅ Compartilhando recursos

✅ Controlando usuários

✅ Gerenciando transações

✅ Controlando memória

✅ Gerenciando comunicação


Onde o CICS é usado?

Praticamente em:

  • Bancos

  • PIX

  • TED

  • Cartões de crédito

  • Internet Banking

  • Seguradoras

  • Governo

  • Telecomunicações

  • Companhias aéreas


Arquitetura Simplificada

Terminal
    ↓
CICS
    ↓
Programa COBOL
    ↓
DB2
    ↓
Resposta

Exemplo Real

Cliente consulta saldo:

ATM
 ↓
CICS
 ↓
COBOL
 ↓
DB2
 ↓
Saldo exibido

Tudo acontece em poucos milissegundos.


O que é uma Transação CICS?

É uma operação identificada por um código de 4 caracteres.


Exemplos

CUST
SALD
PIX1
PAGT

Fluxo

Usuário digita:

SALD

O CICS:

Localiza programa
       ↓
Executa COBOL
       ↓
Retorna resultado

Programas CICS

Normalmente escritos em:

  • COBOL

  • PL/I

  • C

  • Java


Exemplo COBOL CICS

Recebendo dados:

EXEC CICS RECEIVE
     MAP('TELA1')
END-EXEC.

Enviando dados

EXEC CICS SEND
     MAP('TELA2')
END-EXEC.

O que é uma MAP?

Tela utilizada pelo usuário.


Exemplo

+----------------------+
| CONSULTA CLIENTE     |
| CONTA: ________      |
| SALDO: ________      |
+----------------------+

BMS

Basic Mapping Support.

Ferramenta usada para criar telas CICS.


COMMAREA

Área usada para passar dados entre programas.


Exemplo

Programa A:

EXEC CICS LINK
     PROGRAM('PROG2')
     COMMAREA(WS-AREA)
END-EXEC.

Programa B

Recebe os dados pela COMMAREA.


Principais Comandos CICS

LINK

Chama outro programa.

EXEC CICS LINK
END-EXEC

XCTL

Transfere controle sem retorno.

EXEC CICS XCTL
END-EXEC

RETURN

Finaliza transação.

EXEC CICS RETURN
END-EXEC

SEND

Envia tela.

EXEC CICS SEND
END-EXEC

RECEIVE

Recebe dados.

EXEC CICS RECEIVE
END-EXEC

CICS e DB2

Integração extremamente comum.


Exemplo

EXEC SQL

   SELECT SALDO
   INTO :WS-SALDO

   FROM CLIENTES

END-EXEC.

CICS e VSAM

Também muito utilizado.


Exemplo

READ ARQCLI

CICS e Segurança

Normalmente integrado ao:

  • RACF

  • ACF2

  • Top Secret


Regiões CICS

O CICS executa dentro de uma região.


Exemplos

CICSA
CICSPRD
CICSTST

O que é uma Região?

Ambiente onde as transações executam.


Monitoramento

Comandos comuns:

CEMT
CEDA
CEDF
CECI

CEMT

Monitor operacional.


Exemplo

CEMT I TASK

Mostra tarefas ativas.


CEDA

Administração de recursos.


CEDF

Debug interativo.


CECI

Executa comandos CICS manualmente.


Erros Comuns (ABENDs CICS)

AICA

Timeout.


AEI0

Programa não encontrado.


AEIV

Erro COMMAREA.


ASRA

Exceção de programa.

Equivalente a:

S0C7
S0C4

Conceito de Transação

Uma transação deve obedecer:

ACID


Atomicidade

Tudo ou nada.


Consistência

Dados válidos.


Isolamento

Transações independentes.


Durabilidade

Dados persistem após COMMIT.


Curiosidades

1. O CICS existe desde 1968

2. Processa bilhões de transações diariamente

3. É considerado o maior monitor transacional do mundo

4. Grande parte dos sistemas bancários utiliza CICS

5. Muitas transações PIX passam por aplicações COBOL/CICS


Resumo Rápido

ConceitoFunção
CICSMonitor transacional
TransaçãoOperação online
MAPTela usuário
BMSCriação de telas
COMMAREAPassagem de dados
LINKChama programa
XCTLTransfere controle
SENDEnvia tela
RECEIVERecebe dados
CEMTAdministração
CEDADefinição recursos
CEDFDebug
CECITestes

Conclusão

O CICS (Customer Information Control System) é o principal monitor de processamento online do Mainframe IBM Z. Ele gerencia transações, usuários, programas COBOL, acesso a DB2 e VSAM, permitindo que milhões de operações críticas sejam executadas com segurança, desempenho e alta disponibilidade em tempo real.