Translate

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

domingo, 21 de junho de 2026

Natural x CICS BMS para Desenvolvedores COBOL

 

Bellacosa Mainframe e uma breve comparação entre Natural e CICS BMS

☕ Um Café no Bellacosa Mainframe

Natural x CICS BMS para Desenvolvedores COBOL

Entendendo duas filosofias diferentes de construir aplicações Online no Mainframe

Salve jovem Padawan.

Uma das dúvidas mais comuns de quem começa no mundo Mainframe é:

Se eu sei desenvolver online em Natural, já sei desenvolver em CICS?

A resposta curta é:

Não.

A resposta longa é:

Você conhece o objetivo, mas não conhece o mecanismo.

Natural e CICS possuem filosofias completamente diferentes para construir aplicações online.


A grande diferença

Natural é uma plataforma completa.

CICS é um monitor transacional.

Podemos pensar da seguinte maneira:

NaturalCICS
FrameworkMonitor Transacional
IDE integradaFerramentas separadas
Tela automáticaBMS
Segurança integradaRACF/CICS
Navegação nativaProgramada
Dicionário PredictCopybooks
Estado mantido pelo NaturalCOMMAREA
Desenvolvimento RADDesenvolvimento explícito

Arquitetura Natural

Em Natural normalmente temos:

Usuário

↓

Terminal 3270

↓

Natural Runtime

↓

Programa Natural

↓

Predict

↓

Adabas

Natural faz praticamente tudo.

O desenvolvedor apenas escreve:

INPUT

'CPF' CPF

'Nome' NOME


END-INPUT

Pronto.

Tela criada.


Arquitetura CICS

No CICS:

Usuário

↓

3270

↓

BMS

↓

MAPSET

↓

COBOL

↓

COMMAREA

↓

DB2


Tudo é responsabilidade do desenvolvedor.


Natural é quase um framework

Natural lembra.

Django

Rails

PowerBuilder

Oracle Forms


Exemplo Natural


INPUT USING MAP 'CLI001'

END-INPUT



Natural já sabe.

Mapa.

Campos.

Validação.

Cursor.

Ajuda.

PF Keys.

Tudo praticamente pronto.


CICS é uma caixa de ferramentas

CICS fornece:

SEND

RECEIVE

LINK

RETURN

HANDLE

Mas você constrói.


Exemplo


SEND MAP


RECEIVE MAP


VALIDA


CONSULTA DB2


SEND


RETURN



Predict

Aqui está uma grande diferença.


Natural usa Predict.

Predict é um catálogo.

Um dicionário corporativo.


Armazena.

Campos

Programas

Mapas

Arquivos

Views

Documentação

Relacionamentos


Exemplo


CLIENTE


CPF


NOME


ENDERECO


LIMITE




Natural gera automaticamente.

Campos.

Mapas.

Views.

Documentação.


Exemplo


1 CPF

1 NOME

1 CIDADE


Tudo centralizado.


CICS não possui Predict

No CICS.

Criamos.

Copybooks.

Layouts.

BMS.

Manualmente.


Exemplo


COPY CLIENTE.


COPY CLIMAP.




Construção de Menus

Natural

Muito simples.


MENU

1 Consulta

2 Inclusao

3 Alteracao



CICS

Criamos.

MAPSET.

COBOL.

Fluxo.

PF Keys.


Exemplo

MENU01


1 Consultar


2 Incluir


3 Alterar



PF3



Hierarquia de programas

Natural

Quase sempre.

Programa chama programa.



MENU


↓

CLIENTE


↓

CONSULTA


↓

ALTERA


Natural controla.


No CICS.

Mais cuidado.


Podemos usar.

LINK

XCTL

START


LINK

Retorna.


EXEC CICS LINK

PROGRAM('CLI002')

END-EXEC



XCTL

Não retorna.



EXEC CICS XCTL

PROGRAM('MENU')


END-EXEC



Como segregar funções

Boa prática.


MENU

Só navegação.


CLIENTE

Negócio.


DBCLI

DB2.


TELA

BMS.


UTIL

Rotinas.


Exemplo



MENU0001



CLI0001



DBCLI01



UTILCPF



MSGERRO




Segurança

Natural

Muito integrada.


Natural Security.

NSC.

Predict.

Menus.

Perfis.


Exemplo

Usuário João.

Pode.

Consultar.

Não alterar.


Natural faz.


