Apostila Programação CICS Command Level - COBOL

download Apostila Programação CICS Command Level - COBOL

of 92

Transcript of Apostila Programação CICS Command Level - COBOL

CICS PROGRAMAOCOMMAND LEVEL

Participante : ___________________________________ Treinamento: ___________________________________ Perodo Sala : ___________________________________ : ____________Horrio: _______________ ____________________________________

Instrutores :____________________________________

____________________________________________________________________________________________ Verso 1 1

Cics

1. Legenda dos Componentes Orientativos.................................................... 6 2. Introduo ................................................................................................... 7 3. UNIDADE 1................................................................................................. 83.1 Conceitos fundamentais e pseudo-conversao......................................................... 8 3.2 Customer Information Control System..................................................................... 8 3.3 A comunicao entre CICS ........................................................................................ 8 3.4 Conceitos..................................................................................................................... 9 3.5 Executando transaes ............................................................................................... 9 3.6 Execuo concorrente de tasks .................................................................................. 9 3.7 Formato dos comandos .............................................................................................. 9 3.8 Argumentos .............................................................................................................. 10 3.9 Comandos bsicos .................................................................................................... 11 3.9.1 Comando RECEIVE........................................................................................... 11 3.9.1.1 Condies de Exceo - RESP............................................................................ 12 3.9.2 Comando SEND................................................................................................. 13 3.9.3 Posicionamento de Cursor .................................................................................. 14 3.9.4 Formatao de Data e Hora................................................................................. 15 3.10 3.11 3.12 3.13 3.14 3.15 3.16 Exec Interface Block (EIB) .................................................................................. 16 Compilao de Programas ................................................................................... 17 Conversacional x Pseudo-conversacional ............................................................ 17 Pseudo-conversacional ......................................................................................... 17 Passagem de dados para prxima task ................................................................ 17 Pseudo-Conversacional utilizando commarea.................................................. 18 COBOL sob CICS Restries ........................................................................... 19

4. UNIDADE 2............................................................................................... 204.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............................................................................................... 325.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............................................................................................... 356.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............................................................................................... 447.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............................................................................................... 528.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............................................................................................... 599.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

10. UNIDADE 8............................................................................................... 6610.1 Queueing............................................................................................................... 67 10.2 Transient Data - TD ............................................................................................. 67 10.2.1 TD Intrapartition................................................................................................. 67 10.2.2 TD Extrapartition ............................................................................................... 68 10.3 10.4 10.5 10.6 10.7 10.8 10.9 Gravao de TD.................................................................................................... 69 Leitura de TD ....................................................................................................... 69 Excluso de TD..................................................................................................... 70 Condies de exceo - TD ................................................................................... 70 Temporary Storage - TS....................................................................................... 71 Gravao de TS .................................................................................................... 72 Leitura de TS ....................................................................................................... 73

10.10 Excluso de TS...................................................................................................... 74 10.11 Condies de exceo - TS.................................................................................... 75

11. UNIDADE 9............................................................................................... 7611.1 Manuseio de excees ........................................................................................... 76____________________________________________________________________________________________ Verso 1 4

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

11.10 CEBR .................................................................................................................... 85

12. UNIDADE 10............................................................................................. 8612.1 12.2 12.3 12.4 CEDF EXECUTION DIAGNOSTIC FACILITY............................................ 86 CEDF alterao de argumentos ........................................................................ 87 CEDF alterao de response codes ................................................................... 88 CEDF line number e offset ................................................................................ 89

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

13. Bibliografia ................................................................................................ 92

____________________________________________________________________________________________ Verso 1 5

Cics

1. Legenda dos Componentes Orientativos.

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 13.1 Conceitos fundamentais e pseudo-conversaoO 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.

3.2 Customer Information Control SystemO CICS um produto que foi criado em 1968 e transformado em programaproduto IBM em 1969, na sua primeira verso. Trata-se de um monitor transacional Online, ou seja, um produto que gerencia a execuo de aplicaes em tempo real. O CICS um produto multi-usurio e multi-task (multi-tarefa), portanto permite a execuo concorrente de inmeras aplicaes de uma grande quantidade de usurios. O CICS composto de quatro reas: PCT tabela de controle de transaes TCT tabela de controle de terminais PPT tabela de controle de programas FCT tabela de controle de arquivos VSAM

3.3 A comunicao entre CICSPodemos ter uma nica regio de CICS se tivermos uma carga de trabalho pequena, mas caso a empresa tenha um alto nmero de usurios e muito processamento online a ser executado diariamente, podemos ter diversas regies CICS trabalhando e distribuindo a carga atravs de facilidades de comunicao. Um CICS pode comunicar-se com outros CICS residentes na mesma CPU, em CPUs diferentes e mesmo em localidades diversas do planeta, facilitando muito o processamento distribudo.

____________________________________________________________________________________________ Verso 1 8

Cics

3.4 ConceitosDois 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.

3.5 Executando transaesQuando o usurio chama uma transao a partir de um terminal conectado ao CICS, imediatamente verificado se essa transao est cadastrada na tabela PCT. Se estiver, um bloco de controle denominado TCA (Task Control Area) criado e vai existir durante a execuo da task. Atravs da PCT o CICS sabe qual o programa associado transao, e verifica se esse programa est cadastrado na tabela PPT (Processing Program Table). Se estiver tudo o.k., a task executada.

