Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Jérôme am 14.12.05 - 15:06:02

Titel: Backend-Feldänderung, Save, danach QueryModechange => Änderung nicht greifbar
Beitrag von: Jérôme am 14.12.05 - 15:06:02
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"
Code
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
Code
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
Titel: Re: Backend-Feldänderung, Save, danach QueryModechange => Änderung nicht greifbar
Beitrag von: thorsten_w am 14.12.05 - 15:16:06
Versuch mal nach der Änderung im Backend auf dem UIDocument einen Reload zu machen.

Code
Call Source.Reload ()

Vielleicht hilft das.

Gruss Thorsten
Titel: Re: Backend-Feldänderung, Save, danach QueryModechange => Änderung nicht greifba
Beitrag von: Jérôme am 14.12.05 - 15:23:56
Hallo Thorsten,

danke für deine schnelle Antwort (heute ja schon nicht zum ersten mal ;) ). Das habe ich vergessen zu erwähnen: was ich schon probiert habe, jeweils nach dem Source.document.Save(True, False, True) beim Button, ist ein

Call uidoc.Reload()
Call ws.ViewRefresh()
Call ws.ReloadWindow()

Leider alles ohne Erfolg. Bei den uidoc.Refresh... Methoden bekomme ich ja (wie erwartet) "Document command is not available"-Fehler.

- Jérôme
Titel: Re: Backend-Feldänderung, Save, danach QueryModechange => Änderung nicht greifbar
Beitrag von: thorsten_w am 14.12.05 - 15:34:37
Dann versuche es mal so:

statt
Code
Call doc.Save(True, False, True)
	
uidoc.editmode = True

so
Code
Call doc.Save(True, False, True)
	
 Call ws.Editdocument (true, doc)

Gruss Thorsten
Titel: Re: Backend-Feldänderung, Save, danach QueryModechange => Änderung nicht greifba
Beitrag von: Jérôme am 14.12.05 - 16:04:26
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.

Code
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
Titel: Re: Backend-Feldänderung, Save, danach QueryModechange => Änderung nicht greifbar
Beitrag von: thorsten_w am 14.12.05 - 16:16:34
Gerne Jérôme

Gruss Thorsten.

PS: Mit R6 gibt es mit EditDocument einen Parameter, der verhindert, daß sich ein neues Fenster öffnet.
Titel: Re: Backend-Feldänderung, Save, danach QueryModechange => Änderung nicht greifba
Beitrag von: FrankLU am 23.12.05 - 15:39:56
Hallo!

Vielleicht habe ich das Problem nicht richtig verstanden, aber warum setzt Du im Button-Script nicht das Feld uiDoc.doc_angenommen mit Call uiDoc.FieldSetText("doc_angenommen", "1") auch auf 1? Dann hast Du es in beiden Dokumenten gesetzt (doc und uiDoc).

Frohe Weihnachten!
Frank