No CICS.

Usamos.

RACF.


Transação.

Programa.

Arquivo.

Fila.

TSQ.

TDQ.


Exemplo


CLI1


CONS



ALT1


ADM1




RACF controla.


Navegação

Natural

Automática.


ENTER.

PF3.

PF12.


Tudo tratado.


CICS.

Manual.


Precisamos verificar.


COPY DFHAID





EVALUATE EIBAID



WHEN DFHPF3


PERFORM SAIR



WHEN DFHPF5


PERFORM REFRESH


END-EVALUATE



BMS

Natural

Mapas do Natural.


CICS

BMS.


MAP

Tela.


MAPSET

Conjunto de telas.


Exemplo



LOGIN



MENU



CLIENTE



CONSULTA



HELP




Mapset.


DFHMSD




Tela.


DFHMDI




Campo.


DFHMDF




PF Keys

Muito importante.


PF1

Ajuda


PF3

Sair


PF5

Atualizar


PF7

Anterior


PF8

Próximo


PF12

Cancelar


No terminal 3270

Emuladores modernos.

PCOMM.

Rocket.

Vista.

x3270.


Teclas mapeadas.


Exemplo.

F3

PF3


F7

PF7


Shift+F12

PF24


Clear

PA1


Attention

PA2


SYSREQ

PA3


Comportamento curioso

No 3270.

ENTER.

Não é.

Carriage Return.


É um.

AID.

Attention Identifier.


CICS recebe.


EIBAID



Natural trata.

Automaticamente.


Uma analogia moderna

Natural é parecido com:

Oracle Forms

PowerBuilder

GeneXus


CICS é parecido com.

HTML

CSS

Javascript

Backend Java


Natural oferece produtividade.

CICS oferece controle.


O que é melhor?

Depende.

Natural é excelente para:

Desenvolvimento rápido.

CRUD.

Adabas.


CICS é excelente para:

Grandes volumes.

Flexibilidade.

Integração.

APIs.

DB2.

MQ.


Minha recomendação para um COBOL Júnior

Aprenda primeiro:

  • BMS

  • SEND/RECEIVE

  • DFHAID

  • COMMAREA

  • Pseudo-conversação

  • LINK/XCTL

  • TSQ

  • CEDF

Depois estude:

  • Natural

  • Predict

  • Adabas

  • Natural Security

Quando você conhecer os dois mundos, perceberá algo interessante:

Natural tenta esconder a complexidade do CICS.

CICS mostra explicitamente como as engrenagens funcionam.

E, para quem deseja realmente entender os bastidores das aplicações bancárias e seguradoras do IBM Z, estudar CICS/BMS costuma ser uma excelente forma de aprender como um sistema transacional corporativo é construído desde a fundação.

segunda-feira, 1 de junho de 2020

CICS BMS para Desenvolvedores COBOL – Parte 3

 

Bellacosa Mainframe e a terceira parte do mini curso CICS BMS

☕ Um Café no Bellacosa Mainframe

CICS BMS para Desenvolvedores COBOL – Parte 3

Construindo uma Aplicação Real: Cadastro de Clientes, Pseudo-Conversação e Troubleshooting

"Até agora aprendemos o que é BMS, como criar mapas, compilá-los, instalá-los no CICS e navegar entre SEND MAP, RECEIVE MAP e HANDLE AID. Agora chegou a hora de montar uma aplicação semelhante às encontradas em bancos, seguradoras e empresas de telecomunicações."

Pegue mais um café, abra uma sessão do IPCS, outra do SDSF e vamos colocar a mão na massa.


O Projeto

Nosso sistema será composto por uma transação chamada:

CLI1

Associada ao programa:

CLICAD

Utilizando o MAPSET:

CLIMAP

Nossa tela

Visualmente teremos:

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

               CADASTRO DE CLIENTES


Codigo.......: _______

Nome.........: ___________________________

CPF..........: ___________

Cidade.......: ___________________________

Telefone.....: ___________

Email........: ___________________________



Mensagem.....:



PF3=Sair   PF5=Limpar   PF7=Consultar


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

O MAPSET

DFHMSD


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



DFHMDI


TELA01 DFHMDI SIZE=(24,80)



Campos protegidos

Labels.

Nunca serão alterados.

Exemplo:


DFHMDF POS=(5,2),
        LENGTH=10,
        INITIAL='Codigo:',
        ATTRB=(ASKIP,NORM)