3.6 Execuo concorrente de tasksComo dissemos, para cada execuo de transao (task), criado um bloco de controle chamado TCA. Portanto, se tivermos vrias tasks da mesma transao, teremos vrias TCAs, uma para cada task. Entretanto, o CICS no carrega na memria vrias cpias de um mesmo programa. Apenas uma cpia do programa carregada e utilizada por todas as tasks. A WORKING-STORAGE tem que ter uma cpia para cada task, j que ela utilizada com dados diferentes para cada usurio. A TCA o ponto focal da task, j que todas as reas so encadeadas a partir dela. Cada task ter tambm uma rea denominada EIB (Exec Interface Block), que traz uma srie de informaes muito teis para nossos programas.

3.7 Formato dos comandosEXEC CICS RECEIVE INTO(FLDA) LENGTH(W-LEN) END-EXEC

1

2

3

4

5

6

7

____________________________________________________________________________________________ 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 ArgumentosData-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

3.9 Comandos bsicos Comandos de terminal control SEND RECEIVE Comandos de formatao de data e hora ASKTIME FORMATTIME Comandos de trmino de programa RETURN

3.9.1 Comando RECEIVEWORKING-STORAGE SECTION. 77 W-LEN PIC S9(04) COMP.

01 AREA-INPUT. 02 COD-TRANS 02 FILLER 02 SOLICIT ..................... PROCEDURE DIVISION. PIC X(04). PIC X(01). PIC X(04).

MOVE 9 EXEC CICS

TO W-LEN RECEIVE INTO(AREA-INPUT) LENGTH(W-LEN) END-EXEC.

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.

3.9.1.1 Condies de Exceo - RESPWORKING-STORAGE SECTION. 77 W-LEN 77 W-ERR 01 AREA-INPUT. 02 COD-TRANS 02 FILLER 02 SOLICIT 01 MSG .................... PROCEDURE DIVISION. MOVE 9 EXEC CICS RECEIVE TO W-LEN INTO (AREA-INPUT) PIC X(04). PIC X(01). PIC X(04). PIC X(80). PIC S9(04) COMP. PIC S9(08) COMP.

LENGTH (W-LEN) RESP END-EXEC. (W-ERR)

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.

EXTREMAMENTE IMPORTANTE VERIFICAR EXCEES EM COMANDOS CICS.

____________________________________________________________________________________________ Verso 1 12

Cics

3.9.2 Comando SENDWORKING-STORAGE SECTION. 77 W-LEN 77 W-ERR 03 AREA-INPUT. 04 COD-TRANS 02 FILLER 02 SOLICIT 01 MSG ................................ PROCEDURE DIVISION. MOVE 9 EXEC CICS RECEIVE TO W-LEN INTO (AREA-INPUT) PIC X(04). PIC X(01). PIC X(04). PIC X(80). PIC S9(04) COMP. PIC S9(08) COMP.

LENGTH (W-LEN) RESP (W-ERR)

END-EXEC.

IF

W-ERR

EQUAL

DFHRESP(LENGERR)

MOVE MAX 9 CARACTERES TO MSG EXEC CICS SEND FROM (MSG)

LENGTH (50) END-EXEC

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

3.9.3 Posicionamento de CursorWORKING-STORAGE SECTION. 77 W-LEN 77 W-ERR PIC S9(04) COMP. PIC S9(08) COMP.

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).

LENGTH (W-LEN) RESP (W-ERR)

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)

LENGTH (50) END-EXEC

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

3.9.4 Formatao de Data e HoraWORKING-STORAGE SECTION. 77 W-LEN 77 W-ERR 77 W-ABS 01 W-DATA-S. 02 FILLER 02 W-DATA 01 W-HORA-S. 02 FILLER 02 W-HORA 01 AREA-INPUT. 02 COD-TRANS 02 FILLER 02 SOLICIT 01 MSG .................... PROCEDURE DIVISION. MOVE 9 EXEC CICS RECEIVE PIC S9(04) COMP. PIC S9(08) COMP. PIC S9(15) COMP-3.

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

3.10 Exec Interface Block (EIB)EIBTIME EIBDATE EIBCPOSN EIBAID EIBCALEN EIBTRNID EIBTRMID EIBFN EIBRESP . .____________________________________________________________________________________________ Verso 1 16

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.11 Compilao de ProgramasPara preparar um programa COBOL/CICS, so necessrias trs fases na PROCEDURE de compilao: Transalator: um pr-processador fornecido com o CICS, e que serve para traduzir os comandos EXEC CICS para MOVEs e CALLs, j que o compilador Cobol no reconhece EXEC CICS. O translator tambm inclui algumas reas de trabalho na WORKING e na LINKAGE, entre elas o EIB; Compilador Cobol: para compilar o programa; Linkage Editor: transforma em mdulo executvel e cataloga em uma biblioteca de programas.

-

3.12 Conversacional x Pseudo-conversacionalExistem duas formas de programao sob CICS: Conversacional: uma tcnica antiga que praticamente no est sendo utilizada, uma vez que consome muitos recursos do sistema, e vai contra a filosofia do CICS, que de aplicaes que processem rapidamente e consumam poucos recursos. Essa tcnica consiste em processar os dados recebidos do usurio, devolver a resposta, e aguardar para receber novas solicitaes. Pseudo-Conversacional: a tcnica mais utilizada, mais moderna e mais eficiente de programao. A aplicao recebe a solicitao do usurio, processa, envia a resposta e termina, liberando praticamente todos os recursos. Ao terminar, a aplicao encadeia uma nova execuo da transao, como veremos a seguir.

-

3.13 Pseudo-conversacionalAps 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.

