cobol cics

52
Manual de CICS Pag. 1 / 52 CICS

Upload: thiagopotro01

Post on 26-Jul-2015

390 views

Category:

Documents


92 download

DESCRIPTION

Cobol - CICS

TRANSCRIPT

Page 1: Cobol Cics

Manual de CICS Pag. 1 / 52

CICS

Page 2: Cobol Cics

Manual de CICS Pag. 2 / 52

GENERALIDADES.

A sigla CICS significa Customer Information Control System, o Sistema de

Controlo da Informação de Clientes.

CICS é um sistema que proporciona um ambiente de execução para programas on-

line, ou seja, orientados para o diálogo com o utilizador e proporciona um

suporte para o intercâmbio de informação com o terminal do utilizador.

O ambiente é de única execução, de modo que para o desenvolvimento há que

empregar as ferramentas e ambientes usuais.

O sistema é multi-utilizador, não só como tal, mas também permite que diferentes

utilizadores possam trabalhar com o mesmo programa, uma vez conectados com o

CICS.

Os utilizadores não usam o JCL para lançar a execução de programas: emitem

petições com o CICS e este encarrega-se do resto.

Em alguns casos o utilizador deverá identificar-se mediante um username e uma

password, antes de poder pedir a execução de um programa.

A estrutura do sistema consiste numa série de módulos de serviço que rodeiam uma

área de memória CICS, na qual se executam os programas do utilizador.

Os módulos fundamentais do CICS são:

TCP

Terminal Control Program o Controlador de Terminais.

Encarrega-se da protocolização das petições de execução, construindo uma pilha

com elas.

Este módulo é o que limita em última instância o número de conexões possíveis

com o CICS, já que controla um número finito de terminais.

KCP

Page 3: Cobol Cics

Manual de CICS Pag. 3 / 52

Task Control Program o Controlador de Tarefas.

Encarrega-se da validação de acessos, da recuperação das petições de execução,

da multiprogramação e divide as ordens de carga de programas.

Controla mediante uma tabela os códigos de transacção que identificam programas

a executar por petição externa que, normalmente não são todos os programas

instalados.

FCP

File Control Program o Controlador de Ficheiros.

Encarrega-se da validação dos acessos a ficheiros e do intercâmbio de dados com

estes.

Controla mediante uma tabela os nomes simbólicos do ficheiro.

PCP

Program Control Program o Controlador de Programas.

Executa a carga de um programa na memória do CICS.

Controla mediante uma tabela os nomes de todos os programas que se podem

executar no ambiente CICS.

BMS

Basic Mapping Support o Suporte do Formato do Écran.

Encarrega-se dos intercâmbios de informação com os écrans, em conjunção com o

TCP.

O programa do utilizador utiliza os módulos de serviço para executar os

processos de intercâmbio da informação.

Na fase de arranque, o CICS põe em linha todos os recursos da informação de que

dispõe:

Programas

Ficheiros

Terminais

Impressoras

de forma que o programa do utilizador não abra nunca um recurso; limita-se a

utilizá-los.

PROGRAMAS EXECUTADOS DEPOIS DO CICS.

Generalidades

O programa estará orientado para o diálogo com o utilizador e a sua lógica de

execução será influenciada pelo desenvolvimento do dito diálogo, de tal forma

que o programa quase nunca será executado inteiro, como no caso dos programas

BATCH, mas, normalmente, cada passo do diálogo implicará só umas quantas

instruções.

O grupo de instruções que se executa num passo de diálogo denomina-se TAREFA, e

a actuação do utilizador que a desencadeia é uma TRANSACÇÃO.

Page 4: Cobol Cics

Manual de CICS Pag. 4 / 52

Assim, se um programa pede num determinado momento:

Introduzir código da operação (A/M/B):

a resposta do utilizador (TRANSACÇÃO), desencadeará uma TAREFA que consiste em:

Validar o código e Bifurcar ao módulo de petição dos dados ou de erro

A execução de um programa não se faz mediante a submissão de um JCL, como no

caso dos programas BATCH; o CICS tem uma tabela em que se recolhem os nomes de

todos os programas que se podem executar, juntamente com os códigos

identificativos de quatro caracteres denominados códigos de transacção.

A primeira transacção que um utilizador deve executar é a identificação do

programa que deseja lançar digitando o seu código de transacção.

A manutenção da tabela a que se faz referência, é por conta do Departamento de

Sistemas, de modo que um novo desenvolvimento exige acordar o código da

transacção e o nome para o novo programa com o responsável da Manutenção do

CICS.

PECULIARIDADES DA PROGRAMAÇÃO:

Comandos

O programa só poderá aceder a recursos de informação através dos módulos de

serviço do CICS e só poderá manejar os recursos descritos aos ditos módulos.

A comunicação com os ditos módulos resultou mediante um conjunto de instruções

agrupadas num suporte denominado High Level Programming Interface o HLPI.

O HLPI contém os chamados comandos CICS, que são sentenças no COBOL dirigidas

especificamente aos módulos de serviço e que têm a seguinte estrutura:

EXEC CICS

comando

END-EXEC

O ponto não é necessário para terminar um comando; só se codificará se a lógica

COBOL o requerer.

Terminação da execução

Dado que o programa se executa dentro do CICS, é este quem supervisa a execução;

o programa, pode portanto, considerar-se como subrotina do CICS.

Isto significa que, se é ao CICS a quem se pede a execução de um programa,

também é ao CICS a quem se informa de que a execução terminou.

Por outras palavras, a finalização da execução de um programa faz-se devolvendo

o controlo ao CICS.

Um programa CICS não termina nunca com STOP RUN, desenvolve-se o controlo ao

CICS com o comando;

EXEC CICS

RETURN

END-EXEC

que, sendo igual ao STOP RUN dos programas BATCH, pode aparecer tantas vezes

como se requeira ao longo do programa.

Acesso a ficheiros

Page 5: Cobol Cics

Manual de CICS Pag. 5 / 52

Desde o momento em que é o CICS, na fase de arranque, quem põe em linha todos os

recursos, na codificação dos programas será omitida toda a referência à

descrição, abertura e fecho de ficheiros.

Não existirão, portanto especificações como:

INPUT-OUTPUT SECTION

SELECT

FILE SECTION

FILE-CONTROL

FD

OPEN

CLOSE

Igualmente como os programas, o CICS tem uma tabela em que, para cada ficheiro,

estão descritos a sua estrutura física, os tipos de acesso (leitura, escrita)

válidos e um nome simbólico que se usará no acesso.

O acesso será feito mediante um comando:

EXEC CICS

comando_de_acesso_a_ficheiro_por_nome_simbólico

END-EXEC

e não se empregarão as instruções usuais READ, WRITE,.....

Se, no curso de um desenvolvimento, houver que usar ficheiros novos, não basta

só criá-los e carregá-los com dados; há que recorrer à mesma mecânica que no

caso dos programas para que sejam dados de alta nas tabelas do CICS.

Intercâmbios de informação com o écran

O écran também é um recurso manejado pelo CICS.

As instruções usuais ACCEPT, DISPLAY não são válidas e os intercâmbios fazem-se

através de um módulo de serviço mediante um comando:

EXEC CICS

comando_de_intercambio_com_ecran

END-EXEC

Diálogo CICS - programa

Dado que os comandos CICS se dirigem directamente a módulos de serviço do

ambiente, a análise do resultado da execução de um comando não se pode fazer

pelos métodos usuais, mas através de uma área de comunicações, subministrada

pelo próprio CICS, chamada Execution Interface Block ( EIB ), e por uma série de

códigos de retorno que se denominam condições excepcionais. A ambos pode aceder-

se ao programa, quer directamente, quer através de comandos CICS especiais.

Execution Interface Block ( EIB )

000100 DFHEIBLK REALCICS

000900* EIBTIME TIME IN 0HHMMSS FORMAT

001000* EIBDATE DATE IN 00YYDDD FORMAT

001100* EIBTRNID TRANSACTION IDENTIFIER

Page 6: Cobol Cics

Manual de CICS Pag. 6 / 52

001200* EIBTASKN TASK NUMBER

001300* EIBTRMID TERMINAL IDENTIFIER

001400* DFHRSVD1 RESERVED

001500* EIBCPOSN CURSOR POSITION

001600* EIBCALEN COMMAREA LENGTH

001700* EIBAID ATTENTION IDENTIFIER

001800* EIBFN FUNCTION CODE

001900* EIBRCODE RESPONSE CODE

002000* EIBDS DATASET NAME

002100* EIBREQID REQUEST IDENTIFIER

002200* EIBRSRCE RESOURCE NAME

002300* EIBSYNC SYNCPOINT REQUIRED

002400* EIBFREE TERMINAL FREE REQUIRED

002500* EIBRECV DATA RECEIVE REQUIRED

002600* EIBSEND RESERVED

002700* EIBATT ATTACH DATA EXISTS

002800* EIBEOC GOTTEN DATA IS COMPLETE

002900* EIBFMH GOTTEN DATA CONTAINS FMH

003000* EIBCOMPL RECEIVE COMPLETE FLAG

003100* EIBSIG SIGNAL FLAG

003200* EIBCONF CONFIRM FLAG

003300* EIBERR LU 6.2 ERROR FLAG

003400* EIBERRCD LU 6.2 ERROR CODE

003500* EIBSYNRB SYNCPOINT ROLLBACK FLAG

003600* EIBNODAT NO DATA FLAG

003700* EIBRESP ERROR CODE RESPONSE

003800* EIBRESP2 MORE ERROR CODES

003900* EIBRLDBK ROLLED BACK FLAG

004000*

004100 EIBTIME PICTURE S9(7) COMP-3.

004200 EIBDATE PICTURE S9(7) COMP-3.

004300 EIBTRNID PICTURE X(4).

004400 EIBTASKN PICTURE S9(7) COMP-3.

004500 EIBTRMID PICTURE X(4).

004600 EIBRSVD1 PICTURE XX.

004700 EIBCPOSN PICTURE S9(4) COMP-4.

004800 EIBCALEN PICTURE S9(4) COMP-4.

004900 EIBAID PICTURE X.

005000 EIBFN PICTURE X(2).

005100 EIBRCODE PICTURE X(6).

005200 EIBDS PICTURE X(8).

005300 EIBREQID PICTURE X(8).

