🧠 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
COMMAREA
ouCANAL
.
🧾 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
. -
PROGRAM
deve 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
CHANNEL
for usado, dados são passados por containers associados ao canal. -
XCTL
não muda o contexto da aplicação, só troca de programa no mesmo nível.
💡 Dicas
-
Use
XCTL
quando quiser sair completamente do programa atual sem retorno. -
Se precisar chamar e retornar, use
LINK
em 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 daCOMMAREA
invá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.