Chi usa questo file? Le dipendenze con DSPPGMREF

Accedi per salvare

DSPPGMREF elenca gli oggetti a cui fanno riferimento i programmi: file, aree dati, altri programmi, programmi di servizio. Con OUTPUT(*OUTFILE) scrive l'elenco in un file di database e da lì una query dice quali programmi usano un file, che è la domanda da farsi prima di cambiarne il tracciato.

Il file dei riferimenti

DSPPGMREF PGM(MIALIB/*ALL) OUTPUT(*OUTFILE) OUTFILE(QTEMP/RIFERIMENTI)

PGM accetta anche *ALLUSR come libreria per tutte le librerie utente; OBJTYPE dice quali oggetti guardare (*PGM, *SRVPGM, *MODULE, *SQLPKG, *QRYDFN, oppure *ALL). Il file prodotto ha il formato QWHDRPPR del file QADSPPGM di QSYS: una riga per ogni coppia programma-oggetto.

La query

SELECT WHLIB, WHPNAM, WHFUSG
  FROM QTEMP.RIFERIMENTI
 WHERE WHFNAM = 'ARTICOLI'
   AND WHOTYP = '*FILE'
 ORDER BY WHLIB, WHPNAM;

WHFUSG è l'uso del file da parte del programma, come somma di codici:

CodiceUso
1lettura
2scrittura
4aggiornamento
8non specificato

Un 7 è lettura, scrittura e aggiornamento; un 5 lettura e aggiornamento. Prima di aggiungere un campo a un file, i programmi con 2 o 4 nel codice sono quelli da guardare per primi.

Che cosa non vede

DSPPGMREF mostra quello che il compilatore ha registrato quando il programma è stato creato. Da qui vengono i suoi limiti, scritti da IBM:

  • Nomi in una variabile. In un CL, se il nome del file sta in una variabile, viene registrato il nome della variabile (&FILE); se è un'espressione, *EXPR. In COBOL una chiamata con un identificatore invece di un letterale (chiamata dinamica) non viene registrata.
  • Linguaggi con poche informazioni. Per ILE C solo i programmi di servizio, né file né programmi; per un programma C non ILE niente.
  • Nomi del giorno della compilazione. Se l'oggetto è stato spostato dopo, o c'era un override durante la compilazione, il nome registrato può essere diverso da quello vero.
  • Righe che non spariscono. Con UPDPGM e UPDSRVPGM si aggiungono riferimenti, ma non se ne tolgono mai.
  • SQL. Le tabelle, le viste e gli indici usati dall'SQL incorporato sono registrati, con la libreria scritta come nel sorgente: con i nomi di sistema, un nome non qualificato e senza DFTRDBCOL resta *LIBL. L'SQL dinamico, costruito a tempo di esecuzione, non c'è.
  • L'area dati locale non viene registrata.

Il risultato quindi dice con certezza chi usa un file; non dice con certezza che nessun altro lo usi.

Esempio

Nomi di libreria, file e programmi inventati.

Si deve allungare il campo descrizione del file ARTICOLI. DSPPGMREF su GESTLIB e la query danno 23 programmi: 17 con codice 1, 4 con 5, 2 con 3. I 6 che scrivono o aggiornano si guardano uno per uno; i 17 che leggono si ricompilano, perché il formato cambia.

Poi si cerca quello che DSPPGMREF non vede: i CL con il nome in una variabile si trovano cercando nella query WHFNAM LIKE '&%' e WHFNAM = '*EXPR' e per ciascuno si legge il sorgente; per l'SQL dinamico si cerca il nome del file nei sorgenti con FNDSTRPDM.

Su quali versioni funziona

DSPPGMREF è supportata dalla 7.1 in poi.

Fonti

← Torna al blog

Commenti

Nessun commento ancora. Sii il primo a commentare!

Devi avere un account per commentare. Accedi · Registrati