CICS
TABELLE
Di seguito un elenco delle principali tabelle utilizzate del CICS.
+ TCT Terminal Control Table [DFHTCT]
PCT Program Control Table [DFHPCT]
PPT Processing Program Table
+ FCT File Control Table [DFHFCT]
+ DCT Destination Control Table [DFHDCT]
XFT eXtra File Table (solo su PC) [DFHXFT]
+ CLT Command List Table
+ JCT Journal Control Table
+ MCT Monitor Control Table
+ SRT System Recovery Table
+ TST Temporaly Storage Table
+ PLT Program List Table
+ TLT Terminal List Table
+ XLT Transaction List Table
+ SNT Sign-On Table
+ SIT System Initialization Table
+ tabelle che in AIX devono essere modificate mediante macro.
DEFINIZIONE
Ogni tabella definisce i suoi dati mediante delle parole chiave (MACRO)
diverse per ogni funzione, con parametri associati.
Alcuni parametri sono comuni e sono:
TYPE = INITIAL stabilisce l'inizio della tabella CICS
SUFFIX = yy stabilisce il suffisso per le tabelle e viene appeso
al nome base (DFHxxx).
TYPE = FINAL indica fine tabella
TCT
Lista dei terminali gestiti dal CICS.
Per terminali si intendono anche le stampanti.
Alcune delle caratteristiche della tabella sono tipiche PC.
DFHTCT TYPE = INITIAL,
SUFFIX = ED,
GMTEXT = 'benvenuti...' {messaggio di benvenuti}
DFHTCT TYPE = TERMINAL ,
TRMIDNT = nome ,
TRMTYPE = 3270|PRINTER
[,DEFSCRN = (linee,colonne)]
[,PGESIZE = (linee,colonne)]
[,FF = yes|no]
[,FEATURE = (COLOR|EXTDS|HILIGHT|UCTRAN|AUDALARM)]
PCT
Elenco dei programmi con relativo codice TRANSID associato che deve essere
univoco all'interno della tabella.
DFHPCT TYPE = ENTRY ,
PROGRAM = nome , { questo nome deve esistere in PPT }
TRANSID = xxxx
[,TWASIZE = 0|valore]
PPT
Definizioni programmi o mapset in memoria virtuale o in libreria.
DFHPPT TYPE = ENTRY ,
PROGRAM = nome
[,PMGLANG = ASSEMBLER|COBOL|RPG]
FCT
DFHFCT TYPE = DATASET ,
DATASET = nome ,
ACCMETH = DL/1|(VSAM,[KSDS|ESDS|RRDS]) ,
SERVREQ = (UPDATE|ADD|BROWSE|DELETE|SHARE[request, ...])
[,RECFORM = [(UNDEFINED|VARIABLE|FIXED|][,BLOCKED|UNBLOCKED])]
[,LOG = no|yes]
[,BUFND = number] {num. buffer per dati}
[,BUFNI = number] {num. buffer per indici}
[,STRNO = 1|number] {max richieste concorrenti}
DCT
Definisce i files extra e intrapartizione.
XFT
Esiste solamente per l'ambiente emulato PC e determina il percorso
fisico dei files.
BLOCKS
EIB Execute Control Block
TCA Task Control Area
DCA Dispatch Control Area
DTA Dispatch Task Area (CICS/ESA)
TIOA Terminal I/O Area
PROGRAMMI
TCP Terminal Control Program
gestisce communication con i terminali
FCP File Control Program
interfaccia verso gli archivi
KCP tasK Control Program
scheduler del CICS
avvisa PCP di caricare il programma associato alla transazione
PCP Program Control Program
gestisce interfaccia verso CICS o verso librerie di programmi CICS
carica fisicamente i programmi in memoria se non lo sono gia'
RELAZIONI TRA ENTITA'
EVENT PROG TABLE AREAs/BLOCKs DESCRIPTION
terminal input TCP --> TCT --> TIOA put data in TIOA
ins &TIOA in TCT
scheduler start: KCP <------------ TIOA scan TIOA
<-- PCT find TERM in PCT
------------> TCA create TCA
ins &TIOA in TCA
------------> DCA create DCA or DTA
activated by KCP: PCP <-- PPT find prog in PPT
create prog (allocate)
------------> TCA ins &prog in TCA
file operation: FCP <-- FCT scan FCT for file desc.
------------> FIOA read the record in FIOA
------------> TCA ins &record in TCA
FLUSSO DI UNA TRANSAZIONE
- il Terminal Control Program rileva la pressione del tasto INVIO
- inserisce i dati nella Terminal I/O Area associata al terminale
- l'indirizzo della TIOA viene messo nella Terminal Control Table
- il Task Control Program scandisce la TIOA per verificare se vi sono richieste
- se nei dati pervenuti trova un codice transazione valido esistente nella
Program Control Table
- attiva un blocco di controllo Task Control Area
- nella TCA viene messo l'indirizzo della TIOA
- il terminale rimane associato al task fino che questo e' attivo
- la TIOA serve per lo scambio dei dati tra task e terminale
- attiva un task per elaborare i dati chiamando il Program Control Program
- legge da Processing Program Table i dati relativi al programma
- carica il programma in memoria se non l'ho e' gia'
- ritorna a TCP l'indirizzo di caricamento
- memorizza l'indirizzo nella TCA
- il programma e' pronto a lavorare
- il controllo viene passato al programma che elabora la richiesta
dell'utente a terminale
- se un programma chiede la lettura di un record su disco
- si attiva il File Control Program che:
- legge la File Control Table per le informazioni relative al file
- legge fisicamente il record
- lo trasferisce nella File Input/Output Area
- inserisce l'indirizzo della FIOA nella TCA
- se un programma chiede la terminazione
- tutte le aree allocate sono rilasciate
COMANDI CICS
I comandi CICS sono delle macro che vengono passate o interpretate
dal CICS e provvedono all'esecuzione di determinate funzioni.
????????????????
EXEC CICS SEND MAP('AXCU03') MAPSET('XXCU03') ERASE CURSOR END-EXEC.
EXEC CICS RECEIVE MAP('AXCU03') MAPSET('XXCU03') END-EXEC.
TERMINAL CONTROL
Mediante il Terminal Control si puo' comunicare con i terminali e con
le stampanti.
Permettono di ricevere o spedire un flusso di dati non formattati verso
o da un terminale.
EXEC CICS SEND FROM(variable) LENGTH(len) ERASE END-EXEC.
EXEC CICS RECEIVE INTO(variable) LENGTH(len) END-EXEC.
TEMPORARY STORAGE CONTROL
Per passare dati da un programma CICS ad un altro si puo' usare una code
(queue) di memoria temporanea(Temporary Storage, TS).
Puo' contenere una quantita' variabile di dati.
Puo' essere condivisa da programmi che non sono collegati.
E' il modo migliore di passare dati tra programmi CICS.
EXEC CICS WRITEQ TS QUEUE(name)
FROM(data_area)
LENGTH(len)
[ITEM(data_area)]
MAIN|AUXILIARY
END-EXEC.
EXEC CICS READQ TS QUEUE(name)
[SET(ptr)|INTO(data_area)]
LENGTH(len)
[NEXT|ITEM(data_area)]
END-EXEC.
EXEC CICS WRITEQ TS QUEUE(name)
FROM(data_area)
LENGTH(len)
ITEM(data_area) REWRITE
[MAIN|AUXILIARY]
END-EXEC.
EXEC CICS DELETEQ TS QUEUE(name) END-EXEC.
TRANSIENT DATA CONTROL
E' una funzione del CICS che offre un metodo efficate per passare dati
tra task CISS oppure tra l'ambiente CICS/VS e gli ambienti batch.
Vi sono due tipi di dati transitori:
- intrapartition (all'interno della partizione CICS)
- extrapartition
Non e' possibile definire la stessa coda come input e output nello
stesso programma.
I singoli record non sono cancellabili, si puo' solamente cancellare
l'inter coda.
EXEC CICS WRITEQ TD QUEUE(name)
FROM(data_area)
[ LENGTH(len) ]
END-EXEC.
EXEC CICS READQ TD QUEUE(name)
{SET(ptr)|INTO(data_area)}
[LENGTH(len)]
END-EXEC.
EXEC CICS DELETEQ TD QUEUE(name) END-EXEC.
PROGRAM CONTROL
Esistono 7 programmi per controllare l'esecuzione di un programma CICS:
XCTL .. passa il controllo ad un altro prog. CICS
LINK .. consente il link di subroutine CICS
RETURN .. ritorna il controllo al CICS da un programma principale
oppure ad un programma principale che ha fatto il LINK
LOAD .. carica una tabella di costanti CICS
RELEASE .. rilascia una tabella caricata con LOAD
ABEND .. termina in modo anormale un task CICS
HANDLE ABEND .. consente al programma di proseguire l'esecuzione se si
verifica un abend
XCTL
Passa il controllo ad un programma dello stesso livello.
E' possibile passare dei dati al programma invocato.
E' tipicamente utilizzato per chiamare un programma da un menu, e per
richiamare il menu alla fine di un programma.
EXEC CICS XCTL PROGRAM(name) [COMMAREA(data_area) LENGTH(len)] END-EXEC.
LINK
Viene utilizzato per effettuare il linkaggio tra un programma principale
CICS ed una sobroutine CICS.
Dopo l'esecuzione della subroutine (termina con RETURN) il controllo torna
al programma chiamante.
La subroutine non puo' eseguire SEND o RECEIVE MAP.
EXEC CICS LINK PROGRAM(name) [COMMAREA(data_area) LENGTH(len)] END-EXEC.
RETURN
Restituisce il controllo al programma CICS corrente al programma CICS
di livello superiore.
Dopo questo comando il task viene terminato.
Se eseguito da una subroutine il comando ritorna al programma chiamante.
EXEC CICS RETURN [TRANSID(name) [COMMAREA(data_area) LENGTH(len)]] END-EXEC.
LOAD
Questo comando carica una tabella di costanti nella LINKAGE SECTION dei
programmi CICS.
Si utilizza una tabella quando ha le seguenti caratteristiche:
- tabella di piccole dimensioni
- tabella con contenuto modificato spesso
- necessita' di tempi di accesso rapidi
EXEC CICS LOAD PROGRAM(name) [SET(ptr) LENGTH(len)]] [HOLD] END-EXEC.
RELEASE
Rilascia la tabella precedentemente caricata con LOAD.
EXEC CICS RELEASE PROGRAM(name) END-EXEC.
ABEND
Viene utilizzato per terminare un task in modo anormale.
EXEC CICS ABEND [ABDOCE(name)] [CANCEL] END-EXEC.
HANDLE ABEND
Mediante questo comando e' possibile impostare la routine o il programma
a cui si deve passare il controllo se il CICS deve mandare la task in abend.
EXEC CICS HANDLE ABEND {PROGRAM(name)|LABEL(label)|CANCEL|RESET} END-EXEC.
TASK CONTROL
Questo gruppo comprende 3 comandi:
SUSPEND
ENQ
DEQ
SUSPEND viene usato per sospendere il task corrente e ritornare al CICS
che provvede ad attivare il task a priorita' piu' alta.
EXEC CICS SUSPEND END-EXEC.
Permette di riservare una risorsa evitando che la stessa sia utilizzata
contemporaneamente da altri, il caso tipico e' un record dati, corrisponde
alla funzione [[lockf()]].
EXEC CICS ENQ RESOURCE(data_area) [LENGTH(len)] END-EXEC.
Rilascia la risorsa:
EXEC CICS DEQ RESOURCE(data_area) [LENGTH(len)] END-EXEC.
INTERVAL CONTROL
Mediante l'IC e' possibile eseguire operazioni temporizzate che saranno
eseguite all'istante desiderato e sono:
START
RETRIEVE
CANCEL
DELAY
POST
WAIT EVENT
ASKTIME
Il comando START viene utilizzato per iniziare una transazione per la
stampa di un report oppure in applicazioni per il refresh dello schermo.
EXEC CICS START [INTERVAL(hhmmss)|INTERVAL 0|TIME(hhmmss)]
TRANSID(name)
[REQID(name)]
[FROM(data_area) LENGTH(len)]
[TERMID(name)]
END-EXEC.
Il comando RETRIEVE viene utilizzato nel programma attivato per richiamare
i dati passatigli dal programma CICS che ha fatto START.
EXEC CICS RETRIEVE {SET(ptr)|INTO(data_area)}
LENGTH(len)
END-EXEC.
Il comando CANCEL cancella un precedente comando di Interval Command.
EXEC CICS CANCEL [REQ(name) [TRANSID(data_area)]] END-EXEC.
Il comando DELAY sospende l'esecuzione del task che invia questo comando
per un certo periodo o fino ad una data ora.
EXEC CICS DELAY [INTERVAL(hhmmss)|INTERVAL 0|TIME(hhmmss)]
[REQID(name)]
END-EXEC.
Il comando POST predispone l'aggiornamento di un'area dati dopo un certo
periodo o ad una data ora.
EXEC CICS POST [INTERVAL(hhmmss)|INTERVAL 0|TIME(hhmmss)]
SET(ptr)
[REQID(name)]
END-EXEC.
Il comando WAIT EVENT soispende l'elaborazione di un task fino a che e'
trascorso l'intervallo di tempo specificato nel precedente comando POST.
EXEC CICS WAIT EVENT ECADDR(ptr) END-EXEC.
Il comando ASKTIME aggiorna l'ora del CICS insieme all'EIBTIME e EIBDATE
del task che invia il comando.
EXEC CICS ASKTIME END-EXEC.
STORAGE CONTROL
????
BMS - Basic Mapping Support
E' un interfaccia tra il CICS ed i programmi applicativi.
Si occupa della formattazione dei dati di input e output.
Consente di disinteressarsi delle caratteristiche del terminale.
MAPSET insieme di mappe
MAP maschera con campi
FIELD singolo campo di input o output
MAPSET --> MAP --> FIELD
Esistono due tipi di mappa fisica e simbolica.
La mappa fisica contiene i dati di cosa spedire ad un determinato terminale
per l' I/O.
Deve esistere una mappa per ciascun tipo di terminale che si intende usare.
La mappa simbolica contiene la descrizione utente dei campi ed ha una
estensione .cob
La mappa fisica ha una estenzione .bms
Ogni campo su una mappa deve essere preceduto da un byte di attributo.
Anche i delimitatori sono preceduti da un byte si attibuto.
Dopo un campo non protetto di solito si inserisce un delimitatore.
Nell' esempio sottostante (a=attributo, d=delimitatore)
N. CLIENTE : a99999adaNOME CLIENTE : aXXXXXXXXXXXXXXXXXXXXad
oppure
N. CLIENTE : a99999aNOME CLIENTE : aXXXXXXXXXXXXXXXXXXXXad
nel secondo caso l'attributo di "NOME CLIENTE" fa anche da delimitatore.
Ogni campo in CAD viene definito con la seguente struttura:
zzMyyt .. mappa
CCCyynt .. campo
CCCCyynt .. campo
dove:
CCCC descrittivo campo
zz indicatore procedura
yy progressivo applicazione
n numero mappa dell'applicazione yy
t tipo campo I=input,O=output,A=attributi
- definizione mapset
MAPSET DFHMSD TYPE = x,
MODE = x,
LANG = COBOL,
TIOAPFX = YES
- definizione mappa
MAPNAME DFHMSD SIZE = (line,col),
CTRL = (FREEKB|FRSET|...)
- definizione campi
field_name DFHMDF POS = (line,col)
LENGTH = number
ATTRB = ((ASKIP|PROT|UNPROT) {}
(, NUM) { numeric }
(, BRT|NORM|DRK) {hi intensity,,invisible}
(, IC) {cursor on gegin of field}
(, DET) {optical pen}
(, FSET) {???}
INITIAL = 'initial text'
NEW PROGRAM CREATION
- in PPT.RDT : aggiungere nome programma
" nome routines richiamate
" mappe
- in PCT.RDT : inserire associazione transid <--> nome programma
- in TCT.RDT : inserire riga relativa al terminale (e' un nome fisico
relativo alla connessione
- in FCT.RDT : inserimento archivi utilizzati
- in XFT.RDT : " " "
- DCT.RDT : rimane invariata
Tutte le tabelle modificate devono essere ricompilate.
TRANSAZIONI
Segue un elenco delle transazioni utili in CICS.
CEDF
E' fornita insieme al sistema CICS e consente il debugging.
Si deve immettere CEDF in un terminale libero e poi inserire la
transazione CICS che si intende monitorare.
CEDF visualizza ogni comando CICS eseguito dalla task in esame.
Con PF5 si possono modificare le arre di lavoro definite nella
WORKING-STORAGE SECTION o nella LINKAGE SECTION.
In questa modalita' utilizzare PF7 per prev page e PF8 per next page.
Con PF2 si puo ottenere una visualizzazione esadecimale.
CECI
La transazione CECI e' un interprete 'command-level' che controlla la
sintassi del comando CICS e lo esegue immediatamente.
La transazione CECI ha il seguente formato:
CEDI [comando_CICS]
Per verificare un mapset CICS dopo assemblato si puo' visualizzarlo
a terminale per controllarlo:
CECI SEND MAP('AXCU00') MAPSET('XXCU00')
Per leggere in record cliente la cui chiave e' "12345" dal file
principale dei clienti CUSTMAST
CECI READ DATASET('CUSTMAST') RIDFLD('12345')
CMSG
Con questa transazione si puo' inviare un messaggio ad un altro
terminale compreso nell'ambiente CICS o per stampare un messaggio
su una stampante.
CMSG MSG='messaggio da stampare',ROUTE=L01A,SEND
CEMT
La transazione CEMT (CICS Enhanced Master Terminal) sostituisce la
transazione CSMT dalla versione 1.5.
Digitare CEMT in una pagina video vuota.
Digitare INQ (o ADD o PERFORM o REMOVE o SET) e viene presentata
a video la sintassi permessa per quel comando.
In generale per le opzioni piu' utilizzate INQ e SET vi e' la
seguente gerarchia (con esempi a lato):
CEMT
INQ/SET
TASK .. CEMT INQ TASK
.. CEMT SET TASK(12345) FORCEPURGE
TRANSACTION .. CEMT INQ TRAN(CUST)
.. CEMT SET INQ(CUST) ENABLED
PROGRAM .. CEMT SET PROGRAM(XCU00) NEWCOPY
.. CEMT SET PROGRAM(XCU00) ENABLED
.. CEMT INQ PROGRAM(XCU00)
DATASET .. CEMT INQ DATASET(CUSTMAST)
.. CEMT SET DATASET(CUSTMAST) OPEN
.. CEMT SET DATASET(CUSTMAST) CLOSED
TERMINAL .. CEMT INQ TERMINAL(L01A)
.. CEMT SET TERMINAL(L01A)
.. CEMT SET TERMINAL(K01A)
DUMP .. CEMT SET DUMP SWITCH
PERFORM
SHUTDOWN .. CEMT PERFORM SHUTDOWN IMMEDIATE
SNAP .. CEMT PERFORM RESET
CSMT
-- TASK CICS --
Per visualizzare i task attivi:
CSMT TAS
Per terminare un task mediante il suo numero(nnnn):
CSMT TRMNAT,YES,nnnn .. terminazione immediata
CSMT TRMNAT,NO,nnnn .. terminazione differita
Per terminare un task mediante l'identificatore del terminale(xxxx):
CSMT TRMNAT,TERMID=xxxx
-- INQUIRY O MODIFICA DEL LIVELLO DI TRIGGER DI UNA DESTINAZIONE --
Inquiry del livello di trigger di una destinazione:
CSMT TRI,INQ,DESTID=xxxx
Modifica del livello di trigger di una destinazione:
CSMT TRI,nnnn,DESTID=xxxx
dove nnnn=nuovo livello di trigger e xxxx=nome coda dati transitori o
destinazione nella DCT.
-- TRANSAZIONI DI ABILITAZIONE/DISABILITAZIONE --
Per abilitare/disabilitare delle transazioni CICS:
CSMT {ENA|DISAB},TRNACT,
{SIN|LIS|CLA|ALL, (TRANID=xxxx|TRANID=xxxx[,...]|CLASID=xx}
Per esempio:
CSMT DISAB,SIN,TRNACT,TRANID=ORDR
Per far acquisire una nuova versione di programma al CICS:
CSMT NEW,PGRMID=xxxxxxxx
dove xxxxxxxx=nome del programma, del mapset o della tabella dinamica.
-- PROGRAMMI CICS --
Per abilitare/disabilitare un programma,un mapset o una tabella dinamica CICS:
CSMT {ENA|DISAB},{PRO|PGRM},
{SIN|LIS|CLA|ALL, (PRGMID=xxxxxxxx[,...]|CLASID=xx}
Per esempio:
CSMT ENA,PRO,SIN,PRMGID=XCU00
CSMT DISAB,PRO,SIN,PRMGID=XCU00
Si puo' effettuare una enquiry su un programma mediante:
CSMT INQ,SIN,PRO,PRMDID=XCU00
-- DATASET CICS --
Inquiry sulla situazione di un dataset:
CSMT DAT,INQ,{FILEID=xxxxxxxx[,...]|ALL}
Per esempio:
CSMT DAT,INQ,FILEID=CUSTMAST
Modifica della situazione di un dataset:
CSMT DAT,{ON|OFF},{REA|UPD|ADD|EXC|BRO|DEL],
{FILEID=xxxxxxxx[,...]|ALL}
Abilitazione/disabilitazione di un dataset:
CSMT {ENA|DISAB},DAT,{FILEID=xxxxxxxx[,...]|ALL}
Apertura/chiusura di un dataset:
CSMT {OPE|CLO},DAT,{FILEID=xxxxxxxx[,...]|ALL}
-- TERMINALI CICS --
Inquiry situazione di un terminale:
CSMT TERMNL,SIN,INQ,TERMID=L01A
Modifica della situazione di un terminale:
CSMT TERMNL,{SIN|LIS},{TRNACT|REC},
TRNCV|INP|AUTO|PAG},TERMID=xxxx[,...]
Modifica della condizione di servizio di un terminale:
CSMT TERMNL,SIN,{INSRV|OUT},TRMNAT,TERMID=xxxx
Esempio: mette in servizio il terminale L01A:
CSMT TERMNL,SIN,INSRV,TERMID=L01A
Esempio: mette fuori servizio il terminale L01A ed interrompe il task
eventualmente in corso:
CSMT TERMNL,SIN,OUT,TRMNAT,TERMID=L01A
Acquisizione di un terminale supportato dal VTAM
CSMT TERMNL,SIN,ACQ[,COL],TERMID=xxxx
Es: collega la stampante L01A al VTAM:
CSMT TERMNL,SIN,ACQ,COL,TERMID=L01A
Es: per sapere se un terminale e' collegato o meno al VTAM:
CSMT TERMNL,SIN,INQ,TERMID=K01A
Rilascio di un terminale supportato dal VTAM
CSMT TERMNL,SIN,REL,TERMID=xxxx
Es: CSMT TERMNL,SIN,REL,TERMID=L01A
-- CHIUSURA DEL CICS --
Il CICS puo' essere chiuso immediatamente mediante:
CSMT SHU,YES[,DUMP]
DUMP indica se si vuole la stampa del dump della memoria.
Si puo' chiudere il CICS dopo il completamento di tutti i task e la chiusura
di tutte le sessioni VTAM mediante:
CSMT SHU,NO[,DUMP],xx,yy
DISEGNO DI UNA APPLICAZIONE CICS
Il disegno di una applicazione on-line CICS si differenzia dallo
sviluppo della stessa applicazione in ambienti piu' piccoli tipo
MS-DOS, Unix, o simili.
La caratteristica di maggior diversita' e' costituita dal fatto che
ogni singola funzione viene implementata mediante un programma (che
in altre piattaforme potrebbe essere una funzione interna ad un unico
programma).
La seconda caratteristica consiste nell'essere basato su menu, mediante
i quali si selezionano le funzioni desiderate.
Normalmente per una data applicazione si deve digitare solamente il
codice transazione relativo al programma che presenta il menu.
Ad esempio vediamo la suddivisione di un programma per la gestione
dei clienti:
Funzione Programma Descrizione
XCU00 Menu principale
01 XCU01 Aggiunta di un nuovo cliente
02 XCU02 Inquiry/aggiornamento/cancellazione di un cliente
03 XCU03 Browse/aggiornamento dei clienti in base al nome
...
06 XCU06 Stampa di un ordine di vendita su carta 66x132
07 XCU07 Stampa di un ordine di vendita su carta 66x85
...
XCU11 Programma di utility di stampa
XCU12 Programma di Automatic Task Initiation
XCU13 Programma di gestione degli abend
XCU14 Programma per il caricamento di una tabella dinamica
XCU15 Programma di refresh della pagina video