005400 EIBRSRCE PICTURE X(8).

005500 EIBSYNC PICTURE X.

005600 EIBFREE PICTURE X.

005700 EIBRECV PICTURE X.

005800 EIBSEND PICTURE X.

005900 EIBATT PICTURE X.

006000 EIBEOC PICTURE X.

006100 EIBFMH PICTURE X.

006200 EIBCOMPL PICTURE X.

006300 EIBSIG PICTURE X.

006400 EIBCONF PICTURE X.

006500 EIBERR PICTURE X.

006600 EIBERRCD PICTURE X(4).

006700 EIBSYNRB PICTURE X.

006800 EIBNODAT PICTURE X.

006900 EIBRESP PICTURE 9(8) COMP-4.

007000 EIBRESP2 PICTURE 9(8) COMP-4.

007100 EIBRLDBK PICTURE X.

Page 7: Cobol Cics

Manual de CICS Pag. 7 / 52

Detecção de teclas de serviço.

Através do EIB o programa pode controlar a tecla de serviço (ENTER, CLEAR, PF)

com a que se terminou a transacção (campo EIBRCODE)

Manejo de códigos de retorno.

O EIB também proporciona informação sobre o resultado da execução de um comando

CICS (campo EIBAID).

Compilação.

Ao conter comandos, um programa CICS não se pode compilar como um compilador

normal, já que cada comando produziria um erro.

Os procedimentos da compilação antepõem ao compilador um TRADUTOR que analisa os

comandos CICS e os transforma em instruções COBOL, se estão correctos.

O processo consiste em asteriscar os comandos e incluir numa nova fonte as

linhas de código correspondentes; é a nova fonte a que passa à etapa de

compilação.

No exemplo seguinte mostra-se uma tradução executada pelo emulador CICS de

Realia:

000100* EXEC CICS RECEIVE

000200* MAP('MAPA1')

000300* MAPSET('GRMAP01')

000400* END-EXEC

000500*

000800 SET DFH0-CMD-RECEIVE-MAP TO TRUE

000900 MOVE 'MAPA1' TO DFH0-VAR-MAP

001000 SET DFH0-FLAG-MAPSET TO TRUE

001100 MOVE 'GRMAP01' TO DFH0-VAR-MAPSET

001200 SET DFH0-FLAG-INTO TO TRUE

001300 CALL 'MLI_GETADDR' USING MAPA1I DFH0-ADDR-INTO

001400 PERFORM DFH0-CALL-CICS

Ao rever os resultados da compilação haverá que procurar erros nas listas: na da

tradução e na da compilação. Muitos dos erros da compilação terão a sua origem

em comandos CICS erróneos e, portanto, não traduzidos.

Nota importante.

Normalmente, o executável resultado da compilação e montagem deposita-se

directamente na biblioteca de carga do CICS, mas não é reconhecido por este até

no que se caracteriza como versão actual mediante um dos programas especiais de

serviço.

Page 8: Cobol Cics

Manual de CICS Pag. 8 / 52

Acesso ao CICS e execução de programas

Conexões e desconexões com CICS

Primeiro que tudo, o utilizador há que conectar-se ao CICS, ou seja, abrir uma

sessão de CICS no seu terminal. A conexão realiza-se, normalmente, por selecção

de opção no painel de TSO.

Uma vez em sessão, o CICS informa com uma mensagem de que está rápido para

admitir petições de execução.

Os códigos de transacção escrevem-se sempre nas primeiras posições do écran;

para posicionar o cursor (e em caso de apagar ) emprega-se a tecla CLEAR.

Antes de conectar-se, o utilizador deverá averiguar se necessita identificar-se.

Esta identificação pode não ser necessária nos ambientes CICS empregados para

provas de aplicações e sim para os CICS de exploração com dados reais.

Se o CICS a que se conectou requerer identificação, o primeiro programa que se

deve executar é o programa de SIGNON, cujo código de transacção é CSSN.

Este programa apresenta um écran em que se introduzem os dados:

USERNAME

PASSWORD

e que termina e volta ao CICS, se os dados estão correctos. Então o utilizador

apagará o écran com a tecla CLEAR e introduzirá os códigos de transacção dos

programas que deseje executar.

A desconexão realiza-se executando um programa cujo código de transacção é CSSF,

na forma:

CSSF LOGOFF

o qual termina a sessão do CICS e devolve o controlo ao TSO.

Page 9: Cobol Cics

Manual de CICS Pag. 9 / 52

Execução de programas depois do controle do CICS

A introdução do código de transacção desencadeia uma série de actuações do CICS:

A transacção deposita-se na pilha da entrada do TCP.

No seu devido tempo, é processada pelo KCP:

Valida-se contra a tabela.

Controla-se que o programa associado exista e esteja disponível.

Se não está em memória, passa-se a uma ordem de carga ao PCP.

Cria-se uma TASK WORK AREA (TWA), específica do utilizador e leva-se uma conta

do uso do programa.

Se o programa está em memória, o CICS tende a utilizar a cópia carregada para

processar as transações que cheguem até ele.

A TWA servirá para saber para onde vai a execução das transações de cada

utilizador do programa.

Esta multiprogramação sobre executável, permite poupar memória. As transações

vão-se processando como coordenação a um sistema de interrupções por tempo e

aproveitando os tempos de certas entradas/saídas de dados.

Se esta multiprogramação não é possível, o PCP recebe ordem para carregar outra

cópia do programa; este caso dá-se quando o programa está detido à espera on-

line da introdução de dados a partir do écran.

O programa só se retira da memória do CICS quando o último utilizador realize

uma transacção que devolva o controle ao CICS.

A programação não necessita ter em conta a reutilização de uma cópia de um

programa por parte do CICS, para atender as transações de diversos utilizadores;

tanto os pontos de controle como os intercâmbios de informação estão controlados

através dos dados que o próprio CICS mantém nas TWAs dos distintos utilizadores

do programa.

O programador desenhará os seus programas como se fossem para um só utilizador.

Programação

Todas as instruções pertencem ao set de COBOL, excepto as que se codifiquem para

o intercâmbio de dados, que serão comandos CICS.

Gestão de códigos de retorno e anomalias.

O resultado da execução de um comando CICS, traça-se mediante a informação

contida no EIB. Para isso existem dois métodos:

Investigação directa.

Este método consiste em investigar directamente o conteúdo do campo EIBRCODE do

EIB, que conterá um valor distinto de zero em caso de anomalia.

Tem o inconveniente de que, para poder empreender diferentes actuações em base a

diferentes códigos de erro, há que conhecer o significado dos distintos valores.

Processo de condições excepcionais.

É o método mais usual. O CICS mantém nomes simbólicos para um bom número de

códigos de retorno e certos comandos CICS podem bifurcar a execução se se

produzir uma determinada anomalia.

Os comandos CICS de gestão de condições excepcionais funcionam como armadilhas,

ou seja que entram em acção, a partir do ponto do programa em que tenham sido

Page 10: Cobol Cics

Manual de CICS Pag. 10 / 52

escritos e não é necessário especificá-los depois do comando cuja resposta se

quer analisar.

A forma genérica destes comandos é:

EXEC CICS

HANDLE CONDITION

condição( PARAGRAFO )

.......

END-EXEC

onde condição é o nome simbólico da anomalia e PARAGRAFO o nome do parágrafo de

tratamento da dita anomalia.

A partir do momento em que se execute o comando, sempre que se produza a

anomalia condição, a execução bifurcará ao PARÁGRAFO.

A bifurcação realiza-se por GO TO.

No comando pode-se incluir toda uma lista de anomalias a tratar, lista que pode

ampliar-se com outra ou outras. Pode ainda especificar-se uma lista total ou

parcialmente igual a uma activa, se se deseja, a partir de certo momento

processar umas anomalias de forma diferente:

EXEC CICS

HANDLE CONDITION

condição1( PARAGRAFO1 )

........

END-EXEC

.....

.....

EXEC CICS

HANDLE CONDITION

condição1( PARAGRAFO2 )

.......

END-EXEC

O aspecto de uma anomalia permanece activa até que termine o programa ou se

execute um comando especial para desactivá-la:

EXEC CICS

IGNORE CONDITION

condição1

.......

END-EXEC

Os nomes das condições excepcionais irão aparecendo à medida que se vejam os

comandos a que façam referência.

Por parâmetro no comando.

Em qualquer dos comandos CICS, pode-se aumentar o parâmetro RESP para forçar a

devolução do código de retorno no campo EIBRESP do EIB, na forma:

EXEC CICS

comando parâmetro(valor)

Page 11: Cobol Cics

Manual de CICS Pag. 11 / 52

........

RESP(EIBRESP)

END-EXEC

IF EIBRESP NOT = 0

< ERROR >.

Notas no uso de HANDLE | IGNORE CONDITION.-

Toda a condição excepcional que se produza e não tenha sido explicitamente

HANDLEada ou IGNOREada, provocará uma terminação anormal da tarefa.

Para canalizar as condições excepcionais que não se explicitem, existe a

condição ERROR( PARAGRAFO ).

Gestão de teclas de serviço

O campo DFHAID do EIB contém um código hexadecimal que se corresponde com a

tecla de função que se empregou para terminar uma transacção. O programa pode

tomar decisões na base do dito código:

Por investigação directa.

Este método requer, conhecer bem os códigos correspondentes a cada tecla, ou

incluir bem no programa uma instrução COPY que inclua um ficheiro chamado

DFHAID, em que se tenha nomes simbólicos para cada tecla:

DFHENTER

DFHCLEAR

DFHPF1 - DFHPF12

DFHPA1, DFHPA2

Por processo mediante comando.

Como no caso das anomalias, o CICS reconhece as teclas de função por nomes

simbólicos, e tem um comando que permite bifurcar a execução do programa para um

parágrafo determinado, se se terminou a transacção que repele em programa com

uma delas:

EXEC CICS

HANDLE AID

ENTER(PARÁGRAFO1)

CLEAR(PARÁGRAFO2)

PF1(PARÁGRAFO3)

.....

PF12(PARÁGRAFO14)

PA1(PARÁGRAFO15)

PA2(PARÁGRAFO16)

END-EXEC

A filosofia de funcionamento é a mesma que a do comando HANDLE CONDITION; a

bifurcação realiza-se também pelo método GO TO.

Page 12: Cobol Cics

