Translate

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

sexta-feira, 3 de abril de 2020

CICS BMS para Desenvolvedores COBOL – Parte 1

 

Bellacosa Mainframe mini curso de cics bms

☕ Um Café no Bellacosa Mainframe

CICS BMS para Desenvolvedores COBOL – Parte 1

Do Terminal 3270 ao Primeiro Hello World

Salve, jovem Padawan!

Se você está começando sua jornada no universo IBM Z e já ouviu alguém falar frases misteriosas como:

"Precisamos alterar o MAPSET."

"O cursor está parando no campo errado."

"O MDT não está ligado."

"Faz um SEND MAP DATAONLY."

E ficou pensando:

"Que feitiçaria mainframe é essa?"

Pode ficar tranquilo.

Neste artigo vamos iniciar uma jornada pelo BMS (Basic Mapping Support) do CICS. O objetivo é apresentar o assunto pensando em um desenvolvedor COBOL Júnior, explicando desde a origem do BMS até a construção do primeiro mapa funcionando em uma aplicação CICS.

Pegue seu café, abra seu ISPF, reserve uma aba do SDSF e venha comigo.


Um pouco de história

Voltemos algumas décadas.

Estamos nos anos 70.

Não existia navegador.

Não existia JavaScript.

Não existia React.

Não existia Angular.

Nem mesmo Windows.

O usuário corporativo acessava aplicações utilizando terminais burros conectados ao mainframe.

Entre eles destacavam-se:

  • IBM 3270

  • IBM 3278

  • IBM 3279

  • IBM 3287

A tela típica possuía:

24 linhas

80 colunas

Algo parecido com isto:

----------------------------------------
 SISTEMA DE CLIENTES

 Codigo....: _____

 Nome......: _____________________

 Cidade....: _____________________

 PF3=Sair    PF5=Atualizar

----------------------------------------

A grande questão era:

Como desenhar telas sem colocar coordenadas dentro do programa COBOL?

A IBM criou então o BMS.

Basic Mapping Support.


O nascimento do CICS

CICS significa:

Customer Information Control System

O projeto surgiu em 1968.

Originalmente desenvolvido pela IBM para atender grandes empresas que precisavam de processamento transacional online.

Enquanto o Batch processava milhares de registros durante a madrugada...

O CICS permitia:

  • consultar saldo;

  • emitir passagens;

  • cadastrar clientes;

  • aprovar empréstimos;

  • consultar apólices;

  • efetuar reservas.

Tudo em tempo real.

Hoje ainda existem milhões de transações CICS sendo executadas diariamente.


O que é BMS ?

BMS significa:

Basic Mapping Support

Ele é uma camada intermediária entre:

Programa COBOL

e

Terminal 3270.

Ele esconde detalhes do dispositivo.

O desenvolvedor não precisa conhecer:

Posição física do cursor

Bytes de atributo

Intensidade

Cor

Protocolo 3270

Ele apenas manipula variáveis COBOL.


Arquitetura do BMS

Programa COBOL
        │
        │
        ▼
+----------------+
| Symbolic Map   |
+----------------+
        │
        ▼
+----------------+
|      BMS       |
+----------------+
        │
        ▼
+----------------+
| Physical Map   |
+----------------+
        │
        ▼
Terminal 3270

Uma analogia moderna

Imagine:

HTML

CSS

JavaScript

O BMS faz papel semelhante.

Mundo WebMundo CICS
HTMLPhysical Map
JavascriptCOBOL
BrowserTerminal 3270
DOMSymbolic Map
FrameworkBMS

O que é um MAP ?

MAP é uma tela.

Exemplo:

Tela Login

Tela Consulta

Tela Menu

Tela Inclusão

Cada tela é um MAP.


Exemplo

LOGIN

Usuário:


Senha:


ENTER=Entrar
PF3=Sair

Outro MAP

MENU

1 Consultar

2 Alterar

3 Incluir


PF3 Sair

O que é um MAPSET ?

Mapset é um conjunto de mapas.

Pode possuir:

LOGIN

MENU

CONSULTA

ALTERAÇÃO

INCLUSÃO

CONFIRMAÇÃO

Tudo agrupado.

Exemplo:

SISTCLI DFHMSD

Dentro dele

LOGIN DFHMDI


MENU DFHMDI


CONSUL DFHMDI


ALTERA DFHMDI

Physical Map

É um módulo executável.

Gerado pelo assembler.

Fica em:

DFHRPL

Exemplo

CLIENTES

O CICS carrega automaticamente.


Symbolic Map

Copybook COBOL.

Vai para:

COPYLIB

SYSLIB

Exemplo

CLIENTEM

As três macros do BMS

Existem apenas três macros principais.

DFHMSD

Mapset

