🧠 Explicação

A macro DFHMDI é utilizada dentro da estrutura BMS (Basic Mapping Support) para definir uma tela específica dentro de um Mapset em aplicações CICS. Cada tela representa uma interface com o usuário e é composta por um ou mais campos, definidos por macros DFHMDF.

A macro DFHMDI deve ser utilizada após a DFHMSD (que define o Mapset) e precede os campos da tela.

🛠️ Usos mais comuns

  • Definir o tamanho da tela (linhas e colunas)

  • Posicionar a tela dentro do terminal 3270

  • Substituir controles herdados da macro DFHMSD

  • Permitir a criação de múltiplas telas dentro de um mesmo Mapset

🧾 Sintaxe básica

NOMETELA  DFHMDI  SIZE=(linhas,colunas),CTRL=(...),LINE=...,COLUMN=...,FIELDS=NO

O nome da tela (coluna 1) será usado nos comandos COBOL SEND e RECEIVE.

💻 Exemplo prático

TELA1   DFHMDI  SIZE=(24,80),CTRL=(FREEKB,ALARM)
CAMPO1  DFHMDF  POS=(5,10),LENGTH=10,ATTRB=(UNPROT,FSET)
CAMPO2  DFHMDF  POS=(6,10),LENGTH=20,ATTRB=(UNPROT)

Neste exemplo:

  • A tela se chama TELA1

  • Tem tamanho padrão de 24 linhas por 80 colunas

  • Possui dois campos

⚙️ Parâmetros disponíveis

Parâmetro Função
SIZE=(l,c) Define o tamanho da tela (linhas, colunas)
CTRL=(...) Controla o comportamento da tela (semelhante à macro DFHMSD)
LINE= Define a linha onde a tela será posicionada
COLUMN= Define a coluna onde a tela será posicionada
FIELDS=NO Indica que a tela não possui campos (pode ser apenas decorativa)

📋 Detalhamento de parâmetros

SIZE=(linhas,colunas)

Define o tamanho da área de exibição da tela. Exemplo:

SIZE=(24,80)

CTRL=(...)

Opções comuns:

  • FREEKB: libera o teclado após a exibição da tela

  • ALARM: emite um som (beep) no terminal

  • PRINT: envia a tela para a impressora do terminal

  • FRSET: redefine atributos MDT dos campos

LINE= e COLUMN=

Controlam a posição da tela no terminal 3270. Opções válidas:

Valor Descrição
Número Posição absoluta (ex: LINE=5)
NEXT Próxima linha disponível (usado em composição de telas)
SAME Mesma linha da tela anterior

FIELDS=NO

Indica que a tela não possui campos, sendo usada apenas para exibição de texto fixo.

💡 Dicas

  • Mesmo em Mapsets com uma única tela, é necessário declarar a DFHMDI.

  • Use CTRL=(FREEKB) para permitir a digitação após a exibição da tela.

  • Se for criar mais de uma tela no mesmo terminal, LINE=NEXT e COLUMN=0 ajudam a organizá-las.

  • Campos só são válidos quando declarados após a DFHMDI correspondente.

 

✅ Conclusão

A macro DFHMDI é essencial para estruturar telas em aplicações CICS. Ela define onde a tela aparece no terminal, qual o seu tamanho e quais atributos ela herdará ou sobrescreverá do Mapset. Cada tela pode conter diversos campos, tornando o uso da DFHMDI um passo obrigatório na criação de interfaces robustas e organizadas para aplicações online em mainframe.