Manual de CICS Pag. 12 / 52

A tecla CLEAR, que apaga o écran, atribui-se normalmente à função de terminação

da execução do programa. O PARÁGRAFO correspondente contém, para o geral, a

emissão de uma mensagem de fim de execução e um comando RETURN sem parâmetros.

Programação Conversacional e Pseudo-conversacional.

A programação orienta-se para o diálogo entre o programa e o utilizador de forma

que o final de cada tarefa emitirá uma mensagem sobre o seu resultado e pedirá

uma nova transacção.

A forma de pedir as transações condiciona fortemente as possibilidades do CICS

de poder reutilizar uma cópia de um programa determinado, se um utilizador

diferente reclama a execução do mesmo programa.

O esquema mais imediato, consiste em codificar os comandos de leitura de dados

do écran à continuação dos de envio de dados, que representa a forma de

programação chamada conversacional, introduz uma paragem no programa em espera

de dados do écran , que não é quantificável pelo CICS (o utilizador pode ter ido

tomar café).

Se durante esse tempo, outro utilizador solicita a execução desse programa, o

CICS manda carregar uma nova cópia, o qual pode criar graves problemas ao CICS

quando um programa está a ser utilizado por uma grande multidão de utilizadores

(p.ex.. um programa de caixa de um Banco ).

Se se esgota a memória do CICS, este começa a acumular transações no TCP e os

tempos de resposta começam a crescer e, dado que este processo não pode

continuar indefinidamente, chegará um momento em que o sistema se satura e se

'caia'.

A solução a este dilema consiste em não pôr o comando de leitura de dados do

écran imediatamente à continuação do comando que envia os dados.

Se faz uso de uma característica do CICS, que consiste em que depois de certas

condições, o CICS reconhece os dados digitados no écran como transacção para um

determinado programa. Estas condições dão-se:

Ao arrancar o programa.

Ao digitar o código de transacção, o CICS aceita dados iniciais para o programa.

Page 13: Cobol Cics

Manual de CICS Pag. 13 / 52

Quando se cria um programa para este caso, deve ir um comando de leitura de

dados do écran ao início do programa.

Esta técnica, de escassa utilização, pode servir para introduzir por exemplo

contra-senhas que, verificadas pelo programa, validariam o acesso de um

determinado utilizador a um programa.

Ao devolver o controlo ao CICS com um comando de retorno ampliado.

Este comando é um RETURN com uma indicação expressa de programa com o que há que

processar a próxima transacção, em forma de código de transacção:

EXEC CICS

RETURN TRANSID( 'código_de_transacção' )

END-EXEC

Este comando devolve o controle ao CICS de forma explícita, de modo que seja

anulada a problemática do tempo incomensurável que possa levar a completar a

transacção seguinte.

O programa, sem embargo, não é retirado da conta de uso. O parâmetro TRANSID

indica ao CICS que a próxima transacção é para o programa associado a

código_de_transacção.

De modo, RETURN, este comando pode especificar-se em todos os pontos do programa

que se considere necessário.

Esta técnica conhece-se com o nome de programação pseudo-conversacional.

Há, sem embargo uma diferença fundamental com o método conversacional: quando o

utilizador completa a seguinte transacção, o CICS lança a execução do programa

desde o início, tal e como se o tivesse carregado de novo em memória: os dados

de WORKING perdem-se.

Programação Pseudo-conversacional e manutenção de dados de WORKING.

Page 14: Cobol Cics

Manual de CICS Pag. 14 / 52

O problema da perda de dados de WORKING inerente a esta técnica de programação,

soluciona-se fazendo uso de outra facilidade que o CICS proporciona para guardar

dados.

Podem-se guardar dados em áreas do CICS chamadas COMMAREAs, empregando a

formulação seguinte no comando de retorno pseudo-conversacional:

EXEC CICS

RETURN TRANSID('código_de_transacção')

[ COMMAREA( identificativo )

[ LENGTH( n | longitude ) ] ]

END-EXEC

identificativo

O nome de um nível em WORKING.

longitude

Um valor numérico | uma variável em PIC S9(4) COMP.

O significado deste comando é:

Voltar ao CICS até à próxima transacção.

Guardar em COMMAREA longitude bytes a partir de identificativo.

Dado que o CICS está a relançar a execução do programa desde o início, como se o

houvesse carregado de novo, o comando de leitura de dados do écran deverá ir nas

sequências iniciais do programa e será único.

A devolução dos dados, faz-se no CICS sobre uma área chamada DFHCOMMAREA, que

espera encontrar na LINKAGE SECTION do programa e que deverá ser codificada com

nível 01 pelo programador com a longitude correspondente à maior longitude que

empregue no programa.

002700 01 W-LONG PIC S9(4) COMP.

002800 01 W-COMM.

002900 03 W-OPCION PIC X.

003000 03 W-REG.

003100 05 W-CLAVE-AN PIC X(6).

003200 05 W-CLAVE REDEFINES W-CLAVE-AN.

003300 07 W-TALLER PIC 9.

003400 07 W-FAMILIA PIC 9.

003500 07 W-CODIGO PIC 9(4).

003600 05 W-DESC PIC X(20).

003700 05 W-PRECIO PIC 9(5).

003800 05 W-STOCK PIC 9(5).

003900 05 FILLER PIC X(44).

004000 03 BORRADO PIC X.

004010 ..................

004100 LINKAGE SECTION.

004200 01 DFHCOMMAREA PIC X(82).

a sequência de uso seria:

< CARREGAR DADOS EM W-COMM >

MOVE 82 TO W-LONG

Page 15: Cobol Cics

Manual de CICS Pag. 15 / 52

EXEC CICS

RETURN TRANSID(' XXXX' )

COMMAREA( W-COMM )

LENGTH( W-LONG )

END-EXEC

Notas no uso de COMMAREA

Os dados de DFHCOMMAREA devem mover-se para a WORKING, se interessa transmitir

todos ou alguns no próximo retorno ao CICS, já que o parâmetro COMMAREA do

comando faz referência a um item de WORKING.

Na COMMAREA guardaram-se não só dados numéricos e alfanuméricos, mas também

indicadores que possam servir para canalizar a execução quando o CICS relance o

programa.

A COMMAREA é específica da sessão utilizador-programa. O programador não

necessita ter em conta o multiuso do programa.

O parâmetro LENGTH é obrigatório.

Em cada retorno ao CICS, pode variar-se a longitude dos dados a guardar da forma

que mais convenha.

O CICS devolve a longitude dos dados actualmente guardados no campo EIBCALEN do

EIB, quando relança o programa.

O valor deste campo é zero a primeira vez que se executa o programa ou se em

RETURN TRANSID não se especifica COMMAREA.

A DFHCOMMAREA pode subdividir-se em níveis da forma que mais convenha.

Os níveis de identificativo e de longitude podem ser quaisquer, excepto 88.

O CICS interpreta a longitude dos dados a guardar em binário. Uma longitude de

82 numa variável PIC S9(4) COMP-3, pode originar resultados funestos na

execução.

No comando

EXEC CICS

RETURN

END-EXEC

não se pode empregar o parâmetro COMMAREA.

Ao especificar a longitude da COMMAREA, tenha-se em conta que o CICS não

reconhece que o item W-COMM tem 82 bytes de longitude; se neste caso se

especifica um número maior, enviar-se-ão dados a guardar em áreas próximas.

Page 16: Cobol Cics

Manual de CICS Pag. 16 / 52

Comandos CICS

Intercâmbios com o Écran

O intercâmbio com o écran realiza-se através de um módulo do CICS chamado Basic

Mapping Support o BMS.

Este módulo encarrega-se de processar tanto a informação que se envia a um écran

, como os dados da transacção que realiza o utilizador.

No primeiro caso, em conjunção com o TCP, adapta-a ao écran à que há de

aparecer, e no segundo caso, transforma-a em dados processáveis pelo programa

que os vai receber.

Intercâmbios com o Écran (Não Formatada)

Page 17: Cobol Cics

Manual de CICS Pag. 17 / 52

Envio de dados para o Écran.

EXEC CICS

SEND FROM( W-AREA )

LENGTH( n | W-LONG )

[ ERASE ]

END-EXEC

W-AREA

Área de WORKING que contém dados a enviar

n | W-LONG

Longitude da W-AREA que se deseja emitir, que pode ser um valor imediato ou o

nome de uma variável numérica no PIC S9(4) COMP, carregada com o valor

requerido.

Sobre o ajuste da longitude vale o que se diz no caso da COMMAREA.

ERASE

Provoca um apagamento no écran , antes de enviar os dados.

Recepção de dados do Écran

EXEC CICS

RECEIVE INTO( W-AREA )

[ LENGTH( W-LONG ) ]

END-EXEC

W-AREA

Área de WORKING na que se deseja receber os dados.

W-LONG

Deve referenciar uma variável numérica PIC S9(4) COMP, que se carregará com a

longitude do dado a receber ou a máxima esperada.

Condições excepcionais

LENGERR

A longitude dos dados é maior que W-LONG.

Destes dois comandos, emprega-se primeiro para indicar o fim de uma execução

quando o utilizador prime a tecla CLEAR.

Acesso a Ficheiros

Os ficheiros são abertos pelo CICS na fase de arranque, de modo que o programa

não incluirá nenhuma sentença usual de descrição, fecho, abertura ou acesso e

limitar-se-á a usá-los empregando os comandos CICS de acesso.

Page 18: Cobol Cics

Manual de CICS Pag. 18 / 52

Cada acesso a um ficheiro faz com que o CICS comprove que se refenrencia um dos

ficheiros da tabela do FCP e que o tipo de acesso é um dos que tem registados.

O CICS só suporta ficheiros VSAM KSDS.

Leitura indexada.

EXEC CICS

READ DATASET( 'nome_do_ficheiro' | identificador )

INTO( W-REGISTRO )

[ LENGTH( W-LONG ) ]

RIDFLD( W-CLAVE )

[ KEYLENGTH( n ) GENERIC ]

[ GTEQ ]

END-EXEC

nome_do_ficheiro | identificador

Nome simbólico do ficheiro.

Pode escrever-se de forma explícita, entre aspas, ou carregar no identificador,

que será uma variável PIC X(8).

O nome do ficheiro há de estar registado na tabela de controle do FCP.

W-REGISTRO

Área do WORKING destino dos dados.

LENGTH

Indica ao CICS a longitude do registo que se vai ler ou a máxima esperada.

Deve referenciar uma variável numérica PIC S9(4) COMP.

RIDFLD

Procura-se o registo cuja chave está contida na área do WORKING

W-CLAVE.

W-CLAVE não tem que ser necessariamente uma subdivisão do W-REGISTRO.

KEYLENGTH( n ) GENERIC

Procuras por chave genérica.

Se se específica, o CICS ocupará só os n primeiros bytes do W-CLAVE.

GTEQ

Procura por maior ou igual. O defeito é procura por igual.

Condições excepcionais:

Page 19: Cobol Cics

Manual de CICS Pag. 19 / 52

NOTOPEN

Ficheiro não aberto.

Pode ocorrer se o ficheiro está danificado, ou se foi posto fora da linha com

uma transacção de serviço.

DSIDERR

Nome do ficheiro não em tabela.

NOTFND

Registo não encontrado.

LENGERR

Se se há especificado LENGTH, longitude de registo maior que W-LONG; os dados

foram trocados.

INVREQ

Acesso não válido.

ILLOGIG

Erro lógico VSAM.

No seguimento deste apartado, só se irão comentar os parâmetros novos.

Leitura sequencial por ordem de chave.

Esta modalidade permite recuperar registos por ordem de chave, tanto ascendente

como descendente, é dizer, que se podem ler registos para a frente e para trás.

Antes de começar, sem embargo, há que criar um entorno BROWSE dentro do

ficheiro; a leitura sequencial será movida dentro do dito entorno.

O entorno BROWSE estabelece-se desde um determinado registo até ao final do

ficheiro.

Browse.

Estabelecer entorno.

EXEC CICS

STARTBR DATASET( 'nome_do_ficheiro' | identificador )

RIDFLD( W-CLAVE )

[ KEYLENGTH(n) GENERIC ]

[ GTEQ ]

END-EXEC

O entorno estabelece-se desde o registo que cumpre as especificações de procura,

até ao final do ficheiro.

Este comando não lê o registo, só põe um ponteiro no registo localizado.

Page 20: Cobol Cics

Manual de CICS Pag. 20 / 52

Condições excepcionais

NOTOPEN

DSIDERR

NOTFND

Não se encontra registo no início do entorno.

Não se estabelece BROWSE.

ILLOGIC

Anular entorno.

EXEC CICS

ENDBR DATASET( 'nome_do_ficheiro' | identificador )

END-EXEC

O entorno fica anulado. Também o anulam os comandos RETURN e RETURN TRANSID.

Voltar ao registo do início do entorno.

EXEC CICS

RESETBR DATASET( 'nome_do_ficheiro' | identificador )

END-EXEC

Uma forma fácil de retomar o início do entorno, depois de ter-se movido lendo

dentro dele.

Condições excepcionais

Para estes dois comandos, são as mesmas que as do comando STARTBR, excepto

NOTFND.

Leitura sequencial no entorno.

EXEC CICS

READNEXT | READPREV

DATASET( 'nome_do_ficheiro' | identificador )

INTO( W-REGISTO )

[ LENGTH( W-LONG ) ]

RIDFLD( W-CLAVE )

[ KEYLENGTH( n ) ]

END-EXEC

O CICS utiliza o conteúdo do W-CLAVE para localizar o seguinte registo em ordem

de chave ascendente ( READNEXT ) ou descendente ( READPREV ), excepto se o

comando vai imediatamente atrás do STARTBR ou RESETBR, em cujo caso lê-se o

registo no início do entorno.

Esta peculiaridade faz com que sejam possíveis saltos tanto para a frente como

para trás, sem variar adequadamente o conteúdo do W-CLAVE antes de executar o

comando de leitura.

Page 21: Cobol Cics

Manual de CICS Pag. 21 / 52

Condições excepcionais

NOTOPEN

DSIDERR

ENDFILE

Fim do ficheiro.

Se foi planeado ler depois do último registo do entorno; se se retrocede fora do

entorno, não se produz condição excepcional.

Este comando nunca produz a condição NOTFND.

ILLOGIC

Escritura de registos.

A escritura é sempre indexada, já que o CICS só suporta ficheiros VSAM KSDS.

EXEC CICS

WRITE DATASET( 'nome_do_ficheiro' | identificador )

FROM( W-REGISTO )

[ LENGTH( n | W-LONG ) ]

RIDFLD( W-CLAVE )

END-EXEC

LENGTH

Pode utilizar-se, bem como um valor imediato, ou como uma variável numérica em

PIC S9(4) COMP para indicar os bytes que se vão gravar em W-REGISTRO.

RIDFLD

Indica uma variável que contém o valor da chave do registo a gravar.

Condições excepcionais

NOTOPEN

DSIDERR

DUPREC

Chave repetida a nível do Indice Primário.

Não se grava o registo.

DUPKEY

Chave repetida a nível do Índice Alternativo.

Grava-se o registo se o Índice admite repetições.

ILLOGIC

Modificação de registos.

Previamente à modificação há que bloquear o registo a tratar. Isto faz-se com

uma variante do comando de leitura indexada:

EXEC CICS

READ .......

Page 22: Cobol Cics

Manual de CICS Pag. 22 / 52

......

UPDATE

END-EXEC

Condições excepcionais

São as mesmas que as do comando de leitura.

INVREQ ( acesso não válido ) pode ocorrer também pelo facto de que outra tarefa

já tenha bloqueado o registo que se pretende bloquear.

O registo fica bloqueado, até que se modifique, se apague ou se anule o bloqueio

com um comando:

EXEC CICS

UNLOCK DATASET( 'nome_do_ficheiro' | identificador )

END-EXEC

ou se chegue a um comando RETURN ou RETURN TRANSID.

O bloqueio de um registo não deverá fazer-se mais quando já se tenha decidido

fazer a modificação, já que realmente não é possível bloquear um só registo. O

VSAM bloqueia todo um Intervalo de Control.

Por outra lado, num ambiente de programação pseudo-conversacional, a técnica de

bloqueio imediatamente antes da modificação, vem imposta pelo facto de que

depois da leitura de apresentação de um registo, se sai do programa com RETURN

TRANSID.

A modificação faz-se com o comando:

EXEC CICS

REWRITE DATASET( 'nome_do_ficheiro' | identificador )

FROM(W-REGISTO)

[ LENGTH( W-LONG ) ]

END-EXEC

Condições excepcionais

NOTOPEN

DSIDERR

ILLOGIC

Apagar registos.

Para apagar há dois métodos:

Registo bloqueado.

EXEC CICS

READ .......

......

UPDATE

Page 23: Cobol Cics

Manual de CICS Pag. 23 / 52

END-EXEC

EXEC CICS

DELETE DATASET( 'nome_do_ficheiro' | identificador )

END-EXEC

Para este método vale o dito no comando REWRITE no que respeita aos bloqueios.

Por chave.

EXEC CICS

DELETE DATASET( 'nome_do_ficheiro' | identificador )

RIDFLD( W-CLAVE )

[ KEYLENGTH( n ) GENERIC ]

END-EXEC

Este comando pode apagar registos com chave única W-CLAVE através do Índice

Principal, chaves repetidas através de Índices Alternativos e chaves genéricas

através de ambos os tipos de conjuntos de índices.

Intercâmbios com o Écran ( Formatado )

O envio e recepção de dados formatados faz-se depois do controlo de umas

entidades de BMS chamadas mapas ( MAPS ).

Um mapa é um programa de controle que permite colocar displays sobre o écran

itens numa certa ordem e em posições pré-determinadas.

O mapa BMS, compõe-se de dois elementos:

Mapa físico

O programa de controlo em si.

Mapa lógico

Um subproduto da geração do anterior em forma de uma estrutura a incluir no

programa, e que define áreas de WORKING para a recepção e o envio dos dados.

Page 24: Cobol Cics

Manual de CICS Pag. 24 / 52

Os mapas agrupam-se em grupos de mapas ou MAPSETS.

Dada a grande quantidade de mapas que se podem chegar a utilizar entre todos os

programas de todas as aplicações CICS, este não regista os mapas em si, senão os

MAPSETS, de modo que são estes os que se levam nas tabelas do entorno.

No caso de ter que desenvolver um mapa novo, o programador tem duas opções:

Incluir o mapa num dos MAPSETS já existentes.

Abrir um novo MAPSET, para o qual terá que pôr-se em contacto com a pessoa

responsável do CICS, para que pratique a entrada correspondente nas tabelas.

A descrição destas entidades faz-se mediante umas instruções chamadas macros

BMS, que têm o formato DFHMxx e às que se afectam com um número de parâmetros.

O formato de uma macro BMS é:

onde label é uma etiqueta opcional e o carácter X (pode variar segundo o

sistema), na coluna 72 indica continuação da instrução na coluna 16 da seguinte

linha.

Os parâmetros podem ver-se afectados por vários valores; e nesse caso escrevem-

se entre parêntesis e separados por vírgulas.

Descrição de mapas e grupos

MAPSET.

Define-se com a macro DFHMSD:

nomset DFHMSD TYPE=DSECT | MAP | &SYSPARM,

[ STORAGE=AUTO, ]

[ CTRL=( FSET | FRSET,FREEKB ), ]

DATA=FIELD | BLOCK,

[ EXTATT=YES, ]

TIOAPFX=YES | NO,

MODE=IN | OUT | INOUT,

LANG=ASM | COBOL | PLI | RPG,

[ VALIDN=( MUSTFILL,MUSTENTER ) ]

nomset

Nome do MAPSET ( máximo 7 caracteres ) e deve estar registado nas tabelas do

CICS.

TYPE

Tipo de mapas a criar:

Page 25: Cobol Cics

Manual de CICS Pag. 25 / 52

DSECT

Só mapas físicos.

MAP

Só mapas lógicos.

&SYSPARM

Utilizar como guia o conteúdo da variável do sistema ( normalmente instala-se

com um valor que faz com que se criem ambos os tipos de mapas ).

STORAGE=AUTO

Cada mapa ocupa a sua própria memória e não se redefinem.

A alternativa é BASE=nome_área.

CTRL

Operações complementares ao display dos mapas:

FSET

Todos os campos em estado activo.

FRSET

Todos os campos em estado inactivo.

O significado dos termos activo e inactivo explica-se na recepção de dados.

FREEKB

Liberar o teclado, que o BMS bloqueia no princípio, obrigando a premir a tecla

RESET.

DATA

Formato dos dados na comunicação BMS-programa:

FIELD

Cada dado no formato e tamanho do seu campo respectivo. É o defeito.

BLOCK

Dados bloqueados com um prefixo de longitude.

EXTATT=YES

Incluir no mapa lógico campos para a gestão de atributos estendidos (cor, vídeo

inverso).

TIOAPFX

Page 26: Cobol Cics

Manual de CICS Pag. 26 / 52

Deve especificar-se YES, se se deseja executar o intercâmbio de dados até, e

desde a área de mapa lógico de WORKING, já que o defeito é NÃO.

MODE

Tipo de operação de entrada/saída:

IN

Só entrada.

OUT

Só saída.

INOUT

Entrada e saída.

LANG

Linguagem de criação dos mapas simbólicos.

O defeito é ASM ( Assembler ).

VALIDN

MUSTFILL

Há que preencher todos os campos

MUSTENTER

Há que teclar ao menos uma posição em todos os campos.

Estes parâmetros afectam todos os mapas de MAPSET.

MAPA EN MAPSET.

Define-se com a macro DFHMDI:

nommap DFHMDI SIZE=( linhas,colunas) ,

[ LINE=linha,COLUMN=coluna, ]

[ CTRL=( FSET | FRSET,FREEKB ), ]

[ DATA=FIELD | BLOCK, ]

[ TIOAPFX=NO | YES, ]

[ VALIDN=( MUSTFILL,MUSTENTER ) ]

nommap

Nome do mapa ( máximo 7 caracteres ).

Page 27: Cobol Cics

Manual de CICS Pag. 27 / 52

SIZE

Tamanho do mapa em linhas por colunas.

LINE,COLUMN

Posição do mapa no écran; posição da esquina superior esquerda.

Os restantes parâmetros têm o mesmo significado que no caso do MAPSET. A sua

especificação pode corrigir o que se tenha feito naquele.

ITEM EN MAPA.

Define-se com a macro DFHMDF:

[label] DFHMDF POS=número | ( linha,coluna ),

LENGTH=número,

[ ATTRB=( [ control_cursor ][,tipo][,representação][,]

[ IC ][ ,FSET ] ), ]

[ INITIAL='tira', ]

[ JUSTIFY=(LEFT | RIGHT,BLANK | ZERO), ]

[ PICIN='tira', ]

[ PICOUT='tira', ]

[ GRPNAME=nome_gupo, ]

[ OCCURS=número, ]

[ VALIDN=( MUSTFILL,MUSTENTER ) ]

LABEL

Cumpre dois cometidos:

Se se deixa em branco

Define o item como literal, sem reflexo no mapa lógico.

Se se especifica ( máximo 7 caracteres )

Define o item como campo de dados e o item refletir-se-á no mapa lógico para o

processo do seu conteúdo.

POS

Posição do campo dentro da janela que define o mapa.

LENGTH

A longitude do item.

ATTRB

control_cursor

ASKIP

Salto automático.

UNPROT

Campo não protegido; podem-se digitar dados.

PROT

Campo protegido; só se podem premir as teclas de tabulação, retorno de carga e

ENTER.

Page 28: Cobol Cics

Manual de CICS Pag. 28 / 52

tipo

NUM

Campo numérico.

representação

NORM

Intensidade normal.

BRT

Brilhante.

DRK

Invisível.

IC

O cursor aparecerá neste campo.

FSET

Campo em estado activo.

INITIAL

Valor inicial que se quer atribuir ao campo.

Se se ultrapassa a coluna 71, põe-se o carácter de continuação na 72 e continua-

se na linha seguinte na coluna 16, sem abrir novas aspas.

JUSTIFY

Alineação de dados dentro do campo e recheio de posições não significativas:

LEFT | RIGHT

Alineação à direita | esquerda.

BLANK | ZERO

Recheio com brancos | zeros.

PICIN

PICOUT

Aspecto dos dados à entrada e saída. A máscara codifica-se entre aspas simples,

não se pode utilizar a fórmula de repetição.

GRPNAME

Associação do campo a outro como nível superior.

OCCURS

Definição de tabelas.

Notas

A omissão da etiqueta, declara o campo como um literal. Ao não reflexar-se este

no mapa lógico, é quase obrigatório empregar o parâmetro INITIAL e assinalar o

atributo ASKIP.

A utilização do PICOUT como formato de edição pode acarretar problemas na

recepção de dados numéricos, dado que os pontos e vírgulas da máscara não são

valores numéricos.

Veja-se o comando BIF DEEDIT na secção de comandos especiais.

A longitude do campo terá de especificar-se como conserto ao tamanho real que

vai a ocupar no écran, caracteres de edição incluidos.

O BMS representa fisicamente o atributo como uma posição mais no écran, à

esquerda do campo. Por isso há que ter-se a precaução para não cruzar campos

consecutivos.

A primeira coluna disponível de uma linha é a 2, pelo display de atributo.

Page 29: Cobol Cics

Manual de CICS Pag. 29 / 52

Normalmente o campo define-se de modo que quepa inteiro numa linha.

O BMS não reconhece no écran mais que os inicios do campo, o qual faz com que se

possa seguir teclando mais além do fim.

Isto no princípio não apresenta inconveniente, pois só serão entregues na

recepção as posições definidas para o campo, pode ser causa de que se tecle fora

de um campo a informação correspondente. A solução normalmente adoptada consiste

em definir terminadores ( campos ASKIP,DRK ) de tal forma que o seu byte de

atributo caia imediatamente à continuação da última posição teclável de um

campo.

Fim da descrição.

No fim da descrição, a continuação da última DFHMDF, do último mapa, do grupo,

assinala-se com uma macro DFHMSD:

DFHMSD TYPE=FINAL

END

Geração do grupo de mapas. Estrutura do mapa lógico

A fonte de descrição, sempre de um grupo completo, processa-se mediante um

compilador especial, que gerará:

Só mapas físicos

TYPE=DSECT

Só mapas lógicos

TYPE=MAP

Ambos

TYPE=&SYSPARM

O mapa lógico contirá:

Uma só especificação da área

MODE IN e MODE OUT.

Duas especificações da área

MODE INOUT.

O gerador utiliza o nome do mapa para nomear as áreas do mapa lógico,

denominando a área de entrada MAPAI e a de saída MAPAO, se o nome do mapa é MAPA

e segundo o parâmetro TYPE da macro DFHMSD.

A estrutura do mapa lógico que se chama MAPA1, com MODE=INOUT, DATA=FIELD e dois

campos de dados CAMPO1 e CAMPO2, dos quais o primeiro é numérico de cinco

posições e o segundo alfanumérico de vinte, é:

Page 30: Cobol Cics

Manual de CICS Pag. 30 / 52

Macros BMS.

...........

MAPA1 DFHMDI SIZE=( 24,80 ) ,

CTRL=( FRSET,FREEKB ),

DATA=FIELD,

TIOAPFX=YES

CAMPO1 DFHMDF POS=( linha,coluna ),

LENGTH=5,

ATTRB=( UNPROT,NUM )

CAMPO2 DFHMDF POS=( linha,coluna ),

LENGTH=20,

ATTRB=UNPROT

Mapa lógico em WORKING.

01 MAPA1I.

02 FILLER PIC X(12).

02 CAMPO1L PIC S9(4) COMP.

02 CAMPO1F PIC X.

02 FILLER REDEFINES CAMPO1F.

03 CAMPO1A PIC X.

02 CAMPO1I PIC 9(5).

02 CAMPO2L PIC S9(4) COMP.

02 CAMPO2F PIC X.

02 FILLER REDEFINES CAMPO2F.

03 CAMPO2A PIC X.

02 CAMPO2I PIC X(20).

01 MAPA1O REDEFINES MAPA1I.

02 FILLER PIC X(12).

02 FILLER PIC X(3).

02 CAMPO1O PIC 9(5).

02 FILLER PIC X(3).

02 CAMPO2O PIC X(20).

FILLER

É consequência de TIPOAPFX=YES e contém informação de controlo necessária para

entregar os dados no mapa lógico.

CAMPOxL

Contirá a longitude do campo em recepção.

Page 31: Cobol Cics

Manual de CICS Pag. 31 / 52

CAMPOxA

Contirá em atributo do campo em recepção.

CAMPOxI

CAMPOxO

Contirão o dado.

Notas à Geração.

Os nomes do campo, mapa e grupo não podem exceder 7 caracteres de longitude.

Os nomes do campo e mapa têm de ser únicos em todo o grupo.

O primeiro mapa de um grupo pode levar o mesmo nome que o grupo.

O caso DATA=BLOCK não dá lugar a um mapa lógico como o de cima, mas só a uma

área seguida, na que os dados se entregarão precedidos de uma etiqueta que

indica a sua longitude real. Tem a vantagem de poupar caracteres em transmissão,

mas complica enormemente o processo, pelo que apenas se utiliza.

O mapa lógico inclui-se no programa COBOL codificado, normalmente na WORKING,

uma instrução COPY nomset.

Transmissão de dados e MDT.

Um dos pontos débeis do CICS é a sua sensibilidade a congestões na transmissão

de dados, sobretudo na recepção. A sobrecarga faz que o sistema funcione cada

vez mais devagar, e chegando à saturação, se produza uma caída.

Page 32: Cobol Cics

Manual de CICS Pag. 32 / 52

Mediante técnicas adequadas, o programador deve evitar a transmissão

desnecessária de dados.

Uma destas técnicas consiste na gestão adequada de um indicador a nível de campo

chamado Modified Data Tag ou MDT. Este indicador toma os valores:

MDT=0

Não se há digitado nada.

MDT=1

Há-se digitado ao menos uma posição.

de tal modo que só se transmitem desde o terminal os campos cujo MDT valha 1, é

dizer todos os campos activos.

O MDT põe-se em 1:

Digitando ao menos uma posição do campo

Utilizando o atributo FSET na definição do campo, mapa ou grupo.

O MDT põe-se a 0:

Utilizando o atributo FRSET na definição de campo, mapa o grupo com um comando

de envio de dados.

O atributo FSET não deveria ser utilizado, já que tem como consequência a

transmissão do dado que contém um campo, ainda que não se tenha digitado nada.

O dado deverá ter sido melhor guardado em COMMAREA para o seu posterior

tratamento.

Os mapas deveriam definir-se sempre com os campos inactivos (FRSET).

Recepção de dados do écran.

EXEC CICS

RECEIVE MAP( 'nome_do_mapa' | identificador )

[ MAPSET( 'nome_do_mapset' | identificador ) ]

[ INTO( identificador ) ]

END-EXEC

Page 33: Cobol Cics

Manual de CICS Pag. 33 / 52

MAPSET

Pode omitir-se, se o mapa tem o mesmo nome do grupo.

INTO

Pode omitir-se, se o mapa lógico de entrada tem o mesmo nome do mapa com o

sufixo I.

Identificador

Os nomes do mapa e grupo podem carregar-se numa variável PIC X(8).

O BMS lê do écran os campos activos (MDT=1), e utiliza os prefixos de cada campo

no mapa lógico para depositar neles a longitude do campo e o atributo

respectivamente.

Para DATA=FIELD, a longitude é a da definição.

O identificador de nome igual ao do campo com o sufixo I, contém o dado

encolunado como arranjo à natureza e/ou definição.

Para os campos inactivos, o BMS recebe um só carácter, e com base nele, efectua

o recheio dos identificadores associados ao campo seguinte forma:

0 - à longitude.

LOW-VALUES - ao atributo e ao campo de entrada.

Se um campo tiver sido apagado com a tecla EOF, o BMS envia:

0 - à longitude.

X '80' - ao atributo.

LOW-VALUES - ao campo de entrada.

Condições excepcionais.

MAPFAIL

Tem duas causas:

O écran não está formatado.

Tal é o caso quando se ensaia RECEIVE no início do programa e a transacção é la

inicial ( código de transacção ).

Não se recebeu nenhum dado

Os campos estão inactivos e não se digitou nada.

Envio de dados para o écran.

EXEC CICS

SEND MAP( 'nome_do_mapa' | identificador )

[ MAPSET( 'nome_do_set' | identificador ) ]

Page 34: Cobol Cics

Manual de CICS Pag. 34 / 52

[ FROM( identificador ) ]

[ ERASE | ERASEUP ]

[ CURSOR( n ) | CURSOR ]

[ MAPONLY | DATAONLY ]

[ FRSET ]

[ ACCUM ]

END-EXEC

FROM

Pode omitir-se se o identificador contém o nome do mapa com o sufixo O.

ERASE

Apaga o écran antes do display.

ERASEUP

apaga os campos UNPROT antes do display.

CURSOR( n )

Coloca o cursor na posição n do mapa.

CURSOR

Coloca o cursor no primeiro campo cuja longitude, antes do envio dos dados, se

tenha carregado con -1.

MAPONLY

Envia só o mapa físico.

DATAONLY

Envia só o mapa lógico.

FRSET

Põe a zero os MDTs de todos os campos.

ACCUM

O envio retém-se e acumula-se a mensagem em forma de página, sinalizando-se a

acumulação com a condição excepcional OVERFLOW.

Finalizada a acumulação de mensagens, inicia-se o display invocando uma

transacção de serviço do CICS com o comando:

EXEC CICS

SEND PAGE

END-EXEC

Page 35: Cobol Cics

Manual de CICS Pag. 35 / 52

que habilita a paginação mediante teclas PF.

Condições excepcionais.

INVMPSZ

Tamanho de mapa incorrecto.

OVERFLOW

Produz-se na acumulação de mensagens.

Notas no uso de SEND MAP.

Em mapas INOUT, é recomendável apagar com LOW-VALUES a área de saída, antes de

carregar os dados; os campos de saída não carregados não se transmitirão para o

écran.

Os itens com sufixo A o F podem empregar-se para mover para eles valores que

troquem para o próximo envio os atributos do campo.

Assim, se se detectou que um campo contém um valor que não se deve modificar

(p.ex. a chave de um registo cujos dados se apresentam para modificação), pode

actualizar-se o atributo do campo para ASKIP, de modo que o cursor não se

detenha.

O sistema subministra um ficheiro, que nos bytes de atributo, se os há designado

por nomes simbólicos, chamado DFHBMSCA; este fichero pode incluir-se na WORKING

do programa mediante uma instrucción COPY.

Se se há pedido a inclusão de atributos estendidos ( EXTATT=YES ), o gerador

inclui no prefixo de cada campo no mapa lógico um campo mais no que se

entrega/pode negociar-se o dito atributo.

DFHBMSCA

Atributos do campo.

DFHBMASK ASKIP

DFHBMUNP UNPROT

DFHBMUNN UNPROT,NUM

DFHBMPRO PROT

DFHBMBRY BRT

DFHBMDAR DRK

DFHBMFSE FSET

DFHBMPRF PROT,FSET

DFHBMASF ASKIP,FSET

DFHBMASB ASKIP,BRT

Atributos estendidos.

Page 36: Cobol Cics

Manual de CICS Pag. 36 / 52

Cor.

DFHDFCOL Cor por defeito

DFHBLUE

DFHRED

DFHPINK

DFHGREEN

DFHTURQ

DFHYELLO

DFHNEUTR

Apresentação.

DFHDFHI Brilhante

DFHBLINK Pestanejo

DFHREVRS Vídeo inverso

DFHUNDLN Sombreado

Caracteres de controle para saída não formatadas à impressora.

DFHBMPNL New Line

DFHBMPEM Fim da mensagem.

Ferramentas Suplementares.

Filas de Registos.

As filas de registos empregam-se para a gestão de dados no CICS.

A sua utilização supõe uma análise prévia da adequação da ferramenta às

necessidades traçadas.

As ferramentas de manejo de Listas são TRANSIENT DATA ( TD ) e TEMPORARY STORAGE

( TS )

TANSIENT DATA ( TD ).

Gestão de Dados Transitários.

A função TD compreende basicamente:

Os módulos de controle de Dados Transitários

Uma tabela de destinos ( DCT ).

Uma série de mandatos para petições ao TD

e causa dos serviços:

Manejo de Listas ( Dados Intrapartição )

Suporte de ficheiros sequenciais ( Dados Extrapartição ).

Page 37: Cobol Cics

Manual de CICS Pag. 37 / 52

Tanto num caso como no outro, o tipo de dado define-se numa Tabela de Destinos

na qual se identifica por meio de um código de quatro caracteres e se descreve o

tipo e configuração.

Dados Intrapartição ( TD INTRA ).

Listas de Registos armazenados em ficheiros VSAM ESDS e têm estas

características:

O programador do sistema pode defini-las como reusáveis ou não reusáveis.

Uma lista não reusável só permite uma leitura, já que só se mantém leitura

sequencial para a frente. A efeitos internos, o CICS considera como apagado um

registo lido.

Os registos podem ser de longitude variável.

As operações admitidas são: leitura, escrita de um registo e moldagem da lista.

Só se pode associar o arranque automático de uma tarefa quando o número de

registos armazenados na lista chegue a um valor determinado (trigger).

Dados extrapartição ( TD EXTRA ).

São ficheiros sequenciais definidos como tais na DCT.

Pode-se ler e escrever.

Não se pode vaziar o fichero.

As operações de intercâmbio de dados executam-se mediante os comandos:

Leitura.

EXEC CICS

READQ TD QUEUE( 'nome' | identificador )

INTO( identificador )

[ LENGTH( identificador ) ]

END-EXEC

nome

É o da lista a aceder, em forma explícita, entre vírgulas, ou carregado numa

variável PIC X(8). Há de existir na Tabela de Control de Destinos.

INTO

Aponta a uma área de WORKING, destino dos dados.

LENGTH

Especifica uma variável em PIC S9(4) COMP que contém a longitude dos dados a

ler, ou a maior esperada.

Condições excepcionais.

NOTOPEN

Lista não disponível.

Page 38: Cobol Cics

Manual de CICS Pag. 38 / 52

O ficheiro que a suporta não está aberto.

LENGERR

Se se especifica LENGTH, longitude dos dados excede ao indicado.

QIDERR

Lista não existe.

QZERO

Lista não reusável vazia ou que há chegado ao fim.

Escrita.

EXEC CICS

WRITEQ TD QUEUE( 'nome' | identificador )

FROM( identificador )

[ LENGTH( n | identificador ) ]

END-EXEC

Condições excepcionais.

NOTOPEN

NOSPACE

Não há espaço no disco.

QIDERR

Vazio.

EXEC CICS

DELETEQ TD QUEUE( 'nome' | identificador )

END-EXEC

Condições excepcionais.

QIDERR

TEMPORARY STORAGE ( TS ).

Page 39: Cobol Cics

Manual de CICS Pag. 39 / 52

Memória Temporária.

Listas de Registos, que não necessitam estar registadas em nenhuma tabela,

suportadas:

Em memória

Em disco ( VSAM ESDS ).

As características mais importantes são:

Criação dinâmica de listas.

Recuperação sequencial ou ao acaso.

Actualização.

Registos de longitude variável.

Apagamento e destruição de uma lista.

Os registos das listas TS ( itens ), podem recuperar-se mais de uma vez.

A lista em si pode definir-se de tal forma que o CICS a guarde de uma sessão

para outra, ainda que no princípio será uma lista que se perderá ao parar o

CICS.

O acesso faz-se com os comandos:

Leitura.

EXEC CICS

READQ TS QUEUE( 'nome' | identificador )

INTO( identificador )

[ LENTGH( identificador ) ]

ITEM( n ) | NEXT

END-EXEC

nome

Lista à que se quer aceder, é uma tira de até oito caracteres ou o valor de uma

variável PIC X(8).

INTO

Aponta a uma área em que se vai receber o item.

LENGTH

Referencia uma variável em PIC S9(4) COMP na que se deposita a longitude

desperada do item ou a máxima longitude que se pretende ler.

ITEM( n )

Recuperar o item número n.

NEXT

Recuperar o item seguinte ao último lido.

Condições excepcionais.-

Page 40: Cobol Cics

Manual de CICS Pag. 40 / 52

QIDERR

Nome lista não encontrado.

ITEMERR

Com ITEM( n )

Item não encontrado.

Com NEXT

Fim da lista.

Escrita.

EXEC CICS

WRITEQ TS QUEUE( 'nome' | identificador )

FROM( identificador )

[ LENGTH( n | identificador ) ]

[ ITEM( n ) [ REWRITE ] ]

MAIN | AUXILIARY

END-EXEC

nome

É o da lista a aceder e será uma tira de até oito caracteres.

Pode escrever-se de forma explícita, entre vírgulas, ou carregá-lo numa variável

PIC X(8).

Se não se emprega o parâmetro REWRITE e a lista não existe, o CICS cria-a e

mantém-na acessível a todas as tarefas.

O problema de evitar compartições de dados não desejadas, soluciona-se gerando

nomes de lista únicos por tarefa, por exemplo, encadeando os conteúdos dos

campos TRNID e TRMID do EIB, ( respectivamente identificativo de transacção e do

terminal ).

ITEM( n )

Assinalar ao item a gravar o número n. Se não se específica, o CICS assinala o

número do último mais um.

REWRITE

Actualizar o item n. Se se específica, há que especificar também ITEM.

MAIN

Se a lista não existe, cria-se em memória. A alternativa e o defeito é

AUXILIARY, que cria a lista em disco.

Condições excepcionais.-

Page 41: Cobol Cics

Manual de CICS Pag. 41 / 52

QIDERR

Com REWRITE, nome da lista não encontrado.

ITEMERR

Com ITEM

Item já existente.

Com ITEM e REWRITE

Item não encontrado.

Apagado.

EXEC CICS

DELETEQ TS QUEUE( 'nome' | identificador )

END-EXEC

Condições excepcionais.

QIDERR

Gestão de dados por pontos.

Este método permite a gestão de dados por acesso directo às áreas de dados do

CICS, evitando o trabalho ( e tempo ) de ter que transvasá-los às áreas do

WORKING do programa.

O método é uma alternativa ao visto, até agora chamado MODO MOVE e constitui o

MODO LOCATE em que as referências INTO que especificam áreas de WORKING,

substituem-se por referências a pontos.

O modo LOCATE consiste em utilizar directamente os dados que o CICS deposita na

COMMON WORK AREA ( CWA ) e que, no modo MOVE, transvasam-se a áreas de WORKING

do programa.

Por isso, utilizam-se espelhos das áreas de dados na LINKAGE SECTION do programa

em vez de áreas de WORKING e definem-se pontos.

Block Locator for Linkage.

Em geral, um programa montador (LINK), define por conta própria, um ponto para

cada nível 01 que encontre em LINKAGE, denominado BLL (Block Locator for

Linkage).

O conjunto destes BLLs forma uma lista apontada por um BLL adicional, também

gerado pelo próprio montador.

Page 42: Cobol Cics

Manual de CICS Pag. 42 / 52

Um programa com:

LINKAGE SECTION.

01 AREA-1 PIC X(100).

daria lugar a que o montador gera-se uma lista com os elementos:

PIC S9(8) COMP. Ponto à lista

PIC S9(8) COMP. Ponto à AREA-1

e se modifica-se da seguinte forma:

LINKAGE SECTION.

01 BLL-CELLS.

02 FILLER PIC S9(8) COMP.

02 PUNT-AREA-1 PIC S9(8) COMP.

01 AREA-1 PIC X(100).

o item BLL-CELLS se superpondría à lista do BLL geradas pelo montador, de modo

que carregando convenientemente PUNT-AREA-1 poderá aceder-se à área AREA-1 do

programa invocante.

Na prática, sem obstáculo, isto não pode fazer-se desta forma tão intuitiva,

pois o COBOL trabalha por referência e não por valor, mas alguns entornos

operativos dispõem-se da forma de entregar um valor em lugar de uma referência.

Tal é o caso do CICS, em que o traductor incorpora sempre uma LINKAGE SECTION

com quatro níveis 01, se o programador não o faz, de forma que dá lugar a uma

lista:

BLL1 EIB

BLL2 COMMAREA

BLL3 FICTICIO1 aponta-se a si mesmo

BLL4 FICTICIO2

Se o programador codifica BLLs na LINKAGE SECTION do programa, fará-o na forma

que se descreve mais acima; o montador do enlace insere na BLL3 a direcção do

BLL-CELLS, de modo que BLL4 contirá a direcção da AREA-1.

No modo LOCATE, um comando:

EXEC CICS

READ DATASET( 'FICHERO' )

RIDFLD( W-CLAVE )

SET( PUNT-AREA-1 )

UPDATE

END-EXEC

põe no PUNT-AREA-1 a direcção do segmento da CWA que contém o registo lido, e

por tanto, é acessível ao programa COBOL o item AREA-1 e todas as subdivisiões e

redefinições que possa ter.

Se, depois de alterar o conteúdo da AREA-1 executa-se:

Page 43: Cobol Cics

Manual de CICS Pag. 43 / 52

EXEC CICS

REWRITE DATASET('FICHEIRO')

FROM( AREA-1 )

END-EXEC

modifica-se o registo directamente desde AREA-1, apontada por PUNT-AREA-1.

Quando não existe o transvase de dados da CWA a WORKING, o processo é muito mais

rápido.

A longitude do ponteiro quase sempre é de 8 bytes, ainda que para determinados

acessos possa ser de 4.

Enlace com outros programas.

Quando as necessidades o requerem, um programa pode pedir a execução de outro: o

CICS seguirá considerando esta actividade como a mesma tarefa.

O passo do controle de um programa a outro pode fazer-se de duas maneiras:

Enlace a nível distinto.

De um programa pede-se a execução de outro, e o programa invocante fica detido

até que o invocado lhe devolve o controle.

Enlace ao mesmo nível.

Um programa cumpre com a sua função e pede a execução de outro de maneira que o

invocado substitua ao invocante.

O primeiro caso dá-se ao enlaçar com programas que executam funções muito

concretas, p.ex. ler um registo de um ficheiro; o programa invocante esperará

que o invocado recupere a informação que se lhe pede.

O segundo caso dá-se em programas que fazem de menú e apresentam uma selecção de

opções. Uma vez seleccionada uma opção, o programa não tem que cumprir missão e

a memória que ocupa poderia ser utilizada pelo que se carrega.

Em ambos os casos, pode passar-se dados ao programa invocado utilizando a

COMMAREA.

A referência ao programa invocado faz-se directamente pelo seu nome e não pelo

seu código de transacção; o controle faz-se através da tabela do PCP.

Enlace a nível distinto.

EXEC CICS

LINK PROGRAM( 'nome_do_programa' )

[ COMMAREA( identificador )

[ LENGTH( n | identificador ) ] ]

END-EXEC

Enlace ao mesmo nível.

EXEC CICS

Page 44: Cobol Cics

Manual de CICS Pag. 44 / 52

XCTL PROGRAM( 'nome_do_programa' )

[ COMMAREA( identificador )

[ LENGTH( n | identificador ) ] ]

END-EXEC

Notas no uso de XCTL/LINK.-

O comando RETURN sem parâmetros leva ao programa de nível superior, ou ao CICS

se o nível é o mais alto. Se o programa invocado leva código de transacção

associado, não há nenhum impedimento em mantê-lo em sessão com RETURN TRANSID,

se as necessidades da aplicação o requerem.

Se o programa foi invocado com LINK, o programa invocante fica detido até que se

lhe devolva o controle. O único comando que devolve o controle é:

EXEC CICS

RETURN

END-EXEC

e também no caso de que o programa invocante leve código de transacção

associado.

Se um programa PROGTR03 com código de transacção TR03 emite um comando LINK, e o

programa invocado tenta devolver-lhe o controle com:

RETURN TRANSID('TR03')

o CICS carregará uma nova cópia de PROGTR03.

Se um programa LINKado recebe dados e deve contestar, utilizará a sua própria

DFHCOMMAREA para escrever nela os datos que deseja enviar ao programa invocante.

No caso deste tipo de enlace, a DFHCOMMAREA do programa invocado não é mais que

um ponteiro a uma área de WORKING do programa invocante. Se não recebe dados,

poderia contestar utilizando uma lista.

Arranque e Sincronização de Tarefas.

Arranque de Tarefas.

Page 45: Cobol Cics

Manual de CICS Pag. 45 / 52

Uma tarefa pode iniciar outra ou outras diferentes, incluso em terminais

diferentes do actual, com planificação do tempo de arranque e passo de dados à

tarefa iniciada através de uma lista TS.

O CICS planifica a informação da tarefa a iniciar num bloco de controle AID que

logo utilizará.

A tarefa inicia-se com o comando START. Os dados passam-se mediante uma lista TS

e recuperam-se na tarefa iniciada com o comando RETRIEVE.

EXEC CICS

START INTERVAL( hhmmss ) | INTERVAL(0) | TIME( hhmmss )

TRANSID( 'código_de_transacção_a_arrancar' )

[ TERMID( 'código_de_terminal' ) ]

[ REQID( 'nome' ) ]

[ FROM( identificador )

[ LENGTH( n | identificador ) ]

QUEUE( 'nome_da_lista_TS' ) ]

[ RTRANSID( 'código_da_transacção_origem' ) ]

[ RTERMID( 'código_do_terminal_origem' ) ]

END-EXEC

INTERVAL

Marca o intervalo de tempo que há de decorrer para que a tarefa arranque.

hhmmss

É um número.

0 - Arranca instantaneamente a tarefa.

TIME

Especifica a hora de arranque da tarefa.

Se é maior ou igual ao tempo actual, arranca a tarefa quando corresponda.

Se está entre a hora actual e menos seis horas, assume a hora actual.

Se está atrasado em mais de seis horas em respeito à hora actual, assume a mesma

hora do dia seguinte.

TRANSID

Código de transacção da tarefa a arrancar.

TERMID

Código do terminal no qual se vai arrancar a tarefa.

REQID

Page 46: Cobol Cics

Manual de CICS Pag. 46 / 52

Nome de quatro caracteres com o que se caracteriza o sucesso da execução deste

comando. É útil empregá-lo porque permite a cancelação do comando, se a tarefa

não foi arrancada ainda, fazendo referência a ele num comando CANCEL.

FROM LENGTH

QUEUE

Parâmetros para passar dados que se gravaram numa lista TS.

Se a lista não existe, cria-se. Neste caso é muito interessante que o nome da

lista se forme de maneira que seja única em todo o sistema.

RTERMID

RTRANSID

Identificam transacção e terminal desde que se arranca a tarefa.

Condições excepcionais.-

TERMIDERR

TRANSIDERR

No caso de que se passem dados e a tarefa arrancada esteja associada a um

terminal, podem emitir-se vários comandos START sucessivos, para provocar

acumulação de dados na lista QUEUE, mas só o primeiro inicia a tarefa.

Se a tarefa arrancada não está associada a um terminal e se emitem vários

comandos START, cada um deles arrancará uma nova tarefa e só poderá passar-se um

dado de cada vez.

Em caso de que se passem dados, a tarefa arrancada deverá executar o comando:

EXEC CICS

RETRIEVE INTO( identificador )

[ LENGTH( identificador ) ]

[ QUEUE( identificador ) ]

[ RTRANSID( identificador ) ]

[ RTERMID( identificador ) ]

[ WAIT ]

END-EXEC

identificativos associados a QUEUE, RTRANSID, RTERMID

Neles entregam-se os nomes da lista e os códigos de transacção e terminal

invocantes, se se codificaram os mesmos no comando START.

INTO

Aponta à área de recepção do dado.

Page 47: Cobol Cics

Manual de CICS Pag. 47 / 52

WAIT

Faz com que a tarefa fique suspendida se se esgotaram os dados

Condições excepcionais.

ENDDATA

Se a tarefa está associada a um terminal e se passaram dados acumulados, pode

emitir-se uma série de comandos RETRIEVE, para recuperar todos os dados.

Sincronização de Tarefas.

O arranque de uma tarea até outra, não implica que a tarefa invocante fique

detida.

Só se a tarefa arrancada efectuar processos cujos resultados tenham de ser

processados pela tarefa invocante, esta terá de ser detida.

A detenção pode fazer-se:

Por espera de Tempo ( WAIT )

Por espera de Sucesso ( EVENT )

Por espera de Tempo.

Se específica uma suspensão da tarefa por um tempo determinado.

EXEC CICS

DELAY INTERVAL( hhmmss ) | INTERVAL( 0 ) | TIME( hhmmss )

REQID('nome')

END-EXEC

O significado dos parâmetros é o mesmo que para START.

Esta espera codifica-se depois de ter arrancado outra tarefa para parar a

actual.

A tarefa arrancada pode fazer terminar a espera da tarefa invocante com:

EXEC CICS

CANCEL REQID('nome')

[ TRANSID('código_de_transacção') ]

END-EXEC

REQID

Comando a anular ( neste caso, DELAY ) e pode ter sido passado nos dados tarefa

arrancada.

TRANSID

Page 48: Cobol Cics

Manual de CICS Pag. 48 / 52

Identifica a transacção que deu o nome ao comando que se vai anular. É

conveniente especificar ambos para identificar de forma unívoca o comando.

Por espera de Sucesso.

Esta função suporta-se por meio de dois comandos:

POST

WAIT EVENT

EXEC CICS

POST INTERVAL( hhmmss ) | INTERVAL( 0 ) | TIME( hhmmss )

SET( puntero_ECA )

[ REQID('nome') ]

END-EXEC

Este comando cria um bloco de comunicação chamado Event Control Area ou ECA, de

quatro bytes de longitude de valor zero e inicia uma contagem de tempo.

Quando o tempo fixado em INTERVAL | TIME tenha expirado, o CICS introduz no

primeiro byte do ECA o valor 40.

A sintaxe do comado exige a referência SET (ponteiro), de modo que para este

caso há que escrever uma lista BLL na LINKAGE SECTION do programa.

O parâmetro REQID servirá para identificar o sucesso de ter estabelecido o ECA.

Sem obstáculo pelo facto de ter emitido um comando POST, a tarefa não se detém;

se houver que detê-la, há que executar o comando:

EXEC CICS

WAIT EVENT ECADDR( área_ECA )

END-EXEC

que detém a tarefa até que o primeiro byte do bloco ECA passe de 0 a 40, ou

seja, se cancele o POST.

A cancelação do POST ocorre, à parte da expiração do tempo:

Se a tarefa termina

Se a tarefa emite outro comando POST

Se se emite um comando CANCEL utilizando o REQID.

Este comando tem o mesmo formato que o já visto para o comando DELAY, e pode

emiti-lo à tarefa arrancada, para sinalizar que já terminou e ter que o CICS

voltar a dar controle à tarefa invocante

Comandos especiais.

ABEND

Emprega-se para induzir terminações anormais da tarefa:

Page 49: Cobol Cics

Manual de CICS Pag. 49 / 52

EXEC CICS

ABEND ABCODE('código')

END-EXEC

código

Tira de quatro caracteres à eleição do programador, que pode indicar o ponto do

programa em que se provoca a terminação anormal.

BIF DEEDIT

É uma função interna ( Build In Function) do CICS muito útil quando se trabalha

com campos numéricos editados em mapas de entrada/saída, que podem acarretar

problemas na recepção.

EXEC CICS

BIF DEEDIT FIELD( campo )

[ LENGTH( n | identificador ) ]

END-EXEC

a actuação da função é:

Suprimem-se do campo os caracteres não numéricos.

Os caracteres numéricos escrevem-se juntos, da direita à esquerda a partir do

final do campo.

As posições até ao início do campo se reenchem com zeros.

Se não se específica LENGTH, tratam-se todas as posições do campo.

Saídas impressas em CICS.

Estam resolvidas na maioria das instalações mediante uma lista TD que inicia por

trigger uma transacção que se encarrega do envio dos dados à impressão.

Os programas do utilizador só têm de depositar os registos da impressão na

lista.

Hardcopy.

Ao definir os terminais ao CICS, pode assinalar-se a uma tecla de função, que

suele ser uma das PAs, a função de hardcopy.

A impressão realiza-se sobre uma impressora associada a um terminal ou a um

grupo de terminais.

O comando ISSUE PRINT cumpre o mesmo cometido por programa.

Notas.

O buffer da impressora tem de ter capacidade para alojar ao buffer do écran.

A impressora não pode estar associada a nenhuma tarefa.

Page 50: Cobol Cics

Manual de CICS Pag. 50 / 52

Saídas impressas desde BMS.

Pode fazer-se impressões formatadas desde o BMS com uma variante do comando SEND

MAP ao que se lhe juntam alguns parâmetros:

SEND MAP

.....

PRINT

Lnn

onde nn é o número de linhas por página e pode tomar os valores 40, 64 e 80.

Transacções de serviço do CICS.-

CSSN

Sign-on do sistema.

Deve executar-se se é necessário identificar-se, antes de poder executar

qualquer outro programa do utilizador ou de serviço. Retorna automaticamente ao

CICS, se os dados que pede introduzem-se correctamente. Pode sair-se com F3.

CEMT

Executa múltiplas funções. Se o código se digita sem parâmetros, vai

apresentando opções.

Uma das mais usadas, INQUIRE ( I ), emprega-se para investigar o estado das

entidades do CICS:

CEMT I DAT

Apresenta uma lista dos ficheiros que maneja o CICS, dando, entre outros dados o

estado ( OPE | CLO ), que pode modificar-se movendo o cursor adequadamente.

Utiliza-se para desenganchar ficheiros do CICS, p.ex. para recarregá-los.

CEMT I PRO

Apresenta uma lista dos programas do utilizador e grupos de mapa, dando, entre

outros dados o seu estado ( ENA | DIS ), para indicar a disponibilidade do

programa ou grupo. Emprega-se para dar de alta novas versões, pondo o cursor ao

final da linha e teclando NEW.

Nota.

Os ficheiros que tenham sido fechados ou os programas que tenham sido

desabilitados, retém o seu estado, ainda que se re-arranque o CICS.

São válidas referências do tipo:

Page 51: Cobol Cics

Manual de CICS Pag. 51 / 52

CEMT I PRO( PROG* )

para conseguir um display dos programas cujo nome comece por PROG.

CEMT S PRO( PROG* ) N

dá de alta todos os programas cujo nome comece por PROG.

Retorna ao CICS com F3.

CSMT

Teclando:

CSMT NEW,PGRMID=programa

dá de alta a nova versão de programa.

Retorna ao CICS com F3.

CEDF

Depurador on-line.

Deve arrancar-se antes de começar a execução do programa que se quer traçar:

CEDF o CICS responderá: This terminal EDF-Mode on

À continuação introduz-se o código do programa a traçar.

EDF apresenta um primeiro écran no qual aparecem as áreas EIB e DFHCOMMAREA.

EDF detém-se antes da execução de cada comando CICS, permitindo múltiplas

funções, entre elas:

Modificar parâmetros do comando

Aceder, mediante a pulsação da tecla F5, à imagem do programa em memória no

momento actual. Podem modificar-se, por exemplo, dados de WORKING para canalizar

a execução da forma mais conveniente. Pode paginar-se dentro da imagem para a

frente e para trás.

Em relação com a modificação de dados de WORKING, convém fazer notar a

dificuldade de encontrar esta num display em formato DUMP, parte em hexadecimal,

parte em carácter, e de localizar um item determinado dentro dela. Certos

truques, sem embaraço, fazem este trabalho mais fácil.

Os itens de WORKING com níveis 01 e 77 ensamblam-se à fronteira de meia palavra

ou palavra inteira; os demais, contíguos.

Por tanto escreva-se toda a WORKING empregando níveis do 02 em frente, na forma:

WORKING-STORAGE SECTION.

01 FILLER.

03 FILLER PIC X(19) VALUE '** START WORKING **'.

03 CAMPO1 PIC ...

..............

Page 52: Cobol Cics

Manual de CICS Pag. 52 / 52

com o qual:

Localiza-se facilmente o início da WORKING.

Todos os dados seram contíguos e basta com contar bytes de longitude para passar

de um a outro.

Uma vez executado o comando, EDF informa o resultado. Este resultado também pode

modificar-se, bem para provocar o tratamento de uma condição excepcional, como

para impedi-lo.

Cancelar a execução com a tecla F12.

Retorna ao CICS com F3.

CECI

Permite a execução de comandos CICS sem necessidade de programa.

Primindo a tecla F5, acede-se a uma WORKING fictícia, na que se podem definir

variáveis, p.ex. para ler registos de um ficheiro.

Retorna ao CICS com F3.

CSSF

Desconexão do CICS:

CSSF LOGOFF