Bei der Entwicklung einer Anwendung stießen wir auf einen Fehler, der unter Umständen kritische Folgen haben kann. Wird mit Dokumenten gearbeitet, die sich in einer sortierten Ansicht befinden, kann es passieren dass Notes ein bereits geöffnetes Dokument durch ein anderes austauscht. Das tritt immer dann auf, wenn in den Lesemodus gewechselt wird, nachdem ein Feldwert, der Einfluss auf die Sortierung hat, geändert und gespeichert wurde.
Konkreter an einem Beispiel dargestellt:
In einer Ansicht befinden sich zwei Dokumente, welche beide in dem Feld "Nummer" einen numerischen Wert enthalten. Das Feld im ersten Dokument hat den Wert 1, im zweiten Dokument den Wert 2. In der Ansicht sind die Dokumente nach dem Feld "Nummer" aufsteigend sortiert. 
Das erste Dokument wird im Bearbeitungsmodus geöffnet und der Wert des Feldes "Nummer" von 1 in 3 geändert.

Anschließend wird gespeichert und in den Lesemodus gewechselt. 
Statt dem ersten Dokument mit dem Feldwert 3, befindet sich jetzt das zweite Dokument mit dem Feldwert 2 im Lesemodus.
Warum passiert das? Weil das Dokument durch die Sortierung in der Ansicht nach unten gerutscht ist und dies scheinbar Auswirkungen auf das anzuzeigende Dokument hat.
Wir haben diesem Blogeintrag eine Datenbank hinzugefügt, an welcher Sie den Fehler gut nachvollziehen können. Dort finden Sie zwei Ansichten (view1, view2). In der view1 haben wir für das Problem bereits eine Lösung implementiert. In der view2 können Sie den Fehler anhand des eben beschriebenen Beispiels nachvollziehen.
Folgenden Code haben wir zur Lösung des Problems im "QueryModeChange" der Maske der Dokumente aus view1 hinzugefügt:
Dim uiws As New NotesUIWorkspace
Dim doc As NotesDocument
Dim docReopen As notesDocument
Dim newUIDoc As NotesUIDocument
Dim item As NotesItem
Dim unid As String
Dim msgSave As Integer
Dim msgReset As Integer
If source.EditMode Then
If source.ModifiedSinceSaved Then
msgSave = Messagebox("Möchten Sie Ihre Änderungen speichern?", MB_YESNOCANCEL, "IBM Notes")
If msgSave = IDYES Then
source.Save
Elseif msgSave = IDNO Then
msgReset = Messagebox("Möchten Sie das Dokument zurücksetzen?" + Chr$(10) + Chr$(10) + _
|Bei "Ja" wird das Dokument in den Zustand der letzten Speicherung versetzt.| + Chr$(10) + _
|Bei "Nein" werden die letzten Änderungen ungespeichert angezeigt.|, MB_YESNO, "IBM Notes")
End If
End If
If Not msgSave = IDCANCEL Then
Set doc = source.Document
unid = doc.UniversalID
Set item = New NotesItem(doc, "SaveOptions", 0)
source.Close
If msgReset = IDYES Then
Delete doc
End If
Set docReopen = uiws.CurrentDatabase.Database.GetDocumentByUNID(unid)
Set newUIDoc = uiws.EditDocument(False, docReopen)
Call uiws.ViewRefresh
End If
continue = False
End If