3.14 Passagem de dados para prxima taskPara enviar dados para a prxima task, utilizamos uma rea de comunicao chamada COMMAREA. Essa rea ser passada atravs de uma rea de WORKING-STORAGE no programa e pode ter qualquer nome. Na prxima____________________________________________________________________________________________ Verso 1 17

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.

3.15 Pseudo-Conversacional utilizando commareaIDENTIFICATION DIVISION. PROGRAM-ID. FAT1PGM. WORKING-STORAGE SECTION. 01 W-COMM. 02 CH1 PIC X(01) VALUE N. 02 QTD PIC 9(09). LINKAGE SECTION. 01 DFHCOMMAREA. 02 L-CH1 PIC X(01). 02 L-QTD PIC 9(09). PROCEDURE DIVISION. IF EIBCALEN EQUAL ZEROS MOVE 5000 TO QTD EXEC CICS RETURN TRANSID (FAT1) COMMAREA (W-COMM) LENGTH (10) END-EXEC. MOVE L-CH1 TO ..... MOVE L-QTD TO .....

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

CicsCOMMAREA 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.

3.16 COBOL sob CICS RestriesIDENTIFICATION DIVISION. PROGRAM-ID. ENVIRONMENT DIVISION. CONFIGURATION SECTION. X INPUT-OUTPUT SECTION. DATA DIVISION. X FILE SECTION. WORKING-STORAGE SECTION. LINKAGE SECTION. PROCEDURE DIVISION. Sob CICS no utilizamos INPUT-OUTPUT SECTION e FILE SECTION. Quem gerencia os arquivos o CICS, e no o programa de aplicao. COBOL II ACCEPT DISPLAY CLOSE OPEN READ WRITE REWRITE DELETE OS/COBOL ACCEPT DISPLAY EXAMINE EXHIBIT STOP RUN INSPECT STRING TIME TRANSFORM UNSTRING CLOSE OPEN READ WRITE

____________________________________________________________________________________________ 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

4.1 BASIC MAPPING SUPPORTNessa unidade veremos mapas, que so telas de terminal compostas de diversos campos de dados formatados, isto , com posio fixa na tela. Atravs dos mapas torna-se muito mais simples trabalharmos com apresentao de dados ao usurio atravs de nossos programas de aplicao. A facilidade que o CICS fornece para trabalharmos com mapas chama-se BMS (Basic Mapping Support). Basic Mapping Support (BMS) utiliza dados formatados (mapas) campos constantes e variveis interface muito mais atrativa para o usurio

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.

4.2 Definio de mapasPara decidir como sero os mapas (telas de terminal) de determinada aplicao CICS, necessrio que o analista responsvel pela aplicao faa uma reunio com os usurios finais, a fim de saber quais so suas necessidades de informaes. A partir desse ponto, ser necessrio fazer a definio dos mapas seguida de sua gerao.

4.3 Campos 32701 2 3 4 5 6 . . . . 24 Um mapa composto por campos formatados 3270. stopper (delimitador) NOME: ENDEREO: CPF: NO. CONTA:

____________________________________________________________________________________________ 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.

4.4 Campos formatados 3270campos protegidos Posic. cursor delimitadores

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.

4.5 Definindo um mapaTESTMS1 DFHMSD TYPE=&SYSPARM,MODE=INOUT,LANG=COBOL X TIOAPFX=YES,STORAGE=AUTO TESTMP DFHMDI SIZE=(24,80),LINE=1,COLUMN=1 DFHMDF POS=(3,1),LENGTH=5,INITIAL=NOME:,ATTRIB=ASKIP NOME DFHMDF POS=(3,7),LENGTH=30,ATTRIB=(UNPROT,IC) DFHMDF POS=(3,38),LENGTH=1,ATTRIB=ASKIP DFHMDF POS=(5,1),LENGTH=4,INITIAL=END:,ATTRIB=ASKIP ENDER DFHMDF POS=(5,6),LENGTH=40,ATTRIB=UNPROT DFHMDF POS=(5,47),LENGTH=1,ATTRIB=ASKIP DFHMDF POS=(7,1),LENGTH=4,INITIAL=CPF:,ATTRIB=ASKIP CPF DFHMDF POS=(7,6),LENGTH=11,ATTRIB=(UNPROT,NUM) DFHMDF POS=(7,18),LENGTH=1,ATTRIB=ASKIP MSG DFHMDF POS=(24,1),LENGTH=70,ATTRIB=ASKIP DFHMSD TYPE=FINAL END Um MAPSET pode conter vrios MAPAS, mas muitas vezes contm apenas 1 mapa. No podemos definir um MAPA sem definir tambm o MAPSET. Para fazer a definio necessrio utilizarmos as macros BMS que o CICS fornece. As macros so: DFHMSD: define o mapset; DFHMDI: define o mapa; DFHMDF: define campos no mapa.

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

CicsPodemos 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.

4.6 Compilao de um mapaAps definir o Mapset/Mapa, temos que fazer sua gerao. Isso feito atravs da compilao do Mapset, atravs de uma PROCEDURE. Essa compilao feita em duas fases: 1 fase: compilao e linkedio resultando em um mdulo executvel assembler, que catalogado em uma biblioteca de programas. Esse mdulo chamado de Mapa Fsico, composto pelas informaes definidas nas macros. Assim como os programas, os mapas fsicos dever ser definidos na PPT do CICS; 2 fase: compilao das macros, resultando no Mapa Simblico, que na verdade o Copybook Cobol referenciando os campos que sero utilizados no programa.

-

