🧠 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
ouCANAL
.
🧾 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
eHANDLE ABEND
não são herdados pelo programa chamado, mas são restaurados após oRETURN
. -
COMMAREA
tem limite de 24 KB entre regiões — defina corretamente o campoLENGTH
. -
DATALENGTH
é usado para otimizar links distribuídos, mas não substituiLENGTH
. -
CHANNEL
eCOMMAREA
não podem ser usados ao mesmo tempo. -
INPUTMSG
é alternativo à COMMAREA, usado apenas com comandosRECEIVE
. -
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 umLINK
, especialmente em chamadas remotas.
IF EIBRESP NOT = DFHRESP(NORMAL)
DISPLAY 'Erro ao chamar programa vinculado'.
END-IF.
-
Prefira
CANAL
eCONTAINERS
em vez deCOMMAREA
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.