Esempi di programmi sono gli sw*.cbl in p:\eurocoge ed i bie*.cbl in ambiente p:\eurocoge\cap\cbl.
•Nella input-output section.
file-control.
occorre indicare la .fd della tabella:
copy "nometabella.fd"
•Nella data division.
file section.
occorre indicare la cpy della tabella interessata con relativa direttiva XFD:
$xfd file=nometabella
fd nometabella
label record standard.
copy "nometabella.cpy".
•Nella data division.
working-storage section.
se non esistono già, occorre poi inserire:
78 k-ver-nometabella value 1.
01 w-nomi-bin.
02 w-nome-nometabella pic x(70).
*--> sql-start: cambia ed aggiungi
01 tab-config.
02 tm-cfg-bin-tipo pic x(01).
02 tm-cfg-bin-path pic x(80).
02 tm-cfg-bin-conn-string-idx pic 9(03).
02 tm-cfg-bin-conn-string occurs 3 pic x(80).
02 tm-cfg-bin-log-level pic 9(02).
02 tm-cfg-attiva-areaapp pic x(01).
02 tm-cfg-cod-azienda pic x(06).
*--> sql-end
copy "sql-decla-ws.cpy".
copy "nometabella-sql-ws.cpy".
La prima .cpy è generica e se il programma è già interfacciato con postgres sarà già presente
Quest'ultima copy se la tabella è nuova sarà da asteriscare per poter eseguire la prima compilazione (che genera anche l'xfd)
➢Nella data division.
procedure-division.
main section.
➢ ...ad inizio programma...
move wo-parametro to w-sql-parametro
questo pezzo di codice fa sì che lanciando il programma creato con wo-parametro = "5" tutte le tabelle DB presenti nel programma vengano cancellate e ricreate nella loro definizione (campi, chiavi, condizioni) i questo caso tutti i dati presenti verranno persi.
➢prima della "a4"
initialize w-nomi-bin
initialize w-bin-slash
perform init-bin-sub-tm-cfg-bin-tipo
praticamente è l'apertura delle tabelle sul DB.
➢nella "z-chiudi".
perform close-bin-sub-tm-cfg-bin-tipo
➢tutte le varie chiamate rd-... st-..., wr-... rwr-..., del-.... già note allo sviluppatore dall'uso delle ".k01" devono essere rimpiazzate o scritte nella forma sostitutiva:
sub-cfg-nomeperform....
es.
perform sub-cfg-wr-arpintes
in questo modo a seconda della configurazione verranno eseguite o le chimate al DB o ai files COBOL.
➢la perform speciale:
perform sql-truncate-nometabella
esegue la cancellazione immediata di tutti i dati presenti nella tabella senza però toccarne la struttura logica. Questa cancellazione è molto più performante di un ciclo:
start...
read next ...
perform until (w-fine-file)
delete record
read next ...
loop
➢è anche possibile implementare cancellazioni/aggiornamenti personalizzati con SQL quasi diretto
(es. SWC011 cercare "delete-where-x").
➢in una "x99-..." di ricerca configurazione inserire la ricerca dei parametri di connessione (=apertura files) del DB
es.
move "areaapp" to ncnf-gruppo (03)
move "db-conn-string" to ncnf-chiave (03)
move 1 to ncnf-idx (03)
move "areaapp" to ncnf-gruppo (04)
move "db-conn-string" to ncnf-chiave (04)
move 2 to ncnf-idx (04)
move "areaapp" to ncnf-gruppo (05)
move "db-conn-string" to ncnf-chiave (05)
move 3 to ncnf-idx (05)
move "areaapp" to ncnf-gruppo (06)
move "db-log-level" to ncnf-chiave (06)
call "RNEWCONF" using stringhe util-ncnf ncnf-tab
cancel "RNEWCONF"
move ncnf-valore (03) to tm-cfg-bin-conn-string (1)
if (tm-cfg-bin-conn-string (1) = low-values)
move spaces to tm-cfg-bin-conn-string (1)
end-if
move ncnf-valore (04) to tm-cfg-bin-conn-string (2)
if (tm-cfg-bin-conn-string (2) = low-values)
move spaces to tm-cfg-bin-conn-string (2)
end-if
move ncnf-valore (05) to tm-cfg-bin-conn-string (3)
if (tm-cfg-bin-conn-string (3) = low-values)
move spaces to tm-cfg-bin-conn-string (3)
end-if
move ncnf-valore-n (06) to tm-cfg-bin-log-level
notare che il tm-cfg-bin-log-level rappresenta il livello di log che viene richiesto al runtime quando s'interfaccia con il database. Livelli validi sono da 0 (nessun log) fino al 5 (loggo tutto) passando per i sottolivelli (il livello superiore implica tutto quanto loggato nei livelli sottostanti):
0= nessun log
1= loggo solo gli errori
2= loggo le funzionalità di base
3= loggo i risultati delle funzionalità di base
4= loggo anche i cicli di alcune funzionalità interne ed i relativi valori in entrata ed uscita dal runtime
5= loggo tutto quello che è implementato
nel caso vengango loggati gli errori verranno anche scritti i 100 messaggi di log (a tutti i livelli) precedenti l'errore.
➢all'interno del programma dovranno essere inserite:
le due perform
***************************************************************
*** apertura sub tipo database
***************************************************************
init-bin-sub-tm-cfg-bin-tipo.
move k-yes to sql-init-ok
move tm-cfg-bin-log-level to w-sql-log-level
move tm-cfg-bin-conn-string (1) to w-sql-conn1
move tm-cfg-bin-conn-string (2) to w-sql-conn2
move tm-cfg-bin-conn-string (3) to w-sql-conn3
perform sql-init
move w-sql-parametro to sql-issue-create
perform sub-cfg-bin-open-nometabella
.
close-bin-sub-tm-cfg-bin-tipo.
perform sql-exit
.
➢alla fine del programma inserire le .cpy
copy "sql-interface-prc.cpy".
copy "nometabella-sql-prc.cpy".
dove la prima sql-interface-prc.cpy è generica e se il programma è già interfacciato con il DB sarà già presente.
➢compilare il programma
➢al momento attuale i programmi destinati alle App posso essere provati sull'ambiente Endonova:
questo è interfacciato con il server KPN su un DB di prova che si chiama
test_c00000