4.7 Mapas e ProgramasDurante a compilao do programa, o COPY nome-do-mapset colocado na WORKING-STORAGE expande o Mapa Simblico, para podermos referenciar os campos do mapa. Durante a execuo do programa, quando emitido um comando para receber ou enviar um mapa, o Mapa fsico executado.

____________________________________________________________________________________________ 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

4.8 Enviando Mapas4.8.1 Send MapO comando SEND MAP utilizado para enviar um mapa ao terminal do usurio. Como podemos ter mais de um mapa em um mapset, temos que informar o nome do mapa e tambm do mapset. O SEND MAP pega os dados do mapa simblico (WORKING), agrega ao mapa fsico e envia para o terminal do usurio. EXEC CICS SEND MAP(TESTMP) MAPSET(TESTMS1) END-EXEC.

____________________________________________________________________________________________ Verso 1 26

Cics

4.8.2 OpesAs 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.

-

1) EXEC CICS SEND

MAP(TESTMP) MAPSET(TESTMS1) MAPONLY END-EXEC.

No exemplo acima estamos enviando apenas o mapa fsico, no estamos enviando dados.

2) EXEC CICS SEND

MAP(TESTMP) MAPSET(TESTMS1) DATAONLY END-EXEC.

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.

3) EXEC CICS SEND

MAP(TESTMP) MAPSET(TESTMS1) FROM(TESTMPO) END-EXEC.

Neste exemplo 3 estamos enviando os dados de output.

____________________________________________________________________________________________ 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

4.9 Recebendo Mapas Receive MapIDENTIFICATION DIVISION. PROGRAM-ID. FAT1PGM. WORKING-STORAGE SECTION. 77 W-ERR PIC S9(08) COMP. 01 ARQ-REG. 02 REG-NOME PIC X(30). .... COPY TESTMS1. PROCEDURE DIVISION. EXEC CICS RECEIVE MAP (TESTMP) MAPSET (TESTMS1) INTO (TESTMPI) RESP (W-ERR) END-EXEC. IF W-ERR EQUAL DFHRESP(MAPFAIL) PERFORM TRATA-MAPFAIL. IF NOMEL MOVE NOT EQUAL ZEROS NOMEI TO REG-NOME.

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

4.10 Manuseio de teclas e atributosPara podermos alterar atributos e testar teclas em um programa, o CICS fornece dois copybooks que podem ser includos na WORKING-STORAGE: DFHBMSCA: contm uma srie de campos com todas as combinaes possveis de atributos de campos. Dessa forma, podemos alterar o atributo default movendo uma das combinaes para o campo com sufixo A; DFHAID: contm uma lista com teclas (ENTER, PFs, PAs, CLEAR,...) para podermos testar no programa.

-

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.

WORKING-STORAGE SECTION. 77 77 W-ERR COM-WORK PIC S9(08) COMP. PIC X(10).

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

W-ERR MOVE MOVE EXEC CICS

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 35.1 Envio e recepo de mapasEssa 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.

5.2 Mapa simblico WORKING X LINKAGEO mapa simblico (Copybook) Cobol geralmente copiado na WORKINGSTORAGE do programa. Mas nada impede que seja copiado na LINKAGE SECTION. Para isso devemos saber que o endereamento (addressability) de reas na LINKAGE responsabilidade do programa.

5.3 Recebendo Mapa na LINKAGE SECTIONQuando utilizamos a LINKAGE SECTION para copiar o mapa simblico (copybook cobol), devemos utilizar a opo SET ao invs de INTO no comando RECEIVE MAP. Com SET, o CICS adquire a rea de memria, armazena as informaes e fornece o endereo da rea para o programa enderear o copybook em LINKAGE.

LINKAGE SECTION. 01 DFHCOMMAREA.

COPY TESTMS1. PROCEDURE DIVISION. EXEC CICS RECEIVE MAP (TESTMP)

MAPSET (TESTMS1) SET (ADDRESS OF TESTMPI)

END-EXEC.

5.4 Send Map Constantes e variveisQuando utilizamos constantes para os argumentos das opes MAP e MAPSET em um comando SEND MAP, no necessrio especificar a opo FROM. Se utilizarmos variveis para as opes MAP e MAPSET, temos que especificar a opo FROM.

____________________________________________________________________________________________ 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.

MAPA SIMBLICO SEND MAP(TESTMP) MAPSET(TESTMS1) TESTMPO

MOVE MOVE SEND

TESTMP TESTMS1 MAP(W-MAPA)

TO TO

W-MAPA. W-MAPSET.

TESTMPO

MAPSET(W-MAPSET) FROM(TESTMPO)

SEND

MAP(TESTMS1)

TESTMPO

5.5 Receive Map Constantes e variveisQuando utilizamos constantes para os argumentos das opes MAP e MAPSET em um comando RECEIVE MAP, no necessrio especificar a opo INTO. Se utilizarmos variveis para as opes MAP e MAPSET, temos que especificar a opo INTO. Se desejamos codificar apenas a opo MAP no comando RECEIVE MAP, devemos ter o mapa e o mapset definidos com o mesmo nome. MAPA SIMBLICO RECEIVE MAP(TESTMP) MAPSET(TESTMS1) MOVE MOVE TESTMP TESTMS1 TO TO W-MAPA. W-MAPSET. TESTMPI TESTMPI

RECEIVE MAP(W-MAPA) MAPSET(W-MAPSET)____________________________________________________________________________________________ Verso 1 33

Cics INTO(TESTMPI)

RECEIVE MAP(TESTMS1)

TESTMPI

