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?
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.
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
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?
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.
Wo Apple sich doch so viel Mühe gegeben hat, damit AppleScript genauso geschwätzig und redundant ist wie natürliche Sprache
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
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…