DFHMDF POS=(6,2),
        INITIAL='Nome:',
        LENGTH=10,
        ATTRB=(ASKIP)




Campos de entrada

Código


CODIGO DFHMDF POS=(5,15),
                LENGTH=6,
                ATTRB=(UNPROT,IC),
                PICIN='9(6)'


Observe.

IC

Cursor inicial.


Nome


NOME DFHMDF POS=(6,15),
              LENGTH=30,
              ATTRB=UNPROT



CPF


CPF DFHMDF POS=(7,15),
             LENGTH=11,
             ATTRB=(UNPROT,NUM)



Cidade


CIDADE DFHMDF POS=(8,15),
                 LENGTH=25,
                 ATTRB=UNPROT



Mensagem

Protegida.

Sempre enviada.


MSG DFHMDF POS=(22,2),
             LENGTH=70,
             ATTRB=(PROT,FSET,BRT)



O MDT

Muitos iniciantes demoram a entender.

MDT significa:

Modified Data Tag

Indica se um campo foi alterado.

Se não estiver ligado.

Campo não chega ao COBOL.


FSET

Força transmissão.


ATTRB=(FSET)

Excelente para mensagens.

Datas.

Campos protegidos.


Bloqueando campos

Imagine uma consulta.

Usuário não pode alterar.

Mudamos.

De:

UNPROT

Para:

PROT

Alternando dinamicamente

Muito comum.

Modo Inclusão.

Nome -> UNPROT

Modo Consulta.

Nome -> PROT

Posicionando cursor

Existe um truque elegante.


MOVE -1 TO NOMEL


Depois:


EXEC CICS SEND MAP
CURSOR
END-EXEC


BMS procura.

Campo cujo L=-1.

Cursor aparece ali.


Tratando PF Keys

COPY DFHAID


COPY DFHAID.



Avaliando



EVALUATE EIBAID


WHEN DFHENTER

PERFORM GRAVA



WHEN DFHPF3

PERFORM SAIR



WHEN DFHPF5

PERFORM LIMPA



WHEN DFHPF7

PERFORM CONSULTA



WHEN OTHER

PERFORM ERRO



END-EVALUATE



PF3


EXEC CICS RETURN
END-EXEC



PF5

Limpa campos.


MOVE SPACES TO TELA01O


SEND novamente.


PF7

Consulta.

DB2.

VSAM.

IMS.

Pode ser qualquer backend.


A Arquitetura em 3 Camadas

Poucos percebem.

Já fazíamos isso nos anos 80.


Camada Apresentação

BMS

MAPSET


Camada Negócio

COBOL

CLICAD


Camada Dados

DB2

VSAM

IMS


Visualmente:


Terminal

    │

MAPSET

    │

COBOL

    │

DB2




Pseudo-Conversação

Talvez o conceito mais importante.

Não existe programa residente.

CICS trabalha com tarefas curtas.


Fluxo



Usuário


↓

EXECUTA CLI1



↓

Programa


↓

SEND MAP


↓

RETURN



===================



Usuário ENTER



===================



Nova Task



↓

RECEIVE MAP


↓

Valida


↓

DB2


↓

SEND MAP




Primeira chamada


IF EIBCALEN = ZERO


PERFORM PRIMEIRA-VEZ


END-IF



Retorno



IF EIBCALEN > ZERO


PERFORM RETORNO


END-IF




COMMAREA

Persistência.

Entre tasks.


01 WS-COMM.

05 WS-CODIGO PIC 9(6).

05 WS-MODO PIC X.



RETURN


EXEC CICS RETURN


TRANSID('CLI1')

COMMAREA(WS-COMM)

LENGTH(100)


END-EXEC



Troubleshooting

MAPFAIL

Muito comum.

Usuário apertou PF3.

Sem digitação.

RESP=36

INVREQ

Comando inválido.

Exemplo:

SEND DATAONLY

Antes de MAPONLY.


LENGERR

Tamanho incorreto.


ASRA

Favorito dos desenvolvedores.

Normalmente:

S0C7

S0C4

S0CB


CEDF

Melhor amigo.

Debug online.


CEDF ON



Executa.

Comando por comando.


CECI

Excelente ferramenta.

Testar comandos.

Exemplo.


CECI INQUIRE PROGRAM(CLICAD)




Curiosidades

SDF II

Editor gráfico.

