Dokumente mit "Ablaufdatum" löschen

Hallo zusammen,

ich habe hier lauter Dokumente, die nur bis zu einem bestimmten Zeitpunkt von Interesse sind. Beispielsweise: Gutscheine mit Ablaufdatum.
Diese würde ich gerne ablegen und wenn das Datum überschritten ist, sollen die Dokumente gelöscht werden. Gerne automatisch (wenn das geht) oder halt angezeigt werden, damit ich diese dann manuell lösche. Kann mir jemand eine Idee, geben, wie das gehen könnte?
Meine einzige Idee ist: Dokumente mit Ablaufdatum am Anfang des Dokumentennames in einem Verzeichnis ablegen und dann kann man immer danach sortieren.
Gibt es da noch intelligentere Lösungen? :slight_smile:

Gruß
Doktor

Sie könnten die Dokumente mit einem Fälligkeitsdatum (s. Inspektoren > Annotationen & Erinnerungen) versehen. Eine einfach intelligente Regel könnte die fälligen Dokumente dann in den Papierkorb legen:

Alternativ könnten Sie ein beliebiges Datum (s. Einstellungen > Daten) selbst definieren und eine z.B. täglich ausgeführte intelligente Regel könnte nach überfälligen Dokumenten suchen und diese entfernen.

Das geht aber auch deutlich komplizierter (dafür hat man die Erinnerungsfunktion aber für den ursprünglichen Zweck wieder verfügbar):

Ich habe mir ein benutzerdefiniertes Metadatum namens “Verfall” (mit id verfall), Typ: Datum, Format: Datum angelegt. Bei Gutscheinen etc. trage ich hier das Verfallsdatum ein.

Diese smarte Regel führt dann folgenden Skript aus:

on performSmartRule(theRecords)
	tell application id "DNtp"
		set recCounter to 0
		set delDocs to {"
"}
		repeat with theRecord in theRecords
			set recCounter to recCounter + 1
			set listName to ("
" & the name of theRecord)
			copy listName to end of delDocs
		end repeat
		if recCounter is greater than 0 then
			set theDialog to ("Moving " & recCounter & " expired documents to trash: " & delDocs)
			display dialog theDialog with title "Expired documents" buttons {"Cancel", "OK"} default button 1
			repeat with theRecord in theRecords
				set thisDatabase to the database of theRecord
				move record theRecord to trash group of thisDatabase
			end repeat
		end if
	end tell
end performSmartRule

So wird mir angezeigt, wieviele, und welche Dokumente denn gerade gelöscht werden.

Für bestimmte Dokumententypen die nach den Datenschutzbestimmungen immer nach einer festgelegten Löschfrist zu löschen sind (z.B. 3 Jahre nach Erstellung) habe ich eigene Regeln, die in Abhängigkeit vom Erstellungsdatum ein Löschdatum festlegen; so muss ich bei solchen Dokumenten die Frist nicht zusätzlich bei den Metadaten eintragen.

1 Like

Danke.

Ich finde die Lösung mit dem neuen Feld “schicker”.

Wo lege ich dieses neue Metafeld an? Unter Inspectoren > Annotation > Benutzerdefiniert?

Das Script sieht interessant aus. Wo trage ich das ein? Bin eher noch ein Anfänger…

Danke und Gruß
Doktor

Das neue Metadatum legst du unter Einstellung/Daten an (zumindest mutmaße ich, dass es auf deutsch so heißt; auf engl. Preferences/Data). Das setzt allerdings DT3 Pro oder Server voraus, DT3 Vanilla kann das nicht. [Edit: Wenn du mein Skript 1:1 übernehmen willst, muss dein Metadatum auch exakt dem Entsprechen, was ich in meinem ersten Post vorgegeben habe; sonst sind Anpassungen am Skript erforderlich. -> stimmt nicht, nur an der Smart Rule; in diesem Skript greife ich nicht auf die Metadaten zu]

Das Skript kannst du in einer smarten Regel einbetten - wenn du meine abgebildete smarte Regel anschaust, siehst du, dass als Aktion “Skript ausführen” aufgeführt ist; eingebettet; Skript editieren. Ein klick auf Skript editieren öffnet ein entsprechendes Fenster, wo du “mein” Skript über den vorhandenen Text hineinkopieren musst.

Meine smarte Regel erfasst dann alle Dokumente, wo das Verfallsdatum innerhalb der letzten 14 Tage liegt, und auf oder nach dem 2.1.2001 liegt (das ist ein Tag nach dem Defaultdatum); Grund für diese Doppelbedingung ist, dass wenn jemals ein Systemfehler auftreten sollte, das die Systemuhr auf 1.1.2001 zurückstellt, die Regel sonst alle Dokumente die kein eigenes Verfallsdatum haben in DT löschen würde. Wie wahrscheinlich ist das? Pfff, null. Aber trotzdem :wink:

Das eigentliche Datum trägst du nachher bei Inspektoren/Info/Benutzerdefiniert ein (⌃2).

So…ich habe alles genauso angelegt (hoffe ich zumindestens).
Habe mal ein Testdokument mit Verfall am 01.11. und 2.11. hochgeladen.
Dann habe bin ich auf “Regel Anwenden” gegangen…aber passiert ist nichts…
Was soll denn passieren? Dokument wird in den Papierkorb verschoben?

image

image

Beispieldokument:
image

Was stimmt noch nicht?

in der smarten Regel sollte “Verfall innerhalb der letzten” nicht 0 Tage heißen. Ich glaube, dass 0 sogar gar nie erfüllt werden kann; es wäre aber auch nicht nützlich, weil dann ein Dokument, welches gestern verfallen ist, nie gelöscht werden würde. Ich habe an dieser Stelle 14 Tage eingestellt. So würden auch dann Dokumente gelöscht werden, wenn ich eine zeit lang DT nicht offen hatte (bisher noch nie passiert…). Im Prinzip kannst du hier auch 1.000.000 einstellen, es geht nur darum, dass die Regel bemerkt, dass das Datum überschritten wurde, also nicht in der Zukunft liegt.

“Manuell” kannst du dir bei den Bedingungen auch sparen; Manuell kannst du m.W. eine Regel immer auslösen; diesen Trigger bräuchtest du also nur, falls du sonst keine Trigger hast.

Probiers bitte nochmal aus.

1 Like

Mit dem korrekten Wert von z. B. 14 hat es funktioniert. Danke!

…auch wenn ich die Syntax von dem Script noch überhaupt nicht verstehe :wink:

Wo Apple sich doch so viel Mühe gegeben hat, damit AppleScript genauso geschwätzig und redundant ist wie natürliche Sprache :wink:

Das Entscheidende ist die zweite repeat-Schleife: die wirft einfach alle Datensätze, die die intelligente Regel findet, in den Mülleimer. Der Rest ist Nettigkeit, damit du erfährst, welche Dokumente das waren. Oder, @Blanc?

Natürlich so ist es! Wobei es eine Nettigkeit ist um zu erfahren, welche es sein werden; so könnte man die Regel mit Cancel noch abbrechen bevor etwas in den Mülleimer verschoben wird.

@Doktor: deine intelligente Regel erstellt ein Liste mit Dokumenten (auf die die Kriterien der Regel zutreffen) und übergibt diese Liste als theRecords an das Skript. Die ersten repeat-Schleife zählt mit dem Zähler recCounter wieviele Dokumente in dieser Liste zu finden sind, und fügt die Namen der Dokumente einer weiteren Liste hinzu (dabei wird listName als Zeilenumbruch plus Dokumentname definiert und der Liste delDocs hinzugefügt). So mehr als 0 Dokumente gezählt wurden, wird dir dann ein Dialogfenster angezeigt, in dem du auch wieder die Variablen recCounter und delDocs siehst. Wie @chrillek schon sagte verschiebt die zweite repeat-Schleife dann alle Dokumente in der Liste theRecords in den Mülleimer; dabei wird zuerst abgefragt, in welcher Datenbank die Dokumente liegen, damit das Dokument dann auch in den zur Datenbank gehörige Mülleimer geworfen wird.

Die Begriffe in grün sind definierbare Variablen (wobei performSmartRule der Name der Routine ist die von DT gerufen wird, und so m.W. nicht verändert werden kann).

Eine kleine Modifikation des intelligenten Regelskripts…

on performSmartRule(theRecords)
	tell application id "DNtp"
		set recCounter to (count theRecords) -- Count the records directly
		set delDocs to {} -- An empty list without quotes and return is sufficient
		repeat with theRecord in theRecords
			copy (name of theRecord & return) to end of delDocs -- You can add "return" or "linefeed".
		end repeat
		if recCounter is greater than 0 then
			display dialog ("Moving " & recCounter & " expired documents to trash: " & return & return & delDocs) with title "Expired documents" buttons {"Cancel", "OK"} default button 1 -- Consolidated the display dialog
			repeat with theRecord in theRecords
				set thisDatabase to the database of theRecord
				move record theRecord to trash group of thisDatabase
			end repeat
		end if
	end tell
end performSmartRule
1 Like

Hier sieht man den Unterschied zwischen dem, der Skripten kann und dem, der das Ganze nur zusammenschustert. Thanks for the cleanup, Jim :+1:t3:

Ich bitte Sie.

Ihr Skript war vollkommen in Ordnung. Tatsächlich hätte Ihre Version mit dem inkrementierenden Zähler für einen Dialog wie diesen verwendet werden können…

1 Like

Danke…ich habe das “optimierte” Skript integriert!

Ich bitte Sie. Viel Vergnügen!

1 Like