5.6 Send Map Funes de controleSEND MAP(TESTMP) MAPSET(TESTMS1) [ERASE | ERASEAUP] [FREEKB] [ALARM] [FRSET] [PRINT] OU SEND CONTROL ...

-

ERASE

limpa buffer do terminal e envia dados

-

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

PRINT quando o terminal associado uma impressora

As opes de controle de output mostradas acima em um comando SEND MAP tambm podem ser emitidas atravs do comando SEND CONTROL.

5.7 RECEIVE tecla e cursorEm uma operao de RECEIVE, o CICS informa ao programa qual a posio do cursor na tela e tambm qual tecla foi pressionada (EIBCPOSN e EIBAID).____________________________________________________________________________________________ Verso 1 34

Cics Assim, podemos trabalhar com barras de aes e tambm com teclas funcionais, por exemplo PF3 = FIM, PF8 = AVANA TELA).

5.8 Edio de campos Built in FunctionPodemos em algumas ocasies permitir ao usurio que digite dados com caracteres especiais como $ ou . ou ainda ,. Entretanto, se desejarmos realizar operaes aritmticas utilizando esses campos, devemos retirar os caracteres no numricos. O comando BIF DEEDIT pode ser utilizado para retirar os caracteres especiais de um campo, preparando-o para operaes aritmticas. A opo LENGTH no necessria para programas COBOL II. EXEC CICS BIF DEEDIT FIELD (AMOUNT)

LENGTH (9) END-EXEC.

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

6.1 Acessando VSAMNessa unidade veremos como o CICS trabalha com o mtodo de acesso VSAM (Virtual Storage Access Method), quais os tipos de arquivos VSAM suportados, e qual o procedimento para fazer acesso direto e tambm seqencial (Browse). Os arquivos VSAM so definidos para o CICS atravs da tabela FCT (File Control Table). Nessa tabela temos toda informao referente ao arquivo, inclusive os tipos de operao que podero ser realizadas. Um programa Cobol/CICS no tem definio fsica do arquivo que ser acessado, e tambm no faz abertura ou fechamento dos arquivos. Os arquivos geralmente so abertos pelo CICS quando um acesso for solicitado. Dentro do programa, definimos na WORKING o layout do registro, e o campo chave RIDFLD (Record Id Field). O comando para leitura direta o READ.

6.2 VSAM Recuperao Direta6.2.1 VSAM ESDSregistro

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

Cics 6.2.1.1 Relative Byte Address 0 100 200

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.

6.2.2 VSAM RRDS

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

6.2.3 VSAM KSDS28

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.

o tipo de arquivo mais utilizado sob CICS.

6.2.4 Campo Chave (RIDFLD)Identificao do registro RIDFLD. Para arquivos KSDS o RIDFLD deve conter a chave do registro a ser acessado. Podemos tambm acessar registros por pedao de chave (Chave parcial = KEYLENGTH). Para os arquivos ESDS o RIDFLD deve ser um campo de quatro bytes em formato binrio (s9(08) comp) e deve conter o RBA do registro a ser acessado. Para os arquivos RRDS o RIDFLD deve ser um campo de quatro bytes em formato binrio (s9(08) comp) e deve conter o RRN do registro a ser acessado.

6.2.5 Comando para Leitura - READPara programas COBOL II no necessrio utilizar a opo LENGTH se os registros tiverem tamanho fixo.

Se a leitura for feita utilizando chave parcial, alm de KEYLENGTH devemos especificar a opo GENERIC.

____________________________________________________________________________________________ Verso 1 38

Cics

EXEC CICS

READ

FILE INTO RIDFLD

(name) (data-area) (data-area)

[RBA | RRB]

[LENGTH (data-area)] [GENERIC] [KEYLENGTH(data-value)] [GTEQ | EQUAL]END-EXEC.

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

END-EXEC. O exemplo mostra a leitura do registro chave 00010 de um arquivo KSDS.

6.2.6 Condies de exceoSempre devemos utilizar a opo RESP nos comandos de READ. Abaixo algumas condies de exceo: NOTFND: registro no encontrado em leitura direta; ENDFILE: fim de arquivo em pesquisa seqencial (veremos no prximo tpico); INVREQ: solicitao invlida;

____________________________________________________________________________________________ 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

END-EXEC. IF W-ERR .... ELSE IF W-ERR ...____________________________________________________________________________________________ Verso 1 40

EQUAL

DFHRESP(NOTFND)

NOT EQUAL

DFHRESP(NORMAL)

Cics

6.3 VSAM Recuperao Seqencial (BROWSE)Para fazer pesquisa seqencial (Browse) em um arquivo, necessrio posicionar o ponteiro de leitura na chave desejada atravs do comando STARTBR, e em seguida fazer a leitura seqencial dos registros (READNEXT ou READPREV). Para terminar o browse emitir o comando ENDBR.

6.3.1 Comandos para recuperao seqencial6.3.1.1 Posicionando chave - STARTBR O comando STARTBR utilizado para posicionar a chave no registro desejado (estabelecer posio). O Default para o STARTBR GTEQ, isto , se a chave desejada no existir, o posicionamento ser feito no registro seguinte.

Esta leitura seqencial muito utilizada em programas de paginao.

EXEC CICS

STARTBR

FILE RIDFLD

(name) (data-area) [RBA | RRN]

[GENERIC] [KEYLENGTH(data-value) ] [GTEQ | EQUAL]END-EXEC.

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

FILE INTO RIDFLD

(name) (data-area) (data-area)

[RBA | RRN]

