Professional Documents
Culture Documents
COMMAND LEVEL
Participante : ___________________________________ Treinamento: ___________________________________ Perodo Sala : ___________________________________ : ____________Horrio: _______________ ____________________________________
Instrutores :____________________________________
____________________________________________________________________________________________ Verso 1 1
Cics
4. UNIDADE 2............................................................................................... 20
4.1 BASIC MAPPING SUPPORT................................................................................. 21 4.2 Definio de mapas................................................................................................... 21 4.3 Campos 3270............................................................................................................. 21 4.4 Campos formatados 3270......................................................................................... 22 4.5 Definindo um mapa.................................................................................................. 23 4.6 Compilao de um mapa.......................................................................................... 24 4.7 Mapas e Programas.................................................................................................. 24 4.8 Enviando Mapas....................................................................................................... 26 4.8.1 Send Map ........................................................................................................... 26 4.8.2 Opes ............................................................................................................... 27 4.9 Recebendo Mapas Receive Map............................................................................ 29 4.10 Manuseio de teclas e atributos ............................................................................. 30
____________________________________________________________________________________________ Verso 1 2
Cics
5. UNIDADE 3............................................................................................... 32
5.1 Envio e recepo de mapas ...................................................................................... 32 5.2 Mapa simblico WORKING X LINKAGE.......................................................... 32 5.3 Recebendo Mapa na LINKAGE SECTION............................................................ 32 5.4 Send Map Constantes e variveis ......................................................................... 32 5.5 Receive Map Constantes e variveis ..................................................................... 33 5.6 Send Map Funes de controle ............................................................................. 34 5.7 RECEIVE tecla e cursor ....................................................................................... 34 5.8 Edio de campos Built in Function ..................................................................... 35
6. UNIDADE 4............................................................................................... 35
6.1 Acessando VSAM ..................................................................................................... 36 6.2 VSAM Recuperao Direta................................................................................... 36 6.2.1 VSAM ESDS ..................................................................................................... 36 6.2.2 VSAM RRDS..................................................................................................... 37 6.2.3 VSAM KSDS ..................................................................................................... 38 6.2.4 Campo Chave (RIDFLD).................................................................................... 38 6.2.5 Comando para Leitura - READ........................................................................... 38 6.2.6 Condies de exceo......................................................................................... 39 6.3 VSAM Recuperao Seqencial (BROWSE) ....................................................... 41 6.3.1 Comandos para recuperao seqencial .............................................................. 41
7. UNIDADE 5............................................................................................... 44
7.1 Atualizando VSAM .................................................................................................. 44 7.2 Consideraes sobre integridade ............................................................................. 44 7.3 Controle exclusivo VSAM x CICS ........................................................................ 44 7.4 A necessidade de proteo........................................................................................ 44 7.5 LUW e Backout ........................................................................................................ 45 7.6 Atualizao VSAM................................................................................................... 45 7.7 Atualizao de um registro ...................................................................................... 45 7.8 Excluso de registro(s) ............................................................................................. 46 7.9 Liberao de registro ............................................................................................... 47 7.10 7.11 7.12 7.13 7.14 Condies de exceo............................................................................................ 47 Codificao - atualizao...................................................................................... 48 Desenho Conversacional ...................................................................................... 48 Desenho Pseudo-conversacional........................................................................... 49 Gravao de registros - WRITE .......................................................................... 49
8. UNIDADE 6............................................................................................... 52
8.1 Controle de programas ............................................................................................ 52
____________________________________________________________________________________________ Verso 1 3
Cics 8.2 Link entre programas .............................................................................................. 52 8.3 Passagem de Dados Usando LINK .......................................................................... 52 8.4 Nveis lgicos - LINK ............................................................................................... 53 8.5 XCTL entre programas............................................................................................ 54 8.6 Passagem de dados usando XCTL........................................................................... 54 8.7 Nveis lgicos - XCTL.............................................................................................. 55 8.8 Cuidados com a LINKAGE SECTION................................................................... 56 8.9 Call esttico COBOL............................................................................................. 56 8.10 8.11 Call dinmico COBOL ...................................................................................... 57 Passagem de dados com INPUTMSG.................................................................. 58
9. UNIDADE 7............................................................................................... 59
9.1 Addressability uso da LINKAGE SECTION....................................................... 60 9.2 Addressability........................................................................................................... 60 9.3 BLL Cells OS/VS cobol ......................................................................................... 60 9.4 Opo SET utiliza LINKAGE SECTION. ........................................................... 61 9.5 Tabelas em Assembler.............................................................................................. 62 9.6 Carga de tabelas COBOL II -LOAD....................................................................... 63 9.7 Adquirindo memria COBOL II .......................................................................... 64 9.8 reas maiores que 4096 COBOL II...................................................................... 65 9.9 Acessando a Common Work Area (CWA).............................................................. 65
Cics 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 Manuseio de condies de exceo....................................................................... 76 Opes para Manuseio de excees...................................................................... 77 EIBRESP2 para auxiliar ...................................................................................... 78 Manuseio de teclas................................................................................................ 78 Cuidado ao utilizar HANDLE.............................................................................. 80 Comando HANDLE ABEND............................................................................... 80 Para suspender/restaurar HANDLEs.................................................................. 81 CECI ..................................................................................................................... 82
12.5 Facilidades do CEDF............................................................................................ 89 12.5.1 CEDF - hexadecimal .......................................................................................... 89 12.5.2 CEDF WORKING STORAGE ........................................................................ 90 12.5.3 CEDF Exec Interface Block............................................................................. 90 12.5.4 CEDF Stop conditions ..................................................................................... 90 12.5.5 CEDF Previous Display................................................................................... 90 12.5.6 CEDF pseudo-conversao .............................................................................. 90 12.5.7 CEDF solicitando Abend ................................................................................. 90
____________________________________________________________________________________________ Verso 1 5
Cics
DICA
LEIA
TOME NOTA
ATENO
CURIOSIDADE
____________________________________________________________________________________________ Verso 1 6
Cics
2. Introduo
Este curso oferece uma viso geral de programao CICS, conceitos e comandos. Ao final deste curso voc estar apto a desenvolver programas CICS.
____________________________________________________________________________________________ Verso 1 7
Cics
3. UNIDADE 1
3.1 Conceitos fundamentais e pseudo-conversao
O que CICS? Para que serve? Como desenvolver aplicaes? Nessa primeira unidade veremos conceitos fundamentais para conhecermos um pouco do produto CICS, assim como a sintaxe dos comandos necessrios para desenvolver uma aplicao COBOL/CICS. Tambm aprenderemos o conceito de programao Pseudo-conversacional, a forma mais moderna e vantajosa de desenvolver aplicativos sob CICS.
____________________________________________________________________________________________ Verso 1 8
Cics
3.4 Conceitos
Dois conceitos fundamentais para trabalhar com o CICS: Transao: o cdigo de 1 a 4 caracteres definido na PCT (program control table) do CICS, e que representa o processo de uma aplicao. Uma transao sempre fica amarrada a um programa de aplicao, que o processado quando a transao executada. Quase sempre a transao trabalha associada a um terminal, j que o CICS um produto que processa aplicaes em tempo real. Esse terminal denominado terminal associado transao. Task: a unidade de trabalho do CICS, ou para ser mais exato, a execuo de uma transao. Podemos ter diversos usurios executando a mesma transao em vrios terminais. Cada execuo denominada Task.
____________________________________________________________________________________________ Verso 1 9
Cics 1 -> KEYWORDS 2 -> FUNO 3 -> OPO 4 -> ARGUMENTO 5 -> OPO 6 -> ARGUMENTO 7 -> DELIMITADOR Um comando CICS formado pela estrutura mostrada acima: As keywords EXEC CICS A funo solicitada (send, receive, ...) As opes com seus respectivos argumentos Para COBOL, o delimitador END-EXEC.
3.8 Argumentos
Data-value Pic s9(04) comp Pic s9(08) comp Pic x(15) Constantes permitidas Data-area COBOL data name No constante Name COBOL data name Constantes permitidas Label Hhmmss Pointer-ref Nome de pargrafo Pic s9(07) comp-3 BLL cell Usage pointer O quadro acima mostra os diferentes tipos de dados no Cobol para cada tipo de argumento dos comandos CICS.
____________________________________________________________________________________________ Verso 1 10
Cics
01 AREA-INPUT. 02 COD-TRANS 02 FILLER 02 SOLICIT ..................... PROCEDURE DIVISION. PIC X(04). PIC X(01). PIC X(04).
O comando RECEIVE serve para trazer para a memria do CICS e do programa os dados que foram digitados pelo usurio no terminal. Os dados normalmente so recebidos na WORKING-STORAGE do programa.
____________________________________________________________________________________________ Verso 1 11
Cics A opo LENGTH especifica o tamanho mximo permitido para a recepo dos dados. A partir do COBOL II, o LENGTH deixou de ser necessrio. O Cobol assume que o tamanho mximo dos dados o tamanho da rea especificada na opo INTO.
IF
W-ERR
EQUAL
DFHRESP(LENGERR)
MOVE MAX 9 CARACTERES TO MSG ..... A opo RESP nos comandos faz com que o CICS no manuseie as condies de exceo. O CICS simplesmente armazena no campo indicado o tipo de exceo e o programa deve verificar se o comando obteve sucesso ou no.
____________________________________________________________________________________________ Verso 1 12
Cics
END-EXEC.
IF
W-ERR
EQUAL
DFHRESP(LENGERR)
EXEC CICS
RETURN END-EXEC.
O comando SEND serve para enviar dados ao terminal do usurio. A informao gravada na tela do terminal a partir do ponto onde o cursor ficou posicionado. O comando RETURN serve para terminar a aplicao e devolver o controle ao CICS.
____________________________________________________________________________________________ Verso 1 13
Cics
01 AREA-INPUT. 02 COD-TRANS 02 FILLER 02 SOLICIT 01 MSG ...................... PROCEDURE DIVISION. MOVE 9 EXEC CICS RECEIVE TO INTO W-LEN (AREA-INPUT) PIC X(04). PIC X(01). PIC X(04). PIC X(80).
END-EXEC.
IF
W-ERR
EQUAL
DFHRESP(LENGERR)
MOVE MAX 9 CARACTERES TO MSG EXEC CICS SEND CONTROL END-EXEC EXEC CICS SEND FROM (MSG) CURSOR(1840)
EXEC CICS
RETURN END-EXEC.
O comando SEND CONTROL est sendo utilizado nesse momento para posicionar o cursor na primeira posio da linha 24 do terminal, j que normalmente uma tela de terminal tem 24 x 80 (1920 posies). Portanto, a mensagem enviada pelo comando SEND ficar posicionada na linha 24 do terminal do usurio.
____________________________________________________________________________________________ Verso 1 14
Cics
PIC X(30) VALUE DATA DE HOJE: . PIC X(08). PIC X(30) VALUE HORA CERTA: . PIC X(08). PIC X(04). PIC X(01). PIC X(04). PIC X(80).
IF
IF
IF
TO W-LEN INTO (AREA-INPUT) LENGTH (W-LEN) RESP (W-ERR) END-EXEC. W-ERR EQUAL DFHRESP(LENGERR) MOVE MAX 9 CARACTERES TO MSG EXEC CICS SEND CONTROL CURSOR(1840) END-EXEC EXEC CICS SEND FROM (MSG) LENGTH (50) END-EXEC EXEC CICS RETURN END-EXEC. SOLICIT EQUAL DATA EXEC CICS ASKTIME ABSTIME (W-ABS) END-EXEC EXEC CICS FORMATTIME ABSTIME (W-ABS) DATESEP DDMMYY (W-DATA) END-EXEC EXEC CICS SEND CONTROL CURSOR(1840) END-EXEC EXEC CICS SEND FROM (W-DATA-S) LENGTH (40) END-EXEC EXEC CICS RETURN END-EXEC. SOLICIT EQUAL HORA EXEC CICS ASKTIME ABSTIME (W-ABS) END-EXEC
____________________________________________________________________________________________ Verso 1 15
Cics EXEC CICS FORMATTIME ABSTIME (W-ABS) TIMESEP TIME (W-HORA) END-EXEC SEND FROM (W-HORA-S) LENGTH (40) END-EXEC RETURN END-EXEC.
EXEC CICS
EXEC CICS
A aplicao receber o tipo de solicitao do usurio, processar conforme for a necessidade e devolver a resposta ao terminal. Portanto, uma tpica (embora simples) aplicao CICS: recebe a solicitao, processa, devolve a resposta para o usurio e termina. O comando ASKTIME informa ao programa o momento exato, e a partir da podemos utilizar o FORMATTIME para editar a data e hora de acordo com a preferncia do usurio.
Datesep: faz a separao com / da data. Se colocarmos argumento DATESEP (.) para a separao, formatar a data dd.mm.yyyy
Hora Data (juliano) Posio do cursor Tecla pressionada (enter, pf, ...) Tamanho da commarea Cdigo da transao Terminal associado ltima funo executada Response code
Cics O EIB (Exec Interface Block) uma rea que fica na LINKAGE SECTION de nosso programa e traz uma srie de informaes que podem e devem ser utilizadas a qualquer momento para facilitar nosso trabalho. Acima, esto algumas das informaes que constam do EIB.
3.13 Pseudo-conversacional
Aps enviar a resposta ao usurio (SEND), o programa termina atravs do comando RETURN, encadeando uma nova execuo da mesma transao TRANSID (FAT1). Isso significa que a task terminar, os recursos sero liberados, mas quando o usurio teclar ENTER, PFs, PAs, ou CLEAR, uma nova task da mesma transao ser executada. Portanto, o usurio ter a sensao de uma conversao, mas estar ocorrendo uma pseudo-conversao.
Cics execuo, os dados passados sero recebidos em uma rea reservada do programa, localizada na LINKAGE SECTION e chamada DFHCOMMAREA (nome reservado). A rea transmitida deve ter o mesmo tamanho em sua recepo na DFHCOMMAREA. Na primeira execuo da transao no podemos utilizar a DFHCOMMAREA, pois ela ainda no existe. Ela existir a partir da segunda execuo, com os dados recebidos. Como saberemos se estamos processando a transao pela primeira vez? A resposta para esta importante questo est em um campo do EIB denominado EIBCALEN (Commarea Length). Na primeira execuo da transao, o EIBCALEN estar com valor zero, e nas demais execues estar maior que zero.
Na primeira execuo, no existe a DFHCOMMAREA, portanto, o EIBCALEN estar zerado, e passaremos dados atravs de uma rea de WORKINGSTORAGE. A partir da segunda execuo, teremos DFHCOMMAREA, portanto podemos utilizar os dados recebidos na DFHCOMMAREA. Dessa forma conseguimos comunicao total entre as tasks da mesma transao executadas pelo usurio.
____________________________________________________________________________________________ Verso 1 18
Cics
COMMAREA x DFHCOMMAREA A chave da pseudo-conversao esta na Communication Area. Na primeira execuo EIBCALEN zero utilizar Commarea na WORKING-STORAGE para passagem de dados. Nas demais execues EIBCALEN maior que zero dados recebidos em LINKAGE SECTION na DFHCOMMAREA.
____________________________________________________________________________________________ Verso 1 19
Cics Sob CICS no podemos utilizar instrues COBOL que solicitem servio direto ao Sistema Operacional. Aps executarmos uma transao no CICS, caso tenha ocorrido alguma modificao no programa de aplicao e ele tenha sido recompilado, teremos que informar ao CICS que uma nova cpia deve ser carregada na memria. Para tanto, utilizamos a transao de Master Terminal CEMT. CEMT SET PROG(name) NEWCOPY OU CEMT SET PROG(name) PHASEIN
4. UNIDADE 2
____________________________________________________________________________________________ Verso 1 20
Cics
Um mapa normalmente composto por campos constantes e variveis, que fazem uma interface bastante atrativa para o usurio final. Cada campo tem atributos prprios, visando facilitar o trabalho do usurio.
____________________________________________________________________________________________ Verso 1 21
Cics Cada campo tem uma posio fixa no buffer do terminal (tela), e delimitado por atributos. Um atributo ocupa o espao de um byte na tela do terminal, mas seu contedo no visvel, j que estamos tratando do controle das caractersticas do campo.
NOME: CPF:
NO. CONTA:
constantes
numeric fields
campos protegidos
A figura acima mostra o exemplo de um mapa. Esse mapa formado por constantes e variveis, e cada campo tem seu atributo. Os campos constantes geralmente tem atributo protegido. Os campos variveis, quando servirem para entrada de dados, devem ter atributo desprotegido. Os campos numricos necessitam ter atributo numrico, para impedir que o usurio digite caracteres no numricos. Os delimitadores so campos de 1 byte, compostos apenas pelo atributo askip, e servem para delimitar o tamanho do campo onde o usurio digitar informaes. ATRIBUTOS: UNPROTECTED/PROTECTED (UNPROT/PROT): usurio pode ou no digitar informaes. ASKIP: campo protegido e o cursor no pode ser posicionado nele. NUM: dependendo do hardware, permite ao usurio digitar apenas dados numricos. NORMAL/BRIGHT/DARK (NO/BRT/DRK): campo com intensidade normal, brilhante ou invisvel.
____________________________________________________________________________________________ Verso 1 22
Cics MDT ON/OFF: se o MDT (Modified Data Tag) de um campo estiver ligado, o contedo desse campo ser transmitido para o programa. Se estiver desligado, o contedo no ser transmitido para o pgm.
O exemplo acima mostra a definio de um MAPSET chamado TESTMS1. Nesse MAPSET temos apenas um MAPA definido TESTMP. Em seguida, temos as definies dos campos do MAPA.
O atributo IC, indica que neste campo que deve ser posicionado o cursor. Apenas um campo em cada mapa deve conter este atributo.
____________________________________________________________________________________________ Verso 1 23
Cics
Podemos utilizar parmetros para definir a picture de edio do campo e tambm para alinhamento e valorizao de caracteres no preenchidos. PICOUT=99 edio. demonstrar para o usurio o campo com esta
JUSTIFY=(LEFT,BLANK) ou JUSTIFY=(RIGHT,ZERO) alinhar o campo esquerda ou direita e valorizar os caracteres no preenchidos com brancos ou zeros.
Se quisermos inserir neste Mapset mais um Mapa devemos colocar outro DFHMDI antes do DFHMSD TYPE=FINAL.
____________________________________________________________________________________________ Verso 1 24
Cics A seguir veremos o resultado da expanso do COPY TESTMS1 codificado na WORKING do programa. Percebam que todos os campos que foram definidos com label no BMS aparecem no copybook gerado. Mapa Simblico COPY TESTMS1. 01 TESTMPI. 02 FILLER PIC X(12). 02 NOMEL PIC S9(04) COMP. 02 NOMEF PIC X(01). 02 FILLER REDEFINES NOMEF. 03 NOMEA PIC X(01). 02 NOMEI PIC X(30). 02 ENDERL PIC S9(04) COMP. 02 ENDERF PIC X(01). 02 FILLER REDEFINES ENDERF. 03 ENDERA PIC X(01). 02 ENDERI PIC X(40). 02 CPFL PIC S9(04) COMP. 02 CPFF PIC X(01). 02 FILLER REDEFINES CPFF. 03 CPFA PIC X(01). 02 CPFI PIC X(11). 02 MSGL PIC S9(04) COMP. 02 MSGF PIC X(01). 02 FILLER REDEFINES MSGF. 03 MSGA PIC X(01). 02 MSGI PIC X(70). TESTMPO REDEFINES TESTMPI. 02 FILLER PIC X(12). 02 FILLER PIC X(03). 02 NOMEO PIC X(30). 02 FILLER PIC X(03). 02 ENDERO PIC X(40). 02 FILLER PIC X(03). 02 CPFO PIC X(11). 02 FILLER PIC X(03). 02 MSGO PIC X(70).
I: INPUT L: TAMANHO DO CAMPO RECEBIDO F: FLAG X00 OU X80 A: ATRIBUTO O: OUTPUT
____________________________________________________________________________________________ Verso 1 25
01
Cics Como o mapa foi definido como INPUT/OUTPUT, a rea TESTMPI redefinida com o nome TESTMPO (I=input/O=output). Cada campo aparece 5 vezes, com sufixos diferentes. Tomando como exemplo o campo nome, temos: NOMEL: (L=LENGTH) esse campo ser alimentado pelo CICS com o tamanho do contedo digitado pelo usurio em uma operao de Input; NOMEF: (F=FLAG) em uma operao de Input, esse campo poder ter o contedo X00 ou ento X80 se o usurio digitar informaes no campo e em seguida apagar essa informao utilizando a tecla ERASE EOF; NOMEI: (I=INPUT) armazena o contedo pelo usurio no campo; NOMEA: (A=ATRIBUTO) o campo que podemos alterar o atributo default de um campo em uma operao de Output; NOMEO: (O=OUTPUT) contm a informao que queremos enviar para o terminal do usurio.
1 Limpar a tela no movimentar spaces. 2 Movimentar low-values manter os campos da tela. 3 Para ligar MDT atributo = FSET
____________________________________________________________________________________________ Verso 1 26
Cics
4.8.2 Opes
As opes MAPONLY e DATAONLY servem para economizar transmisso de dados durante uma operao de envio de mapas. MAPONLY faz com que o CICS envie para o terminal do usurio apenas o mapa fsico, ignorando o contedo do mapa simblico. Por exemplo, o mapa enviado durante a primeira execuo de uma transao (mapa limpo); DATAONLY faz com que o CICS envie para o terminal apenas os dados do mapa simblico, fazendo um refresh no terminal do usurio, j que o mapa fsico foi enviado na primeira execuo da transao.
No exemplo acima estamos enviando apenas o mapa fsico, no estamos enviando dados.
J neste exemplo 2 estamos enviando apenas o mapa simblico. Para mantermos atributos, devemos mover low-values para os campos atributos e os demais (TESTMPO) e enviar DATAONLY.
____________________________________________________________________________________________ Verso 1 27
Cics 4) IDENTIFICATION DIVISION. PROGRAM-ID. FAT1PGM. WORKING-STORAGE SECTION. COPY TESTMS1. LINKAGE SECTION. 01 DFHCOMMAREA PIC X(10). PROCEDURE DIVISION. IF EIBCALEN EQUAL ZEROS MOVE DIGITE DADOS TO MSGO EXEC CICS SEND MAP (TESTMP) MAPSET (TESTMS1) FROM (TESTMPO) ERASE ALARM FREEKB END-EXEC.
O exemplo acima mostra o envio de um mapa para o terminal do usurio durante a primeira execuo da transao (1 fase da pseudo-conversao). A opo ERASE serve para limpar a tela do terminal antes de enviar o mapa. A opo FREEKB faz com que o teclado do terminal seja liberado logo aps o envio do mapa. A opo ALARM faz som quando starta a tela. Nesse exemplo a opo MAPONLY no pode ser utilizada pois queremos que o contedo do campo MSGO seja enviado ao usurio juntamente com o mapa fsico.
Para posicionar o cursor no meio do programa, devemos mover (1) para o campo L e colocar o parmetro CURSOR no comando SEND.
Quando for especificado o parmetro CURSOR no comando SEND, e no mapa existe um campo com atributo IC, prevalecer o posicionamento especificado no SEND.
____________________________________________________________________________________________ Verso 1 28
Cics
O comando utilizado para receber mapas o RECEIVE MAP. Assim como no SEND MAP, devemos informar o nome do mapa e do mapset.
Testar sempre a possibilidade da condio de exceo MAPFAIL durante um RECEIVE MAP. Ela pode ocorrer nas seguinte situaes: tela do terminal em branco (limpa) no momento do RECEIVE MAP ( tamanho 0) tela do terminal com um mapa, porm nenhum campo com MDT ON (tamanho 0) mapa com campos MDT ON, porm o usurio tecla CLEAR ou PAs contedo da tela do terminal composto de dados no formatados no momento do RECEIVE MAP.
____________________________________________________________________________________________ Verso 1 29
Cics
Mostraremos abaixo um exemplo de codificao. Note que o primeiro teste feito no programa o da tecla PF3. Se essa tecla for acionada, a pseudoconversao termina. Em seguida, est sendo testado se a transao est sendo executada pela primeira vez. Em caso positivo, um mapa limpo (MAPONLY) est sendo enviado ao terminal do usurio e a task termina encadeando uma pseudo-conversao e passando uma commarea. Se no for a primeira execuo da transao, feito um RECEIVE MAP para receber os dados digitados pelo usurio. No RECEIVE MAP, se ocorrer um MAPFAIL, uma mensagem informativa enviada ao usurio atravs do SEND MAP, e a task termina encadeando pseudo-conversao. Caso o MAPFAIL no ocorra, o programa executar a funo solicitada e terminar enviando o mapa com uma mensagem de execuo bem sucedida.
COPY DFHBMSCA. COPY DFHAID. COPY TESTMS1. LINKAGE SECTION. 01 DFHCOMMAREA. 02 COM-FLAG PROCEDURE DIVISION. IF EIBAID EXEC CICS EQUAL DFHPF3 RETURN END-EXEC.
PIC
X(10).
____________________________________________________________________________________________ Verso 1 30
Cics IF EIBCALEN EXEC CICS EQUAL SEND ZEROS MAP (TESTMP) MAPSET (TESTMS1) MAPONLY ERASE FREEKB END-EXEC TRANSID (EIBTRNID) COMMAREA (COM-WORK) END-EXEC.
EXEC CICS
RETURN
EXEC CICS
IF
EXEC CICS
MAP (TESTMP) MAPSET (TESTMS1) INTO (TESTMPI) RESP (W-ERR) END-EXEC. EQUAL DFHRESP(MAPFAIL) LOW-VALUES TO TESTMPO FAVOR ENTRAR DADOS TO MSGO SEND MAP (TESTMP) MAPSET (TESTMS1) FROM (TESTMPO) DATAONLY FREEKB END-EXEC RETURN TRANSID (EIBTRNID) COMMAREA(COMM-FLAG) END-EXEC.
RECEIVE
*PROCESSA FUNO SOLICITADA MOVE LOW-VALUES TO TESTMPO MOVE FUNO COMPLETADA COM SUCESSO TO MSGO EXEC CICS SEND MAP (TESTMP) MAPSET (TESTMS1) FROM (TESTMPO) DATAONLY FREEKB END-EXEC EXEC CICS RETURN END-EXEC.
____________________________________________________________________________________________ Verso 1 31
Cics
5. UNIDADE 3
5.1 Envio e recepo de mapas
Essa unidade mostrar outras caractersticas de mapas BMS, bem como outras opes no envio e recepo de mapas. um complemento do que foi visto na unidade 2.
END-EXEC.
____________________________________________________________________________________________ Verso 1 32
Cics Se desejamos codificar apenas a opo MAP no comando SEND MAP, devemos ter o mapa e o mapset definidos com o mesmo nome.
TO TO
W-MAPA. W-MAPSET.
TESTMPO
MAPSET(W-MAPSET) FROM(TESTMPO)
SEND
MAP(TESTMS1)
TESTMPO
Cics INTO(TESTMPI)
RECEIVE MAP(TESTMS1)
TESTMPI
ERASE
ERASEAUP limpa todos os campos desprotegidos antes de enviar dados FREEKB ALARM FRSET destrava o teclado do terminal soa o alarme ao enviar dados desliga o MDT de todos os campos
As opes de controle de output mostradas acima em um comando SEND MAP tambm podem ser emitidas atravs do comando SEND CONTROL.
Cics Assim, podemos trabalhar com barras de aes e tambm com teclas funcionais, por exemplo PF3 = FIM, PF8 = AVANA TELA).
Podemos editar campos na tela, basta em sua definio acrescentar o parmetro PICOUT ( por exemplo, = Z.ZZ9,99) e a sada do campo j ficar editada.
6. UNIDADE 4
____________________________________________________________________________________________ Verso 1 35
Cics
ESDS ENTRY SEQUENCED DATA SET O ESDS o tipo de arquivo VSAM com estrutura seqencial. Operaes que podem ser realizadas: Leitura direta atravs do RBA (Relative Byte Address) ou seqencial; Gravao sempre aps o ltimo registro existente; Atualizao de registros, sem alterao de seu tamanho; No podemos excluir registros; A incluso seqencial.
____________________________________________________________________________________________ Verso 1 36
100 bytes
100 bytes
100 bytes
REG1
REG2
REG3
O RBA o deslocamento em bytes do registro a partir do incio do arquivo, como por exemplo, olhando a figura acima, conclumos que o RBA do registro 2 100.
REG3
REG1
REG2
REG4
RRDS RELATIVE RECORD DATA SET O RRDS composto por uma srie de slots (gavetas) de tamanho fixo, uma para cada registro. Operaes que podem ser realizadas: Leitura direta atravs do RRN (Relative Record Number) ou seqencial; Gravao de registro no seu respectivo slot; Atualizao de registros; Excluso de registros.
____________________________________________________________________________________________ Verso 1 37
Cics
15
22
34
41
KSDS KEY SEQUENCED DATA SET O KSDS o tipo de arquivo VSAM com estrutura de ndices. Operaes que podem ser realizadas: Leitura direta atravs da chave do registro ou seqencial; Gravao de registros; Atualizao de registros; Excluso de registros.
Se a leitura for feita utilizando chave parcial, alm de KEYLENGTH devemos especificar a opo GENERIC.
____________________________________________________________________________________________ Verso 1 38
Cics
EXEC CICS
READ
[RBA | RRB]
WORKING-STORAGE SECTION. 05 05 ... PROCEDURE DIVISION. ... MOVE 00010 READ TO FILE INTO RIDFLD W-CHAVE (ARQ1) (W-REG) (W-CHAVE) W-CHAVE W-REG PIC X(05). PIC X(80).
EXEC CICS
____________________________________________________________________________________________ Verso 1 39
Cics FILENOTFOUND: o arquivo no est cadastrado na tabela FCT; ILLOGIC: erro detectado pelo VSAM (veremos mais a frente); IOERR: erro no I/O; NOTOPEN: arquivo fechado; DISABLED: o arquivo est desabilitado para acesso, provavelmente em conseqncia de outro problema.
6.2.6.1 Manuseando condies de exceo Utilizando a opo RESP, o CICS no toma nenhuma ao se uma condio de exceo ocorrer. Desse modo, nosso programa deve testar o contedo do campo utilizado no RESP e tomar as providncias cabveis.
WORKING-STORAGE SECTION. 05 05 ... PROCEDURE DIVISION. ... MOVE 00022 READ TO FILE INTO RIDFLD RESP W-CHAVE (ARQ1) (W-REG) (W-CHAVE) (W-ERR) W-CHAVE W-ERR PIC X(05). PIC S9(08) COMP.
EXEC CICS
EQUAL
DFHRESP(NOTFND)
NOT EQUAL
DFHRESP(NORMAL)
Cics
EXEC CICS
STARTBR
FILE RIDFLD
6.3.1.2 Lendo seqencialmente - READNEXT Aps estabelecer posio com o STARTBR, podemos comear e ler o arquivo seqencialmente em ordem ascendente de chave atravs do comando READNEXT.
____________________________________________________________________________________________ Verso 1 41
Cics EXEC CICS READNEXT FILE INTO RIDFLD (name) (data-area) (data-area)
[RBA | RRN]
[LENGTH (data-area)]
END-EXEC. 6.3.1.3 Lendo seqencialmente - READPREV Se desejarmos ler o arquivo seqencialmente em ordem descendente de chave, podemos utilizar o comando READPREV. EXEC CICS READPREV FILE INTO RIDFLD (name) (data-area) (data-area)
[RBA | RRN]
[LENGTH (data-area)]
END-EXEC. 6.3.1.4 Alterando posicionamento da chaves - RESETBR Se durante uma operao de Browse desejarmos reposicionar o ponteiro de leitura para outra chave, podemos utilizar o comando RESETBR, ou ento mover a nova chave para o campo RIDFLD e utilizar o READNEXT/READPREV.
EXEC CICS
RESETBR
[RBA | RRN]
____________________________________________________________________________________________ Verso 1 42
Cics 6.3.1.5 Terminando Browse - ENDBR Ao terminar a consulta, temos que terminar o Browse com o comando ENDBR.
EXEC CICS
ENDBR
FILE
(name)
END-EXEC.
TO W-CHAVE. FILE (ARQ1) RIDFLD (W-CHAVE) RESP (W-ERR) END-EXEC. IF W-ERR EQUAL DFHRESP(NORMAL) PERFORM UNTIL W-ERR EQUAL DFHRESP(ENDFILE) EXEC CICS READNEXT FILE (ARQ1) INTO (W-REG) RIDFLD (W-CHAVE) RESP (W-ERR) END-EXEC ..... END-PERFORM EXEC CICS ENDBR FILE (ARQ1) END-EXEC ELSE .... Devemos controlar a condio de exceo ENDFILE que ocorrer aps a leitura do ltimo registro com READNEXT ou aps a leitura do primeiro registro com o READPREV.
____________________________________________________________________________________________ Verso 1 43
Cics
7. UNIDADE 5
7.1 Atualizando VSAM
Na unidade anterior verificamos como feito o acesso para leitura em arquivos VSAM. Nesta unidade veremos o que necessrio para atualizar arquivos VSAM. Conheceremos tambm mecanismos CICS e VSAM para garantir a integridade de nossos dados.
____________________________________________________________________________________________ Verso 1 44
Cics
O comando EXEC CICS SYNCPOINT END-EXEC efetiva atualizaes nos VSAMs e o comando EXEC CICS SYNCPOINT ROLLBACK END-EXEC desfaz todas as atualizaes do programa
____________________________________________________________________________________________ Verso 1 45
[LENGTH (data-value)]
END-EXEC.
Antes do comando REWRITE obrigatrio utilizar o comando READ UPDATE: EXEC CICS READ FILE(ARQ1) INTO(W-REG) RIDFLD(W-CHAVE) UPDATE END-EXEC.
____________________________________________________________________________________________ Verso 1 46
Cics
END-EXEC.
No caso da condio de exceo ILLOGIC, podemos utilizar o campo EIBRCODE para auxiliar na depurao do erro. Nos bytes 1 e 2 ele traz o tipo de erro: -byte 1: return code do VSAM -byte 2: error code do VSAM
____________________________________________________________________________________________ Verso 1 47
Cics
EXEC CICS
PERFORM ROT-ERRO.
*MOVE ALTERAES PARA ARQUIVO EXEC CICS REWRITE FILE FROM RESP (ARQ1) (W-REG) (W-ERR)
PERFORM ROT-ERRO.
____________________________________________________________________________________________ Verso 1 48
Cics
Este modelo de desenho conversacional no recomendado, pois o tempo de espera para outras task depende de um usurio. E se por exemplo, ele demorar 10 minutos para enviar suas alteraes?
Onde salvar a imagem do registro? Que tal na COMMAREA? Ou ento em TS (como veremos adiante).
Cics EXEC CICS WRITE FILE FROM RIDFLD (name) (data-area) (data-area)
[LENGTH (data-value)] [RBA | RRN] [MASSINSERT] END-EXEC. O comando WRITE adiciona registros em um arquivo VSAM. A opo MASSINSERT serve para otimizar uma incluso de registros em massa, desde que estejam em ordem ascendente de chave. Nesse caso, o MASSINTERT deve ser codificado em cada registro. Quando a seqncia de incluses terminar, devemos emitir um comando UNLOCK. No caso de incluso de arquivo ESDS, o campos RIDFLD ser alimentado pelo CICS com o RBA do registro includo.
00003 PHEYSEY
TO TO
EXEC CICS
WRITE
END-EXEC.
IF
W-ERR
EQUAL
DFHRESP(DUPREC)
____________________________________________________________________________________________ Verso 1 51
Cics
8. UNIDADE 6
8.1 Controle de programas
Veremos agora os comandos de transferncia de controle entre programas em uma mesma task: CICS: LINK e XTCL COBOL: CALL esttico e dinmico.
____________________________________________________________________________________________ Verso 1 52
Cics
NVEL 0
CICS
NVEL 1
Primeiro Programa
LINK
NVEL 2
Todo programa chamado atravs de LINK executa em novo nvel lgico. Quando termina (RETURN), o controle volta para o nvel lgico imediatamente superior, ou seja, para o programa que emitiu o LINK. PROGRAM-ID. PROG1. WORKING-STORAGE SECTION. 77 W-ERR PIC S9(08) COMP. 01 W-COMM PIC X(03) VALUE SIM. ....
____________________________________________________________________________________________ Verso 1 53
Cics PROCEDURE DIVISION. ... EXEC CICS LINK PROGRAM (PROG2) COMMAREA (W-COMM) END-EXEC. ... PROGRAM-ID. PROG2. WORKING-STORAGE SECTION. 77 W-FLAG PIC X(03). LINKAGE SECTION. 01 DFHCOMMAREA. 02 L-COMM PIC X(03). PROCEDURE DIVISION. .. MOVE L-COMM TO W-FLAG. ... EXEC CICS RETURN END-EXEC. O programa PROG1 est fazendo um LINK para o programa PROG2 e passando como commarea a rea W-COMM. O programa PROG2 recebe esta rea em LINKAGE, na DFHCOMMAREA.
____________________________________________________________________________________________ Verso 1 54
Cics
Terceiro Programa
XCTL
RETURN
NVEL 2
Como vimos, um programa chamado atravs de LINK executa em um novo nvel lgico. J um programa chamado atravs de XCTL executa no mesmo nvel lgico do programa que fez a chamada. Como o RETURN volta para o nvel lgico imediatamente superior, temos a confirmao que no caso do XCTL o controle no retorna para o programa que fez a chamada. PROGRAM-ID. PROG1. WORKING-STORAGE SECTION. 77 W-ERR PIC S9(08) COMP. 01 W-COMM PIC X(03) VALUE SIM. .... PROCEDURE DIVISION. ... EXEC CICS XCTL PROGRAM (PROG2) COMMAREA (W-COMM) END-EXEC. ... PROGRAM-ID. PROG2. WORKING-STORAGE SECTION. 77 W-FLAG PIC X(03). LINKAGE SECTION.
____________________________________________________________________________________________ Verso 1 55
Cics 03 DFHCOMMAREA. 04 L-COMM PIC X(03). PROCEDURE DIVISION. .. MOVE L-COMM TO W-FLAG. ... EXEC CICS RETURN END-EXEC. O exemplo acima mostra o PROG1 fazendo um XCTL para o programa PROG2 e passando como commarea a rea W-COMM. O programa PROG2 assume o controle e recebe os dados na DFHCOMMAREA.
START programa recebe eibcalen igual a zeros, devemos, portanto, executar o comando RETRIEVE para restaurar a commarea.
Devemos sempre utilizar os mesmos tamanhos de commarea quando vamos passar controle a outro programa.
VS COBOL II V
____________________________________________________________________________________________ Verso 1 56
Cics
V X V
X V V
Apenas um mdulo executvel. O Call esttico do Cobol (call literal) pode ser utilizado sob CICS. A tabela acima mostra as possibilidades de CALL dependendo do compilador COBOL utilizado. Os programas chamador e chamado so linkeditados como um nico mdulo executvel. Do ponto de vista de performance, uma boa opo, uma vez que no ocorrer carga do programa chamado na memria. Por outro lado, se diversos programas fizerem CALL para esse mesmo programa teremos diversas cpias dele em memria.
OS/COBOL PGM CHAMADOR PGM CHAMADO COMANDOS CICS OS/COBOL VS COBOL II ASSEMBLER X X X X V
VS COBOL II V
V X V V
____________________________________________________________________________________________ Verso 1 57
Cics
Dois mdulos executveis. O Call dinmico do Cobol (call varivel) tambm pode ser utilizado. A tabela acima mostra as possibilidades de call dependendo do compilador COBOL utilizado. Os programas chamador e chamado so linkeditados separadamente, sendo dois mdulos executveis distintos. Quando for feito um call, o programa chamado ser carregado em memria e executado. Se diversos programas fizerem call para esse mesmo programa, teremos apenas uma cpia em memria.
PROGRAM-ID. PROG1. WORKING-STORAGE SECTION. 77 W-ERR PIC S9(08) COMP. 01 W-INPUT. 02 W-TRANS PIC X(04). 02 W-CHAVE PIC X(05). .... PROCEDURE DIVISION. ... EXEC CICS XCTL PROGRAM (PROG2) INPUTMSG (W-INPUT) INPUTLEN (9)
____________________________________________________________________________________________ Verso 1 58
PROGRAM-ID. PROG2. WORKING-STORAGE SECTION. 01 W-RECEBE. 02 W-TRN PIC X(04). 02 W-KEY PIC X(05). PROCEDURE DIVISION. .. EXEC CICS RECEIVE INTO (W-RECEBE) END-EXEC. .. EXEC CICS RETURN END-EXEC.
O programa PROG1 est chamando o PROG2 atravs de XCTL e passando a rea W-INPUT como INPUTMSG. O PROG2 ao receber o controle executa o comando RECEIVE e recebe os dados na rea W-RECEBE.
9. UNIDADE 7
____________________________________________________________________________________________ Verso 1 59
Cics
9.2 Addressability
O endereamento do DFHEIBLK (EIB) e da DFHCOMMAREA feito de forma automtica pelo CICS. O endereamento de outras rea deve ser feito pelo prprio programa, portanto responsabilidade do programador.
____________________________________________________________________________________________ Verso 1 60
Cics
LINKAGE SECTION. 01 DFHCOMMAREA. ... 01 BLL-CELLS. 05 05 05 01 FILLER PRT-REG PRT-TAB PIC S9(08) COMP. PIC S9(08) COMP. PIC S9(08) COMP.
L-REG. 05 05 05 ... NOME ENDEREO CPF PIC X(30). PIC X(40). PIC 9(11).
01
L-TAB. ...
Para o compilador OS/COBOL, toda vez que necessitarmos trabalhar com reas em LINKAGE (exceto DFHEIBLK e DFHCOMMAREA), temos que criar uma estrutura de ponteiros denominada BLL Cells (Clulas de base locator for LINKAGE). A estrutura de BLL Cells deve ser um nvel 01 imediatamente antes dos layouts das reas de trabalho em LINKAGE do programa. O primeiro ponteiro da estrutura vai conter o endereo da prpria estrutura, e carregado pelo prprio COBOL. Cada ponteiro seguinte apontar para um layout de nvel 01 codificado aps a estrutura de BLLs. Esses ponteiros devem ser carregados pelo programa.
____________________________________________________________________________________________ Verso 1 61
END-EXEC. PROGRAMA COBOL II: EXEC CICS READ FILE RIDFLD SET (ARQ1) (REG-CHAVE) (ADDRESS OF L-REG)
END-EXEC. Acima mostramos um registro de arquivo VSAM sendo lido em LINKAGE SECTION ao invs da WORKING. Note que no lugar da opo INTO est sendo utilizada a opo SET. Dessa forma, quando o CICS faz a leitura j adquire uma rea de memria do tamanho do registro. A opo SET serve para carregar o ponteiro do BLL com o endereo da rea onde encontra-se o registro. O primeiro exemplo mosta um programa OS/COBOL. A opo SET informa o campo PRT-REG. Esse campo um ponteiro BLL, mostrado no item 8.3. O segundo exemplo mostra um programa COBOL II. Neste caso bem mais simples, pois o COBOL II no utiliza a estrutura de ponteiros. Ao invs disso, utiliza um registrador especial de endereamento para cada nvel 01 da LINKAGE, e para carregar esse registrador o programa deve utilizar a instruo ADDRESS OF nvel-01.
Cics Uma tcnica muito utilizada no CICS a codificao de tabelas em Assembler. Trata-se de um programa Assembler composto apenas de constantes. Acima mostramos uma tabela de Estados. Essa tabela ser compilada, linkeditada e cadastrada na PPT do CICS. Ao invs de definir o layout dessa tabela na WORKING do programa, podemos fazer sua definio em LINKAGE, e carreg-la em memria quando quisermos consult-la. Para carreg-la em memria veremos o comando LOAD. Com essa tcnica, podemos ter inmeras tasks no CICS consultando uma nica tabela atravs de LINKAGE, possibilitando grande economia de memria no caso de tabelas extensas.
TAB-LOCAL. 02 LOCAL 03 03 LOC DESC OCCURS 120. PIC X(02). PIC X(15).
PROCEDURE DIVISION. .... EXEC CICS LOAD PROGRAM SET END-EXEC. (TABPROG) (ADDRESS OF TAB-LOCAL)
____________________________________________________________________________________________ Verso 1 63
Cics O comando LOAD faz com que o programa solicitado seja carregado em memria e o nosso programa tenha acesso ao endereo de carga atravs da opo SET. O LOAD carrega o programa mas no executa, ao contrrio do LINK e XCTL. Atravs do layout em LINKAGE, podemos consultar as ocorrncias da tabela. O LOAD mantm o programa carregado em memria at o final da task. Se aps o final da task desejarmos manter o programa em memria, devemos utilizar a opo HOLD. Assim, o programa permanecer em memria at o CICS sair do ar ou alguma transao emitir o comando RELEASE PROGRAM.
L-AREA
PROCEDURE DIVISION. .... EXEC CICS GETMAIN LENGTH SET END-EXEC. MOVE ..... O CICS possibilita tambm que um programa solicite uma rea de memria. Isso feito atravs do comando GETMAIN. No exemplo acima o programa est solicitando uma rea de memria de tamanho 300 bytes, que ser utilizada atravs do layout L-AREA em LINKAGE. XXXXXXXXX TO L-AREA. (300) (ADDRESS OF L-AREA)
____________________________________________________________________________________________ Verso 1 64
Cics
PROGRAM-ID. PROG1. WORKING-STORAGE SECTION. 77 W-ERR ... LINKAGE SECTION. 01 DFHCOMMAREA. 02 01 L-COMM PIC X(03). PIC X(7300). PIC S9(08) COMP.
L-AREA
PROCEDURE DIVISION. .... EXEC CICS GETMAIN LENGTH SET END-EXEC. MOVE ..... XXXXXXXXX TO L-AREA. (7300) (ADDRESS OF L-AREA)
____________________________________________________________________________________________ Verso 1 65
Cics 77 W-LEN ... LINKAGE SECTION. 01 DFHCOMMAREA. 02 01 L-COMM PIC X(03). PIC S9(04) COMP.
PROCEDURE DIVISION. .... EXEC CICS ASSIGN CWALENG(W-LEN) END-EXEC. IF W-LEN GREATER ZEROS
EXEC CICS
Atravs do comando ASSIGN CWALENG verificamos se a CWA existe ou no. Se existir, possvel acess-la atravs do comando ADDRESS CWA. Pelo layout da CWA na LINKAGE do programa, podemos consultar dados existentes ou ento carregar novos dados.
10. UNIDADE 8
____________________________________________________________________________________________ Verso 1 66
Cics
10.1 Queueing
Nessa unidadade veremos os comandos necessrios para trabalhar com as duas facilidades que o CICS oferece para armazenamento temporrio de dados (enfileiramento de dados): Transient Data (TD) e Temporary Storage (TS).
DCT
INTRAPARTITION
EXTRAPARTITION
As filas de Transient Data so identificadas por um nome de 4 caracteres cadastrado na tabela DCT (Destination Control Table) e conhecido com DESTID (Destination ID). O CICS oferece dois tipos de TD: intrapartition e Extrapartition.
10.2.1 TD Intrapartition
PROGRAMA EXE
EXEC CICS READQ/WRITEQ TD
DFHDCT DFHTDP
DESTID
DFHINTRA/VSAM ESDS
Caractersticas da TD Intrapartition:
____________________________________________________________________________________________ Verso 1 67
Cics Todas as filas de TD so direcionadas para o mesmo arquivo VSAM ESDS chamado DFHINTRA; Os registros nas filas so gravados sempre sequencialmente e recuperados da mesma forma; A leitura destrutiva, ou seja, uma vez lido no pode ser recuperado novamente; Os registros podem ter tamanho varivel.
10.2.2 TD Extrapartition
DFHTDP PROGRAMA
DFHDCT
DESTID
A TD Extrapartition a forma que o CICS oferece para utilizarmos arquivos SAM (Sequencial Access Method). Caractersticas da TD Extrapartition: Cada fila de TD corresponde a um arquivo fsico; A leitura no destrutiva, pois podemos ler o mesmo registro diversas vezes; No podemos fazer excluso; Os registros podem ter formato fixo ou varivel, blocado ou no blocado; Cada fila pode ser definida com imput ou output, nunca como input e output.
____________________________________________________________________________________________ Verso 1 68
Cics
10.3 Gravao de TD
EXEC CICS WRITEQ TD QUEUE FROM (name) (data-area)
[LENGTH (data-area)] END-EXEC. O comando WRITEQ TD utilizado para gravao de TDs Intrapartition e Extrapartition.
TO W-CHAVE. FILE (ARQ1) RIDFLD (W-CHAVE) RESP (W-ERR) END-EXEC. IF W-ERR EQUAL DFHRESP(NORMAL) PERFORM UNTIL W-ERR EQUAL DFHRESP(ENDFILE) EXEC CICS READNEXT FILE (ARQ1) INTO (W-REG) RIDFLD (W-CHAVE) RESP (W-ERR) END-EXEC IF W-ERR EQUAL DFHRESP(NORMAL) MOVE EIBTIME TO TD-HORA MOVE W-NOME TO TD-NOME MOVE W-QTDE TO TD-QTD EXEC CICS WRITEQ TD QUEUE (TD01) FROM (TD-REG) RESP (TD-ERR) END-EXEC ..... END-PERFORM EXEC CICS ENDBR FILE (ARQ1) END-EXEC ELSE ....... O exemplo acima mostra uma lgica onde, para cada registro lido no arquivo ARQ1, est sendo gravado um registro na fla TD01.
00003 STARTBR
10.4 Leitura de TD
EXEC CICS READQ TD QUEUE INTO (name) (data-area)
PERFORM UNTIL W-ERR EQUAL DFHRESP(QZERO) EXEC CICS READQ TD QUEUE (TD01) INTO (TD-REG) RESP (W-ERR) END-EXEC IF W-ERR EQUAL DFHRESP(NORMAL) .... ELSE IF W-ERR NOT EQUAL DFHRESP(QZERO) PERFORM TRATA-ERRO END-IF END-IF END-PERFORM O programa est lendo a TD01 sequencialmente at o seu fim (QZERO).
10.5 Excluso de TD
EXEC CICS DELETEQ TD QUEUE (name) END-EXEC.
O comando DELETEQ TD aplica-se apenas para TDs Intrapartition. Este comando exclui todos os registros de uma fila TD.
____________________________________________________________________________________________ Verso 1 70
Cics Condies de exceo a serem consideradas para TDs: QZERO: Fila vazia ou fim de fila; LENGERR: Registro maior que o tamanho especificado; NOSPACE: Arquivo DFHINTRA est cheio; NOTOPEN: Fila TD Extrapartition est fechada; QIDERR: A fila TD no foi cadastrada na tabela DCT; IOERR: Problemas com o arquivo.
DFHTSP
DFHTEMP
A Temporary Storage ( TS ) tem nomes de 1 a 8 caracteres, e no necessita que esses nomes sejam pr-definidos em tabelas do CICS. Se a fila no existir, ela ser criada. Verso 1
As filas TS podem ser gravadas em disco (AUX) ou ento em memria (MAIN), onde o acesso muito mais rpido; Os registros (itens) podem ter tamanho varivel; TS aceita gravao sequencial, leitura sequencial e direta, e atualizao; Os dados permanecem disponveis at que sejam excludos por comando.
71
____________________________________________________________________________________________
Cics
Se a fila j existir, o programa acrescentar dados nela, portanto devemos sempre, ao iniciar o programa, tratar para criar uma TS nova.
10.8 Gravao de TS
EXEC CICS WRITEQ TS QUEUE FROM (name) (data-area)
O comando WRITEQ TS utilizado para gravao de filas TS. As opes MAIN e AUX determinam se a fila ser gravada em memria ou disco; Quando estivermos gravando, se codificarmos a opo ITEM, o CICS retorna o nmero (posio) desse tem na fila; Se codificarmos as opes ITEM e REWRITE, o CICS far atualizao do tem indicado com o novo contedo.
____________________________________________________________________________________________ Verso 1 72
Cics WORKING-STORAGE SECTION. 01 W-ITEM PIC S9(04) COMP. 01 TS-REG. ..... PROCEDURE DIVISION. EXEC CICS WRITEQ TS QUEUE (FATTS01) FROM (TS-REG) ITEM (W-ITEM) RESP (W-ERR) END-EXEC. IF W-ERR NOT EQUAL DFHRESP(NORMAL) PERFORM TRATA-ERRO.
WORKING-STORAGE SECTION. 01 W-ITEM PIC S9(04) COMP. 02 TS-REG. ..... PROCEDURE DIVISION. MOVE 10 TO W-ITEM EXEC CICS WRITEQ TS QUEUE (FATTS01) FROM (TS-REG) ITEM (W-ITEM) REWRITE RESP (W-ERR) END-EXEC. IF W-ERR NOT EQUAL DFHRESP(NORMAL) PERFORM TRATA-ERRO.
10.9 Leitura de TS
EXEC CICS READQ TS QUEUE INTO (name) (data-area)
[NUMITENS(data-area)] END-EXEC.
____________________________________________________________________________________________ Verso 1 73
Cics O comando READQ TS utilizado para leitura de filas TS. A opo NEXT indica que estamos fazendo leitura sequencial da fila; Se utilizarmos a opo ITEM estaremos fazendo leitura direta; Se a opo NUMITENS for codificada, o CICS informa o nmero total de itens na fila.
As data-areas dos campos ITEM e NUMITENS devem ser codificadas no programa com PIC S9(04) COMP.
WORKING-STORAGE SECTION. 01 W-ITEM PIC S9(04) COMP. 03 TS-REG. ..... PROCEDURE DIVISION. EXEC CICS READQ
QUEUE (FATTS01) INTO (TS-REG) NEXT RESP (W-ERR) END-EXEC. IF W-ERR EQUAL DFHRESP(ITEMERR) EXEC CICS DELETEQ TS QUEUE(FATTS01) END-EXEC ELSE IF W-ERR NOT EQUAL DFHRESP(NORMAL) PERFORM TRATA-ERRO. ......
TS
Acima temos a leitura da fila FATTS01. Em seguida, se ocorrer a condio de fim de fila, a TS est sendo excluda atravs do comando DELETEQ TS.(abordado no prximo tpico).
10.10 Excluso de TS
EXEC CICS DELETEQ TS QUEUE (name)
END-EXEC.
____________________________________________________________________________________________ Verso 1 74
Cics
O comando DELETEQ TS serve para excluir todos os itens de uma fila TS. importante excluir fila aps seu uso, principalmente se a fila foi gravada em memria.
Condies de exceo a serem consideradas para TSs: ITEMERR: Fim de fila ou tem no encontrado; LENGERR: Registro maior que o tamanho especificado; NOSPACE: No h espao para gravao; QIDERR: A fila TS no foi encontrada em uma leitura ou excluso; IOERR: Problemas com o arquivo.
____________________________________________________________________________________________ Verso 1 75
Cics
11. UNIDADE 9
11.1 Manuseio de excees
de extrema importncia o manuseio de condies de exceo em programas executando sob CICS. Uma das tcnicas a chamada tcnica estruturada, que temos utilizado desde o incio dessa apostila. Codificamos a opo RESP nos comandos e em seguida testamos o campo utilizado como argumento. Nessa unidade veremos as outras tcnicas para manusear condies de exceo, e tambm o que so transaes CECI e CEBR.
Cics END-EXEC. ...... EXEC CICS IGNORE CONDITION INVREQ END-EXEC. ...... EXEC CICS READ FILE INTO RIDFLD (TESTARQ) (W-REG) (W-CHAVE)
END-EXEC. ...... NO-ACHOU. .... TRATA-LENGTH. ..... O exemplo acima mostra que o programa emitiu um HANDLE CONDITION com o nome de algumas rotinas para tratar condies de exceo especficas, e com a rotina TRATA-ERRO para o caso de uma condio no especificada. Em seguida, ele solicita que o CICS ignore a condio INVREQ atravs de um comando IGNORE CONDITION. Ao executar o comando READ, dependendo do que ocorrer o CICS far um desvio para a rotina solicitada ou ento deixar o programa prosseguir.
____________________________________________________________________________________________ Verso 1 77
Cics Uma das maneiras de tratar as condies de exceo a que estamos utilizando desde o inicio da apostila: codificar a opo RESP, e em seguida testar o campo utilizado como argumento. Outra forma estruturada de trabalhar codificar a opo NOHANDLE nos comandos: o CICS deixar o programa prosseguir, e devemos testar o campo EIBRESP. A utlizao de HANDLE e IGNORE CONDITION quebra a estrutura do programa, portanto, no aconselhada. Se no utilizarmos nenhuma das opes mostradas acima, no caso de excees o CICS toma uma ao default, que geralmente abendar a task.
A condio de exceo INVREQ (solicitao invlida EIBRESP=16) muito vaga, por isso o CICS traz o campo EIRESP2, que informa maiores detalhes do problema.
____________________________________________________________________________________________ Verso 1 78
Cics PROCEDURE DIVISION. IF EIBAID EQUAL DFHPF3 ... IF EIBAID EQUAL DFHCLEAR ... IF EIBAID EQUAL DFHENTER ... ..... TRATA-HELP. ..... TRATA-FIM. ...... VOLTA-TELA. ..... PF7(VOLTA-TELA) PF8(AVANA-TELA) PF10 ANYKEY(TECLA-INVALIDA) END-EXEC.
Para testar qual tecla foi pressionada pelo usurio, vimos a tcnica estruturada, que consiste em copiar o copybook DFHAID na WORKING-STORAGE, e depois testar o campo EIBAID. Essa a tcnica recomendada. Existe tambm o comando HANDLE AID, onde especificamos teclas e para quais rotinas deve ocorrer o desvio. Esse desvio, ocorre aps um comando RECEIVE ou RECEIVE MAP. A opo ANYKEY significa qualquer tecla com exceo do ENTER.
Se utilizar HANDLE AID e o programa executar um RECEIVE com RESP ou NOHANDLE, o HANDLE AID ser desabilitado naquele instante.
____________________________________________________________________________________________ Verso 1 79
Cics
PROCEDURE DIVISION. EXEC CICS HANDLE MAPFAIL NOTFND LENGERR END-EXEC. ..... EXEC CICS HANDLE PF5 END-EXEC. .... TRATA-MAPFAIL. .... TRATA-PF5. .... AID (TRATA-PF5) CONDITION (TRATA-MAPFAIL) (TRATA-NOTFND) (TRATA-LENGTH)
____________________________________________________________________________________________ Verso 1 80
EXEC
SUSPENDE TODOS HANDLE CONDITION IGNORE CONDITION HANDLE ABEND HANDLE AID
EXEC
RESTAURA TODOS
Os comandos HANDLE so exclusivos de cada programa em uma task. Isso significa que se ocorrer um LINK, o programa chamado dever ter seus prprios HANDLEs. Quando o controle volta para o programa chamador, seus HANDLEs so reativados.
____________________________________________________________________________________________ Verso 1 81
Cics
11.9 CECI
STATUS: ENTER ONE OF THE FOLLOWING
ABend ACquire ADdress ALlocate ASKtime ASSign Bif BUild CAncel CHange COLlect CONNect CONVerse CReate DELAy DELETE DELETEQ
DEQ DISAble DISCard DUmp ENAble ENDbr ENQ ENTer EXtract FEpi FOrmattime FREE FREEMain GDs GEtmain Handle IGnore
INquire ISsue Journal Link LOad Monitor PErform POint POP POSt PURge PUSh Query READ READNext READPrev READQ
RECeive RELease RESEtbr RESYnc RETRieve RETUrn REWrite ROute SENd SET SIGNOFf SIGNON SPOOLClose SPOOLOpen SPOOLRead SPOOLWrite START
STARTBr Suspend SYncpoint Trace Unlock Verify WAIT WAITCics WRITE WRITEQ Xctl
9MSG
CECI COMMAND LEVEL INTERPRETER A transao CECI uma poderosa ferramenta que o CICS oferece para auxlio programao. Com ela podemos verificar a sintaxe e executar quase todos os comandos EXEC CICS sem necessidade de escrever um programa. A figura acima mostra a tela inicial da CECI.
____________________________________________________________________________________________ Verso 1 82
Cics
WRITEQ TS Q(FATTS1) FROM (TESTE GRAVACAO DE TS) STATUS: ABOUT TO EXECUTE COMMAND EXEC CICS WRITEQ TS Queue(FATTS1 ) <Sysid()> From(TESTE DE GRAVACAO DE TS) <Length(+00020)> <NUmitems() | Item() <Rewrite>> <Main | Auxiliary> <NOsuspend> NAME=
9MSG
O exemplo mostra a gravao de um tem na TS FATTS1 utilizando a CECI. A CECI mostra o comando antes de ser executado (ABOUT TO EXECUTE COMMAND). A seguir veremos o resultado da execuo.
____________________________________________________________________________________________ Verso 1 83
Cics
WRITEQ TS Q(FATTS1) FROM (TESTE GRAVACAO DE TS) STATUS: ABOUT TO EXECUTE COMMAND EXEC CICS WRITEQ TS Queue(FATTS1 ) <Sysid()> From(TESTE DE GRAVACAO DE TS) <Length(+00020)> <NUmitems() | Item() <Rewrite>> <Main | Auxiliary> <NOsuspend> NAME=
A figura mostra que o comando teve Response=Normal portanto a TS foi realmente gravada. A CECI muito til quando precisamos corrigir registros em arquivos ou mesmo para criar registros para teste de algumas aplicaes.
____________________________________________________________________________________________ Verso 1 84
Cics
11.10 CEBR
CEBR TS QUEUE CEBRT001 RECORD 1 OF 0 COL 1 OF 0
ENTER COMMAND ******************* TOP OF QUEUE ************************ ***************** BOTTOM OF QUEUE **********************
CEBR BROWSE TEMPORARY STORAGE / TRANSIENT DATA A transao CEBR permite fazer consulta em filas TS e TD, com uma srie de facilidades. Atravs da PF1 (HELP), temos uma lista de comandos que podemos utilizar para consultar o contedo completo de filas.
____________________________________________________________________________________________ Verso 1 85
Cics
12. UNIDADE 10
12.1 CEDF EXECUTION DIAGNOSTIC FACILITY
O CEDF uma transao fornecida com o CICS que facilita muito o trabalho de quem est testando novas aplicaes ou necessita fazer uma determinao de problemas online e interativa. uma ferramenta com muitos recursos, os quais mostraremos nessa unidade. muito fcil utiliz-la. Basta digitar CEDF no terminal e pressionar a tecla ENTER. Em seguida surgir a mensagem informando que o terminal est em EDF. A partir da s limpar a tela e chamar a transao para acompanhar sua execuo. O CEDF mostrar cada comando EXEC CICS da aplicao com uma srie de facilidades.
TRANSACTION:UPDT PROGRAM:UPDTPGM TASK:0000038 APPLID:CICTST1 DISPLAY:00 STATUS: PROGRAM INITIATION
EIBTIME EIBDATE
= 192146 = 02180
EIBCPOSN = 4 EIBCALEN = 0 EIBAID EIBFN EIBDS + = X7D = X0000 = ........ AT X001400EA AT X001400EB AT X001400ED
EIBRCODE = X000000000000
EIBREQID = ........
ENTER: CONTINUE PF1:UNDEFINED PF4:SUPPRESS DISPLAYS PF7:SCROLL BACK PF10:PREVIOUS DISPLAY PF2:SWITCH HEX/CHAR PF5:WORKING STORAGE PF8:SCROLL FORWARD PF11:UNDEFINED PF3:END EDF SESSION PF6:USER DISPLAY PF9:STOP CONDITIONS PF12:UNDEFINED
____________________________________________________________________________________________ Verso 1 86
Cics A figura anterior a primeira tela que o CEDF mostra. Note que temos uma srie de informaes logo na primeira linha: nome da transao, nome do programa, nmero da task. O STATUS indica que est em PROGRAM INITIATION. Em seguida, o CEDF traz os valores iniciais do EIB (Exec Interface Block) para essa task.
OFFSET:X00073E
LINE:00206
EIBFN=X0602
ENTER: CONTINUE PF1:UNDEFINED PF4:SUPPRESS DISPLAYS PF7:SCROLL BACK PF10:PREVIOUS DISPLAY PF2:SWITCH HEX/CHAR PF5:WORKING STORAGE PF8:SCROLL FORWARD PF11:UNDEFINED PF3:UNDEFINED PF6:USER DISPLAY PF9:STOP CONDITIONS PF12:ABEND USER TASK
O CEDF sempre mostra o comando antes de executar (STATUS: ABOUT TO EXECUTE COMMAND) e aps a execuo (STATUS: COMMAND EXECUTION COMPLETE).
____________________________________________________________________________________________ Verso 1 87
Cics Permite ainda a alterao de alguns valores de argumentos antes de executar o comando, facilitando bastante o processo de teste de uma aplicao.
OFFSET:X00073E
LINE:00206
EIBFN=X0602
RESPONSE: NOTFND
ENTER: CONTINUE PF1:UNDEFINED PF4:SUPPRESS DISPLAYS PF7:SCROLL BACK PF10:PREVIOUS DISPLAY PF2:SWITCH HEX/CHAR PF5:WORKING STORAGE PF8:SCROLL FORWARD PF11:UNDEFINED PF3:END EDF SESSION PF6:USER DISPLAY PF9:STOP CONDITIONS PF12:ABEND USER TASK
O CEDF mostra a execuo do comando e informa o RESPONSE. Podemos alterar esse response para qualquer valor vlido, com o objetivo de testar rotinas que fazem tratamento de erros no programa.
____________________________________________________________________________________________ Verso 1 88
Cics
OFFSET:X000AB8
LINE:00319
EIBFN=X1804
ENTER: CONTINUE PF1:UNDEFINED PF4:SUPPRESS DISPLAYS PF7:SCROLL BACK PF10:PREVIOUS DISPLAY PF2:SWITCH HEX/CHAR PF5:WORKING STORAGE PF8:SCROLL FORWARD PF11:UNDEFINED PF3:UNDEFINED PF6:USER DISPLAY PF9:STOP CONDITIONS PF12:ABEND USER TASK
Outra facilidade do CEDF exibir a linha onde encontra-se esse comando na listagem do programa fonte gerada pelo Translator durante a compilao (LINE). Tambm mostra o deslocamento desse comando a partir do incio do programa(OFFSET). Isso facilita a localizao do comando no programa fonte.
____________________________________________________________________________________________ Verso 1 89
Cics
____________________________________________________________________________________________ Verso 1 90
Cics
____________________________________________________________________________________________ Verso 1 91
Cics
13. Bibliografia
Referncia: CICS PROGRAMAO COMMAND LEVEL RONNAM Consultoria em Informtica Ltda.
____________________________________________________________________________________________ Verso 1 92