Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Bille am 30.07.06 - 14:23:44

Titel: Parameter bei ws.EditDocument
Beitrag von: Bille am 30.07.06 - 14:23:44
Hallo!

Ich möchte abhängig von einem bestimmten Feldwert das Editieren von Dokumenten verhindern. Der Feldwert wird zuvor durch eine Änderung im Backend gesetzt.
Im Event "QueryModeChange" wird diese Änderung jedoch nicht gleich, sondern erst beim erneuten Öffnen des Dokumentes erkannt.

Ich hab also exakt das gleiche Problem wie Jerome in diesem Thread hier:
http://atnotes.de/index.php?topic=27666.0

Lt. Designer-Hilfe sollte mit
Call ws.Editdocument (True, doc,,,, False)
das Dokument im Edit-Mode ohne neues Fenster geöffnet werden.

Leider ist das bei mir nicht der Fall. Es wird zwar kein neues Fenster geöffnet, das Dokument ist aber leider nicht im Edit-Mode.

Stimmt evtl. ein Parameter nicht?

Gruß
Bille
Titel: Re: Parameter bei ws.EditDocument
Beitrag von: Axel am 31.07.06 - 13:32:27
Soweit ich das sehe, sind die Parameter in Ordnung. Ich denke mal in irgendeinem Masken - Event wird der Edit - Modus wieder zurückgesetzt.


Axel


Titel: Re: Parameter bei ws.EditDocument
Beitrag von: Bille am 01.08.06 - 08:28:20
Ich hab jetzt nochmal geguckt, finde aber nirgends den Fehler.
Hier mein Code, der das Dokument in den Bearbeitungsmodus setzen soll:
Code
...
		doc.EditFlag = "1"
		Call doc.Save(True, True)
		Call ws.Editdocument (True, doc,,,, False)
...

Masken-Events:
Code
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
	If Not Isnewdoc Then  
		If Source.Document.EditFlag(0) = "0" And Mode Then
			Messagebox "Ein nachträgliches Verändern des Dokuments ist nicht möglich!!!", 48, "FEHLER"
			Continue = False
		End If
	End If	
End Sub

Code
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
	If Source.Document.EditFlag(0) = "0" Then
		Messagebox "Ein nachträgliches Verändern des Dokuments ist nicht möglich!" , 48, "FEHLER"
		Continue = False
	End If
End Sub

Code
Sub Postmodechange(Source As Notesuidocument)
	Call Source.Fieldsettext("SaveFlag","0")
End Sub

Code
Sub Querysave(Source As Notesuidocument, Continue As Variant)
	If source.fieldgettext("SaveFlag") = "0" Then
		Continue = False
		Msgbox "Bitte Dokument über Button speichern. Danke!", 64, "Hinweis zum Speichern"
	End If
End Sub

Weiß jemand einen Rat?

Bille
Titel: Re: Parameter bei ws.EditDocument
Beitrag von: Axel am 01.08.06 - 09:30:51
Das scheint ein Cache-Problem zu sein. Was soll denn das werden? Vielleicht gibt's noch einen anderen Weg.


Axel
Titel: Re: Parameter bei ws.EditDocument
Beitrag von: klaussal am 01.08.06 - 09:37:08
Vielleicht hilft auch ein reload des Dokuments.
Titel: Re: Parameter bei ws.EditDocument
Beitrag von: Axel am 01.08.06 - 09:42:44
Vielleicht hilft auch ein reload des Dokuments.

Yoo, habe ich auch erst gedacht, geht aber nicht.  Denn dazu muss das Dokument im Edit-Modus sein und das ist es zu diesem Zeitpunkt nicht.


Axel
Titel: Re: Parameter bei ws.EditDocument
Beitrag von: klaussal am 01.08.06 - 09:48:11
Zitat
Ich möchte abhängig von einem bestimmten Feldwert das Editieren von Dokumenten verhindern. Der Feldwert wird zuvor durch eine Änderung im Backend gesetzt.

Oder wird da was im Backend gemacht und das Frontend hat die Änderung nicht mitbekommen ?
Titel: Re: Parameter bei ws.EditDocument
Beitrag von: Bille am 01.08.06 - 09:55:12
Richtig, Reload funktioniert hier leider nicht.

Also, das ganze hat folgenden Hintergrund:

Es werden Dokumente erstellt, die nach dem Speichern nicht mehr geändert werden dürfen. (Es wird nicht mit Autorenfeldern gearbeitet.)
Die Überprüfung erfolgt hier anhand des Feldes "EditFlag", das standardmäßig auf "0" gesetzt ist.
In einem weiteren Schritt soll es nun möglich sein, bestehende Dokumente in eine Historie zu verschieben und eine zuvor erstellte Kopie davon wieder zu bearbeiten.

Code
 ...
Set historydoc = doc.CopyToDatabase( db)
historydoc.History =  "1"
historydoc.Stat = "erledigt"
Call historydoc.Save(True,True)
		
doc.EditFlag = "1"
Call doc.Save(True, True)
		
Call ws.Editdocument (True, doc,,,, False)

Ja Klaus, die Änderung findet im Backend statt. Aber lt. dem og. Thread sollte das Problem doch mit dem Parameter von ws.EditDocument der unter R6 neu ist, doch funktionieren. Oder hab ich das falsch gelesen?

Bille




Titel: Re: Parameter bei ws.EditDocument
Beitrag von: Axel am 01.08.06 - 10:04:12
Der Code steckt mit Sicherheit als Aktion in der Maske. Gehe ich richtig in der Annahme?

Somit bekommt das Frontend die Änderung im Backend nicht mit, erst nach erneutem Öffnen.

Wenn du den Code in eine Aktion innerhalb der Ansicht packst und soweit abänderst, dass du Zugriff auf das markierte Dokument bekommst, dann sollte das gehen.


Axel
Titel: Re: Parameter bei ws.EditDocument
Beitrag von: Bille am 01.08.06 - 11:09:10
Hallo Axel,

mit der Annahme, dass der Code in einer Maskenaktion steckt, liegst Du völlig richtig.

Nachdem das Bearbeiten (und Verschieben in die Historie) aber vom Ablauf her aus einem geöffneten Dokument passiert, gehe ich lieber den anderen Weg und benutze ws.EditDocument so wie in R5. Ich schließe also das alte uidoc und lasse das neue in einem neuen Fenster erstellen.

Danke für Eure Hinweise und Tipps!
Bille
Titel: Re: Parameter bei ws.EditDocument
Beitrag von: LN4ever am 01.08.06 - 22:37:32
Ist dein Code, mit dem du das Feld EDITFLAG im Backend mit "1" befüllst, so kompliziert, daß es SCRIPT sein muß ? Wenn du in eine Aktion einfach

FIELD EDITFLAG:="1"
@Command([EditDocument];"1")

setzst, greifen deine Steuerungen nämlich durchaus, weil du nur im Frontend arbeitest. Und hinterher (nach ABlauf der Aktion) setzst du es wieder auf "0".
Titel: Re: Parameter bei ws.EditDocument
Beitrag von: Bille am 02.08.06 - 08:57:40
Nein, kompliziert ist der Code nicht (siehe Post#7). Da ich aber alle anderen Dinge, die diese  Maske betreffen, auch in Script geschrieben habe, werde ich dabei bleiben.
Die Lösung, das alte uidoc zu schließen und neu zu öffnen, ist ja kein Problem. Ich wollte nur sicher gehen, dass ich keinen Fehler bei der Verwendung der Parameter von ws.EditDocument gemacht habe.

Gruß
Bille