🧠 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 ou CANAL.

🧾 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 (com LENGTH) ou CANAL.

  • Se o programa de destino usar COMMAREA, deve referenciar DFHCOMMAREA.

  • 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 de XCTL.

  • 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 da COMMAREA 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

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.