Cada um dos comandos acima possui um conjunto especifico de condições de retorno. Por exemplo o comando:
EXEC CICS READ(CLIENTE) RIDFLD(CODCLI) END-EXEC
Pode retornar situações como:
Erro | Código do erro |
Registro não encontrado | NOTFND |
Arquivo não está aberto | NOTOPEN |
Erro na leitura | IOERR |
Arquivo desconhecido | FILENOTFOUND |
Para tratar estes retornos em Command Level, deve-se programar antes dos comandos, (no exemplo acima antes do EXEC CICS READ), um comando HANDLE CONDITION que tem como sintaxe:
EXEC CICS HANDLE CONDITION condição paragrafo … END-EXEC.
Este comando define para o Cics os paragrafos para onde a execução do programa será desviada para cada uma das condições. Ex.:
EXEC CICS HANDLE CONDITION
NOTFND(EMITIR-ERRO-NÃO-EXISTE)
NOTOPEN(ABRIR-ARQUIVO)
IOERR(EMITIR-ERRO-LEITURA)
FILENOTFOUND(ERRO-ARQUIVO-DESCONHECIDO)
END-EXEC.
O programador deve então criar os parágrafos mencionados acima contendo as ações a serem tomadas em cada caso. Quando for executado o comando EXEC CICS READ, se acontecer um dos retornos acima o programa será automaticamente desviado para o parágrafo correspondente (O Cics executa um comando GO TO para o parágrafo).
Não é necessário programar todas as condições de retorno dos comandos usados no programa. No entanto, se algum comando retornar uma condição não programada, o Cics provocará imediatamente um fim anormal do programa (ABEND).
Após a execução de uma instrução de HANDLE CONDITION, a associação dos parágrafos com as condições programadas será efetuada para todos os comandos Cics posteriores até que um novo HANDLE CONDITION altere esta associação.
Existe uma condição genérica (ERROR) que substitui todas as condições não programadas pelos HANDLE CONDITION. Por exemplo, se no programa colocarmos o comando:
EXEC CICS HANDLE CONDITION ERROR(ROT-ERRO-GERAL) END-EXEC
Apos a execução do comando acima, qualquer retorno não programado por um HANDLE CONDITION será desviado para ROT-ERRO-GERAL.
A instrução:
EXEC CICS IGNORE CONDITION condição END-EXEC.
Determina que o Cics não deverá tomar nenhuma atitude se ocorrer a condição acima ocorrer (não haverá termino anormal do programa – ABEND – e também o programa não será desviado para um parágrafo de tratamento do retorno). No entanto a condição ficará registrada no campo EIBRESP da area EIB (Veja area EIB no capitulo seguinte).
Para se anular os efeitos de um comando HANDLE CONDITION, escreve-se no ponto conveniente do programa a instrução HANDLE CONDITION omitindo o paragrafo. Ex.:
EXEC CICS HANDLE CONDITION NOTFND END-EXEC.