CICS PROGRAMAÇÃO COMMAND LEVEL
Participante : _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Treinamento: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Perí odo : _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Sala : _ _ _ _ _ _ _ _ _ _ _ _ Horário: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Instrutores :____________________________________ ____________________________________
____________________________________________________________________________________________ Versão 1
1
Cics
1. Legenda Legenda dos Componentes Componentes Orientativos................. Orientativos...................................... ................................... .............. 6 2. Introdução Introdução ........................................ ................... ......................................... ......................................... ....................................... .................. 7 3. UNIDADE 1 ......................................... .................... .......................................... .......................................... ................................... .............. 8 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9
Conceitos fundamentais e pseudo-conversação................. pseudo-conversação........ .................. .................. ................... ................... ............ ... 8 Customer Customer Informa Information tion Control Control System......................... System.......................................... .................................. ........................... ..........88 A comunicaç comunicação ão entre entre CICS CICS............... ................................ ................................... ................................... .................................. ..................... .... 8 Conceitos.......... Conceitos........................... .................................. .................................. ................................... ................................... .................................. ..................... .... 9 Executando Executando transaçõe transaçõess .................................. ................................................... .................................. .................................. ........................... ..........99 Execução Execução concorren concorrente te de tasks ................................ ................................................. .................................. ................................. ................99 Formato Formato dos comando comandoss ................................. .................................................. .................................. .................................. ........................... ..........99 Argumentos Argumentos .................................. ................................................... .................................. .................................. .................................. ......................... ........ 10 Comandos Comandos básicos básicos .................. ................................... .................................. .................................. .................................. ............................... .............. 11
3.9.1 Comando Comando RECEIVE.......................... RECEIVE........................................... .................................. .................................. ............................... .............. 11 3.9.1.1 Condições Condições de Exceção - RESP................ RESP....... ................... ................... .................. .................. ................... ................... ............. .... 12 3.9.2 Comando Comando SEND............................. SEND.............................................. .................................. ................................... .................................. ................ 13 3.9.3 Posicionam Posicionamento ento de Cursor Cursor .................................. ................................................... .................................. ............................... .............. 14 3.9.4 Formatação de Data e Hora.................... Hora........... .................. .................. ................... ................... .................. .................. ............... ...... 15
3.10 3.11 3.12 3.13 3.14 3.15 3.16
Exec Interface Interface Block (EIB) .................................. ................................................... .................................. ............................... .............. 16 Compilaçã Compilaçãoo de Programa Programass ................................ ................................................. ................................... .................................. ................17 17 Conversac Conversacional ional x Pseudo-conve Pseudo-conversacio rsacional nal ................................ ................................................. ............................ ........... 17 Pseudo-con Pseudo-conversa versacional cional ................................. .................................................. .................................. .................................. ...................... ..... 17 Passagem Passagem de dados para para próxima próxima task................ task ................................. .................................. ............................... .............. 17 Pseudo-Conversacional – utilizando commarea.......... commarea. ................... ................... .................. .................. ............ ... 18 COBOL sob CICS – Restrições Restrições ................................. .................................................. .................................. ......................... ........ 19
4. UNIDADE 2 ......................................... .................... .......................................... .......................................... ................................. ............ 20 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8
BASIC MAPPING MAPPING SUPPOR SUPPORT...................... T....................................... .................................. .................................. ......................... ........ 21 Definição Definição de mapas................. mapas.................................. .................................. .................................. .................................. ............................... .............. 21 Campos Campos 3270............. 3270.............................. .................................. .................................. .................................. .................................. ............................ ........... 21 Campos Campos formatad formatados os 3270........................ 3270......................................... .................................. .................................. ............................... .............. 22 Definindo Definindo um mapa.............................. mapa............................................... .................................. ................................... .................................. ................23 23 Compilaçã Compilaçãoo de um mapa.............. mapa............................... .................................. .................................. .................................. ......................... ........ 24 Mapas e Progra Programas...................... mas....................................... .................................. .................................. .................................. ......................... ........ 24 Enviando Enviando Mapas.............................. Mapas............................................... .................................. .................................. .................................. ...................... ..... 26
4.8.1 4.8.2
Send Send Map .................................. ................................................... .................................. .................................. .................................. ...................... ..... 26 Opções Opções ................................... .................................................... .................................. .................................. .................................. ......................... ........ 27
4.9 Recebendo Mapas – Receive Map....................... Map............. ................... .................. .................. .................. ................... ................. ....... 29 4.10 Manuseio Manuseio de teclas teclas e atributos atributos ................................ ................................................. .................................. ............................ ........... 30 ____________________________________________________________________________________________ Versão 1
2
Cics
1. Legenda Legenda dos Componentes Componentes Orientativos................. Orientativos...................................... ................................... .............. 6 2. Introdução Introdução ........................................ ................... ......................................... ......................................... ....................................... .................. 7 3. UNIDADE 1 ......................................... .................... .......................................... .......................................... ................................... .............. 8 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9
Conceitos fundamentais e pseudo-conversação................. pseudo-conversação........ .................. .................. ................... ................... ............ ... 8 Customer Customer Informa Information tion Control Control System......................... System.......................................... .................................. ........................... ..........88 A comunicaç comunicação ão entre entre CICS CICS............... ................................ ................................... ................................... .................................. ..................... .... 8 Conceitos.......... Conceitos........................... .................................. .................................. ................................... ................................... .................................. ..................... .... 9 Executando Executando transaçõe transaçõess .................................. ................................................... .................................. .................................. ........................... ..........99 Execução Execução concorren concorrente te de tasks ................................ ................................................. .................................. ................................. ................99 Formato Formato dos comando comandoss ................................. .................................................. .................................. .................................. ........................... ..........99 Argumentos Argumentos .................................. ................................................... .................................. .................................. .................................. ......................... ........ 10 Comandos Comandos básicos básicos .................. ................................... .................................. .................................. .................................. ............................... .............. 11
3.9.1 Comando Comando RECEIVE.......................... RECEIVE........................................... .................................. .................................. ............................... .............. 11 3.9.1.1 Condições Condições de Exceção - RESP................ RESP....... ................... ................... .................. .................. ................... ................... ............. .... 12 3.9.2 Comando Comando SEND............................. SEND.............................................. .................................. ................................... .................................. ................ 13 3.9.3 Posicionam Posicionamento ento de Cursor Cursor .................................. ................................................... .................................. ............................... .............. 14 3.9.4 Formatação de Data e Hora.................... Hora........... .................. .................. ................... ................... .................. .................. ............... ...... 15
3.10 3.11 3.12 3.13 3.14 3.15 3.16
Exec Interface Interface Block (EIB) .................................. ................................................... .................................. ............................... .............. 16 Compilaçã Compilaçãoo de Programa Programass ................................ ................................................. ................................... .................................. ................17 17 Conversac Conversacional ional x Pseudo-conve Pseudo-conversacio rsacional nal ................................ ................................................. ............................ ........... 17 Pseudo-con Pseudo-conversa versacional cional ................................. .................................................. .................................. .................................. ...................... ..... 17 Passagem Passagem de dados para para próxima próxima task................ task ................................. .................................. ............................... .............. 17 Pseudo-Conversacional – utilizando commarea.......... commarea. ................... ................... .................. .................. ............ ... 18 COBOL sob CICS – Restrições Restrições ................................. .................................................. .................................. ......................... ........ 19
4. UNIDADE 2 ......................................... .................... .......................................... .......................................... ................................. ............ 20 4.1 4.2 4.3 4.4 4.5 4.6 4.7 4.8
BASIC MAPPING MAPPING SUPPOR SUPPORT...................... T....................................... .................................. .................................. ......................... ........ 21 Definição Definição de mapas................. mapas.................................. .................................. .................................. .................................. ............................... .............. 21 Campos Campos 3270............. 3270.............................. .................................. .................................. .................................. .................................. ............................ ........... 21 Campos Campos formatad formatados os 3270........................ 3270......................................... .................................. .................................. ............................... .............. 22 Definindo Definindo um mapa.............................. mapa............................................... .................................. ................................... .................................. ................23 23 Compilaçã Compilaçãoo de um mapa.............. mapa............................... .................................. .................................. .................................. ......................... ........ 24 Mapas e Progra Programas...................... mas....................................... .................................. .................................. .................................. ......................... ........ 24 Enviando Enviando Mapas.............................. Mapas............................................... .................................. .................................. .................................. ...................... ..... 26
4.8.1 4.8.2
Send Send Map .................................. ................................................... .................................. .................................. .................................. ...................... ..... 26 Opções Opções ................................... .................................................... .................................. .................................. .................................. ......................... ........ 27
4.9 Recebendo Mapas – Receive Map....................... Map............. ................... .................. .................. .................. ................... ................. ....... 29 4.10 Manuseio Manuseio de teclas teclas e atributos atributos ................................ ................................................. .................................. ............................ ........... 30 ____________________________________________________________________________________________ Versão 1
2
Cics
5. UNIDADE 3 ......................................... .................... .......................................... .......................................... ................................. ............ 32 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8
Envio e recepçã recepçãoo de mapas mapas .............................. ............................................... .................................. .................................. ...................... ..... 32 Mapa simbólico – WORKING X LINKAGE............ LINKAGE... .................. ................... ................... .................. .................. ......... 32 Recebendo Mapa na LINKAGE SECTION................. SECTION........ ................... ................... .................. .................. ............... ...... 32 Send Map – Constantes e variáveis .................. ......... .................. .................. ................... ................... .................. .................. ......... 32 Receive Receive Map – Consta Constantes ntes e variá variáveis veis............... ................................. ................................... .................................. ..................... 33 Send Map – Funçõe Funçõess de controle controle ..................... ...................................... .................................. .................................. ...................... ..... 34 RECEIVE RECEIVE – tecla tecla e cursor cursor ................................. ................................................... ................................... .................................. ..................... 34 Edição Edição de campo camposs – Built Built in Function Function ................................. .................................................. .................................. ..................... 35
6. UNIDADE 4 ......................................... .................... .......................................... .......................................... ................................. ............ 35 6.1 Acessando Acessando VSAM................ VSAM ................................. .................................. .................................. ................................... .................................. ................36 36 6.2 VSAM – Recuperaç Recuperação ão Direta..................... Direta...................................... .................................. .................................. ............................ ........... 36 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.2.6
VSAM VSAM ESDS ................................. .................................................. .................................. ................................... .................................. ................ 36 VSAM VSAM RRDS.......................................... RRDS........................................................... .................................. .................................. ......................... ........ 37 VSAM VSAM KSDS KSDS ................................. .................................................. .................................. ................................... .................................. ................ 38 Campo Campo Chave Chave (RIDFLD)................ (RIDFLD)................................. .................................. ................................... .................................. ................ 38 Comando Comando para Leitura - READ.................. READ......... ................... ................... .................. .................. ................... ................... ........... 38 Condições Condições de exceção..................... exceção...................................... .................................. ................................... .................................. ................ 39
6.3 VSAM – Recuperaç Recuperação ão Seqüencial Seqüencial (BROWSE) (BROWSE) ................................. .................................................. ...................... ..... 41 6.3.1
Comandos Comandos para recuperação seqüencial seqüencial .................. ......... .................. .................. .................. ................... ................. ....... 41
7. UNIDADE 5 ......................................... .................... .......................................... .......................................... ................................. ............ 44 7.1 Atualizando Atualizando VSAM ................................. .................................................. .................................. .................................. ............................... .............. 44 7.2 Consideraç Considerações ões sobre integridade integridade ................................ ................................................. .................................. ............................ ........... 44 7.3 Controle Controle exclusivo exclusivo – VSAM x CICS................ CICS ................................. .................................. .................................. ...................... ..... 44 7.4 A necessidade necessidade de de proteção............ proteção............................. .................................. .................................. .................................. ......................... ........ 44 7.5 LUW e Backout Backout ................................. .................................................. ................................... ................................... .................................. ..................... 45 7.6 Atualização Atualização VSAM........................................... VSAM............................................................ .................................. .................................. ...................... ..... 45 7.7 Atualização Atualização de um registr registroo ........................... ............................................ .................................. .................................. ......................... ........ 45 7.8 Exclusão Exclusão de registro(s registro(s)) ......................... .......................................... .................................. ................................... .................................. ................46 46 7.9 Liberação Liberação de registro registro ................................. .................................................. .................................. .................................. ............................ ........... 47 7.10 Condições Condições de exceção.......... exceção........................... .................................. .................................. .................................. ............................... .............. 47 7.11 Codificação Codificação - atualizaç atualização............. ão.............................. .................................. .................................. .................................. ...................... ..... 48 7.12 Desenho Desenho Conversac Conversacional ional ................................ .................................................. ................................... .................................. ..................... 48 7.13 Desenho Desenho Pseudo-con Pseudo-conversa versacional.... cional..................... ................................... ................................... .................................. ..................... 49 7.14 Gravação Gravação de registros registros - WRITE WRITE ................................ ................................................. .................................. ......................... ........ 49
8. UNIDADE 6 ......................................... .................... .......................................... .......................................... ................................. ............ 52 8.1 Controle Controle de programas programas ..................... ...................................... ................................... ................................... .................................. ..................... 52 ____________________________________________________________________________________________ Versão 1
3
Cics 8.2 Link entre programas .............................................................................................. 52 8.3 Passagem de Dados Usando LINK .......................................................................... 52 8.4 Níveis lógicos - LINK ...............................................................................................53 8.5 XCTL entre programas............................................................................................ 54 8.6 Passagem de dados usando XCTL........................................................................... 54 8.7 Níveis lógicos - XCTL.............................................................................................. 55 8.8 Cuidados com a LINKAGE SECTION................................................................... 56 8.9 Call estático – COBOL............................................................................................. 56 8.10 Call dinâmico – COBOL...................................................................................... 57 8.11 Passagem de dados com INPUTMSG..................................................................58
9. UNIDADE 7............................................................................................... 59 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9
Addressability – uso da LINKAGE SECTION....................................................... 60 Addressability...........................................................................................................60 BLL Cells – OS/VS cobol ......................................................................................... 60 Opção SET – utiliza LINKAGE SECTION. ........................................................... 61 Tabelas em Assembler.............................................................................................. 62 Carga de tabelas COBOL II -LOAD.......................................................................63 Adquirindo memória – COBOL II.......................................................................... 64 Áreas maiores que 4096 – COBOL II...................................................................... 65 Acessando a Common Work Area (CWA).............................................................. 65
10. UNIDADE 8...............................................................................................66 10.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 10.10 10.11
Gravação de TD....................................................................................................69 Leitura de TD ....................................................................................................... 69 Exclusão de TD.....................................................................................................70 Condições de exceção - TD...................................................................................70 Temporary Storage - TS.......................................................................................71 Gravação de TS ....................................................................................................72 Leitura de TS....................................................................................................... 73 Exclusão de TS......................................................................................................74 Condições de exceção - TS.................................................................................... 75
11. UNIDADE 9...............................................................................................76 11.1
Manuseio de exceções ........................................................................................... 76
____________________________________________________________________________________________ Versão 1
4
Cics 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.10
Manuseio de condições de exceção....................................................................... 76 Opções para Manuseio de exceções...................................................................... 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 CEBR....................................................................................................................85
12. UNIDADE 10.............................................................................................86 12.1 12.2 12.3 12.4 12.5
CEDF – EXECUTION DIAGNOSTIC FACILITY............................................ 86 CEDF – alteração de argumentos........................................................................ 87 CEDF – alteração de response codes ................................................................... 88 CEDF – line number e offset................................................................................ 89 Facilidades do CEDF............................................................................................89
12.5.1 12.5.2 12.5.3 12.5.4 12.5.5 12.5.6 12.5.7
CEDF - hexadecimal .......................................................................................... 89 CEDF – WORKING STORAGE ........................................................................ 90 CEDF – Exec Interface Block............................................................................. 90 CEDF – Stop conditions ..................................................................................... 90 CEDF – Previous Display................................................................................... 90 CEDF – pseudo-conversação .............................................................................. 90 CEDF – solicitando Abend ................................................................................. 90
13. Bibliografia................................................................................................92
____________________________________________________________________________________________ Versão 1
5
Cics
1. Legenda dos Componentes Orientativos.
DICA
LEIA
TOME NOTA
ATENÇÃO
CURIOSIDADE
____________________________________________________________________________________________ Versão 1
6
Cics
2. Introdução
Este curso oferece uma visão geral de programação CICS, conceitos e comandos. Ao final deste curso você estará apto a desenvolver programas CICS.
____________________________________________________________________________________________ Versão 1
7
Cics
3. UNIDADE 1 3.1 Conceitos fundamentais e pseudo-conversação O que é CICS? Para que serve? Como desenvolver aplicações? Nessa primeira unidade veremos conceitos fundamentais para conhecermos um pouco do produto CICS, assim como a sintaxe dos comandos necessários para desenvolver uma aplicação COBOL/CICS. Também aprenderemos o conceito de programação Pseudo-conversacional, a forma mais moderna e vantajosa de desenvolver aplicativos sob CICS.
3.2 Customer Information Control System O CICS é um produto que foi criado em 1968 e transformado em programaproduto IBM em 1969, na sua primeira versão. Trata-se de um monitor transacional Online, ou seja, um produto que gerencia a execução de aplicações em tempo real. O CICS é um produto multi-usuário e multi-task (multi-tarefa), portanto permite a execução concorrente de inúmeras aplicações de uma grande quantidade de usuários. O CICS é composto de quatro áreas: PCT – tabela de controle de transações TCT – tabela de controle de terminais PPT – tabela de controle de programas FCT – tabela de controle de arquivos VSAM
3.3 A comunicação entre CICS Podemos ter uma única região de CICS se tivermos uma carga de trabalho pequena, mas caso a empresa tenha um alto número de usuários e muito processamento online a ser executado diariamente, podemos ter diversas regiões CICS trabalhando e distribuindo a carga através de facilidades de comunicação. 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 distribuído.
____________________________________________________________________________________________ Versão 1
8
Cics
3.4 Conceitos Dois conceitos fundamentais para trabalhar com o CICS: Transação: é o código de 1 a 4 caracteres definido na PCT (program control table) do CICS, e que representa o processo de uma aplicação. Uma transação sempre fica amarrada a um programa de aplicação, que é o processado quando a transação é executada. Quase sempre a transação trabalha associada a um terminal, já que o CICS é um produto que processa aplicações em tempo real. Esse terminal é denominado “terminal associado à transação”. Task: é a unidade de trabalho do CICS, ou para ser mais exato, é a execução de uma transação. Podemos ter diversos usuários executando a mesma transação em vários terminais. Cada execução é denominada Task.
3.5 Executando transações Quando o usuário chama uma transação a partir de um terminal conectado ao CICS, imediatamente é verificado se essa transação está cadastrada na tabela PCT. Se estiver, um bloco de controle denominado TCA (Task Control Area) é criado e vai existir durante a execução da task. Através da PCT o CICS sabe qual o programa associado à transação, e verifica se esse programa está cadastrado na tabela PPT (Processing Program Table). Se estiver tudo o.k., a task é executada.
3.6 Execução concorrente de tasks Como dissemos, para cada execução de transação (task), é criado um bloco de controle chamado TCA. Portanto, se tivermos várias tasks da mesma transação, teremos várias TCAs, uma para cada task. Entretanto, o CICS não carrega na memória várias cópias de um mesmo programa. Apenas uma cópia do programa é carregada e utilizada por todas as tasks. A WORKING-STORAGE tem que ter uma cópia para cada task, já que ela é utilizada com dados diferentes para cada usuário. A TCA é o ponto focal da task, já que todas as áreas são encadeadas a partir dela. Cada task terá também uma área denominada EIB (Exec Interface Block), que traz uma série de informações muito úteis para nossos programas.
3.7 Formato dos comandos EXEC CICS RECEIVE INTO(FLDA) LENGTH(W-LEN) END-EXEC
1
2
3
4
5
6
7
____________________________________________________________________________________________ Versão 1
9
Cics 1 -> KEYWORDS 2 -> FUNÇÃO 3 -> OPÇÃO 4 -> ARGUMENTO 5 -> OPÇÃO 6 -> ARGUMENTO 7 -> DELIMITADOR Um comando CICS é formado pela estrutura mostrada acima: -
As keywords EXEC CICS
-
A função solicitada (send, receive, ...)
-
As opções 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 Não constante
Name
COBOL data name Constantes permitidas
Label
Nome de parágrafo
Hhmmss
Pic s9(07) comp-3
Pointer-ref
BLL cell Usage pointer
O quadro acima mostra os diferentes tipos de dados no Cobol para cada tipo de argumento dos comandos CICS.
____________________________________________________________________________________________ Versão 1
10
Cics
3.9 Comandos básicos •
Comandos de terminal control
-
SEND
-
RECEIVE
•
Comandos de formatação de data e hora
-
ASKTIME
-
FORMATTIME
•
Comandos de término de programa
-
RETURN
3.9.1 Comando RECEIVE WORKING-STORAGE SECTION. 77 W-LEN PIC S9(04) COMP. 01 AREA-INPUT. 02 COD-TRANS PIC X(04). 02 FILLER PIC X(01). 02 SOLICIT PIC X(04). ..................... PROCEDURE DIVISION. MOVE 9 EXEC CICS
TO W-LEN RECEIVE
INTO(AREA-INPUT) LENGTH(W-LEN) END-EXEC.
O comando RECEIVE serve para trazer para a memória do CICS e do programa os dados que foram digitados pelo usuário no terminal. Os dados normalmente são recebidos na WORKING-STORAGE do programa.
____________________________________________________________________________________________ Versão 1
11
Cics A opção LENGTH especifica o tamanho máximo permitido para a recepção dos dados. A partir do COBOL II, o LENGTH deixou de ser necessário. O Cobol assume que o tamanho máximo dos dados é o tamanho da área especificada na opção INTO.
3.9.1.1 Condições de Exceção - RESP WORKING-STORAGE SECTION. 77 W-LEN PIC S9(04) COMP. 77 W-ERR PIC S9(08) COMP. 01 AREA-INPUT. 02 COD-TRANS PIC X(04). 02 FILLER PIC X(01). 02 SOLICIT PIC X(04). 01 MSG PIC X(80). .................... PROCEDURE DIVISION. MOVE 9 TO W-LEN EXEC CICS RECEIVE INTO (AREA-INPUT) LENGTH (W-LEN) RESP (W-ERR) END-EXEC. IF
W-ERR EQUAL DFHRESP(LENGERR) MOVE ‘MAX 9 CARACTERES’ TO MSG .....
A opção RESP nos comandos faz com que o CICS não manuseie as condições de exceção. O CICS simplesmente armazena no campo indicado o tipo de exceção e o programa deve verificar se o comando obteve sucesso ou não.
É EXTREMAMENTE IMPORTANTE VERIFICAR EXCEÇÕES EM COMANDOS CICS.
____________________________________________________________________________________________ Versão 1
12
Cics
3.9.2 Comando SEND WORKING-STORAGE SECTION. 77 W-LEN 77 W-ERR 03 AREA-INPUT. 04 COD-TRANS 02 FILLER 02 SOLICIT 01 MSG ................................ PROCEDURE DIVISION. MOVE 9 TO EXEC CICS RECEIVE
IF
PIC S9(04) COMP. PIC S9(08) COMP. PIC X(04). PIC X(01). PIC X(04). PIC X(80).
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 FROM (MSG) LENGTH (50) END-EXEC EXEC CICS
RETURN END-EXEC.
O comando SEND serve para enviar dados ao terminal do usuário. A informação é gravada na tela do terminal a partir do ponto onde o cursor ficou posicionado. O comando RETURN serve para terminar a aplicação e devolver o controle ao CICS.
____________________________________________________________________________________________ Versão 1
13
Cics
3.9.3 Posicionamento de Cursor WORKING-STORAGE SECTION. 77 W-LEN PIC S9(04) COMP. 77 W-ERR PIC S9(08) COMP. 01 AREA-INPUT. 02 COD-TRANS 02 FILLER 02 SOLICIT 01 MSG ...................... PROCEDURE DIVISION. MOVE 9 EXEC CICS RECEIVE
IF
PIC X(04). PIC X(01). PIC X(04). PIC X(80).
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.
O comando SEND CONTROL está sendo utilizado nesse momento para posicionar o cursor na primeira posição da linha 24 do terminal, já que normalmente uma tela de terminal tem 24 x 80 (1920 posições). Portanto, a mensagem enviada pelo comando SEND ficará posicionada na linha 24 do terminal do usuário.
____________________________________________________________________________________________ Versão 1
14
Cics
3.9.4 Formatação de Data e Hora WORKING-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 ....................
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).
PROCEDURE DIVISION. MOVE 9 EXEC CICS RECEIVE
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
____________________________________________________________________________________________ Versão 1
15
Cics EXEC CICS
EXEC 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.
A aplicação receberá o tipo de solicitação do usuário, processará conforme for a necessidade e devolverá a resposta ao terminal. Portanto, uma típica (embora simples) aplicação CICS: recebe a solicitação, processa, devolve a resposta para o usuário 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 preferência do usuário.
Datesep: faz a separação com ‘/’ da data. Se colocarmos argumento DATESEP (‘.’) para a separação, formatará a data dd.mm.yyyy
3.10 Exec Interface Block (EIB) EIBTIME EIBDATE EIBCPOSN EIBAID EIBCALEN EIBTRNID EIBTRMID EIBFN EIBRESP . .
Hora Data (juliano) Posição do cursor Tecla pressionada (enter, pf, ...) Tamanho da commarea Código da transação Terminal associado Última função executada Response code
____________________________________________________________________________________________ Versão 1
16
Cics O EIB (Exec Interface Block) é uma área que fica na LINKAGE SECTION de nosso programa e traz uma série de informações que podem e devem ser utilizadas a qualquer momento para facilitar nosso trabalho. Acima, estão algumas das informações que constam do EIB.
3.11 Compilação de Programas Para preparar um programa COBOL/CICS, são necessárias três fases na PROCEDURE de compilação: -
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 não reconhece EXEC CICS. O translator também inclui algumas áreas de trabalho na WORKING e na LINKAGE, entre elas o EIB;
-
Compilador Cobol: para compilar o programa;
-
Linkage Editor: transforma em módulo executável e cataloga em uma biblioteca de programas.
3.12 Conversacional x Pseudo-conversacional Existem duas formas de programação sob CICS: -
Conversacional: é uma técnica antiga que praticamente não está sendo utilizada, uma vez que consome muitos recursos do sistema, e vai contra a filosofia do CICS, que é de aplicações que processem rapidamente e consumam poucos recursos. Essa técnica consiste em processar os dados recebidos do usuário, devolver a resposta, e aguardar para receber novas solicitações.
-
Pseudo-Conversacional: é a técnica mais utilizada, mais moderna e mais eficiente de programação. A aplicação recebe a solicitação do usuário, processa, envia a resposta e termina, liberando praticamente todos os recursos. Ao terminar, a aplicação encadeia uma nova execução da transação, como veremos a seguir.
3.13 Pseudo-conversacional Após enviar a resposta ao usuário (SEND), o programa termina através do comando RETURN, encadeando uma nova execução da mesma transação – TRANSID (‘FAT1’). Isso significa que a task terminará, os recursos serão liberados, mas quando o usuário teclar ENTER, PFs, PAs, ou CLEAR, uma nova task da mesma transação será executada. Portanto, o usuário terá a sensação de uma conversação, mas estará ocorrendo uma pseudo-conversação.
3.14 Passagem de dados para próxima task Para enviar dados para a próxima task, utilizamos uma área de comunicação chamada COMMAREA. Essa área será passada através de uma área de WORKING-STORAGE no programa e pode ter qualquer nome. Na próxima ____________________________________________________________________________________________ Versão 1
17
Cics execução, os dados passados serão 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 recepção na DFHCOMMAREA. Na primeira execução da transação não podemos utilizar a DFHCOMMAREA, pois ela ainda não existe. Ela existirá a partir da segunda execução, com os dados recebidos. Como saberemos se estamos processando a transação pela primeira vez? A resposta para esta importante questão está em um campo do EIB denominado EIBCALEN (Commarea Length). Na primeira execução da transação, o EIBCALEN estará com valor zero, e nas demais execuções estará maior que zero.
3.15 Pseudo-Conversacional – utilizando commarea IDENTIFICATION 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 execução, não existe a DFHCOMMAREA, portanto, o EIBCALEN estará zerado, e passaremos dados através de uma área de WORKINGSTORAGE. A partir da segunda execução, teremos DFHCOMMAREA, portanto podemos utilizar os dados recebidos na DFHCOMMAREA. Dessa forma conseguimos comunicação total entre as tasks da mesma transação executadas pelo usuário.
____________________________________________________________________________________________ Versão 1
18
Cics COMMAREA x DFHCOMMAREA A chave da pseudo-conversação esta na Communication Area. Na primeira execução EIBCALEN zero utilizar Commarea na WORKING-STORAGE para passagem de dados. Nas demais execuções EIBCALEN maior que zero dados recebidos em LINKAGE SECTION na DFHCOMMAREA.
3.16 COBOL sob CICS – Restrições IDENTIFICATION 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 não utilizamos INPUT-OUTPUT SECTION e FILE SECTION. Quem gerencia os arquivos é o CICS, e não o programa de aplicação. 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
____________________________________________________________________________________________ Versão 1
19
Cics Sob CICS não podemos utilizar instruções COBOL que solicitem serviço direto ao Sistema Operacional. Após executarmos uma transação no CICS, caso tenha ocorrido alguma modificação no programa de aplicação e ele tenha sido recompilado, teremos que informar ao CICS que uma nova cópia deve ser carregada na memória. Para tanto, utilizamos a transação de Master Terminal – CEMT. CEMT SET PROG(name) NEWCOPY OU CEMT SET PROG(name) PHASEIN
4. UNIDADE 2 ____________________________________________________________________________________________ Versão 1
20
Cics
4.1 BASIC MAPPING SUPPORT Nessa unidade veremos mapas, que são telas de terminal compostas de diversos campos de dados formatados, isto é, com posição fixa na tela. Através dos mapas torna-se muito mais simples trabalharmos com apresentação de dados ao usuário através de nossos programas de aplicação. 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 variáveis
-
interface muito mais atrativa para o usuário
Um mapa normalmente é composto por campos constantes e variáveis, que fazem uma interface bastante atrativa para o usuário final. Cada campo tem atributos próprios, visando facilitar o trabalho do usuário.
4.2 Definição de mapas Para decidir como serão os mapas (telas de terminal) de determinada aplicação CICS, é necessário que o analista responsável pela aplicação faça uma reunião com os usuários finais, a fim de saber quais são suas necessidades de informações. A partir desse ponto, será necessário fazer a definição dos mapas seguida de sua geração.
4.3 Campos 3270 1 2 3 4 5 6 . . . . 24
NOME: ENDEREÇO: CPF: NO. CONTA:
stopper (delimitador)
Um mapa é composto por campos formatados 3270.
____________________________________________________________________________________________ Versão 1
21
Cics Cada campo tem uma posição fixa no buffer do terminal (tela), e é delimitado por atributos. Um atributo ocupa o espaço de um byte na tela do terminal, mas seu conteúdo não é visível, já que estamos tratando do controle das características do campo.
4.4 Campos formatados 3270 campos Posic. cursor protegidos
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 variáveis, e cada campo tem seu atributo. Os campos constantes geralmente tem atributo protegido. Os campos variáveis, quando servirem para entrada de dados, devem ter atributo desprotegido. Os campos numéricos necessitam ter atributo numérico, para impedir que o usuário digite caracteres não numéricos. Os delimitadores são campos de 1 byte, compostos apenas pelo atributo “askip”, e servem para delimitar o tamanho do campo onde o usuário digitará informações. ATRIBUTOS: -
UNPROTECTED/PROTECTED (UNPROT/PROT): usuário pode ou não digitar informações.
-
ASKIP: campo protegido e o cursor não pode ser posicionado nele.
-
NUM: dependendo do hardware, permite ao usuário digitar apenas dados numéricos.
-
NORMAL/BRIGHT/DARK (NO/BRT/DRK): campo com intensidade normal, brilhante ou invisível.
____________________________________________________________________________________________ Versão 1
22
Cics -
MDT ON/OFF: se o MDT (Modified Data Tag) de um campo estiver ligado, o conteúdo desse campo será transmitido para o programa. Se estiver desligado, o conteúdo não será transmitido para o pgm.
4.5 Definindo um mapa TESTMS1 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 vários MAPAS, mas muitas vezes contém apenas 1 mapa. Não podemos definir um MAPA sem definir também o MAPSET. Para fazer a definição é necessário utilizarmos as macros BMS que o CICS fornece. As macros são: -
DFHMSD: define o mapset;
-
DFHMDI: define o mapa;
-
DFHMDF: define campos no mapa.
O exemplo acima mostra a definição de um MAPSET chamado TESTMS1. Nesse MAPSET temos apenas um MAPA definido – TESTMP. Em seguida, temos as definições 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.
____________________________________________________________________________________________ Versão 1
23
Cics Podemos utilizar parâmetros para definir a picture de edição do campo e também para alinhamento e valorização de caracteres não preenchidos. PICOUT=‘99’ demonstrará para o usuário o campo com esta edição. JUSTIFY=(LEFT,BLANK) ou JUSTIFY=(RIGHT,ZERO) alinhará o campo à esquerda ou à direita e valorizará os caracteres não preenchidos com brancos ou zeros.
Se quisermos inserir neste Mapset mais um Mapa devemos colocar outro DFHMDI antes do DFHMSD TYPE=FINAL.
4.6 Compilação de um mapa Após definir o Mapset/Mapa, temos que fazer sua geração. Isso é feito através da compilação do Mapset, através de uma PROCEDURE. Essa compilação é feita em duas fases: -
1ª fase: compilação e linkedição resultando em um módulo executável assembler, que é catalogado em uma biblioteca de programas. Esse módulo é chamado de Mapa Físico, composto pelas informações definidas nas macros. Assim como os programas, os mapas físicos dever ser definidos na PPT do CICS;
-
2ª fase: compilação das macros, resultando no Mapa Simbólico, que na verdade é o Copybook Cobol referenciando os campos que serão utilizados no programa.
4.7 Mapas e Programas Durante a compilação do programa, o COPY ‘nome-do-mapset’ colocado na WORKING-STORAGE expande o Mapa Simbólico, para podermos referenciar os campos do mapa. Durante a execução do programa, quando é emitido um comando para receber ou enviar um mapa, o Mapa físico é executado.
____________________________________________________________________________________________ Versão 1
24
Cics A seguir veremos o resultado da expansão 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 Simbólico 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). 01
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 X’00’ OU X’80’ A: ATRIBUTO O : OUTPUT
____________________________________________________________________________________________ Versão 1
25
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 conteúdo digitado pelo usuário em uma operação de Input;
-
NOMEF: (F=FLAG) em uma operação de Input, esse campo poderá ter o conteúdo X’00’ ou então X’80’ se o usuário digitar informações no campo e em seguida apagar essa informação utilizando a tecla ERASE EOF;
-
NOMEI: (I=INPUT) armazena o conteúdo pelo usuário no campo;
-
NOMEA: (A=ATRIBUTO) é o campo que podemos alterar o atributo default de um campo em uma operação de Output;
-
NOMEO: (O=OUTPUT) contém a informação que queremos enviar para o terminal do usuário.
1 – Limpar a tela não é movimentar spaces. 2 – Movimentar low-values é manter os campos da tela. 3 – Para ligar MDT atributo = FSET
4.8 Enviando Mapas 4.8.1 Send Map O comando SEND MAP é utilizado para enviar um mapa ao terminal do usuário. Como podemos ter mais de um mapa em um mapset, temos que informar o nome do mapa e também do mapset. O SEND MAP pega os dados do mapa simbólico (WORKING), agrega ao mapa físico e envia para o terminal do usuário. EXEC CICS SEND
MAP(‘TESTMP’) MAPSET(‘TESTMS1’) END-EXEC.
____________________________________________________________________________________________ Versão 1
26
Cics
4.8.2 Opções As opções MAPONLY e DATAONLY servem para economizar transmissão de dados durante uma operação de envio de mapas. -
MAPONLY faz com que o CICS envie para o terminal do usuário apenas o mapa físico, ignorando o conteúdo do mapa simbólico. Por exemplo, o mapa enviado durante a primeira execução de uma transação (mapa limpo);
-
DATAONLY faz com que o CICS envie para o terminal apenas os dados do mapa simbólico, fazendo um “refresh” no terminal do usuário, já que o mapa físico foi enviado na primeira execução da transação.
1) EXEC CICS SEND
MAP(‘TESTMP’) MAPSET(‘TESTMS1’) MAPONLY END-EXEC.
No exemplo acima estamos enviando apenas o mapa físico, não estamos enviando dados. 2) EXEC CICS SEND
MAP(‘TESTMP’) MAPSET(‘TESTMS1’) DATAONLY END-EXEC.
Já neste exemplo 2 estamos enviando apenas o mapa simbólico. 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.
____________________________________________________________________________________________ Versão 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 usuário durante a primeira execução da transação (1ª fase da pseudo-conversação). A opção ERASE serve para limpar a tela do terminal antes de enviar o mapa. A opção FREEKB faz com que o teclado do terminal seja liberado logo após o envio do mapa. A opção ALARM faz som quando starta a tela. Nesse exemplo a opção MAPONLY não pode ser utilizada pois queremos que o conteúdo do campo MSGO seja enviado ao usuário juntamente com o mapa físico.
Para posicionar o cursor no meio do programa, devemos mover (–1) para o campo L e colocar o parâmetro CURSOR no comando SEND.
Quando for especificado o parâmetro CURSOR no comando SEND, e no mapa existe um campo com atributo IC, prevalecerá o posicionamento especificado no SEND.
____________________________________________________________________________________________ Versão 1
28
Cics
4.9 Recebendo Mapas – Receive Map IDENTIFICATION 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 condição de exceção MAPFAIL durante um RECEIVE MAP. Ela pode ocorrer nas seguinte situações: -
tela do terminal em branco (limpa) no momento do RECEIVE MAP ( tamanho 0)
-
tela do terminal com um mapa, porém nenhum campo com MDT ON (tamanho 0)
-
mapa com campos MDT ON, porém o usuário tecla CLEAR ou PAs
-
conteúdo da tela do terminal composto de dados não formatados no momento do RECEIVE MAP.
____________________________________________________________________________________________ Versão 1
29
Cics
4.10 Manuseio de teclas e atributos Para podermos alterar atributos e testar teclas em um programa, o CICS fornece dois copybooks que podem ser incluídos na W ORKING-STORAGE: -
DFHBMSCA: contém uma série de campos com todas as combinações possíveis de atributos de campos. Dessa forma, podemos alterar o atributo default movendo uma das combinações para o campo com sufixo A;
-
DFHAID: contém uma lista com teclas (ENTER, PFs, PAs, CLEAR,...) para podermos testar no programa.
Mostraremos abaixo um exemplo de codificação. Note que o primeiro teste feito no programa é o da tecla PF3. Se essa tecla for acionada, a pseudoconversação termina. Em seguida, está sendo testado se a transação está sendo executada pela primeira vez. Em caso positivo, um mapa limpo (MAPONLY) está sendo enviado ao terminal do usuário e a task termina encadeando uma pseudo-conversação e passando uma commarea. Se não for a primeira execução da transação, é feito um RECEIVE MAP para receber os dados digitados pelo usuário. No RECEIVE MAP, se ocorrer um MAPFAIL, uma mensagem informativa é enviada ao usuário através do SEND MAP, e a task termina encadeando pseudo-conversação. Caso o MAPFAIL não ocorra, o programa executará a função solicitada e terminará enviando o mapa com uma mensagem de execução 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
PIC
X(10).
PROCEDURE DIVISION. IF
EIBAID EXEC CICS
EQUAL DFHPF3 RETURN END-EXEC.
____________________________________________________________________________________________ Versão 1
30
Cics IF
EIBCALEN EXEC CICS
EQUAL SEND
ZEROS MAP (‘TESTMP’) MAPSET (‘TESTMS1’) MAPONLY ERASE FREEKB END-EXEC
EXEC CICS
RETURN
TRANSID (EIBTRNID) COMMAREA (COM-WORK) END-EXEC.
EXEC CICS
IF
W-ERR MOVE MOVE EXEC CICS
EXEC CICS
RECEIVE
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.
*PROCESSA FUNÇÃO SOLICITADA MOVE LOW-VALUES TO TESTMPO MOVE ‘FUNÇÃO COMPLETADA COM SUCESSO’ TO MSGO EXEC CICS SEND MAP (‘TESTMP’) MAPSET (‘TESTMS1’) FROM (TESTMPO) DATAONLY FREEKB END-EXEC EXEC CICS RETURN END-EXEC.
____________________________________________________________________________________________ Versão 1
31
Cics
5. UNIDADE 3 5.1 Envio e recepção de mapas Essa unidade mostrará outras características de mapas BMS, bem como outras opções no envio e recepção de mapas. É um complemento do que foi visto na unidade 2.
5.2 Mapa simbólico – WORKING X LINKAGE O mapa simbólico (Copybook) Cobol geralmente é copiado na WORKINGSTORAGE do programa. Mas nada impede que seja copiado na LINKAGE SECTION. Para isso devemos saber que o endereçamento (addressability) de áreas na LINKAGE é responsabilidade do programa.
5.3 Recebendo Mapa na LINKAGE SECTION Quando utilizamos a LINKAGE SECTION para copiar o mapa simbólico (copybook cobol), devemos utilizar a opção SET ao invés de INTO no comando RECEIVE MAP. Com SET, o CICS adquire a área de memória, armazena as informações e fornece o endereço da área para o programa endereçar 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 variáveis Quando utilizamos constantes para os argumentos das opções MAP e MAPSET em um comando SEND MAP, não é necessário especificar a opção FROM. Se utilizarmos variáveis para as opções MAP e MAPSET, temos que especificar a opção FROM. ____________________________________________________________________________________________ Versão 1
32
Cics Se desejamos codificar apenas a opção MAP no comando SEND MAP, devemos ter o mapa e o mapset definidos com o mesmo nome.
MAPA SIMBÓLICO SEND
MAP(‘TESTMP’)
TESTMPO
MAPSET(‘TESTMS1’)
MOVE
‘TESTMP’
TO
W-MAPA.
MOVE
‘TESTMS1’
TO
W-MAPSET.
SEND
MAP(W-MAPA)
TESTMPO
MAPSET(W-MAPSET) FROM(TESTMPO)
SEND
MAP(‘TESTMS1’)
TESTMPO
5.5 Receive Map – Constantes e variáveis Quando utilizamos constantes para os argumentos das opções MAP e MAPSET em um comando RECEIVE MAP, não é necessário especificar a opção INTO. Se utilizarmos variáveis para as opções MAP e MAPSET, temos que especificar a opção INTO. Se desejamos codificar apenas a opção MAP no comando RECEIVE MAP, devemos ter o mapa e o mapset definidos com o mesmo nome. MAPA SIMBÓLICO RECEIVE MAP(‘TESTMP’)
TESTMPI
MAPSET(‘TESTMS1’) MOVE
‘TESTMP’
TO
W-MAPA.
MOVE
‘TESTMS1’
TO
W-MAPSET.
TESTMPI
RECEIVE MAP(W-MAPA) MAPSET(W-MAPSET) ____________________________________________________________________________________________ Versão 1
33
Cics INTO(TESTMPI)
RECEIVE MAP(‘TESTMS1’)
TESTMPI
5.6 Send Map – Funções de controle SEND
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 destrava o teclado do terminal
-
ALARM soa o alarme ao enviar dados
-
FRSET desliga o MDT de todos os campos
-
PRINT quando o terminal associado é uma impressora
As opções de controle de output mostradas acima em um comando SEND MAP também podem ser emitidas através do comando SEND CONTROL.
5.7 RECEIVE – tecla e cursor Em uma operação de RECEIVE, o CICS informa ao programa qual a posição do cursor na tela e também qual tecla foi pressionada (EIBCPOSN e EIBAID). ____________________________________________________________________________________________ Versão 1
34
Cics Assim, podemos trabalhar com barras de ações e também com teclas funcionais, por exemplo PF3 = FIM, PF8 = AVANÇA TELA).
5.8 Edição de campos – Built in Function Podemos em algumas ocasiões permitir ao usuário que digite dados com caracteres especiais como ‘$” ou “.” ou ainda “,”. Entretanto, se desejarmos realizar operações aritméticas utilizando esses campos, devemos retirar os caracteres não numéricos. O comando BIF DEEDIT pode ser utilizado para retirar os caracteres especiais de um campo, preparando-o para operações aritméticas. A opção LENGTH não é necessária para programas COBOL II. EXEC CICS
BIF
DEEDIT FIELD
(AMOUNT)
LENGTH (9) END-EXEC.
Podemos editar campos na tela, basta em sua definição acrescentar o parâmetro PICOUT ( por exemplo, = Z.ZZ9,99) e a saída do campo já ficará editada.
6. UNIDADE 4
____________________________________________________________________________________________ Versão 1
35
Cics
6.1 Acessando VSAM Nessa unidade veremos como o CICS trabalha com o método de acesso VSAM (Virtual Storage Access Method), quais os tipos de arquivos VSAM suportados, e qual o procedimento para fazer acesso direto e também seqüencial (Browse). Os arquivos VSAM são definidos para o CICS através da tabela FCT (File Control Table). Nessa tabela temos toda informação referente ao arquivo, inclusive os tipos de operação que poderão ser realizadas. Um programa Cobol/CICS não tem definição física do arquivo que será acessado, e também não faz abertura ou fechamento dos arquivos. Os arquivos geralmente são 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 – Recuperação Direta 6.2.1 VSAM ESDS registro
ESDS – ENTRY SEQUENCED DATA SET O ESDS é o tipo de arquivo VSAM com estrutura seqüencial. Operações que podem ser realizadas: -
Leitura direta através do RBA (Relative Byte Address) ou seqüencial;
-
Gravação sempre após o último registro existente;
-
Atualização de registros, sem alteração de seu tamanho;
-
Não podemos excluir registros;
-
A inclusão é seqüencial.
____________________________________________________________________________________________ Versão 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 início do arquivo, como por exemplo, olhando a figura acima, concluímos 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 série de “slots” (gavetas) de tamanho fixo, uma para cada registro. Operações que podem ser realizadas: -
Leitura direta através do RRN (Relative Record Number) ou seqüencial;
-
Gravação de registro no seu respectivo “slot”;
-
Atualização de registros;
-
Exclusão de registros.
____________________________________________________________________________________________ Versão 1
37
Cics
6.2.3 VSAM KSDS 28
15
22
34
41
KSDS – KEY SEQUENCED DATA SET O KSDS é o tipo de arquivo VSAM com estrutura de índices. Operações que podem ser realizadas: -
Leitura direta através da chave do registro ou seqüencial;
-
Gravação de registros;
-
Atualização de registros;
-
Exclusão de registros.
É o tipo de arquivo mais utilizado sob CICS.
6.2.4 Campo Chave (RIDFLD) Identificação do registro – RIDFLD. Para arquivos KSDS o RIDFLD deve conter a chave do registro a ser acessado. Podemos também acessar registros por pedaço de chave (Chave parcial = KEYLENGTH). Para os arquivos ESDS o RIDFLD deve ser um campo de quatro bytes em formato binário (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 binário (s9(08) comp) e deve conter o RRN do registro a ser acessado.
6.2.5 Comando para Leitura - READ Para programas COBOL II não é necessário utilizar a opção LENGTH se os registros tiverem tamanho fixo.
Se a leitura for feita utilizando chave parcial, além de KEYLENGTH devemos especificar a opção GENERIC.
____________________________________________________________________________________________ Versão 1
38
Cics EXEC CICS
READ
FILE
(‘name’)
INTO
(data-area)
RIDFLD (data-area)
[RBA | RRB]
[LENGTH (data-area)] [GENERIC] [KEYLENGTH(data-value)] [GTEQ | EQUAL]
END-EXEC.
WORKING-STORAGE SECTION. 05
W-CHAVE
PIC X(05).
05
W-REG
PIC X(80).
... PROCEDURE DIVISION. ... MOVE
‘00010’
EXEC CICS
READ
TO
W-CHAVE
FILE
(‘ARQ1’)
INTO
(W-REG)
RIDFLD (W-CHAVE) END-EXEC. O exemplo mostra a leitura do registro chave 00010 de um arquivo KSDS.
6.2.6 Condições de exceção Sempre devemos utilizar a opção RESP nos comandos de READ. Abaixo algumas condições de exceção: -
NOTFND: registro não encontrado em leitura direta;
-
ENDFILE: fim de arquivo em pesquisa seqüencial (veremos no próximo tópico);
-
INVREQ: solicitação inválida;
____________________________________________________________________________________________ Versão 1
39
Cics -
FILENOTFOUND: o arquivo não 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 conseqüência de outro problema.
6.2.6.1 Manuseando condições de exceção Utilizando a opção RESP, o CICS não toma nenhuma ação se uma condição de exceção ocorrer. Desse modo, nosso programa deve testar o conteúdo do campo utilizado no RESP e tomar as providências cabíveis.
WORKING-STORAGE SECTION. 05
W-CHAVE
PIC X(05).
05
W-ERR
PIC S9(08) COMP.
... PROCEDURE DIVISION. ... MOVE
‘00022’
EXEC CICS
READ
TO
W-CHAVE
FILE
(‘ARQ1’)
INTO
(W-REG)
RIDFLD (W-CHAVE) RESP
(W-ERR)
END-EXEC. IF
W-ERR
EQUAL
DFHRESP(NOTFND)
.... ELSE IF
W-ERR
NOT EQUAL
DFHRESP(NORMAL)
... ____________________________________________________________________________________________ Versão 1
40
Cics
6.3 VSAM – Recuperação Seqüencial (BROWSE) Para fazer pesquisa seqüencial (Browse) em um arquivo, é necessário posicionar o ponteiro de leitura na chave desejada através do comando STARTBR, e em seguida fazer a leitura seqüencial dos registros (READNEXT ou READPREV). Para terminar o browse emitir o comando ENDBR.
6.3.1 Comandos para recuperação seqüencial 6.3.1.1 Posicionando chave - STARTBR O comando STARTBR é utilizado para posicionar a chave no registro desejado (estabelecer posição). O Default para o STARTBR é GTEQ, isto é, se a chave desejada não existir, o posicionamento será feito no registro seguinte.
Esta leitura seqüencial é muito utilizada em programas de paginação.
EXEC CICS
STARTBR
FILE
(name)
RIDFLD (data-area) [RBA | RRN] [GENERIC] [KEYLENGTH(data-value) ] [GTEQ | EQUAL]
END-EXEC.
6.3.1.2 Lendo seqüencialmente - READNEXT Após estabelecer posição com o STARTBR, podemos começar e ler o arquivo seqüencialmente em ordem ascendente de chave através do comando READNEXT.
____________________________________________________________________________________________ Versão 1
41
Cics EXEC CICS
READNEXT
FILE
(name)
INTO
(data-area)
RIDFLD (data-area)
[RBA | RRN]
[LENGTH (data-area)]
END-EXEC. 6.3.1.3 Lendo seqüencialmente - READPREV Se desejarmos ler o arquivo seqüencialmente em ordem descendente de chave, podemos utilizar o comando READPREV. EXEC CICS
READPREV
FILE
(name)
INTO
(data-area)
RIDFLD (data-area)
[RBA | RRN]
[LENGTH (data-area)]
END-EXEC . 6.3.1.4 Alterando posicionamento da chaves - RESETBR Se durante uma operação de Browse desejarmos reposicionar o ponteiro de leitura para outra chave, podemos utilizar o comando RESETBR, ou então mover a nova chave para o campo RIDFLD e utilizar o READNEXT/READPREV.
EXEC CICS
RESETBR
FILE
(name)
INTO
(data-area)
RIDFLD (data-area)
[RBA | RRN]
[GENERIC] [KEYLENGTH(data-value)] [GTEQ | EQUAL]
END-EXEC .
____________________________________________________________________________________________ Versão 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 condição de exceção ENDFILE que ocorrerá após a leitura do último registro com READNEXT ou após a leitura do primeiro registro com o READPREV.
____________________________________________________________________________________________ Versão 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 é necessário para atualizar arquivos VSAM. Conheceremos também mecanismos CICS e VSAM para garantir a integridade de nossos dados.
7.2 Considerações sobre integridade Como o CICS é um produto multi-usuário e multi-tarefa, tem a obrigação de fornecer mecanismos de controle de integridade de dados. Temos que ter proteção para casos de interrupções não programadas, tais como erros de operação, abends de tasks, falta de energia, e até mesmos fatores físicos como por exemplo, um incêndio. Além disso, temos a necessidade de proteção de recursos, para que vários usuários não consigam atualizar o mesmo registro em determinado instante.
7.3 Controle exclusivo – VSAM x CICS Para 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 contém o registro atualizado fica “preso” para essa task até a atualização terminar. Essa proteção funciona de forma automática.
-
Controle exclusivo do CICS: é uma extensão da proteção mostrada acima. Após atualizar, o VSAM libera o CI, mas o CICS “prende” o registro até o fim da LUW. Essa proteção funciona apenas para arquivos definidos como recuperáveis.
7.4 A necessidade de proteção Imaginemos uma transação que vai atualizar o arquivo de caderneta de poupança subtraindo R$ 500. Em seguida, atualizará o arquivo de conta corrente adicionando os R$ 500. Como os dois arquivos são logicamente relacionados, temos que ter a garantia de atualização de ambos ou no caso de falha, que nenhum seja atualizado. Nesse caso, ambos devem ser definidos como arquivos recuperáveis. Se o primeiro sofrer atualização e ocorrer alguma falha na atualização do segundo, o CICS automaticamente deve desfazer a atualização para que ambos fiquem sincronizados. Esse processo de desfazer a atualização é chamado BACKOUT.
____________________________________________________________________________________________ Versão 1
44
Cics
7.5 LUW e Backout Para garantir a integridade de arquivos recuperáveis, o CICS trabalha com um conceito denominado Logical Unit of Work (LUW). Uma LUW sempre tem início quando uma task ter a intenção de atualizar um arquivo recuperável ( 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 efetivação de todas as atualizações (Commit). Se ocorrer alguma falha antes do término da LUW, o CICS fará um backout de todos os arquivos recuperáveis que foram atualizados.
O comando EXEC CICS SYNCPOINT END-EXEC efetiva atualizações nos VSAMs e o comando EXEC CICS SYNCPOINT ROLLBACK END-EXEC desfaz todas as atualizações do programa
7.6 Atualização VSAM Para atualizar um arquivo, adicionamos a opção UPDATE ao comando READ. Quando fazemos o READ UPDATE, ocorre o controle exclusivo do VSAM. Esse controle permanece até: -
REWRITE: atualização do registro;
-
DELETE: exclusão do registro;
-
UNLOCK: cancelamento da intenção de atualização;
-
FIM DA TASK.
7.7 Atualização de um registro O comando REWRITE faz a atualização de um registro. O campo chave não pode ser alterado.
____________________________________________________________________________________________ Versão 1
45
Cics EXEC CICS
REWRITE REWRITE
FILE
(name)
FROM
(data-area)
[LENGTH (data-value)]
END-EXEC.
Antes do comando REWRITE é obrigatório utilizar o comando READ UPDATE: EXEC CICS READ FILE(‘ARQ1’) INTO(W-REG) RIDFLD(W-CHAVE) UPDATE
END-EXEC.
7.8 Exclusão de registro(s) O comando DELETE exclui um registro regi stro do arquivo. O campo chave (RIDFLD) não é necessário se ocorrer um READ UPDATE antes do DELETE. Podemos fazer uma exclusão genérica, informando as opções KEYLENGTH e GENERIC. Nesse caso, se especificarmos NUMREC, o CICS informará quantos registros foram excluídos na operação. EXEC CICS
DELETE
FILE
(name)
[RIDFLD (data-area)] [KEYLENGTH (data-value)] [GENERIC | NUMREC (data-area)] [RBA | RRN]
END-EXEC.
____________________________________________________________________________________________ Versão 1
46
Cics
Apenas os arquivos KSDS e RRDS podem ter registros excluídos.
7.9 Liberação de registro Se decidirmos não fazer a atualização após o comando READ UPDATE, podemos liberar o controle exclusivo através do comando UNLOCK. EXEC CICS
UNLOCK
FILE
(name)
END-EXEC.
7.10 Condições de exceção As condições de exceção mais freqüentes são: -
NOSPACE: ao fazer a atualização de um registro de tamanho variável, aumentamos seu tamanho e não há espaço para regravação;
-
INVREQ: solicitação inválida. 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 não se enquadra nas outras exceções.
No caso da condição de exceção ILLOGIC, podemos utilizar o campo EIBRCODE para auxiliar na depuração 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
____________________________________________________________________________________________ Versão 1
47
Cics
7.11 Codificação - atualização Abaixo temos um exemplo de codificação de uma leitura para atualização seguida de regravação do registro atualizado. MOVE
‘00003’
EXEC CICS
TO
W-CHAVE.
READ
FILE
(‘ARQ1’)
INTO
(W-REG)
RIDFLD (W-CHAVE) UPDATE RESP
(W-ERR)
END-EXEC. IF
W-ERR
NOT EQUAL
DFHRESP(NORMAL)
PERFORM ROT-ERRO.
*MOVE ALTERAÇÕES PARA ARQUIVO EXEC CICS
REWRITE
FILE
(‘ARQ1’)
FROM
(W-REG)
RESP
(W-ERR)
END-EXEC. IF
W-ERR
NOT EQUAL
DFHRESP(NORMAL)
PERFORM ROT-ERRO.
7.12 Desenho Conversacional O controle exclusivo do VSAM – que “prende” todo o CI para essa task – só terminará quando ocorrer o comando comando REWRITE. O controle exclusivo, nesse caso, vai ter a duração do tempo que o usuário levar entre receber as informações em seu terminal, pensar nos dados que serão alterados, digitar as alterações e pressionar Enter. Enquanto isso, qualquer outra task desejando atualizar um registro do mesmo CI ficará em wait. (esperando).
____________________________________________________________________________________________ Versão 1
48
Cics
Este modelo de desenho conversacional não é recomendado, pois o tempo de espera para outras task depende de um usuário. E se por exemplo, ele demorar 10 minutos para enviar suas alterações?
7.13 Desenho Pseudo-conversacional Para resolver o problema mostrado no item acima, temos a técnica pseudoconversacional. A leitura para enviar os dados ao usuário não prende nenhum recurso. Se o tempo de ação do usuário for lento, ninguém será prejudicado. O controle exclusivo somente ocorrerá após o programa receber as alterações digitadas, e terá uma duração muito curta. Mas e se o registro for alterado entre o tempo decorrido após 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 alterações. Caso contrário, devemos tomar alguma providência.
Onde salvar a imagem do registro? Que tal na COMMAREA? Ou então em TS (como veremos adiante).
7.14 Gravação de registros - WRITE Para 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 através do comando WRITE. ____________________________________________________________________________________________ Versão 1
49
Cics EXEC CICS
WRITE
FILE
(name)
FROM
(data-area)
RIDFLD (data-area) [LENGTH (data-value)] [RBA | RRN] [MASSINSERT] END-EXEC. O comando WRITE adiciona registros em um arquivo VSAM. A opção MASSINSERT serve para otimizar uma inclusão de registros em massa, desde que estejam em ordem ascendente de chave. Nesse caso, o MASSINTERT deve ser codificado em cada registro. Quando a seqüência de inclusões terminar, devemos emitir um comando UNLOCK. No caso de inclusão de arquivo ESDS, o campos RIDFLD será alimentado pelo CICS com o RBA do registro incluído.
MOVE
‘00003’
TO
W-CHAVE.
MOVE
‘PHEYSEY’
TO
REG-NOME.
MOVE
‘SÃO PAULO’ TO
REG-CIDADE.
MOVE
EIBDATE
TO
REG-DATA.
MOVE
EIBTIME
TO
REG-HORA.
FILE
(‘ARQ1’)
FROM
(W-REG)
EXEC CICS
WRITE
RIDFLD (W-CHAVE) RESP
(W-ERR)
END-EXEC.
IF
W-ERR
EQUAL
DFHRESP(DUPREC)
MOVE ‘REGISTRO JÁ EXISTENTE’ TO MSGO ____________________________________________________________________________________________ Versão 1
50
Cics .... ELSE IF
W-ERR
NOT EQUAL
DFHRESP(NORMAL)
PERFORM ROT-ERRO. ...
____________________________________________________________________________________________ Versão 1
51
Cics
8. UNIDADE 6 8.1 Controle de programas Veremos agora os comandos de transferência de controle entre programas em uma mesma task: -
CICS: LINK e XTCL
-
COBOL: CALL estático e dinâmico.
Veremos também como é feita a passagem de dados entre os programas.
8.2 Link entre programas O 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 são executados sob a mesma task.
8.3 Passagem de Dados Usando LINK Assim como na pseudo-conversação, também 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 através 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 também estará alterada.
____________________________________________________________________________________________ Versão 1
52
Cics
Os dois programas devem estar definidos na PPT do CICS.
8.4 Níveis lógicos - LINK NÍVEL 0
NÍVEL 1
CICS
Primeiro Programa
LINK
NÍVEL 2
Segundo Programa RETURN
Todo programa chamado através de LINK executa em novo nível lógico. Quando termina (RETURN), o controle volta para o nível lógico 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’. ....
____________________________________________________________________________________________ Versão 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 programas O comando XCTL também passa controle para outro programa, mas ao contrário do LINK, quando o programa chamado termina, o controle não retorna ao programa chamador. O XCTL é muito utilizado para desenvolver MENUS de aplicações.
8.6 Passagem de dados usando XCTL A passagem de dados entre os programas também é feita através 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.
____________________________________________________________________________________________ Versão 1
54
Cics
8.7 Níveis lógicos - XCTL NÍVEL 0
CICS
NÍVEL 1
Primeiro Programa LINK
Terceiro Programa
XCTL
RETURN
NÍVEL 2
Segundo Programa RETURN
Como vimos, um programa chamado através de LINK executa em um novo nível lógico. Já um programa chamado através de XCTL executa no mesmo nível lógico do programa que fez a chamada. Como o RETURN volta para o nível lógico imediatamente superior, temos a confirmação que no caso do XCTL o controle não 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. ____________________________________________________________________________________________ Versão 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 estático – COBOL CALL LITERAL: CALL ‘PROGB’
PGM CHAMADOR
OS/COBOL
VS COBOL II
V
V
X
V
PGM CHAMADO COMANDOS CICS
____________________________________________________________________________________________ Versão 1
56
Cics
OS/COBOL
V
X
VS COBOL II
X
V
ASSEMBLER
V
V
Apenas um módulo executável. O Call estático 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 são linkeditados como um único módulo executável. Do ponto de vista de performance, é uma boa opção, uma vez que não ocorrerá carga do programa chamado na memória. Por outro lado, se diversos programas fizerem CALL para esse mesmo programa teremos diversas cópias dele em memória.
8.10 Call dinâmico – COBOL MOVE ‘PROGB’ TO W-PROG CALL VARIÁVEL: CALL W-PROG.
OS/COBOL
VS COBOL II
V
V
COMANDOS CICS
X
V
OS/COBOL
X
X
VS COBOL II
X
V
X
V
PGM CHAMADOR PGM CHAMADO
ASSEMBLER
____________________________________________________________________________________________ Versão 1
57
Cics Dois módulos executáveis. O Call dinâmico do Cobol (call variável) também pode ser utilizado. A tabela acima mostra as possibilidades de call dependendo do compilador COBOL utilizado. Os programas chamador e chamado são linkeditados separadamente, sendo dois módulos executáveis distintos. Quando for feito um call, o programa chamado será carregado em memória e executado. Se diversos programas fizerem call para esse mesmo programa, teremos apenas uma cópia em memória.
8.11 Passagem de dados com INPUTMSG A partir do CICS/ESA v3.1.1 temos uma alternativa a mais para passagem de dados entre programas. Trata-se da opção INPUTMSG. Através dela, podemos passar uma área que fica na WORKING-STORAGE do programa chamador, e recebê-la também em WORKING-STORAGE no programa chamado, através do comando RECEIVE. Se desejarmos, podemos especificar tanto o INPUTMSG quanto a COMMAREA em um mesmo comando. O INPUTMSG é válido para LINK e XCTL a partir do CICS V3.1.1. A partir do CICS V3.2.1 é válido também 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) ____________________________________________________________________________________________ Versão 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 através 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
____________________________________________________________________________________________ Versão 1
59
Cics
9.1 Addressability – uso da LINKAGE SECTION A LINKAGE SECTION é uma área muito explorada pelo CICS em nossos programas COBOL. Já percebemos que o EIB e a DFHCOMMAREA localizamse em LINKAGE. Além 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 endereçamento para poder utilizá-las.
9.2 Addressability
-
DFHCOMMAREA e DFHEIBLK: Endereçados automaticamente pelo próprio CICS.
-
Outras área de LINKAGE: Devem ser endereçadas pelo programa
O endereçamento do DFHEIBLK (EIB) e da DFHCOMMAREA é feito de forma automática pelo CICS. O endereçamento de outras área deve ser feito pelo próprio programa, portanto é responsabilidade do programador.
9.3 BLL Cells – OS/VS cobol
____________________________________________________________________________________________ Versão 1
60
Cics
LINKAGE SECTION. 01
DFHCOMMAREA. ...
01
01
BLL-CELLS. 05
FILLER
PIC S9(08) COMP.
05
PRT-REG
PIC S9(08) COMP.
05
PRT-TAB
PIC S9(08) COMP.
L-REG. 05
NOME
PIC X(30).
05
ENDEREÇO
PIC X(40).
05
CPF
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 (Células de base locator for LINKAGE). A estrutura de BLL Cells deve ser um nível 01 imediatamente antes dos layouts das áreas de trabalho em LINKAGE do programa. O primeiro ponteiro da estrutura vai conter o endereço da própria estrutura, e é carregado pelo próprio COBOL. Cada ponteiro seguinte apontará para um layout de nível 01 codificado após a estrutura de BLLs. Esses ponteiros devem ser carregados pelo programa.
9.4 Opção SET – utiliza LINKAGE SECTION. PROGRAMA OS/COBOL: EXEC CICS
READ
FILE
(‘ARQ1’)
____________________________________________________________________________________________ Versão 1
61
Cics RIDFLD (REG-CHAVE) SET
(PTR-REG)
END-EXEC. PROGRAMA COBOL II: EXEC CICS
READ
FILE
(‘ARQ1’)
RIDFLD (REG-CHAVE) SET
(ADDRESS OF L-REG)
END-EXEC. Acima mostramos um registro de arquivo VSAM sendo lido em LINKAGE SECTION ao invés da WORKING. Note que no lugar da opção INTO está sendo utilizada a opção SET. Dessa forma, quando o CICS faz a leitura já adquire uma área de memória do tamanho do registro. A opção SET serve para carregar o ponteiro do BLL com o endereço da área onde encontra-se o registro. O primeiro exemplo mosta um programa OS/COBOL. A opção 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 não utiliza a estrutura de ponteiros. Ao invés disso, utiliza um registrador especial de endereçamento para cada nível 01 da LINKAGE, e para carregar esse registrador o programa deve utilizar a instrução “ADDRESS OF nível-01”.
9.5 Tabelas em Assembler DC CL2’SP’ DC CL15’SÃO PAULO’ DC CL2’BA’ DC CL15’BAHIA’ DC CL2’RJ’ DC CL15’RIO DE JANEIRO’ DC CL2’PR’ DC CL15’PARANÁ’ DC CL2’ES’ DC CL15’ESPÍRTO SANTO’ ____________________________________________________________________________________________ Versão 1
62
Cics Uma técnica muito utilizada no CICS é a codificação 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 invés de definir o layout dessa tabela na WORKING do programa, podemos fazer sua definição em LINKAGE, e carregá-la em memória quando quisermos consultá-la. Para carregá-la em memória veremos o comando LOAD. Com essa técnica, podemos ter inúmeras tasks no CICS consultando uma única tabela através de LINKAGE, possibilitando grande economia de memória no caso de tabelas extensas.
9.6 Carga de tabelas COBOL II -LOAD PROGRAM-ID. PROG1. WORKING-STORAGE SECTION. 77
W-ERR
PIC S9(08) COMP.
... LINKAGE SECTION. 01
DFHCOMMAREA. 02
01
L-COMM
PIC X(03).
TAB-LOCAL. 02
LOCAL
OCCURS
120.
03
LOC
PIC X(02).
03
DESC
PIC X(15).
PROCEDURE DIVISION. .... EXEC CICS LOAD
PROGRAM
(‘TABPROG’)
SET
(ADDRESS OF TAB-LOCAL)
END-EXEC.
____________________________________________________________________________________________ Versão 1
63
Cics O comando LOAD faz com que o programa solicitado seja carregado em memória e o nosso programa tenha acesso ao endereço de carga através da opção SET. O LOAD carrega o programa mas não executa, ao contrário do LINK e XCTL. Através do layout em LINKAGE, podemos consultar as ocorrências da tabela. O LOAD mantém o programa carregado em memória até o final da task. Se após o final da task desejarmos manter o programa em memória, devemos utilizar a opção HOLD. Assim, o programa permanecerá em memória até o CICS sair do ar ou alguma transação emitir o comando RELEASE PROGRAM.
9.7 Adquirindo memória – COBOL II PROGRAM-ID. PROG1. WORKING-STORAGE SECTION. 77
W-ERR
PIC S9(08) COMP.
... LINKAGE SECTION. 01
DFHCOMMAREA. 02
01
L-COMM
L-AREA
PIC X(03). PIC X(300).
PROCEDURE DIVISION. .... EXEC CICS GETMAIN
LENGTH
(300)
SET
(ADDRESS OF L-AREA)
END-EXEC. MOVE
‘XXXXXXXXX’
TO
L-AREA.
..... O CICS possibilita também que um programa solicite uma área de memória. Isso é feito através do comando GETMAIN. No exemplo acima o programa está solicitando uma área de memória de tamanho 300 bytes, que será utilizada através do layout L-AREA em LINKAGE.
____________________________________________________________________________________________ Versão 1
64
Cics
9.8 Áreas maiores que 4096 – COBOL II Se a área de LINKAGE tiver tamanho acima de 4096 bytes, não existe nenhuma consideração especial na codificação do programa COBOL II. Teremos acesso aos 7300 bytes da L-AREA sem nenhum esforço adicional.
PROGRAM-ID. PROG1. WORKING-STORAGE SECTION. 77
W-ERR
PIC S9(08) COMP.
... LINKAGE SECTION. 01
DFHCOMMAREA. 02
01
L-COMM
L-AREA
PIC X(03). PIC X(7300).
PROCEDURE DIVISION. .... EXEC CICS GETMAIN
LENGTH
(7300)
SET
(ADDRESS OF L-AREA)
END-EXEC. MOVE
‘XXXXXXXXX’
TO
L-AREA.
.....
9.9 Acessando a Common Work Area (CWA) O CICS fornece várias áreas de uso comum, e uma das mais práticas é 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 utilização pública de qualquer espécie.
PROGRAM-ID. PROG1. WORKING-STORAGE SECTION. 77
W-ERR
PIC S9(08) COMP.
____________________________________________________________________________________________ Versão 1
65
Cics 77
W-LEN
PIC S9(04) COMP.
... LINKAGE SECTION. 01
DFHCOMMAREA. 02
01
L-COMM
PIC X(03).
L-CWA. 02
CWA-CAMPO1
PIC X(50).
02
CWA-CAMPO2
PIC X(50).
PROCEDURE DIVISION. .... EXEC CICS ASSIGN
CWALENG(W-LEN) END-EXEC.
IF W-LEN
GREATER
EXEC CICS
ZEROS
ADDRESS CWA(ADDRESS OF L-CWA) END-EXEC. .....
Através do comando ASSIGN CWALENG verificamos se a CWA existe ou não. Se existir, é possível acessá-la através do comando ADDRESS CWA. Pelo layout da CWA na LINKAGE do programa, podemos consultar dados existentes ou então carregar novos dados.
10. UNIDADE 8
____________________________________________________________________________________________ Versão 1
66
Cics
10.1 Queueing Nessa unidadade veremos os comandos necessários para trabalhar com as duas facilidades que o CICS oferece para armazenamento temporário de dados (enfileiramento de dados): Transient Data (TD) e Temporary Storage (TS).
10.2 Transient Data - TD CICS TDP
DCT
PROGRAMA Exec cics Readq/writeq TD
EXTRAPARTITION
INTRAPARTITION
As filas de Transient Data são 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
DFHDCT DFHTDP
EXEC CICS
DESTID
READQ/WRITEQ TD
DFHINTRA/VSAM ESDS Características da TD Intrapartition: ____________________________________________________________________________________________ Versão 1
67
Cics Todas as filas de TD são direcionadas para o mesmo arquivo VSAM ESDS chamado DFHINTRA; Os registros nas filas são gravados sempre sequencialmente e recuperados da mesma forma; A leitura é destrutiva, ou seja, uma vez lido não pode ser recuperado novamente; Os registros podem ter tamanho variável.
-
-
-
-
10.2.2 TD Extrapartition
PROGRAMA
DFHTDP
DFHDCT
DESTID
A TD Extrapartition é a forma que o CICS oferece para utilizarmos arquivos SAM (Sequencial Access Method). Características da TD Extrapartition: - Cada fila de TD corresponde a um arquivo físico; - A leitura não é destrutiva, pois podemos ler o mesmo registro diversas vezes; - Não podemos fazer exclusão; - Os registros podem ter formato fixo ou variável, blocado ou não blocado; - Cada fila pode ser definida com imput ou output, nunca como input e output.
____________________________________________________________________________________________ Versão 1
68
Cics
10.3 Gravação de TD EXEC CICS
WRITEQ
MOVE EXEC CICS
‘00003’ STARTBR
TD
QUEUE (name) FROM (data-area) [LENGTH (data-area)] END-EXEC. O comando WRITEQ TD é utilizado para gravação 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 lógica onde, para cada registro lido no arquivo ARQ1, está sendo gravado um registro na fla TD01.
10.4 Leitura de TD EXEC CICS
READQ
TD
QUEUE (name) INTO (data-area) [LENGTH (data-area)] END-EXEC.
____________________________________________________________________________________________ Versão 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 Exclusão 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.
10.6 Condições de exceção - TD
QZERO LENGERR NOSPACE NOTOPEN QIDERR IOERR
____________________________________________________________________________________________ Versão 1
70
Cics Condições de exceção 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 não foi cadastrada na tabela DCT;
-
IOERR: Problemas com o arquivo.
10.7 Temporary Storage - TS
DFHTEMP
DFHTSP
EXEC CICS READQ/WRITEQ TS TS
VSAM (ESDS)
A Temporary Storage ( TS ) tem nomes de 1 a 8 caracteres, e não necessita que esses nomes sejam pré-definidos em tabelas do CICS. Se a fila não existir, ela será criada. -
As filas TS podem ser gravadas em disco (AUX) ou então em memória (MAIN), onde o acesso é muito mais rápido;
-
Os registros (itens) podem ter tamanho variável;
-
TS aceita gravação sequencial, leitura sequencial e direta, e atualização;
-
Os dados permanecem disponíveis até que sejam excluídos por comando.
____________________________________________________________________________________________ Versão 1
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 Gravação de TS EXEC CICS
WRITEQ TS
QUEUE (name) FROM
(data-area)
[LENGTH (data-area)] [ITEM
(data-area) [REWRITE]]
[MAIN | AUXILIARY] END-EXEC.
O comando WRITEQ TS é utilizado para gravação de filas TS. -
As opções MAIN e AUX determinam se a fila será gravada em memória ou disco;
-
Quando estivermos gravando, se codificarmos a opção ITEM, o CICS retorna o número (posição) desse ítem na fila;
-
Se codificarmos as opções ITEM e REWRITE, o CICS fará atualização do ítem indicado com o novo conteúdo.
Cada registro gravado é um novo item.
____________________________________________________________________________________________ Versão 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 codificação de gravação 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 atualização do ítem 10 da fila TS FATTS01.
10.9 Leitura de TS EXEC CICS
READQ TS
QUEUE (name) INTO
(data-area)
[LENGTH (data-area)] [ITEM
(data-area) | NEXT]
[NUMITENS(data-area)] END-EXEC.
____________________________________________________________________________________________ Versão 1
73
Cics O comando READQ TS é utilizado para leitura de filas TS. -
A opção NEXT indica que estamos fazendo leitura sequencial da fila;
-
Se utilizarmos a opção ITEM estaremos fazendo leitura direta;
-
Se a opção NUMITENS for codificada, o CICS informa o número 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 TS 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. ...... Acima temos a leitura da fila FATTS01. Em seguida, se ocorrer a condição de fim de fila, a TS está sendo excluída através do comando DELETEQ TS.(abordado no próximo tópico).
10.10 Exclusão de TS EXEC CICS
DELETEQ
TS
QUEUE (name) END-EXEC.
____________________________________________________________________________________________ Versão 1
74
Cics O comando DELETEQ TS serve para excluir todos os itens de uma fila TS. É importante excluir fila após seu uso, principalmente se a fila foi gravada em memória.
10.11 Condições de exceção - TS
ITEMERR LENGERR NOSPACE QIDERR IOERR
Condições de exceção a serem consideradas para TSs: -
ITEMERR: Fim de fila ou ítem não encontrado;
-
LENGERR: Registro maior que o tamanho especificado;
-
NOSPACE: Não há espaço para gravação;
-
QIDERR: A fila TS não foi encontrada em uma leitura ou exclusão;
-
IOERR: Problemas com o arquivo.
____________________________________________________________________________________________ Versão 1
75
Cics
11. UNIDADE 9 11.1 Manuseio de exceções É de extrema importância o manuseio de condições de exceção em programas executando sob CICS. Uma das técnicas é a chamada técnica estruturada, que temos utilizado desde o início dessa apostila. Codificamos a opção RESP nos comandos e em seguida testamos o campo utilizado como argumento. Nessa unidade veremos as outras técnicas para manusear condições de exceção, e também o que são transações CECI e CEBR.
11.2 Manuseio de condições de exceção EXEC CICS
HANDLE
CONDITION Condition(label) Condition(label) ......
EXEC CICS
IGNORE
CONDITION Condition Condition ......
O comando HANDLE CONDITION serve para deixarmos pré-estabelecidas as rotinas para manuseio de condições de exceção. Podemos especificar até 16 condições, e ao executar um comando, se a condição ocorrer será feito um desvio automático para a rotina especificada no HANDLE CONDITION. O comando IGNORE CONDITION serve para o CICS ignorar as condições especificadas, e deixar o programa continuar. Serve também para resetar condições tratadas anteriormente em HANDLE CONDITION. PROCEDURE DIVISION. EXEC CICS
HANDLE
CONDITION INVREQ(TRATA-INV) LENGERR(TRATA-LENGTH) NOTFND(NÃO-ACHOU) PGMIDERR(TRATA-PROG) ERROR(TRATA-ERRO)
____________________________________________________________________________________________ Versão 1
76
Cics END-EXEC. ...... EXEC CICS
IGNORE
CONDITION INVREQ END-EXEC.
...... EXEC CICS
READ
FILE
(‘TESTARQ’)
INTO
(W-REG)
RIDFLD (W-CHAVE) END-EXEC. ...... NÃO-ACHOU. .... TRATA-LENGTH. ..... O exemplo acima mostra que o programa emitiu um HANDLE CONDITION com o nome de algumas rotinas para tratar condições de exceção específicas, e com a rotina TRATA-ERRO para o caso de uma condição não especificada. Em seguida, ele solicita que o CICS ignore a condição INVREQ através de um comando IGNORE CONDITION. Ao executar o comando READ, dependendo do que ocorrer o CICS fará um desvio para a rotina solicitada ou então deixará o programa prosseguir.
11.3 Opções para Manuseio de exceções -
utilizar a opção RESP nos comandos, testando o campo da WORKING-STORAGE
-
utilizar a opção NOHANDLE nos comandos, e testar EIBRESP
-
utilizar HANDLE e IGNORE CONDITION
-
CICS toma ação Default, que geralmente é abendar a task.
____________________________________________________________________________________________ Versão 1
77
Cics Uma das maneiras de tratar as condições de exceção é a que estamos utilizando desde o iníicio da apostila: codificar a opção RESP, e em seguida testar o campo utilizado como argumento. Outra forma estruturada de trabalhar é codificar a opção NOHANDLE nos comandos: o CICS deixará o programa prosseguir, e devemos testar o campo EIBRESP. A utlização de HANDLE e IGNORE CONDITION quebra a estrutura do programa, portanto, não é aconselhada. Se não utilizarmos nenhuma das opções mostradas acima, no caso de exceções o CICS toma uma ação “default”, que geralmente é abendar a task.
11.4 EIBRESP2 para auxiliar INVREQ
EIBRESP2
READ não especificado na FCT READ UPDATE não especificado na FCT
20
KEYLENGTH incorreto e GENERIC não especificado
26
KEYLENGTH acima do permitido (GENERIC especificado)
25
KEYLENGTH NEGATIVO (GENERIC especificado)
42
READ UPDATE seguido de READ UPDATE sem UNLOCK, REWRITE or DELETE
28
A condição de exceção INVREQ (solicitação inválida – EIBRESP=16) é muito vaga, por isso o CICS traz o campo EIRESP2, que informa maiores detalhes do problema.
11.5 Manuseio de teclas WORKING-STORAGE SECTION. ....
PROCEDURE DIVISION. EXEC CICS HANDLE AID
COPY DFHAID.
PF1(TRATA-HELP)
....
PF3(TRATA-FIM)
____________________________________________________________________________________________ Versão 1
78
Cics PROCEDURE DIVISION.
PF7(VOLTA-TELA)
IF EIBAID EQUAL DFHPF3
PF8(AVANÇA-TELA)
...
PF10
IF EIBAID EQUAL DFHCLEAR
ANYKEY(TECLA-INVALIDA)
...
END-EXEC.
IF EIBAID EQUAL DFHENTER ...
..... TRATA-HELP. ..... TRATA-FIM. ...... VOLTA-TELA. .....
Para testar qual tecla foi pressionada pelo usuário, vimos a técnica estruturada, que consiste em copiar o copybook DFHAID na WORKING-STORAGE, e depois testar o campo EIBAID. Essa é a técnica recomendada. Existe também o comando HANDLE AID, onde especificamos teclas e para quais rotinas deve ocorrer o desvio. Esse desvio, ocorre após um comando RECEIVE ou RECEIVE MAP. A opção ANYKEY significa qualquer tecla com exceção do ENTER.
Se utilizar HANDLE AID e o programa executar um RECEIVE com RESP ou NOHANDLE, o HANDLE AID será desabilitado naquele instante.
____________________________________________________________________________________________ Versão 1
79
Cics
11.6 Cuidado ao utilizar HANDLE Se o CICS detecta uma tecla controlado por HANDLE AID e uma condição de exceção controlada por HANDLE CONDITION após um comando de input, o desvio é feito para a rotina do HANDLE AID. Abaixo mostramos uma condição em que a tecla PF5 foi pressionada e um MAPFAIL ocorreu. O desvio foi feito para a rotina TRATA-PF5.
PROCEDURE DIVISION. EXEC CICS
HANDLE
CONDITION
MAPFAIL
(TRATA-MAPFAIL)
NOTFND
(TRATA-NOTFND)
LENGERR
(TRATA-LENGTH)
END-EXEC. ..... EXEC CICS
HANDLE
AID
PF5
(TRATA-PF5)
END-EXEC. .... TRATA-MAPFAIL. .... TRATA-PF5. ....
11.7 Comando HANDLE ABEND O comando HANDLE ABEND devolve o controle para o programa quando o CICS determina que a transação deveria terminar de forma anormal. Dessa forma, o programa pode realizar um “housekeeping” antes de seu término. EXEC CICS
HANDLE
ABEND
[PROGRAM
(name)
|
LABEL
(label)
|
____________________________________________________________________________________________ Versão 1
80
Cics CANCEL
|
RESET]
11.8 Para suspender/restaurar HANDLEs O comando PUSH HANDLE suspende todos os HANDLEs que encontram-se ativos para o programa. O comando POP HANDLE reativa os HANDLEs que foram suspensos. Devemos evitar utilizar esses comandos pois eles quebram a estrutura do programa, dificultando futuras manutenções.
EXEC
CICS
SUSPENDE
PUSH HANDLE
EXEC
CICS
TODOS
RESTAURA
POP HANDLE
HANDLE CONDITION IGNORE CONDITION HANDLE ABEND HANDLE AID
TODOS
Os comandos HANDLE são exclusivos de cada programa em uma task. Isso significa que se ocorrer um LINK, o programa chamado deverá ter seus próprios HANDLEs. Quando o controle volta para o programa chamador, seus HANDLEs são reativados.
____________________________________________________________________________________________ Versão 1
81
Cics
11.9 CECI STATUS: ENTER ONE OF THE FOLLOWING ABend ACquire ADdress ALlocate ASKtime ASSign Bif BUild CAncel CHange
DEQ DISAble DISCard DUmp ENAble ENDbr ENQ ENTer EXtract FEpi
INquire ISsue Journal Link LOad Monitor PErform POint POP POSt
RECeive RELease RESEtbr RESYnc RETRieve RETUrn REWrite ROute SENd SET
COLlect CONNect CONVerse CReate DELAy DELETE DELETEQ
FOrmattime FREE FREEMain GDs GEtmain Handle IGnore
PURge PUSh Query READ READNext READPrev READQ
SIGNOFf Xctl SIGNON SPOOLClose SPOOLOpen SPOOLRead SPOOLWrite START
PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER
STARTBr Suspend SYncpoint Trace Unlock Verify WAIT WAITCics WRITE WRITEQ
9MSG
CECI – COMMAND LEVEL INTERPRETER A transação CECI é uma poderosa ferramenta que o CICS oferece para auxílio à programação. 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.
____________________________________________________________________________________________ Versão 1
82
Cics
WRITEQ TS Q(FATTS1) FROM (‘TESTE GRAVACAO DE TS’) STATUS: ABOUT TO EXECUTE COMMAND NAME= EXEC CICS WRITEQ TS Queue(‘FATTS1 ‘) From(‘TESTE DE GRAVACAO DE TS’) >
PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER
9MSG
O exemplo mostra a gravação 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 execução.
____________________________________________________________________________________________ Versão 1
83
Cics
WRITEQ TS Q(FATTS1) FROM (‘TESTE GRAVACAO DE TS’) STATUS: ABOUT TO EXECUTE COMMAND NAME= EXEC CICS WRITEQ TS Queue(‘FATTS1 ‘) From(‘TESTE DE GRAVACAO DE TS’) >
RESPONSE:NORMAL EIBRESP=+0000000000 EIBRESP2=+0000000000 PF 1 HELP 2 HEX 3 END 4 EIB 5 VAR 6 USER 7SBH 8 SFH 9 MSG 10 SB 11 SF
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 aplicações.
____________________________________________________________________________________________ Versão 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 **********************
TEMPORARY STORAGE QUEUE CEBRT001 DOES NOT EXIST PF1:HELP PF4:VIEW TOP PF7:SCROLL BACK HALF PF10:SCROLL BACK FULL
PF2:SWITCH HEX/CHAR PF5:VIEW BOTTOM PF8:SCROLL FORWARD HALF PF11:SCROLL FORWARD FULL
PF3:TERMINATE BROWSE PF6:REPEAT LAST FIND PF9:UNDEFINED PF12:UNDEFINED
CEBR – BROWSE TEMPORARY STORAGE / TRANSIENT DATA A transação CEBR permite fazer consulta em filas TS e TD, com uma série de facilidades. Através da PF1 (HELP), temos uma lista de comandos que podemos utilizar para consultar o conteúdo completo de filas.
____________________________________________________________________________________________ Versão 1
85
Cics
12. UNIDADE 10 12.1 CEDF – EXECUTION DIAGNOSTIC FACILITY O CEDF é uma transação fornecida com o CICS que facilita muito o trabalho de quem está testando novas aplicações ou necessita fazer uma determinação de problemas online e interativa. É uma ferramenta com muitos recursos, os quais mostraremos nessa unidade. É muito fácil 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 transação para acompanhar sua execução. O CEDF mostrará cada comando EXEC CICS da aplicação com uma série de facilidades. TRANSACTION:UPDT PROGRAM:UPDTPGM TASK:0000038 APPLID:CICTST1 DISPLAY:00 STATUS: PROGRAM INITIATION EIBTIME EIBDATE EIBTRNID EIBTASKN EIBTRMID
= 192146 = 02180 = ‘UPDT’ = 38 = ‘4601’
EIBCPOSN = 4 EIBCALEN = 0 EIBAID = X’7D’ EIBFN = X’0000’ EIBRCODE = X’000000000000’ EIBDS = ‘........’ + 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
AT X’001400EA’ AT X’001400EB’ AT X’001400ED’
PF3:END EDF SESSION PF6:USER DISPLAY PF9:STOP CONDITIONS PF12:UNDEFINED
____________________________________________________________________________________________ Versão 1
86
Cics A figura anterior é a primeira tela que o CEDF mostra. Note que temos uma série de informações logo na primeira linha: nome da transação, nome do programa, número 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.
12.2 CEDF – alteração de argumentos TRANSACTION:UPDT PROGRAM:UPDTPGM TASK:0000038 APPLID:CICTST1 DISPLAY:00 STATUS: ABOUT TO EXECUTE COMMAND EXEC CICS READ FILE(‘ARQ01’) INTO(‘ ‘...) LENGTH(91) RIDFLD(‘000010’) EQUAL NOHANDLE
OFFSET:X’00073E’
LINE:00206
ENTER: CONTINUE PF1:UNDEFINED PF4:SUPPRESS DISPLAYS PF7:SCROLL BACK PF10:PREVIOUS DISPLAY
EIBFN=X’0602’
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 após a execução (STATUS: COMMAND EXECUTION COMPLETE).
____________________________________________________________________________________________ Versão 1
87
Cics Permite ainda a alteração de alguns valores de argumentos antes de executar o comando, facilitando bastante o processo de teste de uma aplicação.
12.3 CEDF – alteração de response codes TRANSACTION:UPDT PROGRAM:UPDTPGM TASK:0000038 APPLID:CICTST1 DISPLAY:00 STATUS: COMMAND EXECUTION COMPLETE EXEC CICS READ FILE(‘ARQ01’) INTO(‘ ‘...) LENGTH(91) RIDFLD(‘000010’) EQUAL NOHANDLE
OFFSET:X’00073E’ LINE:00206 RESPONSE: NOTFND ENTER: CONTINUE PF1:UNDEFINED PF4:SUPPRESS DISPLAYS PF7:SCROLL BACK PF10:PREVIOUS DISPLAY
EIBFN=X’0602’
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 execução do comando e informa o RESPONSE. Podemos alterar esse response para qualquer valor válido, com o objetivo de testar rotinas que fazem tratamento de erros no programa.
____________________________________________________________________________________________ Versão 1
88
Cics
12.4 CEDF – line number e offset TRANSACTION:UPDT PROGRAM:UPDTPGM TASK:0000046 APPLID:CICTST1 DISPLAY:00 STATUS: ABOUT TO EXECUTE COMMAND EXEC CICS SEND MAP MAP(‘TESTMP’) FROM(‘................%................%........................’...) LENGTH(314) MAPSET(‘TESTMS1’) TERMINAL FREEKB ERASE
OFFSET:X’000AB8’
LINE:00319
ENTER: CONTINUE PF1:UNDEFINED PF4:SUPPRESS DISPLAYS PF7:SCROLL BACK PF10:PREVIOUS DISPLAY
EIBFN=X’1804’
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 compilação (LINE). Também mostra o deslocamento desse comando a partir do início do programa(OFFSET). Isso facilita a localização do comando no programa fonte.
12.5 Facilidades do CEDF 12.5.1 CEDF - hexadecimal Com a tecla PF2 podemos fazer a conversão dos argumentos para formato hexadecimal. Com esse procedimento, o CEDF exibe também o endereço de memória onde esses argumentos estão localizados. ____________________________________________________________________________________________ Versão 1
89
Cics
12.5.2 CEDF – WORKING STORAGE Pressionando a tecla PF5 no Menu Principal do CEDF, temos acesso à WORKING do programa. Além de exibir todos os campos da WORKING, é permitido alterar o conteúdo desses campos. Além da WORKING, podemos verificar o conteúdo de qualquer endereço de memória dentro do CICS. Basta posicionar o cursor no campo ADDRESS e informar o endereço desejado.
12.5.3 CEDF – Exec Interface Block A qualquer instante, temos acesso ao EIB. Basta pressionar PF5 (WORKINGSTORAGE) e depois PF4 (EIB Display).
12.5.4 CEDF – Stop conditions Se não desejamos acompanhar a execução da task comando por comando, temos a possibilidade de definir condições de parada (STOP CONDITIONS) através da PF9. Após definir as condições, a tecla PF4 (SUPPRESS DISPLAYS) vai fazer com que os comandos anteriores ao solicitado não sejam exibidos no CEDF.
12.5.5 CEDF – Previous Display O CEDF permite visualização de até 10 painéis anteriores, se tivermos necessidade de rever algum comando que já foi executado. Isso é feito através da tecla PF10 (PREVIOUS DISPLAY). O campo DISPLAY (1ª linha da tela do lado direito) mostrará um valor negativo, indicando quel tela está sendo exibida.
12.5.6 CEDF – pseudo-conversação Podemos acompanhar as várias tasks de uma pseudo-conversação com o CEDF. No final da task, é feita a pergunta se queremos acompanhar a próxima execução. (REPLY: YES/NO).
12.5.7 CEDF – solicitando Abend Podemos solicitar o ABEND da task que está sendo monitorada pelo CEDFatravés da PF12. Será solicitado um código de ABEND, e em seguida a PF12 deve ser pressionada novamente.
____________________________________________________________________________________________ Versão 1
90
Cics
____________________________________________________________________________________________ Versão 1
91