Anmelden

View Full Version : PDF-Dokumente aus Ordner löschen



AK1
18-04-16, 21:02
Hallo,

wer kann einen Tipp geben?

Habe folgendes Problem:

Es sind in einem Ordner PDF-Dokumente gespeichert.

Diese sollen nach einem bestimmten Zeitraum z. B. < Tagesdatum - 1 Monat gelöscht werden. Die Löschung soll automatisiert laufen. (SHEDULER)
Im Jobplan soll ein CLP aufgerufen werden.

Ich kenne den Befehl DLTDLO mit dem man Dokumente löschen kann.

Was ich nicht kenne ist, wie kann ich die einzelnen Dokumente innerhalb des Ordners lesen vom 1 bis zum letzten Dokument.
Wenn ich das Dokument gelesen habe muss ich den Vergleich mit dem Änderungsdatum
machen, ob eine Löschung erfolgen soll. Was muss ich machen für den Vergleich.

Hat das schon jemand gemacht und kann mir Hilfestellung (Source) geben.
Danke.

TheDevil
19-04-16, 06:18
Hallo und guten Morgen,

Wenn Du das IFS meinst würde ich eher ein kleines c# pgm vorschlagen.
Dies auf einem Server ablegen und dort scedulen ...

Gruß,
Ralf

Dschainers
19-04-16, 06:40
PGM PARM(&PFAD)
DCLF FILE(DSPDOCFIL)
DCL VAR(&PFAD) TYPE(*CHAR) LEN(30)
DCL VAR(&BISDAT) TYPE(*CHAR) LEN(6)
DCL VAR(&BISJUL) TYPE(*CHAR) LEN(7)
DCL VAR(&DOCDAT) TYPE(*CHAR) LEN(7)
DCL VAR(&BISJUN) TYPE(*DEC) LEN(7 0)
DCL VAR(&DOCDAN) TYPE(*DEC) LEN(7 0)

DSPFLR FLR(&PFAD) TYPE(*DOC) OUTPUT(*OUTFILE) +
OUTFILE(DSPDOCFIL) OUTMBR(*FIRST *REPLACE)

TAATOOL/ADDDAT DAYS(-365) TOVAR(&BISDAT)

CVTDAT DATE(&BISDAT) TOVAR(&BISJUL) FROMFMT(*JOB) +
TOFMT(*LONGJUL) TOSEP(*NONE)
CHGVAR VAR(&BISJUN) VALUE(&BISJUL)

START: RCVF
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ENDE))
CVTDAT DATE(&LASTRV) TOVAR(&DOCDAT) FROMFMT(*DMY) +
TOFMT(*LONGJUL) TOSEP(*NONE)
MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(START))
CHGVAR VAR(&DOCDAN) VALUE(&DOCDAT)
IF COND(&DOCDAN *LE &BISJUN) THEN(DO)
DLTDLO DLO(&DOCNAM) FLR(&FLRNAM)
MONMSG MSGID(CPF0000)
ENDDO
GOTO CMDLBL(START)

ENDE: CLRPFM FILE(DSPDOCFIL)
ENDPGM


Das gabs vor langer Zeit mal

Fuerchau
19-04-16, 08:00
Ich nehme mal an, dass die PDF's im IFS und zwar nicht im QDLS (wegen Namensgebung) liegen.
Somit scheiden DLO-Befehle aus.
Hilfreich ist hier die QSH und der Befehl "find".
"find" findet nach verschiedenen Kriterien Dokumente und führt "-exec {}" auf das Dokument aus.
Dies kann natürlich der "rm"-Befehl sein.

Seit neuestem gibt es SQL-Funktionen/Prozeduren, die eine Liste von IFS-Dokumenten ausgeben können. Hier kann man dann das CMD-Objekt "DEL" anwenden.

camouflage
19-04-16, 08:03
Hi,

Ich nehm mal an, Du bist des englischen mächtig. Dann kann ich dir das Tutorial von Scott Klement an's Herz legen. Darin findest Du alles was für die Verarbeitung von IFS Files nötig ist.

https://www.scottklement.com/rpg/ifs_ebook/index.html

PDF:
https://www.scottklement.com/rpg/ifs_ebook/ifs_ebook.pdf (https://www.scottklement.com/rpg/ifs_ebook/index.html)

Fuerchau
19-04-16, 08:26
Warum immer so kompliziert?
http://www.ibm.com/support/knowledgecenter/ssw_ibm_i_61/rzahz/rzahzfind.htm?cp=ssw_ibm_i_61&lang=de
Da gibts auch Beispiele.

Dschainers
19-04-16, 08:37
Ich frage mich warum AK1 den Befehl DLTDLO angibt, mit dem kann man doch nichts im IFS veranstalten.
Ich denke AK1 meint doch QDLS!

Ausser dem kann man im Befehl DLTDLO zusätzliche Parameter angeben, mit dem man einschränkt was man löschen will.

B.Hauser
19-04-16, 08:37
Du kannst Dir natürlich auf mit RTVDIRINF entsprechende Outfiles erstellen und diese dann z.B. mit SQL verarbeiten.

Birgitta

Fuerchau
19-04-16, 08:38
Wie immer, es gibt 1000 Wege, aber nur 1 ist der küzeste:cool:.

Hrs28
19-04-16, 11:07
Also ich habe das auch über QSH gelöst:
STRQSH CMD('find /home/XYZ -name *.PDF -ctime +31 -exec rm {} \;')

Das rufe ich direkt aus dem Jobsceduler auf - ohne CL und löscht alle PDF Dateien älter als 31 Tage.