//BCHJOB JOB(JFT) JOBD(NERONI2/NERONI2) OUTQ(QPRINT) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Open source scaricabile da www.neroni.it */ /* LA JOB DESCRIPTION "NERONI2/NERONI2" DEVE PREESISTERE. PUO' ESSERE */ /* IDENTICA A QBATCH E PUO' ESSERE SOSTITUITA DA QBATCH O SIMILE. */ /* From System: "S65D69DA" */ /* From Library: "NERONI2" */ /* Unload Time: 2014-09-08 10:52 */ /* To File : "JFT" */ /* To Library : "NERONI2" */ /* To Text : "Sample Ftp Trigger. Src" */ /********* INIZIO ISTRUZIONI *******************************************/ /* LE SUCCESSIVE ISTRUZIONI PERMETTONO DI RICARICARE I SORGENTI. */ /* 1) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* CREARE UN FILE SORGENTE DI LUNGHEZZA RECORD 112: */ /* CRTSRCPF FILE(NERONI2/STRINGHE) RCDLEN(112) */ /* 2) SPOSTARE IL FILE "JFT.txt" NELL'INDIRIZZARIO */ /* DI UN PC CONNESSO IN RETE CON L'AS400 RICEVENTE */ /* (AD ES.: "c:\"). */ /* 3) DAL VIDEO COMANDI DEL PC CHIAMARE FTP: */ /* ftp nomeas400 */ /* 4) DIGITARE UTENTE E PASSWORD. */ /* 5) ESEGUIRE IL COMANDO DI COPIA DA FILE PC A MEMBRO AS400: */ /* put "c:\JFT.txt" "/qsys.lib/NERONI2.lib/stringhe.file/JFT.mbr" */ /* 6) ABBANDONARE FTP: */ /* quit */ /* 7) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* ESEGUIRE LA STRINGA COPIATA NEL MEMBRO SORGENTE: */ /* SBMDBJOB FILE(NERONI2/STRINGHE) MBR(JFT) JOBQ(QBATCH) */ /* LE SUCCESSIVE ISTRUZIONI PERMETTONO DI CREARE L'UTILITY. */ /* 8) DA UN VIDEO COMANDI DELL'AS400 RICEVENTE */ /* ESEGUIRE LA STRINGA O LE STRINGHE SORGENTE DI TIPO SEU "CL" */ /* (IL CUI NOME TERMINA SEMPRE CON ".") */ /* PRESENTI NEL FILE RICARICATO "NERONI2/JFT" */ /* FACENDO ATTENZIONE ALL'ORDINE DI ESECUZIONE INDICATO NEL */ /* MEMBRO FACOLTATIVO "A.LEGGIMI", AD ESEMPIO: */ /* SBMDBJOB FILE(NERONI2/JFT) MBR(JFT.) JOBQ(QBATCH) */ /********* FINE ISTRUZIONI *********************************************/ /* Crea la libreria. */ MKDIR DIR('/qsys.lib/NERONI2.lib') CHGLIB LIB(NERONI2) TEXT('Utility di Claudio Neroni') /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP NERONI2 QGPL) /* Crea il file sorgente. */ DLTF FILE(NERONI2/JFT) CRTSRCPF FILE(NERONI2/JFT) RCDLEN(112) + TEXT('Sample Ftp Trigger. Src') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(INPUT0) TOFILE(NERONI2/JFT) + TOMBR(INPUT0) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFT) MBR(INPUT0) + SRCTYPE(TXT) + TEXT('Sample Ftp Trigger. FTP da AS2. Input. CALL') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(INPUT1) TOFILE(NERONI2/JFT) + TOMBR(INPUT1) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFT) MBR(INPUT1) + SRCTYPE(TXT) + TEXT('Sample Ftp Trigger. FTP da AS2. Input. SBMJOB') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFT.) TOFILE(NERONI2/JFT) + TOMBR(JFT.) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFT) MBR(JFT.) + SRCTYPE(CL) + TEXT('Sample Ftp Trigger. Cjs') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFT.FIL) TOFILE(NERONI2/JFT) + TOMBR(JFT.FIL) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFT) MBR(JFT.FIL) + SRCTYPE(CL) + TEXT('Sample Ftp Trigger. Add PF Trigger') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFT.RGZ) TOFILE(NERONI2/JFT) + TOMBR(JFT.RGZ) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFT) MBR(JFT.RGZ) + SRCTYPE(CL) + TEXT('Sample Ftp Trigger. RgzPfm') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFTCPY) TOFILE(NERONI2/JFT) + TOMBR(JFTCPY) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFT) MBR(JFTCPY) + SRCTYPE(CLLE) + TEXT('Sample Ftp Trigger. Clear&Copy') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFTCPYR) TOFILE(NERONI2/JFT) + TOMBR(JFTCPYR) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFT) MBR(JFTCPYR) + SRCTYPE(RPGLE) + TEXT('Sample Ftp Trigger. Clear&Copy') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFTFIL) TOFILE(NERONI2/JFT) + TOMBR(JFTFIL) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFT) MBR(JFTFIL) + SRCTYPE(PF) + TEXT('Sample Ftp Trigger. File') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFTFTP) TOFILE(NERONI2/JFT) + TOMBR(JFTFTP) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFT) MBR(JFTFTP) + SRCTYPE(CLLE) + TEXT('Sample Ftp Trigger. FTP da AS2. ExeFtp') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFTTRG) TOFILE(NERONI2/JFT) + TOMBR(JFTTRG) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFT) MBR(JFTTRG) + SRCTYPE(CLLE) + TEXT('Sample Ftp Trigger. Trigger') /* Copia il sorgente dalla stringa al membro del file sorgente. */ /* Modifica testo e tipo seu del sorgente caricato. */ CPYF FROMFILE(JFTWRK) TOFILE(NERONI2/JFT) + TOMBR(JFTWRK) MBROPT(*REPLACE) SRCOPT(*SEQNBR) CHGPFM FILE(NERONI2/JFT) MBR(JFTWRK) + SRCTYPE(PF) + TEXT('Sample Ftp Trigger. File Work') /*---------------------------------------------------------------------*/ //DATA FILE(INPUT0) FILETYPE(*SRC) ENDCHAR('//ENDSRC') Utente Password namefmt 0 put neroni2/jftfil.jftfil neroni2/jftwrk.jftwrk quote rcmd call neroni2/jftcpy //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(INPUT1) FILETYPE(*SRC) ENDCHAR('//ENDSRC') Utente Password namefmt 0 put neroni2/jftfil.jftfil neroni2/jftwrk.jftwrk quote rcmd SBMJOB CMD(call neroni/jftcpy) JOB(JFT) JOBD(NERONI2/NERONI2) LOG(4 00 *SECLVL) //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JFT.) FILETYPE(*SRC) ENDCHAR('//ENDSRC') //BCHJOB JOB(JCLRRPG.) JOBD(NERONI2/NERONI2) OUTQ(QPRINTS) + ENDSEV(60) LOG(4 00 *SECLVL) MSGQ(*USRPRF) /* Claudio Neroni 05/09/2014 Creato. */ /* JFT */ /* Sample Ftp Trigger. */ /* Prerequisiti: nessuno */ /* Imposta la lista librerie. */ CHGLIBL LIBL(QTEMP QGPL) ADDLIBLE LIB(NERONI2) POSITION(*AFTER QTEMP) /* Cancella gli oggetti preesistenti. */ DLTCMD CMD(NERONI2/JFT) DLTPNLGRP PNLGRP(NERONI2/JFTP) DLTPGM PGM(NERONI2/JFTCPY) DLTPGM PGM(NERONI2/JFTCPYR) DLTPGM PGM(NERONI2/JFTFTP) DLTPGM PGM(NERONI2/JFTTRG) DLTMSGQ MSGQ(NERONI2/JFTMSGQ) DLTF FILE(NERONI2/JFTFIL) DLTF FILE(NERONI2/JFTWRK) /* Crea gli oggetti. */ CRTPF FILE(NERONI2/JFTFIL) SRCFILE(JFT) AUT(*ALL) CRTPF FILE(NERONI2/JFTWRK) SRCFILE(JFT) AUT(*ALL) CRTBNDCL PGM(NERONI2/JFTCPY) SRCFILE(JFT) DBGVIEW(*ALL) CRTBNDCL PGM(NERONI2/JFTFTP) SRCFILE(JFT) DBGVIEW(*ALL) CRTBNDCL PGM(NERONI2/JFTTRG) SRCFILE(JFT) DBGVIEW(*ALL) CRTBNDRPG PGM(NERONI2/JFTCPYR) SRCFILE(JFT) DBGVIEW(*ALL) CRTPNLGRP PNLGRP(NERONI2/JFTP) SRCFILE(JFT) CRTCMD CMD(NERONI2/JFT) PGM(JFTC) SRCFILE(JFT) HLPPNLGRP(JFTP) + HLPID(CMD) PRDLIB(NERONI2) CRTMSGQ MSGQ(NERONI2/JFTMSGQ) TEXT('Sample Ftp Trigger. Msgq') /* Aggiunge i trigger. */ ADDPFTRG FILE(NERONI2/JFTFIL) TRGTIME(*BEFORE) TRGEVENT(*INSERT) + PGM(NERONI2/JFTTRG) ADDPFTRG FILE(NERONI2/JFTFIL) TRGTIME(*AFTER) TRGEVENT(*INSERT) + PGM(NERONI2/JFTTRG) ADDPFTRG FILE(NERONI2/JFTFIL) TRGTIME(*BEFORE) TRGEVENT(*UPDATE) + PGM(NERONI2/JFTTRG) ADDPFTRG FILE(NERONI2/JFTFIL) TRGTIME(*AFTER) TRGEVENT(*UPDATE) + PGM(NERONI2/JFTTRG) ADDPFTRG FILE(NERONI2/JFTFIL) TRGTIME(*BEFORE) TRGEVENT(*DELETE) + PGM(NERONI2/JFTTRG) ADDPFTRG FILE(NERONI2/JFTFIL) TRGTIME(*AFTER) TRGEVENT(*DELETE) + PGM(NERONI2/JFTTRG) //ENDBCHJOB //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JFT.FIL) FILETYPE(*SRC) ENDCHAR('//ENDSRC') RMVPFTRG FILE(NERONI2/JFTFIL) RGZPFM FILE(NERONI2/JFTFIL) ADDPFTRG FILE(NERONI2/JFTFIL) TRGTIME(*BEFORE) TRGEVENT(*INSERT) + PGM(NERONI2/JFTTRG) ADDPFTRG FILE(NERONI2/JFTFIL) TRGTIME(*AFTER) TRGEVENT(*INSERT) + PGM(NERONI2/JFTTRG) ADDPFTRG FILE(NERONI2/JFTFIL) TRGTIME(*BEFORE) TRGEVENT(*DELETE) + PGM(NERONI2/JFTTRG) ADDPFTRG FILE(NERONI2/JFTFIL) TRGTIME(*AFTER) TRGEVENT(*DELETE) + PGM(NERONI2/JFTTRG) ADDPFTRG FILE(NERONI2/JFTFIL) TRGTIME(*BEFORE) TRGEVENT(*UPDATE) + PGM(NERONI2/JFTTRG) ADDPFTRG FILE(NERONI2/JFTFIL) TRGTIME(*AFTER) TRGEVENT(*UPDATE) + PGM(NERONI2/JFTTRG) //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JFT.RGZ) FILETYPE(*SRC) ENDCHAR('//ENDSRC') CHGPFTRG FILE(NERONI2/JFTFIL) TRG(*ALL) STATE(*DISABLED) RGZPFM FILE(NERONI2/JFTFIL) CHGPFTRG FILE(NERONI2/JFTFIL) TRG(*ALL) STATE(*ENABLED) //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JFTCPY) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Esegue pulizia e trascrizione su AS1 */ PGM MONMSG MSGID(CPF0000 CEE0000) EXEC(GOTO + CMDLBL(JOBLOG)) RMVLIBLE LIB(NERONI2) MONMSG MSGID(CPF0000) ADDLIBLE LIB(NERONI2) MONMSG MSGID(CPF0000) SNDPGMMSG MSG('Esecuzione in corso di JFTCPY') + TOMSGQ(JFTMSGQ) MONMSG MSGID(CPF0000) CALL PGM(JFTCPYR) GOTO CMDLBL(FINE) JOBLOG: CHGJOB LOG(4 00 *SECLVL) LOGOUTPUT(*JOBEND) MONMSG MSGID(CPF0000) FINE: ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JFTCPYR) FILETYPE(*SRC) ENDCHAR('//ENDSRC') * Sul file triggerato dell'AS4001 * esegue la pulizia preliminare * e copia i dati ricevuti dal file non triggerato * al file triggerato. * File triggerato. Fjftfil uf a e disk * File non triggerato. Fjftwrk if e disk rename(ptr:w) * Pulisce il file triggerato. C do *hival C read ptr C if %eof(jftfil) C leave C endif C delete ptr C enddo * Copia i record dal file non triggerato al file triggerato. C do *hival C read w C if %eof(jftwrk) C leave C endif C write ptr C enddo * Chiude. C seton lr //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JFTFIL) FILETYPE(*SRC) ENDCHAR('//ENDSRC') A R PTR A TEXT('Prova trigger') A PTDAT 8 A COLHDG('Data' 'YYYYMMDD') A PTFLA 1 A COLHDG('Fine' 'mese') //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JFTFTP) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Esegue ftp del file work da AS2 a AS1 e chiama */ /* via comando remoto ftp la ricopertura del file triggerato su AS1. */ PGM PARM(&AS1) DCL VAR(&AS1) TYPE(*CHAR) LEN(10) DCL VAR(&NCR) TYPE(*DEC) LEN(10) RMVLIBLE LIB(NERONI2) MONMSG MSGID(CPF0000) ADDLIBLE LIB(NERONI2) MONMSG MSGID(CPF0000) RTVMBRD FILE(JFTFIL) NBRCURRCD(&NCR) IF COND(&NCR *NE 1) THEN(DO) SNDPGMMSG MSG('Il file da trasmettere contiene un + numero di record diverso da 1') RETURN ENDDO OVRDBF FILE(INPUT) TOFILE(JFT) MBR(INPUT0) FTP RMTSYS(&AS1) ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JFTTRG) FILETYPE(*SRC) ENDCHAR('//ENDSRC') /* Trigger after insert su un semaforo data(8)+flag(1). */ PGM PARM(&TRGPRM) /* Riceve il Parametro Trigger. */ DCL VAR(&TRGPRM) TYPE(*CHAR) LEN(2000) /* Messaggio. */ DCL VAR(&MSG) TYPE(*CHAR) LEN(100) /* Trigger Event. */ DCL VAR(&TRGEVT) TYPE(*CHAR) LEN(1) DCL VAR(&TRGEVTD) TYPE(*CHAR) LEN(10) /* Trigger Time. */ DCL VAR(&TRGTIM) TYPE(*CHAR) LEN(1) DCL VAR(&TRGTIMD) TYPE(*CHAR) LEN(10) /* Comodo alfa per estrazione binari. */ DCL VAR(&A4) TYPE(*CHAR) LEN(4) /* New record offset. */ DCL VAR(&NEWRCDOFS) TYPE(*INT) /* Relative record number. */ DCL VAR(&RRN) TYPE(*INT) DCL VAR(&RRNA) TYPE(*CHAR) LEN(20) /* Offset Data. */ DCL VAR(&OFS1) TYPE(*INT) /* Offset Flag. */ DCL VAR(&OFS2) TYPE(*INT) /* Data. */ DCL VAR(&DATA) TYPE(*CHAR) LEN(8) /* Flag. */ DCL VAR(&FLAG) TYPE(*CHAR) LEN(1) /* Comodo per subroutine ALLINEA. */ DCL VAR(&ALLI) TYPE(*CHAR) LEN(20) DCL VAR(&ALLIS) TYPE(*CHAR) LEN(1) /* Intercetta errori. */ MONMSG MSGID(CPF0000 CEE0000) EXEC(GOTO + CMDLBL(JOBLOG)) /* Segnala esecuzione. */ SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA('Trigger + in esecuzione') TOPGMQ(*EXT) MSGTYPE(*STATUS) /* Estrae Trigger Event. */ /* 1=Insert 2=Delete 3=Update 4=Read */ CHGVAR VAR(&TRGEVT) VALUE(%SST(&TRGPRM 31 1)) CHGVAR VAR(&TRGEVTD) VALUE('ERROR') IF COND(&TRGEVT = '1') THEN(CHGVAR + VAR(&TRGEVTD) VALUE('Insert')) IF COND(&TRGEVT = '2') THEN(CHGVAR + VAR(&TRGEVTD) VALUE('Delete')) IF COND(&TRGEVT = '3') THEN(CHGVAR + VAR(&TRGEVTD) VALUE('Update')) IF COND(&TRGEVT = '4') THEN(CHGVAR + VAR(&TRGEVTD) VALUE('Read')) /* Estrae Trigger Time. */ /* 1=After 2=Before */ CHGVAR VAR(&TRGTIM) VALUE(%SST(&TRGPRM 32 1)) CHGVAR VAR(&TRGTIMD) VALUE('ERROR') IF COND(&TRGTIM = '1') THEN(CHGVAR + VAR(&TRGTIMD) VALUE('After')) IF COND(&TRGTIM = '2') THEN(CHGVAR + VAR(&TRGTIMD) VALUE('Before')) /* Estrae il Relative record number. */ CHGVAR VAR(&A4) VALUE(%SST(&TRGPRM 41 4)) CHGVAR VAR(&RRN) VALUE(%BIN(&A4)) CHGVAR VAR(&ALLI) VALUE(&RRN) CALLSUBR SUBR(ALLINEA) CHGVAR VAR(&RRNA) VALUE(&ALLI) /* Se corre after insert. */ IF COND(&TRGTIM *EQ '1' *AND &TRGEVT *EQ '1') + THEN(DO) /* Estrae il New record offset. */ CHGVAR VAR(&A4) VALUE(%SST(&TRGPRM 65 4)) CHGVAR VAR(&NEWRCDOFS) VALUE(%BIN(&A4)) /* Calcola Offset Data. */ CHGVAR VAR(&OFS1) VALUE(&NEWRCDOFS + 1) /* Calcola Offset Flag. */ CHGVAR VAR(&OFS2) VALUE(&OFS1 + 8) /* Estrae Data. */ CHGVAR VAR(&DATA) VALUE(%SST(&TRGPRM &OFS1 8)) /* Estrae Flag. */ CHGVAR VAR(&FLAG) VALUE(%SST(&TRGPRM &OFS2 1)) /* Segnala parametri estratti dall'immagine after insert. */ CHGVAR VAR(&MSG) VALUE('Rrn:' *CAT &RRNA *BCAT + 'Event:' *CAT &TRGEVTD *BCAT 'Time:' *CAT + &TRGTIMD *BCAT '->Data:' *CAT &DATA *BCAT + 'Flag:' *CAT &FLAG) SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + TOPGMQ(*EXT) SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + TOMSGQ(JFTMSGQ) /* Se corre after insert. */ ENDDO /* Se non corre after insert. */ ELSE CMD(DO) /* Segnala le chiamate diverse da after insert. */ CHGVAR VAR(&MSG) VALUE('Rrn:' *CAT &RRNA *BCAT + 'Event:' *CAT &TRGEVTD *BCAT 'Time:' *CAT + &TRGTIMD) SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + TOPGMQ(*EXT) SNDPGMMSG MSGID(CPF9897) MSGF(QCPFMSG) MSGDTA(&MSG) + TOMSGQ(JFTMSGQ) /* Se corre after insert. */ ENDDO /* Ritorna. */ RETURN /* Se errore, joblog. */ JOBLOG: CHGJOB LOG(4 00 *SECLVL) LOGOUTPUT(*JOBEND) MONMSG MSGID(CPF0000) RETURN /*---------------------------------------------------------------------*/ /* Subroutine ALLINEA. */ SUBR SUBR(ALLINEA) /* Allinea a sinistra il contenuto numerico di un campo alfanumerico */ /* fino a 20 caratteri con segno "-" a sinistra sopprimendo gli zeri */ /* non significativi. */ CHGVAR VAR(&ALLIS) VALUE(%SST(&ALLI 1 1)) IF COND(&ALLIS = '-') THEN(CHGVAR + VAR(%SST(&ALLI 1 1)) VALUE('0')) DOWHILE COND('1') IF COND(%SST(&ALLI 1 1) *NE '0' *OR %SST(&ALLI + 2 1) *EQ ' ') THEN(LEAVE) CHGVAR VAR(&ALLI) VALUE(%SST(&ALLI 2 19)) ENDDO IF COND(&ALLIS = '-') THEN(CHGVAR VAR(&ALLI) + VALUE(&ALLIS *TCAT &ALLI)) ENDSUBR /*---------------------------------------------------------------------*/ ENDPGM //ENDSRC /*---------------------------------------------------------------------*/ //DATA FILE(JFTWRK) FILETYPE(*SRC) ENDCHAR('//ENDSRC') A R PTR A TEXT('Prova trigger') A PTDAT 8 A COLHDG('Data' 'YYYYMMDD') A PTFLA 1 A COLHDG('Fine' 'mese') //ENDSRC //ENDBCHJOB