Translate

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

sexta-feira, 19 de junho de 2026

🚀 CICS BMS para Padawans: Do Primeiro MAP ao Mundo Real dos Sistemas Bancários

 

Bellacosa Mainframe e o CICS BMS faça o seu primeiro mapa 3270

🚀 CICS BMS para Padawans: Do Primeiro MAP ao Mundo Real dos Sistemas Bancários

Salve, jovem Padawan!

Se você começou recentemente sua jornada no universo IBM Mainframe, provavelmente já ouviu alguém dizer:

"Precisamos alterar o MAPSET."

"O BMS está com problema."

"O RECEIVE MAP retornou MAPFAIL."

"Verifica o DFHAID."

E naquele momento você pensou:

"Mas afinal, o que é um MAP? O que é um MAPSET? E por que existe um programa Assembly dentro de uma aplicação COBOL?"

Respire fundo.

Hoje vamos mergulhar em um dos componentes mais clássicos do CICS: o BMS (Basic Mapping Support), a tecnologia que durante décadas foi responsável pelas telas utilizadas por bancos, seguradoras, companhias aéreas, operadoras de telecomunicações e praticamente qualquer grande empresa que executava aplicações online em Mainframe.

Prepare seu terminal 3270 imaginário.

Vamos começar.


Antes do BMS

Nos primeiros anos do processamento online, cada terminal possuía características próprias.

O programador precisava conhecer:

  • Modelo do terminal

  • Posicionamento da tela

  • Características do dispositivo

  • Códigos de controle

Isso gerava enorme dependência de hardware.

Para resolver esse problema, a IBM criou o BMS.


O que é BMS?

BMS significa:

Basic Mapping Support

Ou:

Suporte Básico de Mapeamento

O objetivo do BMS é separar:

  • Interface do usuário

  • Lógica de negócio

Em vez do programa COBOL controlar diretamente a tela, ele conversa com o BMS.

O BMS conversa com o terminal.


Arquitetura Simplificada

COBOL
   │
   ▼
Symbolic Map
   │
   ▼
BMS
   │
   ▼
Physical Map
   │
   ▼
Terminal 3270

Essa separação tornou os sistemas muito mais flexíveis.


O que é um MAP?

Um MAP é uma tela.

Exemplo:

+--------------------------------------+
| CADASTRO DE CLIENTES                 |
+--------------------------------------+

Código.....: _____

Nome.......: _______________________

Cidade.....: _______________________

PF3=Sair PF5=Gravar

Essa tela inteira é um MAP.


O que é um MAPSET?

Um MAPSET é um conjunto de MAPs.

Exemplo:

MAPSET CLIENTE

LOGIN
MENU
CONSULTA
INCLUSAO
ALTERACAO
CONFIRMACAO

Um único programa pode utilizar vários MAPs pertencentes ao mesmo MAPSET.


As Três Macros Sagradas do BMS

Todo BMS possui apenas três macros principais:

DFHMSD
DFHMDI
DFHMDF

Se você entender essas três macros, entenderá praticamente todo o BMS.


DFHMSD

Define o MAPSET.

Exemplo:

CLIENTE DFHMSD TYPE=&SYSPARM,
                LANG=COBOL,
                MODE=INOUT,
                TIOAPFX=YES,
                STORAGE=AUTO

Ele funciona como o cabeçalho do MAPSET.


TYPE

O parâmetro TYPE possui três valores importantes.

MAP

Gera o Physical Map.

TYPE=MAP

DSECT

Gera o Symbolic Map.

TYPE=DSECT

FINAL

Finaliza o MAPSET.

DFHMSD TYPE=FINAL

DFHMDI

Define uma tela.

Exemplo:

MENU01 DFHMDI SIZE=(24,80)

Significa:

24 linhas
80 colunas

Padrão dos terminais 3270 clássicos.


DFHMDF

Define um campo.

Exemplo:

NOME DFHMDF POS=(5,20),
      LENGTH=30,
      ATTRB=(UNPROT)

Aqui estamos criando um campo editável.