[GENERIC] [KEYLENGTH(data-value)] [GTEQ | EQUAL]END-EXEC.

____________________________________________________________________________________________ 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.

MOVE 00003 EXEC CICS STARTBR

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 57.1 Atualizando VSAMNa 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.

7.2 Consideraes sobre integridadeComo o CICS um produto multi-usurio e multi-tarefa, tem a obrigao de fornecer mecanismos de controle de integridade de dados. Temos que ter proteo para casos de interrupes no programadas, tais como erros de operao, abends de tasks, falta de energia, e at mesmos fatores fsicos como por exemplo, um incndio. Alm disso, temos a necessidade de proteo de recursos, para que vrios usurios no consigam atualizar o mesmo registro em determinado instante.

7.3 Controle exclusivo VSAM x CICSPara manter a integridade de arquivos VSAM, o CICS fornece dois tipos de controle exclusivo: Controle exclusivo do VSAM: quando uma task est atualizando um registro, o Control Interval (CI) que contm o registro atualizado fica preso para essa task at a atualizao terminar. Essa proteo funciona de forma automtica. Controle exclusivo do CICS: uma extenso da proteo mostrada acima. Aps atualizar, o VSAM libera o CI, mas o CICS prende o registro at o fim da LUW. Essa proteo funciona apenas para arquivos definidos como recuperveis.

-

7.4 A necessidade de proteoImaginemos uma transao que vai atualizar o arquivo de caderneta de poupana subtraindo R$ 500. Em seguida, atualizar o arquivo de conta corrente adicionando os R$ 500. Como os dois arquivos so logicamente relacionados, temos que ter a garantia de atualizao de ambos ou no caso de falha, que nenhum seja atualizado. Nesse caso, ambos devem ser definidos como arquivos recuperveis. Se o primeiro sofrer atualizao e ocorrer alguma falha na atualizao do segundo, o CICS automaticamente deve desfazer a atualizao para que ambos fiquem sincronizados. Esse processo de desfazer a atualizao chamado BACKOUT.

____________________________________________________________________________________________ Verso 1 44

Cics

7.5 LUW e BackoutPara garantir a integridade de arquivos recuperveis, o CICS trabalha com um conceito denominado Logical Unit of Work (LUW). Uma LUW sempre tem incio quando uma task ter a inteno de atualizar um arquivo recupervel ( por ex.: um Read com Update). Essa LUW permanece aberta (In-flight) at ocorrer um SYNCPOINT (final de task ou comando SYNCPOINT). Quando a LUW termina ocorre a efetivao de todas as atualizaes (Commit). Se ocorrer alguma falha antes do trmino da LUW, o CICS far um backout de todos os arquivos recuperveis que foram atualizados.

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

7.6 Atualizao VSAMPara atualizar um arquivo, adicionamos a opo UPDATE ao comando READ. Quando fazemos o READ UPDATE, ocorre o controle exclusivo do VSAM. Esse controle permanece at: REWRITE: atualizao do registro; DELETE: excluso do registro; UNLOCK: cancelamento da inteno de atualizao; FIM DA TASK.

7.7 Atualizao de um registroO comando REWRITE faz a atualizao de um registro. O campo chave no pode ser alterado.

____________________________________________________________________________________________ Verso 1 45

Cics EXEC CICS REWRITE FILE FROM (name) (data-area)