Muito usado.

Década de 80.

Desenhava telas.

Gerava BMS.


Cores

Suportava:

Azul

Branco

Verde

Turquesa

Vermelho

Amarelo


Easter Egg Mainframe

Alguns programadores escondiam mensagens.

Campos DRK.

Exemplo.


DFHMDF POS=(24,1),

ATTRB=(DRK,PROT),

INITIAL='MAY THE COBOL BE WITH YOU'


Usuário nunca via.

Mas um dump IPCS entregava.


Releases do CICS

1970

Primeiros CICS.

1980

BMS consolidado.

1990

SDF II.

2000

CICS TS.

2010

Web Services.

2020

REST.

JSON.

zOS Connect.

2025+

CICS TS 6.x.

IA.

OpenTelemetry.

APIs modernas.


Considerações Finais

Aprender BMS é muito mais do que aprender a desenhar telas 3270.

É compreender a forma como milhares de aplicações críticas foram construídas.

É entender pseudo-conversação.

É conhecer a origem das arquiteturas em camadas.

É perceber que muitos conceitos considerados modernos já estavam presentes em aplicações escritas décadas atrás.

E talvez esta seja a principal lição do universo IBM Z:

A tecnologia muda.

Interfaces mudam.

Frameworks desaparecem.

Mas sistemas bem projetados atravessam gerações.

No próximo café do Bellacosa Mainframe, continuaremos explorando os bastidores do CICS, porque, no IBM Z, sempre existe mais um comando, mais um control block e mais uma curiosidade esperando para ser descoberta.


sábado, 2 de maio de 2020

CICS BMS para Desenvolvedores COBOL – Parte 2

Bellacosa Mainframe apresenta a Parte II do mini curso CICS BMS


☕ Um Café no Bellacosa Mainframe

CICS BMS para Desenvolvedores COBOL – Parte 2

Da Codificação do MAPSET até a Instalação no CICS

"No primeiro artigo aprendemos a desenhar nosso primeiro mapa. Agora chegou a hora de colocá-lo em produção dentro do CICS."

Pegue seu café, abra o SDSF, reserve uma aba do JESMSGLG e vamos continuar nossa jornada.


O que produz um MAPSET?

Muitos desenvolvedores iniciantes acreditam que um mapa BMS gera apenas uma tela.

Na verdade ele produz dois artefatos distintos.

Mapa Físico

MAPSET Source
        │
Assembler
        │
        ▼
 Physical Map
        │
     DFHRPL

Exemplo

CLIENTES

É utilizado pelo CICS.


Mapa Simbólico

MAPSET Source
        │
Assembler
        │
SYSPUNCH
        │
        ▼
Symbolic Map
        │
COPYLIB

Exemplo

CLIENTEM

Será utilizado pelo COBOL.


Utilizando &SYSPARM

Muito elegante.

Ao invés de manter dois fontes.

Errado

TYPE=MAP


TYPE=DSECT

Correto

TYPE=&SYSPARM

Assembly

Mapa físico

PARM='MAP'

Mapa simbólico

PARM='DSECT'

Compilando um BMS

Etapa 1

Assembler

Etapa 2

Linkedit

Etapa 3

Instalação CICS


Exemplo JCL

Symbolic


//ASM EXEC PGM=ASMA90,
 // PARM='OBJECT,NODECK'




//SYSIN DD DSN=USER.BMS(CLIENTE)


//SYSPUNCH DD DSN=USER.COPYLIB(CLIENTE)



Physical

//ASM EXEC PGM=ASMA90




//SYSLMOD DD
DSN=CICS.LOAD(CLIENTE)




Linkedit


//LKED EXEC PGM=IEWL



//SYSLMOD DD
DSN=CICS.LOAD(CLIENTE)





Onde fica cada objeto?

ObjetoBiblioteca
Physical MapDFHRPL
Programa COBOLDFHRPL
Symbolic MapCOPYLIB
JCLPROCLIB
BMS FonteSOURCELIB

CEDA

Definir recursos.

Menu clássico.

CEDA DEF MAPSET(CLIENTE)

Exemplo

CEDA DEF MAPSET(CLIENTE)

GROUP(BANCO)

DESCRIPTION(Clientes)




INSTALL

Após definir.

Necessário instalar.

CEDA INSTALL GROUP(BANCO)

ou

CEDA INSTALL MAPSET(CLIENTE)

