Das aus dem Archiv zurückkopierte Dokument ist doch definitiv von den Lesern ungelesen (in dem Sinne: es ist ein neues Dokument). Daß es ein inhaltsgleiches Dokument bereits früher einmal gab, kann die empfangende DB nicht wissen, solange der Vorgang der Archivierung die archivierten Dokumente in der Original-DB komplett löscht.
Und wenn die UNGELESEN-Markierung von zurückkopierten Dokumenten das Killerkriterium der Datenbank ist, dann muß man es eben anders anstellen:
beim Archivieren wird eine Kopie des Dokuments angelegt, die auf den verbleibenden Dokumentrumpf referenziert. Im Dokukumentrumpf werden alle Felder gelöscht und ein Save mit allen drei Optionen durchgeführt (das SAVE des geänderten Originaldokuments soll die bestehenden GELESEN-Einträge ja nicht anrühren).
Beim Wiedereinfügen geschieht das Gleiche in umgekehrter Reihenfolge (COPYALLITEMS aus dem Archivdokument - und das Save erfolgt wieder incl. drittem Parameter).
Ich hoffe, daß alle deine Agenten und alle anderen DB-Elemente mit solchen "Dokumenten ohne Items" klarkommen; vermutlich muß man da nachrüsten. Jede Feldoperation, die du derzeit auf einem Dokument ausführst, muß mit einem If doc.HasItem vorher abgeprüft werden.
Aber im Endeffekt hast du genau das, was du willst: wer das archivierte Dokument vor dessen Wiedereinfügung bereits gelesen hatte, für den ist es gelesen. Und wer es vor der Archivierung noch nicht gelesen hatte, für den ist es nach dem Zurückkopieren weiterhin ungelesen.