🧠 Explicação

O comando EXEC CICS RETRIEVE é utilizado para recuperar dados armazenados por um comando START, geralmente para passar informações entre tarefas no CICS. É o único meio de acessar os dados enviados por um EXEC CICS START com parâmetros.

Se for usado com a opção WAIT, o comando bloqueia a tarefa até que dados estejam disponíveis — o que pode gerar afinidades indesejadas em ambientes com roteamento dinâmico de transações.

🔧 Usos mais comuns

  • Receber dados passados por START.

  • Processar transações agendadas com dados personalizados.

  • Recuperar múltiplos dados iniciados por START, em terminais ou tarefas não-terminal.

🧾 Sintaxe

EXEC CICS RETRIEVE
     INTO(AREA-DADOS)
     LENGTH(TAM-AREA)
END-EXEC.

ou

EXEC CICS RETRIEVE
     SET(PONTEIRO)
     LENGTH(TAM-AREA)
END-EXEC.

💻 Exemplo prático

EXEC CICS RETRIEVE
     INTO(DADOS-ENTRADA)
     LENGTH(TAM-DADOS)
END-EXEC.

DISPLAY 'DADOS RECEBIDOS: ' DADOS-ENTRADA

📌 Regras

  • Pode ser usado somente em tarefas iniciadas por START.

  • O dado recuperado só pode ser lido uma vez por RETRIEVE.

  • Com terminais, é possível fazer múltiplos RETRIEVE seguidos, desde que existam dados pendentes.

  • Se não houver mais dados para recuperar, ocorre a condição ENDDATA.

  • Se os dados contiverem FMH (Function Management Headers), o campo EIBFMH será preenchido com X'FF'.

⚙️ Opções disponíveis

  • INTO(data-area): Recebe os dados numa área definida pelo programador.

  • SET(ptr-ref): Define um ponteiro para os dados (deve usar junto com LENGTH).

  • LENGTH(area): Especifica ou retorna o tamanho dos dados.

  • QUEUE, RTERMID, RTRANSID: Informações recuperadas do START original.

  • WAIT: Coloca a tarefa em espera até que dados estejam disponíveis (atenção com travamentos e afinidades).

🚨 Condições que podem ocorrer (HANDLE CONDITION)

  • ENDDATA: Todos os dados já foram recuperados.

  • LENGERR: A área informada não é suficiente para os dados.

  • INVREQ: Uso incorreto do comando.

  • IOERR: Erro ao acessar a área de armazenamento temporário.

  • ENVDEFERR: Erro de ambiente ao tentar acessar a fila.

💡 Dicas

  • Use RETRIEVE no início da transação que foi iniciada por START.

  • Sempre trate a condição ENDDATA para evitar falhas inesperadas.

  • Se estiver usando SET, garanta que a área será liberada após o uso.

  • Evite WAIT em ambientes com roteamento dinâmico de transações.

  • Combine com ASSIGN STARTCODE para validar se a tarefa foi iniciada por START ('S', 'SD', 'U').

 

✅ Conclusão

EXEC CICS RETRIEVE é essencial para programas que trabalham com agendamento de tarefas ou comunicação entre transações. Permite recuperar informações passadas por comandos START com segurança, seja em ambientes com terminal ou não. Com uso correto de INTO, SET, e tratamento de condições como ENDDATA, o comando torna-se uma ferramenta poderosa para controle e integração de fluxos no CICS.