Hallihallo!
In einer Projektverwaltung sollen Vorgänge zur Bearbeitung angenommen werden. Das heißt, das Dokument soll nicht bearbeitbar sein, solange man nicht auf den Button "Zur Bearbeitung annehmen" geklickt hat (dabei soll dann ein Eintrag in die Historie vorgenommen werden).
In der Theorie sieht das bei mir so aus:
1. Im Dokument gibt es einen Flag: 0 = Dokument darf nicht bearbeitet werden, 1 = Dokument darf bearbeitet werden. Dies wird über das QueryModeChange gesteuert.
2. Dieser Flag steht auf 0 - klickt man auf den Button, so wird im Backend das Feld auf 1 gesetzt und das Dokument per EditMode = True in den Bearbeitenmodus versetzt.
3. Im Querymodechange wird der geänderte Flag erkannt und das Dokument in den Bearbeitungsmodus gesetzt.
Problem:
Im QueryModeChange erkennt das Script nicht, dass die Änderung gemacht und zeigt immer noch eine 0 an. Schließe ich das Dokument und öffne es erneut, dann ist die Änderung aber vorhanden und ich kann das Dokument bearbeiten. Komische Sache.
Hier sind die Scripte, die bei der Prozedur durchlaufen werden:
Button "Vorgang Annehmen"
Sub Click(Source As Button)
' Setzt das Flag "Is
Dim ws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument
Set uidoc = ws.CurrentDocument
Set doc = uidoc.Document
doc.dok_angenommen = 1
Call doc.Save(True, False, True)
uidoc.editmode = True
End Sub
QueryModeChange
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
Dim doc As NotesDocument
Dim vRoleKeys (0 To 1) As String
Set doc = Source.Document
' Wenn das Dokument nicht angenommen wurde (dok_angenommen = 0), dann
' darf man auch nicht in den Bearbeitungsmodus
vRoleKeys(0) = session.Username
vRoleKeys(1) = "[SuperEditor]"
If (h_HasRole(vRoleKeys) Or ArrayHasElement(doc.übergeordnete_projektleiter, session.Username)) Then
Continue = True
Elseif (doc.dok_angenommen(0) <> 1 And Source.EditMode = False) Then
Continue = False
End If
End Sub
Ich habe schon versucht, im QueryModeChange nicht mit Source.Document, sondern mit GetDocumentByUNID(Source.Document.UniversalID) zu arbeiten, um möglicherweise ein Handle auf das gespeicherte Dokument zu erhalten, leider ohne Erfolg. Ein Kollege hat empfohlen, die Variable temporär in die Notes.ini zu schreiben, aber dagegen sträube ich mich.
Ich hoffe, eine/r von euch weiß auch hierzu einen Ratschlag, das kann doch kein unlösbares Problem sein ???.
Beste Grüße
- Jérôme
Dann versuche es mal so:
statt
Call doc.Save(True, False, True)
uidoc.editmode = True
so
Call doc.Save(True, False, True)
Call ws.Editdocument (true, doc)
Gruss Thorsten
Das funktioniert insofern, dass dann ein neues Fenster mit dem Dokument geöffnet wird, und hier stimmt alles. Ich bin also hergegangen und habe das uidoc erst geschlossen, bevor ich es mit dem ws.EditDocument neu geöffnet habe.
Call doc.Save(True, False, True)
Call uidoc.Close(True)
Call ws.EditDocument(True, doc)
Das ist zwar irgendwie nicht optimal, habe ich das Gefühl, aber das kleine Flackern ist immer noch besser, als das Dokument manuell zu schließen und wieder zu öffnen.
Vielleicht fällt ja jemandem noch eine bessere Lösung ein, aber bis dahin würde ich sagen: Danke Thorsten!!
Beste Grüße
- Jérôme