🧠 Explicação

O comando EXEC CICS LINK é utilizado para chamar outro programa CICS, transferindo o controle de execução para esse novo programa, chamado de programa vinculado. Quando o programa chamado finaliza com RETURN, o controle volta para o ponto seguinte à chamada. Esse processo é análogo a uma sub-rotina, com a possibilidade de passagem de dados através de COMMAREA ou CANAL.

🔧 Usos mais comuns

  • Reutilizar lógica comum em programas separados.

  • Modularizar aplicações CICS em programas menores e especializados.

  • Executar programas em outras regiões CICS usando DPL (Distributed Program Link).

  • Passar dados para o programa vinculado via COMMAREA ou CANAL.

🧾 Sintaxe

EXEC CICS LINK
     PROGRAM(nome-programa)
     [ COMMAREA(variavel) ]
     [ LENGTH(tamanho) ]
     [ DATALENGTH(tamanho-dados) ]
     [ CHANNEL(nome-canal) ]
     [ SYSID(nome-regiao-remota) ]
     [ TRANSID(nome-transacao) ]
     [ SYNCONRETURN ]
END-EXEC.

💻 Exemplo prático

1. Link simples com COMMAREA:

01 DFHCOMMAREA PIC X(100).

EXEC CICS LINK
     PROGRAM('PROGXYZ')
     COMMAREA(DFHCOMMAREA)
     LENGTH(100)
END-EXEC.

2. Link distribuído com SYSID e sincronização:

EXEC CICS LINK
     PROGRAM('PGMREM')
     COMMAREA(AREA-COM)
     LENGTH(80)
     SYSID('REM1')
     SYNCONRETURN
END-EXEC.

3. Link com canal e containers:

EXEC CICS PUT CONTAINER
     CHANNEL('CANAL1')
     CONTAINER('CLIENTE')
     FROM(AREA-CLIENTE)
END-EXEC.

EXEC CICS LINK
     PROGRAM('CADASTRO')
     CHANNEL('CANAL1')
END-EXEC.

📌 Regras

  • O programa chamado deve estar definido no CICS ou o recurso AUTOINSTALL deve estar ativo.

  • HANDLE CONDITION e HANDLE ABEND não são herdados pelo programa chamado, mas são restaurados após o RETURN.

  • COMMAREA tem limite de 24 KB entre regiões — defina corretamente o campo LENGTH.

  • DATALENGTH é usado para otimizar links distribuídos, mas não substitui LENGTH.

  • CHANNEL e COMMAREA não podem ser usados ao mesmo tempo.

  • INPUTMSG é alternativo à COMMAREA, usado apenas com comandos RECEIVE.

  • SYSID define a região remota; TRANSID define a transação espelho usada no destino.

  • O programa remoto deve seguir as restrições do DPL (sem comandos BMS, logon/logoff, etc.).

💡 Dicas

  • Sempre verifique EIBRESP após um LINK, especialmente em chamadas remotas.

IF EIBRESP NOT = DFHRESP(NORMAL)
    DISPLAY 'Erro ao chamar programa vinculado'.
END-IF.
  • Prefira CANAL e CONTAINERS em vez de COMMAREA para estruturas complexas e melhor escalabilidade.

  • Ao usar SYNCONRETURN, assegure que o servidor remoto trate commits de forma independente, preservando a consistência dos dados.

  • Use o HANDLE ABEND se quiser tratar abends no nível de programa vinculado e retornar ao programa chamador.

 

✅ Conclusão

O comando EXEC CICS LINK é essencial para modularização e reuso de lógica em aplicações CICS. Ele permite que um programa invoque outro de forma estruturada, com suporte a comunicação local e remota. Quando bem utilizado, melhora a organização do código e a flexibilidade do sistema, especialmente em ambientes distribuídos e complexos.