[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.

7.8 Excluso de registro(s)O comando DELETE exclui um registro do arquivo. O campo chave (RIDFLD) no necessrio se ocorrer um READ UPDATE antes do DELETE. Podemos fazer uma excluso genrica, informando as opes KEYLENGTH e GENERIC. Nesse caso, se especificarmos NUMREC, o CICS informar quantos registros foram excludos na operao. EXEC CICS DELETE FILE (name)

[RIDFLD (data-area)] [KEYLENGTH (data-value)] [GENERIC | NUMREC (data-area)] [RBA | RRN]END-EXEC.

____________________________________________________________________________________________ Verso 1 46

Cics

Apenas os arquivos KSDS e RRDS podem ter registros excludos.

7.9 Liberao de registroSe decidirmos no fazer a atualizao aps o comando READ UPDATE, podemos liberar o controle exclusivo atravs do comando UNLOCK. EXEC CICS UNLOCK FILE (name)

END-EXEC.

7.10 Condies de exceoAs condies de exceo mais freqentes so: NOSPACE: ao fazer a atualizao de um registro de tamanho varivel, aumentamos seu tamanho e no h espao para regravao; INVREQ: solicitao invlida. Por exemplo, emitir o comando REWRITE sem ter feito o READ UPDATE; LENGERR: o tamanho do registro a ser regravado muito grande; ILLOGIC: erro do VSAM que no se enquadra nas outras excees.

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

7.11 Codificao - atualizaoAbaixo temos um exemplo de codificao de uma leitura para atualizao seguida de regravao do registro atualizado. MOVE 00003 TO READ W-CHAVE. FILE INTO RIDFLD UPDATE RESP (W-ERR) (ARQ1) (W-REG) (W-CHAVE)

EXEC CICS

END-EXEC. IF W-ERR NOT EQUAL DFHRESP(NORMAL)

PERFORM ROT-ERRO.

*MOVE ALTERAES PARA ARQUIVO EXEC CICS REWRITE FILE FROM RESP (ARQ1) (W-REG) (W-ERR)

END-EXEC. IF W-ERR NOT EQUAL DFHRESP(NORMAL)

PERFORM ROT-ERRO.

7.12 Desenho ConversacionalO controle exclusivo do VSAM que prende todo o CI para essa task s terminar quando ocorrer o comando REWRITE. O controle exclusivo, nesse caso, vai ter a durao do tempo que o usurio levar entre receber as informaes em seu terminal, pensar nos dados que sero alterados, digitar as alteraes e pressionar Enter. Enquanto isso, qualquer outra task desejando atualizar um registro do mesmo CI ficar em wait. (esperando).

____________________________________________________________________________________________ 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?

7.13 Desenho Pseudo-conversacionalPara resolver o problema mostrado no item acima, temos a tcnica pseudoconversacional. A leitura para enviar os dados ao usurio no prende nenhum recurso. Se o tempo de ao do usurio for lento, ningum ser prejudicado. O controle exclusivo somente ocorrer aps o programa receber as alteraes digitadas, e ter uma durao muito curta. Mas e se o registro for alterado entre o tempo decorrido aps a leitura na 1 fase e as leitura para update na 2 fase? A resposta para esse problema salvar a imagem do registro quando for feita a primeira leitura. Quando o programa fizer a leitura para update na 2 fase, dever comparar o registro lido com a imagem que foi salva. Se estiverem iguais, podemos efetivar as alteraes. Caso contrrio, devemos tomar alguma providncia.

Onde salvar a imagem do registro? Que tal na COMMAREA? Ou ento em TS (como veremos adiante).

7.14 Gravao de registros - WRITEPara incluir um novo registro em um arquivo VSAM, devemos formatar os dados na rea do registro em WORKING, estabelecer o campo chave (RIDFLD) e grav-lo atravs do comando WRITE.____________________________________________________________________________________________ Verso 1 49

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.

MOVE MOVE MOVE MOVE MOVE

00003 PHEYSEY

TO TO

W-CHAVE. REG-NOME. REG-CIDADE. REG-DATA. REG-HORA.

SO PAULO TO EIBDATE EIBTIME TO TO

EXEC CICS

WRITE

FILE FROM RIDFLD RESP

(ARQ1) (W-REG) (W-CHAVE) (W-ERR)

END-EXEC.

IF

W-ERR

EQUAL

DFHRESP(DUPREC)

MOVE REGISTRO J EXISTENTE TO MSGO____________________________________________________________________________________________ Verso 1 50

Cics .... ELSE IF W-ERR NOT EQUAL DFHRESP(NORMAL)

PERFORM ROT-ERRO. ...

____________________________________________________________________________________________ Verso 1 51

Cics

8. UNIDADE 68.1 Controle de programasVeremos agora os comandos de transferncia de controle entre programas em uma mesma task: CICS: LINK e XTCL COBOL: CALL esttico e dinmico.

Veremos tambm como feita a passagem de dados entre os programas.

8.2 Link entre programasO comando Link passa o controle para o programa indicado, esse programa executa e ao terminar, devolve o controle ao programa que emitiu o Link (chamador).

Os dois programas so executados sob a mesma task.

8.3 Passagem de Dados Usando LINKAssim como na pseudo-conversao, tambm utilizamos a Commarea para passagem de dados entre os programas no comando LINK. O programa chamador ( o que emite o LINK) passa como commarea uma rea de WORKING-STORAGE. O programa que recebe o controle vai acessar os dados passados atravs da DFHCOMMAREA em sua LINKAGE SECTION. Se os dados recebidos na DFHCOMMAREA pelo programa chamado forem alterados, quando esse terminar e o controle voltar para o programa chamador, a rea de WORKING que foi passada como commarea tambm estar alterada.

____________________________________________________________________________________________ Verso 1 52

Cics

Os dois programas devem estar definidos na PPT do CICS.

8.4 Nveis lgicos - LINK

NVEL 0

CICS

NVEL 1

Primeiro Programa

LINK

NVEL 2

Segundo Programa RETURN

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.

8.5 XCTL entre programasO comando XCTL tambm passa controle para outro programa, mas ao contrrio do LINK, quando o programa chamado termina, o controle no retorna ao programa chamador. O XCTL muito utilizado para desenvolver MENUS de aplicaes.

8.6 Passagem de dados usando XCTLA passagem de dados entre os programas tambm feita atravs da Commarea. O programa que emite o XCTL utiliza uma rea e WORKING como Commarea, e o programa que torna o controle recebe os dados na DFHCOMMAREA.

____________________________________________________________________________________________ Verso 1 54

Cics

8.7 Nveis lgicos - XCTLNVEL 0 CICS

Primeiro Programa NVEL 1 LINK

Terceiro Programa

XCTL

RETURN

NVEL 2

Segundo Programa RETURN

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.

Passagem de controle: XCTL programa recebe eibcalen diferente de zeros.

START programa recebe eibcalen igual a zeros, devemos, portanto, executar o comando RETRIEVE para restaurar a commarea.

8.8 Cuidados com a LINKAGE SECTION

Devemos sempre utilizar os mesmos tamanhos de commarea quando vamos passar controle a outro programa.

8.9 Call esttico COBOLCALL LITERAL: CALL PROGB

OS/COBOL PGM CHAMADOR PGM CHAMADO COMANDOS CICS X V

VS COBOL II V

V

____________________________________________________________________________________________ Verso 1 56

Cics

OS/COBOL VS COBOL II ASSEMBLER

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.

8.10 Call dinmico COBOLMOVE PROGB TO W-PROG

CALL VARIVEL: CALL W-PROG.

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.

8.11 Passagem de dados com INPUTMSGA partir do CICS/ESA v3.1.1 temos uma alternativa a mais para passagem de dados entre programas. Trata-se da opo INPUTMSG. Atravs dela, podemos passar uma rea que fica na WORKING-STORAGE do programa chamador, e receb-la tambm em WORKING-STORAGE no programa chamado, atravs do comando RECEIVE. Se desejarmos, podemos especificar tanto o INPUTMSG quanto a COMMAREA em um mesmo comando. O INPUTMSG vlido para LINK e XCTL a partir do CICS V3.1.1. A partir do CICS V3.2.1 vlido tambm para RETURN TRANSID.

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

Cics END-EXEC. ...

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.1 Addressability uso da LINKAGE SECTIONA LINKAGE SECTION uma rea muito explorada pelo CICS em nossos programas COBOL. J percebemos que o EIB e a DFHCOMMAREA localizamse em LINKAGE. Alm dessas duas reas, podemos utilizar a LINKAGE para diversos outros fins, pois ela uma excelente alternativa ao uso da WORKING. O nico cuidado que devemos ter com o tamanho das reas e sua addressability, ou seja estabelecer o endereamento para poder utiliz-las.

9.2 Addressability

-

DFHCOMMAREA e DFHEIBLK: Endereados automaticamente pelo prprio CICS.

-

Outras rea de LINKAGE: Devem ser endereadas pelo programa

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.

9.3 BLL Cells OS/VS cobol

____________________________________________________________________________________________ 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.

9.4 Opo SET utiliza LINKAGE SECTION.PROGRAMA OS/COBOL: EXEC CICS READ FILE (ARQ1)

____________________________________________________________________________________________ Verso 1 61

Cics RIDFLD SET (REG-CHAVE) (PTR-REG)

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.

9.5 Tabelas em AssemblerDC CL2SP DC CL15SO PAULO DC CL2BA DC CL15BAHIA DC CL2RJ DC CL15RIO DE JANEIRO DC CL2PR DC CL15PARAN DC CL2ES DC CL15ESPRTO SANTO____________________________________________________________________________________________ Verso 1 62

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.

9.6 Carga de tabelas COBOL II -LOADPROGRAM-ID. PROG1. WORKING-STORAGE SECTION. 77 W-ERR ... LINKAGE SECTION. 01 DFHCOMMAREA. 02 01 L-COMM PIC X(03). PIC S9(08) COMP.

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.

9.7 Adquirindo memria COBOL IIPROGRAM-ID. PROG1. WORKING-STORAGE SECTION. 77 W-ERR ... LINKAGE SECTION. 01 DFHCOMMAREA. 02 01 L-COMM PIC X(03). PIC X(300). PIC S9(08) COMP.

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

9.8 reas maiores que 4096 COBOL IISe a rea de LINKAGE tiver tamanho acima de 4096 bytes, no existe nenhuma considerao especial na codificao do programa COBOL II. Teremos acesso aos 7300 bytes da L-AREA sem nenhum esforo adicional.

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)

