Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: botschi am 10.04.08 - 13:39:41

Titel: Postopen, Frontend und Backend
Beitrag von: botschi am 10.04.08 - 13:39:41
Hallo,

ich beziehe mich auf diesen Thread http://atnotes.de/index.php?topic=39840.0, den ich mal (erfolgreich) beendet habe.

Jetzt habe ich das gleiche Problem in einer anderen Anwendung. Ich bekomme nicht das Fenster "Möchten Sie speichern?"
Ich habs zwar so umgesetzt, wie damals, aber es will trotzdem nicht. Meine Vermutung ist, dass ich Frontend und Backend vermische oder nicht rechtzeitig (oder zu früh) das Frontend refreshe oder sowas.
Anbei mein Postopen, kann mir jemand sagen, warum ich die Frage nach dem Speichern nicht bekomme?
Danke!

Matthias


Code
Sub Postopen(Source As Notesuidocument)
	
'########
	' hier wird die globale Variable gvFrontendTicket gesetzt
	Dim s As New NotesSession
	Set gvFrontendTicket = source
	Set gvBackendTicket = gvFrontendTicket.Document
	Set gvDB = s.CurrentDatabase
'###
	' wird beim öffnen eines tickets gesetzt, wenn es noch kein schattendokument gibt
	If gvFrontendTicket.FieldGetText("copy") <> "" Then
		
		Set gvBackendTicket = gvFrontendTicket.Document
		Call gvFrontendTicket.FieldSetText("prioaufnehmender","")
		Call gvFrontendTicket.Refresh
		'Call gvFrontendTicket.Reload
	End If	
'##########################################
	
End Sub
Titel: Re: Postopen, Frontend und Backend
Beitrag von: Glombi am 10.04.08 - 13:56:46
Das Dokument ist auch schon im Bearbeitenmodus wenn das Postopen läuft ?
Titel: Re: Postopen, Frontend und Backend
Beitrag von: botschi am 10.04.08 - 14:03:24
Ja, mein Button macht das
Code
Call ws.EditDocument(True, gvKopie)
'	' eindeutiges zeichen, dass das dok kopiert wurde
	gvKopie.copy = "ja"

Vielleicht nochmal zum Vorgehen:
Ich habe ein Dok mit einem Button (Code oben), der erzeugt eine Kopie mit der selben Maske, wie das Ausgangsdokument und öffnet die Kopie im Bearbeitungsmodus.
Kann es ne Maskeneigenschaft sein? Felder automatisch aktualisieren ist angehakt.

Matthias
Titel: Re: Postopen, Frontend und Backend
Beitrag von: koehlerbv am 10.04.08 - 14:06:16
Da Du das Dokument im Backend bereits erstellst, hat es im Frontend nicht mehr die Eigenschaft IsNewDoc. Du musst also eine Änderung vornehmen, damit NotesUIDocument.ModifiedSinceSaved True wird.
Im Prinzip läuft es also wieder auf Deinen anderen Thread hinaus.

Bernhard
Titel: Re: Postopen, Frontend und Backend
Beitrag von: botschi am 10.04.08 - 14:26:57
Ich hab doch aber mit
Call gvFrontendTicket.FieldSetText("prioaufnehmender","")
das Doc verändert  ???

Matthias
Titel: Re: Postopen, Frontend und Backend
Beitrag von: koehlerbv am 10.04.08 - 14:30:51
Da könnte der Leerstring und das Vorher = Nachher das Problem sein.

Bernhard
Titel: Re: Postopen, Frontend und Backend
Beitrag von: botschi am 10.04.08 - 14:44:30
Das wäre schön, ist es aber nicht  :)

Auch wenn ich das mache
      Call gvFrontendTicket.FieldSetText("prioaufnehmender","hfgfhgsda")
      Call gvFrontendTicket.FieldSetText("prioaufnehmender","")

werde ich nicht gefragt. Und "hfgfhgsda" steht garantiert vorher nicht im Feld  ;D

Matthias
Titel: Re: Postopen, Frontend und Backend
Beitrag von: Axel am 10.04.08 - 15:05:42
Spricht was dagegen ein Save nachzuschieben? Dann werden die Anpassungen im Dokument gleich gespeichert.


Axel
Titel: Re: Postopen, Frontend und Backend
Beitrag von: botschi am 10.04.08 - 15:09:54
Meinst Du im Button ein Save nachschieben oder im Postopen?
Ich habe im Button mal ein Speichern gehabt, aber die Frage nach dem erneuten Speichern kam trotzdem nicht.
Generell ist das schon möglich, muss ich nur gut verkaufen. Eigentlich soll ein Dok gespeichert werden, wenn man speichern drückt... "Ich wollte das doch gar nicht speichern..."

Ist das Postopen für meinen Stunt nicht richtig?

Matthias
Titel: Re: Postopen, Frontend und Backend
Beitrag von: Axel am 10.04.08 - 15:18:45
Meinst Du im Button ein Save nachschieben oder im Postopen?

Im Postopen.