DFHMDI

Mapa

DFHMDF

Campo


DFHMSD

É o cabeçalho.

Exemplo

CLIENTE DFHMSD TYPE=&SYSPARM,
                 LANG=COBOL,
                 MODE=INOUT,
                 STORAGE=AUTO,
                 TIOAPFX=YES,
                 CTRL=(FREEKB)

TYPE

MAP

DSECT

FINAL


LANG

COBOL

PLI

ASM


MODE

IN

OUT

INOUT


STORAGE

AUTO

BASE=MAP-IOAREA


TIOAPFX

Recomendado:

TIOAPFX=YES

Reserva 12 bytes para BMS.


DFHMDI

Define uma tela.

Exemplo

HELLOMAP DFHMDI
         SIZE=(24,80)

DFHMDF

Define campo.

Exemplo

MSG DFHMDF POS=(5,10),
            LENGTH=20,
            ATTRB=PROT,
            INITIAL='HELLO WORLD'

Nosso primeiro Hello World

Chegou a hora.

Fonte BMS


HELLO    DFHMSD TYPE=&SYSPARM,
                LANG=COBOL,
                MODE=OUT,
                TIOAPFX=YES


TELA1    DFHMDI SIZE=(24,80)


         DFHMDF POS=(1,25),
                 LENGTH=30,
                 ATTRB=(PROT,BRT),
                 INITIAL='HELLO WORLD BMS'


         DFHMDF POS=(22,2),
                 LENGTH=40,
                 ATTRB=(ASKIP),
                 INITIAL='PF3 SAIR'


         DFHMSD TYPE=FINAL


END




O que este mapa faz?

Exibe:



            HELLO WORLD BMS




PF3 SAIR



Usuário não consegue alterar nada.

Todos campos são protegidos.


Geração do Symbolic Map

O assembler cria um copybook.

Exemplo

01 TELA1O.



05 FILLER PIC X(30).




01 TELA1I.



05 FILLER PIC X(30).


Programa COBOL

Nosso primeiro programa.


IDENTIFICATION DIVISION.
PROGRAM-ID. HELLO.


DATA DIVISION.


WORKING-STORAGE SECTION.


COPY HELLO.



PROCEDURE DIVISION.



EXEC CICS SEND

MAP('TELA1')

MAPSET('HELLO')

ERASE

FREEKB

END-EXEC.



EXEC CICS RETURN
END-EXEC.




O que acontece internamente?

Fluxo:



COBOL


SEND MAP


↓

BMS


↓

Physical Map


↓

Terminal


↓

Usuário visualiza


HELLO WORLD




A magia do BMS

Observe.

No COBOL não existe:

Linha 1

Coluna 25

Brilho

Atributo

3270

Bytes hexadecimais

Tudo está encapsulado.

O desenvolvedor apenas escreve:

SEND MAP

E o CICS faz o restante.


Curiosidade Bellacosa Mainframe

Muitos sistemas bancários escritos entre 1980 e 1995 continuam utilizando exatamente a mesma tecnologia apresentada neste artigo.

Alguns processam milhões de transações por dia.

Muitos deles executam em máquinas IBM z16 e z17, utilizando telas BMS desenvolvidas há mais de 30 anos.

É bastante comum encontrar mapas criados em 1987, recompilados diversas vezes ao longo das décadas, ainda em plena operação em seguradoras, bancos, empresas aéreas e grandes varejistas.

E isso talvez seja uma das maiores demonstrações da longevidade e da estabilidade da plataforma IBM Z.


Continua...

Na Parte 2 veremos:

✓ Compilação passo a passo do BMS

✓ JCL de Assembly

✓ Geração do Physical Map

✓ Geração do Symbolic Map

✓ Linkedit

✓ Cadastro via CEDA

✓ Uso do INSTALL

✓ Comandos CEMT

✓ SEND MAP

✓ RECEIVE MAP

✓ DFHEIBLK

✓ DFHAID

✓ Primeira pseudo-conversação CICS

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

segunda-feira, 3 de janeiro de 2011

🔥 Map Programming no CICS Structure, Rules, Hierarchy & Checklist para Design de Mapas BMS

 

Programação de mapa BMS em CICS

🔥 Map Programming no CICS

Structure, Rules, Hierarchy & Checklist para Design de Mapas BMS

Workflow de compilação mapa bms cics



☕ Midnight Lunch, tela piscando e o mapa “quase certo”

13h42.
O programa compila.
O mapa gera.
A tela aparece… toda desalinhada.

O operador olha.
O usuário reclama.
O programador jura:

“Mas o BMS tá certo…”

Hoje vamos falar do map programming no CICS — a arte esquecida que separa interface profissional de poluição verde-fosforescente.


