🧠 Explicação

A DFHMDF é uma macro do BMS (Basic Mapping Support) utilizada para definir campos individuais em uma tela CICS. Cada campo visível, editável ou protegido da tela deve ser declarado com uma macro DFHMDF, que determina sua posição, tamanho, atributos de acesso, conteúdo inicial, e outras propriedades.

Ela é uma das três macros principais do BMS, juntamente com:

  • DFHMSD – define o MAPSET (conjunto de telas);

  • DFHMDI – define cada tela do MAPSET;

  • DFHMDF – define cada campo da tela.

🛠️ Usos mais comuns

  • Criar campos editáveis ou protegidos na tela CICS

  • Atribuir conteúdos iniciais (literals fixos)

  • Controlar o brilho, visibilidade e posição do cursor

  • Definir a estrutura dos campos gerados no COPY usado no COBOL

  • Agrupar subcampos em um campo composto (ex: datas)

🧾 Sintaxe básica

[NOME]  DFHMDF  POS=(linha,coluna),LENGTH=n,ATTRB=(...),INITIAL='...',PICIN='...',PICOUT='...'

O nome do campo é opcional e aparece na coluna 1. Quando definido, ele será incluído no copybook gerado para uso no programa COBOL.

💻 Exemplo prático

Suponha a linha de tela abaixo:

x C O D I G O   D O   P R O D U T O x _ _ _ _ _ x

Essa linha pode ser construída com três macros DFHMDF:

        DFHMDF  POS=(10,3),  INITIAL='CODIGO DO PRODUTO', ATTRB=(ASKIP,BRT), LENGTH=19
CODPROD DFHMDF  POS=(10,24), LENGTH=5, ATTRB=(UNPROT,FSET,IC)
        DFHMDF  POS=(10,29), LENGTH=0

⚙️ Parâmetros mais utilizados

Parâmetro Função
POS= Define a posição do campo na tela. Ex.: POS=(10,24)
LENGTH= Define o comprimento do campo (máx. 256). Ex.: LENGTH=5
ATTRB= Define atributos de proteção, brilho e cursor
INITIAL= Define texto fixo que será exibido na tela
PICIN= Máscara PICTURE do COBOL para entrada (campo de digitação)
PICOUT= Máscara PICTURE do COBOL para saída (campo de exibição)
GRPNAME= Agrupa subcampos (ex: dia, mês, ano formando DATA)
JUSTIFY= Controla alinhamento e preenchimento durante a digitação

📚 Detalhamento de atributos (ATTRB)

▶ Proteção

  • PROT: campo protegido (não permite digitação)

  • UNPROT: campo desprotegido (permite digitação)

  • UNPROT,NUM: somente números

  • ASKIP: cursor não para no campo

▶ Brilho

  • NORM: normal

  • BRT: brilho intenso

  • DRK: invisível

▶ Acesso

  • FSET: envia o conteúdo ao CICS mesmo se não for alterado

  • IC: posiciona o cursor neste campo

📘 Máscaras PICIN / PICOUT

  • PICIN='999999V99' gera no COBOL: 03 VALOR PIC 999999V99.

  • PICOUT='$$$$$9,99' gera no COBOL: 03 VALOR PIC $$$$$9,99.

🔗 Exemplo com grupo (GRPNAME)

DD   DFHMDF POS=(5,10), GRPNAME=DATA, ATTRB=(BRT)
MM   DFHMDF POS=(5,13), GRPNAME=DATA
AA   DFHMDF POS=(5,16), GRPNAME=DATA

Esse agrupamento facilita o uso de datas como campo composto.

📋 Regras importantes

  • Campos com LENGTH=0 são válidos e usados como delimitadores visuais

  • O campo só será incluído no copybook se tiver nome

  • A macro DFHMDF não pode ultrapassar as 80 colunas da tela; se ultrapassar, continua na linha seguinte

  • Apenas o primeiro campo de um grupo (GRPNAME) pode ter ATTRB definido

💡 Dicas

  • Use FSET sempre que quiser garantir que o campo seja enviado, mesmo sem alterações

  • Utilize IC para facilitar a navegação do usuário, colocando o cursor diretamente no campo

  • Para campos de apenas leitura, combine PROT com ASKIP

  • Campos com LENGTH=0 são úteis como separadores ou delimitadores de atributos

 

✅ Conclusão

A macro DFHMDF é essencial na definição de telas em ambientes CICS. Ela define a estrutura, posição, formato e comportamento de cada campo individual, integrando-se perfeitamente com programas COBOL através do copybook gerado. Um bom domínio de seus parâmetros garante telas funcionais, bem apresentadas e adaptadas à lógica da aplicação.