bueno
cuando vos generas la Cola TS
Existen varias formas :
1) Manualmente: vas incrementando una variable a medida que vas haciendo EXEC CICS WRITEQ TS
de esta manera sabes cuantos items has grabado
MOVE 1 TO WS-NUM-ITEM.
*>>
PERFORM SQL-SELECT-TAB7890.
*>>
PERFORM UNTIL FIN-CURSOR
*>>
EXEC CICS WRITEQ TS QUEUE( WS-NOMBRE-TS )
FROM( WS-REGISTRO-TS )
LENGTH(LENGTH OF WS-REGISTRO-TS )
ITEM( WS-NUM-ITEM )
NOHANDLE
END-EXEC
PERFORM SQL-SELECT-TAB7890
END-PERFORM.
MOVE WS-NUM-ITEM TO WS-CANT-ITEMS.
----> [ WS-CANT-ITEMS ] ---> ESTE CONTIENE LA CANTIDAD DE ITEMS
****************************LECTURA*******************
*>>
PERFORM CICS-READQ-TS-MAIN.
*>>
PERFORM VARYING WS-NUM-ITEM FROM 1 BY 1
UNTIL WS-NUM-ITEM > WS-CANT-ITEMS
*>>
PER
PERFORM 2100-COMPLETO-CAMPOS
*>>
PERFORM CICS-READQ-TS-MAIN.
*>>
END-PERFORM.
*>>---------------------------------------------------------
CICS-READQ-TS-MAIN.
*>>---------------------------------------------------------
EXEC CICS READQ TS QUEUE( WS-NOMBRE-TS )
INTO( WS-REGISTRO-TS )
LENGTH(LENGTH OF WS-REGISTRO-TS )
ITEM( WS-NUM-ITEM )
END-EXEC.
2) A traves de Handle condition y paso a explicarte, los errores que
puede pasar en la sentencia EXEC CICS READQ TS son:
INVREQ La cola creada no es accesible por tu programa (no seria este caso porque la cola la creaste vos y la grabaste vos)
IOERR Error de I/O por ejemplo el CICS ha sido re-starteado
ISCINVREQ Error produccido por una señal interna del Servidor
ITEMERR Error porque el ITEMS qie estas leyendo no Existe (CON ESTE DETECTAS QUE HA LLEGADO AL FIN DE LA COLA)
LENGERR El registro que leiste es de longitud mas grande que tu declaracion en memoria
NOTAUTH Cola Inaccesible
QIDERR Cola No existe
SYSIDERR Error Interno y/o de comunicacion o del Sistema (Operating System)
MOVE 1 TO WS-NUM-ITEM.
*>>
EXEC CICS HANDLE CONDITION
ITEMERR( 999-LLEGUE-AL-FIN )
END-EXEC.
*>>
PERFORM CICS-READQ-TS-MAIN.
*>>
PERFORM UNTIL FIN-COLA
*>>
PERFORM 2100-COMPLETO-CAMPOS
*>>
PERFORM CICS-READQ-TS-MAIN.
*>>
END-PERFORM.
*>>---------------------------------------------------------
CICS-READQ-TS-MAIN.
*>>---------------------------------------------------------
EXEC CICS READQ TS QUEUE( WS-NOMBRE-TS )
INTO( WS-REGISTRO-TS )
LENGTH(LENGTH OF WS-REGISTRO-TS )
ITEM( WS-NUM-ITEM )
END-EXEC.
*>>---------------------------------------------------------
999-LLEGUE-AL-FIN.
*>>---------------------------------------------------------
SET FIN-COLA TO TRUE.
*>>---------------------------------------------------------
999-LLEGUE-AL-FIN. EXIT.
*>>---------------------------------------------------------