Ich habe im Button mal ein Speichern gehabt, aber die Frage nach dem erneuten Speichern kam trotzdem nicht.

Wenn du schon gespeichert hast und keine weiteren Änderungen gemacht hast, dann kommt die Speicherabfrgae auch nicht mehr.

Ist das Postopen für meinen Stunt nicht richtig?

Ich denke ja. Wo anders sollte man das sonst geregelt bekommen.


Axel
Titel: Re: Postopen, Frontend und Backend
Beitrag von: botschi am 10.04.08 - 15:25:39
Das ist aktuelle mein Button
Code
	gvKopie.prioaufnehmender = ""
	' Kopie im neuen Tab bearbeitbar öffnen
	Call ws.EditDocument(True, gvKopie)
	' eindeutiges zeichen, dass das dok kopiert wurde
	gvKopie.copy = "ja"
	Call gvKopie.Save( True, True )	

Und das steht im Postopen
Code
Sub Postopen(Source As Notesuidocument)
	
'########
	' hier wird die globale Variable gvFrontendTicket gesetzt
	Dim s As New NotesSession
	Set gvFrontendTicket = source
	Set gvBackendTicket = gvFrontendTicket.Document
	Set gvDB = s.CurrentDatabase
'###
	' wird beim öffnen eines tickets gesetzt, wenn es noch kein schattendokument gibt
	If gvFrontendTicket.FieldGetText("copy") <> "" Then
		
		Call gvFrontendTicket.FieldSetText("prioaufnehmender","hfgfhgsda")
		'Call gvFrontendTicket.FieldSetText("prioaufnehmender","")
		Call gvFrontendTicket.Refresh
		'Call gvFrontendTicket.Reload
	End If	
'##########################################
	
End Sub

Mehr, als ein Feld im Frontend im Postopen ändern, kann ich nicht...

Matthias
Titel: Re: Postopen, Frontend und Backend
Beitrag von: Axel am 10.04.08 - 15:39:31
Was passiert wenn du das Save im Buton weglässt?


Axel
Titel: Re: Postopen, Frontend und Backend
Beitrag von: botschi am 10.04.08 - 15:48:11
Nix, also macht keinen Unterschied.
Das Dok (die Kopie) wird dann halt gespeichert, aber es ändert nix an der Abfrage...

Matthias
Titel: Re: Postopen, Frontend und Backend
Beitrag von: ata am 11.04.08 - 07:37:35
... gibt es in der Maske eventuell ein Feld namens "SaveOptions" mit dem Wert "1" ?

Toni
Titel: Re: Postopen, Frontend und Backend
Beitrag von: botschi am 11.04.08 - 09:00:22
Ja, aber wenn ich das leere, werde ich gar nicht mehr nach dem Speichern gefragt, auch wenn ich per Tastatur einen Wert ändere.
Langsam steige ich da nicht mehr durch...  ???

Matthias

NACHTRAG:
Wenn ich im Postopen explizit den Wert in SaveOptions auf "1" setze, werde ich nicht nach Speichern gefragt. Wenn ich den Wert per Hand auf "1" setze, werde ich gefragt. Irgendwie ist es Notes egal, dass ich per Script im Postopen Werte setze... Warum?!
Titel: Re: Postopen, Frontend und Backend
Beitrag von: Axel am 11.04.08 - 09:08:32
Hast du das Feld SaveOptions nur leer gemacht oder ganz gelöscht?

Du musst das Feld löschen. Bei einem leeren Feld bin ich mir nicht sicher, ob da Seiteneffekte auftreten können.


Axel
Titel: Re: Postopen, Frontend und Backend
Beitrag von: Glombi am 11.04.08 - 09:12:04
In SaveOptions muss entweder 1 oder 0 stehen, nicht "1" oder "0". Das muss ein Zahlfeld sein.
In früheren Versionen war Notes da nicht so pingelig...

siehe
http://atnotes.de/index.php?topic=37220.0

Andreas
Titel: Re: Postopen, Frontend und Backend
Beitrag von: koehlerbv am 11.04.08 - 09:23:36
Hallo Andreas,

in allen Dokus, Beispielen, in der kBase etc. fordert Lotus Strings für die Belegung von SaveOptions & Co. Ich arbeite im Frontend-Operationen sehr viel mit SaveOptions - und verwende dort immer Strings. Und es funktioniert wie erwartet.
War das mit dem Datentyp Zahl nicht doch ein Bug in einer bestimmten 6er Version?

Bernhard
Titel: Re: Postopen, Frontend und Backend
Beitrag von: botschi am 11.04.08 - 09:29:33
Ich habe das Feld aus der Maske gelöscht UND im Postopen den Wert für SaveOptions im Backend auf 1 gesetzt.

Code
gvBackendTicket.SaveOptions = 1
			Call gvFrontendTicket.Reload
			Call gvFrontendTicket.Refresh	
			Call gvFrontendTicket.FieldSetText("prioaufnehmender","dasdasdas")

Jetzt werde ich wieder gar nicht mehr nach dem Speichern gefragt. Ich glaube, mit dem Stringwert hat es besser funktioniert...

