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