Ich habe hier das Problem, dass Stationaries verschwinden, sobald man ein Dokument aus Ihnen erstellt. Das ist wohl ein bekanntes Problem, siehe hier (http://www-01.ibm.com/support/docview.wss?uid=swg1LO49577).
Aber ich wollte wissen, wieso das so ist, und habe mir den Code für "Mehr -> Neue Nachricht mit Vorlage..." mal angeschaut.
Und da habe ich fast die Krise bekommen:
Set collection = uiws.Picklistcollection(PICKLIST_CUSTOM, False, database.server, database.filepath, "Stationery", "Vorlage wählen", "Wählen Sie bitte eine Vorlage für das neue Memo.")
If Not(collection Is Nothing) Then '//User may have cancelled
Set noteCursorDoc = collection.getfirstdocument
If Not noteCursorDoc Is Nothing Then
Set noteUIEditDocument = uiws.Editdocument(False, noteCursorDoc)
End If
End If
Das heisst: Diese Aktion öffnet einfach die Vorlage zum bearbeiten, und der Rest des "Vorlagen- Handlings" passiert in den Events der Maske. Dort wird also erst die "neue Kopie" erstellt und dafür gesorgt, dass nicht die Vorlage selbst verschwindet.
Das geht aber in vielen Fällen gründlich schief.
Warum in aller Welt wird hier nicht gleich eine Kopie des Dokuments erstellt und zum bearbeiten geöffnet?
Welchen tieferen Sinn macht sowas?
Hat jemand da schon mal dran rumgeschraubt?
Unglaublich...
Ihr habt recht... Die Benutzer hier sind aber halt verwöhnt... Die wissen, dass man fast alles fixen kann, was IBM so verbrochen hat.
Fall irgendjemand jemals über diesen Thread stolpert, hier meine Bugfixes für dieses nervige Verhalten. Natürlich sind noch nicht alle Risiken und Nebenwirkungen geprüft, aber ich poste es trotzdem mal. In der Gemeinsamen Aktion "Werkzeuge\Neue Nachricht mit Vorlage..." und in den Aktionen in der Ansicht (Vorlage)|Stationary "Neu\Nachricht mit Vorlage..." und "Aktionen nur für Classic\mit Vorlage (Classic)" habe ich die Zeile
Set noteUIEditDocument = uiws.Editdocument(False, noteCursorDoc)
durch die folgenden Zeilen ersetzt:
Dim noteNewMemo As NotesDocument
Set noteNewMemo = New NotesDocument( database )
Call noteCursorDoc.CopyAllItems( noteNewMemo )
Call noteNewMemo.RemoveItem("IsMailStationery")
Call noteNewMemo.RemoveItem("MailStationeryName")
Set noteUIEditDocument = uiws.Editdocument(False, noteNewMemo)
Ausserdem im QueryOpenDocument der besagten Ansicht folgenden Code ergänzt:
Dim uiws As New NotesUIWorkspace
Dim noteUIEditDocument As NotesUIDocument
Dim ses As New NotesSession
Dim database As NotesDatabase
Dim dc As NotesDocumentCollection
Dim noteNewMemo As NotesDocument
Dim noteCursorDoc As NotesDocument
Set database = ses.CurrentDatabase
If ses.GetEnvironmentString( "MailStEd" ) <> "2" Then
Set dc = Source.Documents
Set noteCursorDoc = dc.GetFirstDocument
If Not noteCursorDoc Is Nothing Then
Set noteNewMemo = New NotesDocument( database )
Call noteCursorDoc.CopyAllItems( noteNewMemo )
Call noteNewMemo.RemoveItem("IsMailStationery")
Call noteNewMemo.RemoveItem("MailStationeryName")
Set noteUIEditDocument = uiws.Editdocument(True, noteNewMemo)
Continue = False
End If
End If
Damit sollte ich die meisten Fälle abgefangen haben...
Ja, ich weiss, dass es böse ist, in den Mailtemplates rumzufuhrwerken, aber der Kunde ist König ;-)