Auch wenn ich es nicht gebacken bekomme, geht das was ich will überhaupt? Hat jemand vielleicht ein funktionierendes Beispiel, an dem ich mich orientieren kann? Ich brauch ja kein fertiges Hexenwerk...  :'(

Matthias
Titel: Re: Postopen, Frontend und Backend
Beitrag von: botschi am 11.04.08 - 10:30:07
Auch mit einer ganz neuen DB bekomme ich es nicht gebacken. Meiner Meinung nach kann man das nicht so lösen- vielleicht mit einem ganz anderen Ansatz.

Ich hänge mal eine Test-DB an. Sie enthält 1 Dok und in der Maske 1 Button, der das Problem zeigt. Wenn jemand eine Lösung kennt, kann er sie hier posten.

Danke für die Hilfe!

Matthias
Titel: Re: Postopen, Frontend und Backend
Beitrag von: klaussal am 11.04.08 - 11:08:19
Also, eine Erklärung habe ich auch nicht, abär: wenn ich ein neues Mail erstelle und kein Feld ändere und dann das Memo wieder schliesse, werde ich auch nicht nach dem Speichern gefragt. Und bei deiner DB ist das m.E. analog zu sehen.
Titel: Re: Postopen, Frontend und Backend
Beitrag von: botschi am 11.04.08 - 11:11:53
Das ist richtig.
Wenn ich aber ein Dokument öffne und im Postopen ein Feld im Frontend ändere, erwarte ich so eine Frage allerdings...

Vielleicht ist meine Erwartungshaltung an dieser Stelle aber auch einfach nicht richtig  ;D

Matthias
Titel: Re: Postopen, Frontend und Backend
Beitrag von: Axel am 11.04.08 - 11:14:28
Dieses Verhalten hatte ich, wie Klaus, auch schon öfters beobachtet. eine wirkliche Lösung dagegen habe ich bisher auch noch nicht gefunden.


Axel
Titel: Re: Postopen, Frontend und Backend
Beitrag von: botschi am 11.04.08 - 11:17:10
Allerdings habe ich im Queryclose jetzt das stehen
Code
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
	
	If gvFrontendTicket.EditMode = True Then
		If gvFrontendTicket.FieldGetText("meldung") = "" Then
			Msgbox "Bitte einen Kurztext angeben. Es wird nicht gespeichert!",48,""
			continue = False
			Call gvFrontendTicket.FieldSetText("meldung","Keinen Kurztext eingetragen!")
			Call gvFrontendTicket.GotoField("meldung")
			Call gvFrontendTicket.FieldSetText("Error","1")
			Exit Sub
		End If
	End If
	
End Sub

Wenn der User dann KEINE Änderung macht und einfach ESC drückt oder den Tab schließt, kommt die Frage! Deswegen dachte ich ja auch, dass meine Wahl für Postopen nicht richtig sei... Richtig sauber finde ich meine Lösung allerdings nicht...

Matthias
Titel: Re: Postopen, Frontend und Backend
Beitrag von: Axel am 11.04.08 - 11:31:50
So ganz quick and dirty hab ich's mal so versucht.

Sub Postopen(Source As Notesuidocument)
   If source.EditMode = True Then
      Call source.FieldSetText("test", "1")
      Call source.FieldSetText("test2", "dfdf")
      Call source.Save
   End If
End Sub

Das funktioniert zwar, aber ob das für dich praktikabel ist kann ich nicht sagen.

Axel
Titel: Re: Postopen, Frontend und Backend
Beitrag von: botschi am 11.04.08 - 12:32:23
Ich glaube in diesem Fall nicht. Aber eine Alternative in einer anderen Anwendung ist das allemal...

Mir ist das nur unangenehm, weil ich Hohn und Spott ernte "man muss doch das Speichern bzw. die Frage danach erzwingen können?!"- kann man, aber leider nicht in dem Zusammenhang.

Matthias
Titel: Re: Postopen, Frontend und Backend
Beitrag von: Axel am 11.04.08 - 12:43:24
Mir ist das nur unangenehm, weil ich Hohn und Spott ernte ...

Das braucht dir nicht unangenehm sein und du erntest auch keinen Hohn und Spott.

Vor diesem Problem standen hier schon einige, ich nämlich auch, und haben biher ebenfalls keine Lösung gefunden.


Axel
Titel: Re: Postopen, Frontend und Backend
Beitrag von: botschi am 11.04.08 - 13:01:21
Ich meinte auch eher Hohn und Spott von meinen Kollegen, die Notes so "super" finden.  ;)
Danke für eure Unterstützung, ich hänge den Thread als Link an mein Ticket.  8)

Matthias
Titel: Re: Postopen, Frontend und Backend
Beitrag von: Axel am 11.04.08 - 13:34:32
Ich meinte auch eher Hohn und Spott von meinen Kollegen, die Notes so "super" finden.  ;)

Dann sollen die dir doch mal einen Tipp geben, wie man so was geregelt bekommt.   ;)


Axel