Atributos Mais Utilizados

PROT

Campo protegido.

ATTRB=PROT

Usuário não altera.


UNPROT

Campo editável.

ATTRB=UNPROT

ASKIP

Cursor pula automaticamente.

Muito usado em títulos.


IC

Initial Cursor.

Posiciona cursor inicialmente.

ATTRB=(UNPROT,IC)

NUM

Aceita apenas números.

ATTRB=(UNPROT,NUM)

FSET

Força MDT.

Campo sempre retorna ao programa.


DRK

Campo invisível.

Muito usado para IDs internos.


Nosso Primeiro Hello World BMS

HELLOMAP DFHMSD TYPE=&SYSPARM,
                 LANG=COBOL,
                 MODE=INOUT,
                 TIOAPFX=YES

TELA01   DFHMDI SIZE=(24,80)

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

         DFHMDF POS=(5,10),
                 LENGTH=20,
                 INITIAL='Digite Nome:',
                 ATTRB=(PROT)

NOME     DFHMDF POS=(5,30),
                 LENGTH=30,
                 ATTRB=(UNPROT,IC)

         DFHMSD TYPE=FINAL
         END

Pronto.

Você acabou de criar sua primeira tela CICS.


O Processo de Compilação

O BMS gera dois artefatos.

Physical Map

Load Module.

Utilizado pelo CICS.

DFHRPL

Symbolic Map

Copybook COBOL.

Utilizado pelo programa.

COPYLIB

Fluxo de Geração

Fonte BMS

    │

Assembler

    │

+-----------+
| Physical  |
+-----------+

    │

 DFHRPL

    │

+-----------+
| Symbolic  |
+-----------+

    │

 COPYLIB

JCL de Montagem

Normalmente:

//ASM EXEC PGM=ASMA90,
 //PARM='MAP'

Para gerar Physical.

Depois:

//ASM EXEC PGM=ASMA90,
 //PARM='DSECT'

Para gerar Symbolic.

Muitos ambientes usam:

TYPE=&SYSPARM

para gerar ambos a partir do mesmo fonte.


O Copybook Gerado

O BMS gera estruturas automaticamente.

Exemplo:

01 TELA01I.

   05 NOMEL PIC S9(4) COMP.
   05 NOMEF PIC X.
   05 NOMEI PIC X(30).

01 TELA01O.

   05 NOMEO PIC X(30).

O Significado dos Campos

NOMEL

Comprimento digitado.


NOMEF

Flag MDT.


NOMEI

Entrada.


NOMEO

Saída.


SEND MAP

Exibe tela.

EXEC CICS
 SEND MAP('TELA01')
 MAPSET('HELLOMAP')
 FROM(TELA01O)
 ERASE
 FREEKB
END-EXEC

RECEIVE MAP

Recebe dados.

EXEC CICS
 RECEIVE MAP('TELA01')
 MAPSET('HELLOMAP')
 INTO(TELA01I)
END-EXEC

EIBAID

Após RECEIVE verificamos qual tecla foi pressionada.

COPY DFHAID.

Exemplo:

IF EIBAID = DFHPF3
   GO TO SAIDA
END-IF

Teclas Mais Utilizadas

ENTER
PF3
PF5
PF7
PF8
PF12
CLEAR

Capturando PF Keys

EVALUATE EIBAID

   WHEN DFHENTER
      PERFORM PROCESSA

   WHEN DFHPF3
      PERFORM SAIR

   WHEN DFHPF5
      PERFORM GRAVAR

   WHEN DFHPF7
      PERFORM PAGE-UP

   WHEN DFHPF8
      PERFORM PAGE-DOWN

END-EVALUATE

HANDLE AID

Alternativa elegante.

EXEC CICS HANDLE AID
     DFHENTER(PROCESSA)
     DFHPF3(SAIR)
     DFHPF5(GRAVAR)
END-EXEC

O CICS faz o roteamento automaticamente.


Posicionando o Cursor

O truque clássico.

MOVE -1 TO NOMEL

Depois:

EXEC CICS
 SEND MAP
 CURSOR
END-EXEC

O cursor será posicionado naquele campo.


Tela Real de Cadastro

Imagine:

CLIENTE

Código....: _____

Nome......: ____________________

Cidade....: ____________________

Telefone..: _______________

PF3=Sair
PF5=Gravar
PF12=Cancelar

Campos Protegidos

ATTRB=(PROT)

Usuário não altera.


Campos Editáveis

ATTRB=(UNPROT)

Usuário digita.


Campo Invisível

ATTRB=(DRK)

Muito usado para:

  • IDs internos

  • Chaves VSAM

  • Controle de paginação

  • Status ocultos


Pseudo-Conversação

Um dos conceitos mais importantes do CICS.

Iniciantes imaginam:

Programa fica executando
esperando ENTER

Não.

O CICS mata a task.

Sempre.


Fluxo real:

EXEC CICS SEND MAP

EXEC CICS RETURN

Task termina.


Usuário pressiona ENTER.

Nova task é criada.

EXEC CICS RECEIVE MAP

Processamento continua.


Por isso chamamos:

Pseudo-Conversação

Parece contínuo.

Mas não é.


Arquitetura de Três Camadas

Uma boa prática.

MAP

   │

Programa CICS

   │

Camada Negócio

   │

DB2
VSAM
MQ
IMS

Separação melhora manutenção.


Cadastro da Transação

CEDA.

Criar programa:

CEDA DEF PROGRAM(PROGCLI)

Criar transação:

CEDA DEF TRANS(CLI1)
PROGRAM(PROGCLI)

Instalar:

CEDA INSTALL GROUP(MYGRP)

CEMT

Visualizar recursos.

Programa:

CEMT INQ PROGRAM(PROGCLI)

Transação:

CEMT INQ TRANS(CLI1)

Desabilitar:

CEMT SET PROGRAM(PROGCLI) DISABLED

O Easter Egg dos Campos MDT

Muitos iniciantes não sabem:

Se um campo não for alterado:

MDT=0

Ele pode nem retornar ao programa.

Por isso existe:

FSET

Que força:

MDT=1

Curiosidade Histórica

O BMS surgiu para suportar os terminais IBM 3270.

Na época, largura de banda era extremamente limitada.

Cada byte enviado importava.

Por isso o protocolo 3270 era absurdamente eficiente.

Muito mais eficiente que várias interfaces modernas.


Quem Criou?

O BMS nasceu dentro do ecossistema CICS da IBM durante a expansão dos sistemas transacionais nas décadas de 1970 e 1980.

Ele se tornou padrão de mercado para aplicações online em Mainframe.


Releases do CICS

Alguns marcos históricos:

CICS DOS
CICS OS/VS
CICS MVS
CICS ESA
CICS TS

Hoje temos:

CICS Transaction Server

executando em z/OS moderno.


Curiosidade Bancária

Existem sistemas em produção hoje com:

  • 30 anos

  • 40 anos

  • milhões de linhas COBOL

  • centenas de MAPSETs

que continuam usando exatamente o mesmo conceito BMS criado décadas atrás.


Conclusão

O BMS é muito mais do que um simples mecanismo de telas.

Ele representa uma filosofia de arquitetura que separa interface, apresentação e lógica de negócio, permitindo que aplicações COBOL permaneçam estáveis por décadas.

Todo desenvolvedor COBOL que deseja atuar seriamente com CICS precisa dominar:

  • MAP

  • MAPSET

  • DFHMSD

  • DFHMDI

  • DFHMDF

  • SEND MAP

  • RECEIVE MAP

  • DFHAID

  • EIBAID

  • Pseudo-conversação

  • CEDA

  • CEMT

Esses conceitos aparecem diariamente em bancos, seguradoras, operadoras, bolsas de valores e empresas que processam bilhões de transações por dia.

E agora, jovem Padawan, quando alguém disser:

"Precisamos alterar o MAPSET."

você já saberá exatamente do que estão falando.

☕ Até o próximo Café no Bellacosa Mainframe.