9.9 Acessando a Common Work Area (CWA)O CICS fornece vrias reas de uso comum, e uma das mais prticas a Common Work Area. Cada CICS tem uma CWA, e essa CWA pode ser acessada por todas as tasks. Ela serve para armazenar dados de utilizao pblica de qualquer espcie.

PROGRAM-ID. PROG1. WORKING-STORAGE SECTION. 77 W-ERR PIC S9(08) COMP.

____________________________________________________________________________________________ Verso 1 65

Cics 77 W-LEN ... LINKAGE SECTION. 01 DFHCOMMAREA. 02 01 L-COMM PIC X(03). PIC S9(04) COMP.

L-CWA. 02 02 CWA-CAMPO1 CWA-CAMPO2 PIC X(50). PIC X(50).

PROCEDURE DIVISION. .... EXEC CICS ASSIGN CWALENG(W-LEN) END-EXEC. IF W-LEN GREATER ZEROS

EXEC CICS

ADDRESS CWA(ADDRESS OF L-CWA) END-EXEC. .....

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 QueueingNessa 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).

10.2 Transient Data - TDCICS TDP

DCT

PROGRAMA Exec cics Readq/writeq TD

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 IntrapartitionPROGRAMA EXEEXEC 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 TDEXEC 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.

MOVE EXEC CICS

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 TDEXEC CICS READQ TD QUEUE INTO (name) (data-area)

[LENGTH (data-area)] END-EXEC.____________________________________________________________________________________________ Verso 1 69

Cics O comando READQ TD utilizado para leitura de TDs Intrapartition e Extrapartition.

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 TDEXEC 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.

10.6 Condies de exceo - TD

QZERO LENGERR NOSPACE NOTOPEN QIDERR IOERR

____________________________________________________________________________________________ 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.

10.7 Temporary Storage - TS

DFHTSP

DFHTEMP

EXEC CICS READQ/WRITEQ TS TS VSAM (ESDS)

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 TSEXEC CICS WRITEQ TS QUEUE FROM (name) (data-area)

[LENGTH (data-area)] [ITEM (data-area) [REWRITE]]

[MAIN | AUXILIARY] END-EXEC.

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.

Cada registro gravado um novo item.

____________________________________________________________________________________________ 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.

Acima temos um exemplo de codificao de gravao de um tem na fila TS FATTS01.

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.

E este exemplo mostra atualizao do tem 10 da fila TS FATTS01.

10.9 Leitura de TSEXEC CICS READQ TS QUEUE INTO (name) (data-area)

[LENGTH (data-area)] [ITEM (data-area) | NEXT]

[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 temo