🏛️ História: antes do HTML, existia BMS

Antes de:

  • HTML

  • CSS

  • Front-end frameworks

o CICS já tinha separação clara entre lógica e apresentação usando BMS (Basic Mapping Support).

📌 BMS é UI declarativa antes da web existir.


🧠 Conceito essencial (guarde isso)

Mapa não é tela.
Mapa é contrato entre usuário e programa.

Se o contrato é ruim, o sistema sofre.


🧩 Hierarquia de Mapas no CICS

Entender a hierarquia evita 80% dos erros.

📐 Estrutura hierárquica

MAPSET └── MAP └── FIELD

📦 MAPSET

  • Conjunto lógico de mapas

  • Compilado como uma única unidade

  • Gera um load module

📌 MAPSET é o pacote.


🖥️ MAP

  • Uma tela específica

  • Ex: entrada, consulta, confirmação

📌 Um MAP = um propósito.


🔤 FIELD

  • Campos de entrada ou saída

  • Posicionados na tela

  • Com atributos definidos

📌 Campo mal definido = bug visual.


🧾 Estrutura básica de um BMS Map

DFHMSD TYPE=MAP,MODE=INOUT,LANG=COBOL,STORAGE=AUTO MAP01 DFHMDI SIZE=(24,80),LINE=1,COLUMN=1 FLD01 DFHMDF POS=(5,10),LENGTH=10,ATTRB=(UNPROT) DFHMSD TYPE=FINAL

📌 Simples. Poderoso. Exigente.


📐 Regras fundamentais de Map Programming

1️⃣ Um mapa, uma função

❌ Tela “faz tudo”
✅ Tela objetiva


2️⃣ Campos bem definidos

  • Entrada → UNPROT

  • Saída → PROT

  • Proteção correta evita erro de digitação


3️⃣ Nunca confie no input

  • Sempre valide no programa

  • Mapa ajuda, mas não garante


4️⃣ Use atributos conscientemente

  • INTENS

  • MDT

  • IC (cursor)

  • ASKIP

📌 Atributo errado confunde usuário.


🧠 Estrutura do Programa de Mapa (lado COBOL)

Fluxo clássico

1️⃣ RECEIVE MAP
2️⃣ Processa dados
3️⃣ Prepara saída
4️⃣ SEND MAP
5️⃣ RETURN

📌 Mapa não decide lógica. Programa decide.


🛠️ Passo a passo: desenhando um mapa decente

🧩 Planejamento

  • O que o usuário vê?

  • O que ele digita?

  • Qual é o fluxo?


🧩 Design

  • Campos alinhados

  • Mensagens claras

  • Uso consciente de cores


🧩 Implementação

  • BMS limpo

  • Nomes consistentes

  • Sem “gambiarras visuais”


🧩 Teste

  • Campo obrigatório

  • Campo inválido

  • Tela cheia

  • Tela vazia

📌 Tela também precisa de teste.


✅ Checklist Bellacosa – antes de subir o mapa

✔ Campos protegidos corretamente
✔ Cursor posicionado logicamente
✔ Mensagens claras e humanas
✔ Nenhum campo sobreposto
✔ MAPSET organizado
✔ Nomes padronizados
✔ Layout documentado

📌 Mapa ruim vira chamado eterno.


⚠️ Erros clássicos (easter eggs)

🐣 Campo UNPROT que deveria ser PROT
🐣 Mensagem fixa escrita no mapa
🐣 Mapa gigante e confuso
🐣 Layout “ajustado no chute”
🐣 BMS tratado como código secundário

📌 Todo sistema feio começa assim.


📚 Guia de estudo para mainframers

Domine estes tópicos:

  • BMS syntax

  • Mapset generation

  • SEND / RECEIVE MAP

  • MDT, IC, ASKIP

  • Pseudo-conversational design

📖 Manual essencial: CICS Basic Mapping Support Guide


🤓 Curiosidades de boteco mainframe

🍺 BMS já separava UI e lógica antes do MVC
🍺 Muitas telas CICS têm mais de 30 anos
🍺 Um bom mapa reduz erro humano
🍺 Operador odeia mapa mal alinhado


💬 Comentário El Jefe Midnight Lunch

“Código ruim quebra sistema.
Mapa ruim quebra usuário.”


🚀 Aplicações reais hoje

  • Sistemas bancários

  • Governo

  • Seguradoras

  • Atendimento corporativo

  • Ambientes híbridos (3270 + APIs)


🎯 Conclusão Bellacosa

Map programming não é detalhe.
É experiência do usuário, disciplina e respeito.

Quem domina BMS:

  • Recebe menos chamado

  • Facilita suporte

  • Cria sistemas longevos

🔥 Tela bem feita envelhece melhor que código.


Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...