🧠 Explicação
O comando EXEC CICS XCTL transfere o controle de execução de um programa COBOL para outro no mesmo nível lógico, encerrando o programa atual. Ou seja, o programa que faz o XCTL não retorna — ele passa o bastão e sai de cena. Pode ser usado com COMMAREA ou CANAL para enviar dados ao programa de destino.
🔧 Usos mais comuns
-
Encaminhar o fluxo de execução para outro programa sem retorno.
-
Passar controle entre programas que compõem uma transação.
-
Substituir o programa corrente por outro, em lógica sequencial.
-
Modularizar tarefas e manter responsabilidade isolada por programa.
-
Passar dados via
COMMAREAouCANAL.
🧾 Sintaxe
EXEC CICS XCTL
PROGRAM('PROG2')
COMMAREA(AREA-COM)
LENGTH(TAM-COM)
END-EXEC.
Com nome de programa em variável:
MOVE 'PROG3 ' TO PROG-NOME.
EXEC CICS XCTL
PROGRAM(PROG-NOME)
COMMAREA(AREA-DADOS)
LENGTH(LEN)
END-EXEC.
Com canal (em vez de COMMAREA):
EXEC CICS XCTL
PROGRAM('PROG4')
CHANNEL('CANAL01')
END-EXEC.
💻 Exemplo prático
* Transferência para o módulo de impressão
MOVE 'CLIENTE001' TO DFHCOMMAREA
MOVE 10 TO TAM-COM
EXEC CICS XCTL
PROGRAM('IMPRCLIE')
COMMAREA(DFHCOMMAREA)
LENGTH(TAM-COM)
END-EXEC.
📌 Regras
-
O programa atual não retorna após o
XCTL. -
PROGRAMdeve ser o nome do destino e estar definido no CICS. -
Dados podem ser passados via
COMMAREA(comLENGTH) ouCANAL. -
Se o programa de destino usar
COMMAREA, deve referenciarDFHCOMMAREA. -
Se
CHANNELfor usado, dados são passados por containers associados ao canal. -
XCTLnão muda o contexto da aplicação, só troca de programa no mesmo nível.
💡 Dicas
-
Use
XCTLquando quiser sair completamente do programa atual sem retorno. -
Se precisar chamar e retornar, use
LINKem vez deXCTL. -
CHANNELé mais moderno e recomendado em aplicações complexas ou Java. -
Deixe sempre claro no nome do programa de destino qual função ele desempenha — facilita manutenção.
-
Em sistemas com AUTOINSTALL, programas ainda não carregados podem ser instalados automaticamente.
🚨 Condições que podem ocorrer
-
PGMIDERR: programa não encontrado ou com erro de carregamento. -
LENGERR: tamanho daCOMMAREAinválido. -
CHANNELERR: problema ao acessar ou criar canal. -
INVREQ: uso incorreto de parâmetros. -
NOTAUTH: falta de autorização para acessar o programa.
✅ Conclusão
O EXEC CICS XCTL é a ferramenta ideal quando você quer transferir o controle para outro programa e encerrar o atual. Ele é simples, direto e muito usado em sistemas modulares baseados em COBOL+CICS. Com suporte tanto a COMMAREA quanto CANAL, se adapta bem a aplicações clássicas e modernas.