Translate

Mostrar mensagens com a etiqueta cobol cics. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta cobol cics. 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."

 




domingo, 10 de agosto de 2025

Principais Erros do CICS e Suas Possíveis Soluções

 

Principais Erros do CICS e Suas Possíveis Soluções

4,424 followers

Salve jovem padawan, na aula de hoje, entre muitos abends da transação de teste no CICS de desenvolvimento, fiquei pensativo em como ajudar minha turma, deste pensamento, após um loop que quase derrubou o CICS, mapset faltante, conteiner inexistente, erro de logica na navegação. Resolvi criar um mini tour, sobre os erros mais comuns e possiveis soluções.

Introdução

O CICS (Customer Information Control System) é um monitor de transações extremamente robusto e confiável, amplamente utilizado em ambientes corporativos com mainframes IBM. No entanto, como qualquer sistema complexo, ele pode gerar mensagens de erro que desafiam até os analistas mais experientes. Muitas vezes bugs simples, que causam grande dor de cabeça ao iniciante.

Neste artigo, vamos explorar os principais erros do CICS, o que significam, e como resolvê-los de forma prática. Se você é um dos alunos da formação, ira se recordar destes erros ocorridos na aula. Nosso trabalho de Analista de Sistemas e isso, sermos os Freuds do Sistema Z, identificando os erros e corrigindo, num trabalho de idas e vindas, com muita reviravolta.


🔧 1. APCT (Program Not Found)

🛑 Erro:

DFHAP0001 CICSTRN Transaction abended with abend code APCT.

📌 Causa:

O programa especificado na transação não foi encontrado ou não foi definido no CICS (via RDO ou CSD).

✅ Soluções:

  • Verifique se o programa foi definido corretamente via RDO (CEDA) ou no DFHCSD.
  • Confira se o programa foi link-editado como reentrant.
  • Assegure que o LOADLIB onde o programa reside esteja no DFHRPL.


🔧 2. AEI0 (Map Not Found)

🛑 Erro:

DFHAC2001 CICSTRN Transaction abended with abend code AEI0.

📌 Causa:

O mapa solicitado com o comando EXEC CICS SEND MAP não foi encontrado.

✅ Soluções:

  • Verifique se o mapa foi montado e link-editado corretamente.
  • Certifique-se de que o mapa está presente na biblioteca mapset associada ao CICS.
  • Use o comando CEDA DISPLAY MAPSET(...) para validar se o mapset está definido no CICS.


🔧 3. AEY9 (DB2 Not Available)

🛑 Erro:

DFHAC2001 CICSTRN Transaction abended with abend code AEY9.

📌 Causa:

Erro relacionado ao DB2, geralmente porque:

  • O DB2 está inativo;
  • A thread não está alocada corretamente;
  • A autorização RACF está faltando.

✅ Soluções:

  • Verifique o status da conexão DB2/CICS com DSNC DISPLAY THREAD.
  • Certifique-se de que o usuário da transação tem permissão RACF para acessar o plano do DB2.
  • Verifique se o recurso está definido com o parâmetro correto no RDO (DB2ENTRY, DB2TRAN).


🔧 4. AEIP (Security Violation)

🛑 Erro:

DFHAC2001 CICSTRN Transaction abended with abend code AEIP.

📌 Causa:

Violação de segurança – usuário sem permissão para a transação, recurso, ou dataset.

✅ Soluções:

  • Analise o log do RACF (SMF 80 ou comandos SEARCH CLASS(...)) para identificar a violação.
  • Verifique as regras no RACF para a transação (TCICSTRN, PROGRAM, DATASET, etc).
  • Utilize RACFIND ou RACROUTE para testes com permissões temporárias.


🔧 5. AEZC (Web Service Error)

🛑 Erro:

DFHAC2001 CICSTRN Transaction abended with abend code AEZC.

📌 Causa:

Erro durante invocação ou resposta de um CICS Web Service.

✅ Soluções:

  • Verifique os arquivos PIPELINE e as definições de WEBSERVICE.
  • Analise os logs do SIT (System Initialization Table) para mensagens associadas ao WS.
  • Revise o SOAPMessage para erros de XML/SOAP malformado.


🔧 6. ASRA (Program Check - ABEND 0Cxx)

🛑 Erro:

DFHAC2206 CICSTRN Transaction abended with abend code ASRA.

📌 Causa:

Erro de execução em linguagem de programação (COBOL/PLI) – divisão por zero, index inválido, etc.

✅ Soluções:

  • Execute um TRACE ou veja o auxiliary trace para identificar o ponto de falha.
  • Compile com TEST ou NOSSRANGE e utilize um debugger como CEEDUMP ou CEDF.
  • Avalie o uso de variáveis não inicializadas ou ponteiros incorretos.


🔧 7. AEIM (Invalid Request)

🛑 Erro:

DFHAC2001 CICSTRN Transaction abended with abend code AEIM.

📌 Causa:

Comando CICS inválido para o contexto (ex: RECEIVE fora de uma transação terminal).

✅ Soluções:

  • Revise a lógica do programa. Alguns comandos devem estar dentro de contexto apropriado.
  • Habilite CEDF para debug em tempo real da transação.


Extras: Outras Mensagens Comuns e Dicas

AEIO
Terminal indisponível
Use CEMT I TERM(...) para verificar o status

AEYD
Erro ao iniciar DB2
Reanalise parâmetros DB2ENTRY

AICA
Loop detectado no programa
Confirme presença de comandos EXEC CICS RETURN

ASRB
Interrupção por usuário (ex: ATTN)
Pode indicar travamento
Article content

Conclusão

Não entre em panico, os erros no CICS fazem parte do dia a dia de qualquer analista mainframe. A chave é entender o contexto do abend, dominar ferramentas como CEDF, CEEDUMP, CEDA, CEMT e manter boas práticas de logging e rastreamento.

Por isso é importante testar, fazer um check-list dos elementos a serem criados no CEDA, verificar a Instalação dos mesmo, usar o CEMT para atualizar as novas versões do executavel.

Ter muita, mas muita paciência, regados a café e no pior cenário, levante-se da cadeira, vá caminhar um pouco, relaxe e a solução surgirá na mente. Quando estiver muito difícil, consulte o manual da IBM, converse com colegas e chame o professor. Juntos iremos mais longe.

💡 Dica de ouro:

Mantenha uma tabela interna de erros recorrentes no seu ambiente, com soluções testadas e links de documentação. Isso acelera o diagnóstico e reduz o retrabalho.