Verificando

Com CEMT

CEMT INQ MAPSET(CLIENTE)

Resultado

Enabled

Installed



CEMT

Comando preferido dos administradores.

Consultar

CEMT I MAPSET

Desabilitar

CEMT SET MAPSET(CLIENTE)
DISABLED

Habilitar

CEMT SET MAPSET(CLIENTE)
ENABLED

Nosso primeiro RECEIVE

Programa envia.

Usuário digita.

Programa recebe.




EXEC CICS RECEIVE

MAP('TELA01')

MAPSET('CLIENTE')

INTO(TELA01I)

END-EXEC



O EIB

Executive Interface Block

Equivale ao SQLCA.

DB2

SQLCA

CICS

EIB


DFHEIBLK

Copy automático.

Não precisa incluir.


Campos úteis.


EIBTRNID

Transação.

CLI1

EIBTRMID

Terminal.

A123

EIBTASKN

Task atual.


EIBCALEN

Comprimento da COMMAREA.

Muito importante.


EIBAID

Tecla pressionada.


DFHAID

Copybook.

COPY DFHAID.

ENTER

DFHENTER

PF3

DFHPF3

PF5

DFHPF5

PF7

DFHPF7

PF8

DFHPF8

CLEAR

DFHCLEAR

Tratando teclas



EVALUATE EIBAID


WHEN DFHENTER


PERFORM PROCESSA



WHEN DFHPF3


PERFORM SAIR




WHEN DFHPF5


PERFORM REFRESH




WHEN DFHPF7


PERFORM PAGEUP




WHEN DFHPF8


PERFORM PAGEDOWN




WHEN OTHER


PERFORM ERRO



END-EVALUATE




HANDLE AID

Muito elegante.

Instala um roteador.



EXEC CICS HANDLE AID


DFHENTER(PROC1)

DFHPF3(PROC2)

DFHPF7(PROC3)

DFHPF8(PROC4)

ANYKEY(PROC5)


END-EXEC




Pseudo Conversação

Um dos conceitos mais importantes do CICS.

Não mantemos programa residente.

Fluxo:



Usuário


↓

EXECUTA


↓

PROGRAMA


↓

SEND MAP


↓

RETURN


TRANSID


COMMAREA


↓

Task termina



==================



Usuário ENTER



==================



Nova Task


↓

RECEIVE


↓

PROCESSA


↓

SEND


↓

RETURN




EIBCALEN

Primeira execução?

Ou retorno?



IF EIBCALEN = ZERO


PERFORM PRIMEIRA-VEZ


ELSE


PERFORM RETORNO



END-IF




Primeira pseudo-conversação




IF EIBCALEN = ZERO


PERFORM MONTA-TELA


ELSE


PERFORM PROCESSA


END-IF




EXEC CICS RETURN


TRANSID('CLI1')

COMMAREA(WS-COMM)


LENGTH(100)


END-EXEC




Curiosidades Bellacosa Mainframe

Durante os anos 80 e 90 era comum encontrar MAPSETs contendo 40 ou 50 telas.

Muitos bancos utilizavam convenções curiosas:

CLI001


CLI002


CLI003


CLI999




Algumas equipes chamavam a última tela de erro de:

TELAMORTE


ABEND01


SOC4MAP


LASTMAP




Easter Egg Mainframe

Pouca gente sabe, mas muitos desenvolvedores antigos escondiam mensagens em campos DRK (Dark).

Exemplo:

DFHMDF POS=(24,1),
LENGTH=20,
ATTRB=(DRK,PROT),
INITIAL='BELLACOSA RULES'

O usuário nunca via.

Mas bastava descarregar a TIOA em um dump IPCS para encontrar a mensagem.


Continua na Parte 3

Na próxima etapa construiremos um Sistema de Cadastro de Clientes completo, contendo:

✔ Cadastro, Consulta e Alteração;

✔ Campos protegidos e desbloqueados;

✔ Cursor dinâmico;

✔ FSET, MDT e FRSET;

✔ Mensagens de erro;

✔ PF3, PF5, PF7 e PF8;

✔ Múltiplos mapas no mesmo MAPSET;

✔ Fluxograma completo de navegação;

✔ Troubleshooting de MAPFAIL, INVREQ, LENGERR e ASRA;

✔ Curiosidades sobre SDF II, 3279 colorido e a evolução do BMS até o CICS TS 6.x.