Cobol - colas ts

   
Vista:

colas ts

Publicado por gustavo (1 intervención) el 05/03/2012 21:21:36
genero una ts y quiero colocar como fin de archivo 9999 como controlo que es el fin . parto de una lectura db2
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

colas ts

Publicado por SuperIndio (138 intervenciones) el 21/03/2012 18:02:01
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.
*>>---------------------------------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar