Autor Thema: Backend-Feldänderung, Save, danach QueryModechange => Änderung nicht greifbar  (Gelesen 2036 mal)

Offline Jérôme

  • Aktives Mitglied
  • ***
  • Beiträge: 108
  • Geschlecht: Männlich
  • Teigwaren heißen Teigwaren weil sie mal Teig waren
    • jerome-gamez.de
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

Offline thorsten_w

  • Junior Mitglied
  • **
  • Beiträge: 60
  • Geschlecht: Männlich
Versuch mal nach der Änderung im Backend auf dem UIDocument einen Reload zu machen.

Code
Call Source.Reload ()

Vielleicht hilft das.

Gruss Thorsten

Offline Jérôme

  • Aktives Mitglied
  • ***
  • Beiträge: 108
  • Geschlecht: Männlich
  • Teigwaren heißen Teigwaren weil sie mal Teig waren
    • jerome-gamez.de
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

Offline thorsten_w

  • Junior Mitglied
  • **
  • Beiträge: 60
  • Geschlecht: Männlich
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

Offline Jérôme

  • Aktives Mitglied
  • ***
  • Beiträge: 108
  • Geschlecht: Männlich
  • Teigwaren heißen Teigwaren weil sie mal Teig waren
    • jerome-gamez.de
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

Offline thorsten_w

  • Junior Mitglied
  • **
  • Beiträge: 60
  • Geschlecht: Männlich
Gerne Jérôme

Gruss Thorsten.

PS: Mit R6 gibt es mit EditDocument einen Parameter, der verhindert, daß sich ein neues Fenster öffnet.

Offline FrankLU

  • Aktives Mitglied
  • ***
  • Beiträge: 116
  • Geschlecht: Männlich
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
Frank Lohöfer
MD Medicus Holding GmbH
Client (User): 12.0.1
Client (Admin): 12.0.1
Server: 9.0 auf Linux

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz