Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: TomLudwig am 27.02.07 - 09:10:48

Titel: Bug im Exiting-Event?
Beitrag von: TomLudwig am 27.02.07 - 09:10:48
Guten Morgen zusammen,

ich habe im Exiting-Event von Feldern Script Code, der das UIDoc refreshed.
Dieser funktioniert auch einwandfrei.

ABER:
Über eine weitere Aktion werden folgende Aktionen nacheinander ausgeführt:
- Werte werden über FieldSetText ins UIDoc geschrieben
- UIDoc wird gespeichert
- EditMode des UIDocs wird auf False gesetzt
- Wete werden ins zugehörige BackEnd Dokument geschrieben
- BackEndDokument wird gespeichert
- EditMode des UIDocs wird auf True gesetzt um die BackEnd Änderungen anzuzeigen

Danach funktioniert der Code im Exiting Event der Felder nicht mehr. Er wird gar nicht mehr ausgeführt. Es ist egal ob die Felder in einer Teilmaske oder in der Maske selbst liegen. Der Fehler tritt beim 6.5.4er Client auf. Ich bilde mir ein, dass ich mit 6.5.5 den Fehler nicht hatte.

Sollte das Dokument neu geöffnet werden, funktioniert der Code im Exiting Event anschließend.
(über setzten der EditMode Eigenschaft wird doch im Hintergrund das Dokument "neu geöffnet"...?!)

Kann das jemand nachvollziehen?

Viele Grüße Tom


Titel: Re: Bug im Exiting-Event?
Beitrag von: botschi am 27.02.07 - 09:42:25
Moin,

warum setzt Du das Dok denn von bearbeitbar auf nicht bearbeitbar und zurück? Würde UIdoc.refresh nicht genügen, um die Änderungen aus dem Backend in das Frontend zu bekommen?

Matthias
Titel: Re: Bug im Exiting-Event?
Beitrag von: TomLudwig am 27.02.07 - 09:45:46
Refresh berechnet doch nur die Felder neu, oder?
Ich habe ja Felder vom Typ "bearbeitbar" die geändert werden.

Reload zieht mir leider nicht die Änderungen an RichtTextFeldern ins UIDoc, oder?

Titel: Re: Bug im Exiting-Event?
Beitrag von: Axel am 27.02.07 - 09:51:41
Reload zieht mir leider nicht die Änderungen an RichtTextFeldern ins UIDoc, oder?

Das ist richtig, aber seit Version 5 gibt es beim Refresh einen Parameter. Wenn du den auf True setzt, werden auch Richtextfelder berücksichtigt.#


Call notesUIDocument.Refresh( [ IncludeRichTextItems ] )


Axel
Titel: Re: Bug im Exiting-Event?
Beitrag von: TomLudwig am 27.02.07 - 09:55:28
Laut der Hilfe, werden aber dennoch mit "refresh(true)" nur die berechneten Felder neu berechnet.

Refreshes a document. When you refresh a document, its computed fields are recalculated.

Usage
This method is valid only when the document is in Edit mode.
This method is useful when the value of a computed field depends upon the contents of another field on the document.


Ich müsste dann beide Befehle "reload" und "refresh" nacheinander absetzten. Und die ganzen Felder müssten berechnet sein... sehe ich das richtig?
Titel: Re: Bug im Exiting-Event?
Beitrag von: Axel am 27.02.07 - 10:58:03
Und wieso willst du bearbeitbare Felder neu berechnen?. Das macht (außer vielleicht für RTF-Felder) in meinen Augen keinen Sinn?


Axel
 
Titel: Re: Bug im Exiting-Event?
Beitrag von: TomLudwig am 27.02.07 - 11:10:01
Ich will gar nix neu berechnen.... sorry. Missverständnis.

Ich möchte lediglich die Informationen, welche ich im Backend ändere (richt text & non richt text) im FrontEnd angezeigt bekommen.

Dies hat bei mir lediglich mit dem Edit-Mode Wechsel funktioniert...

Und danach möchte ich, das das Exiting Event der Felder weiterhin funktioniert. ;-)
Titel: Re: Bug im Exiting-Event?
Beitrag von: botschi am 27.02.07 - 11:22:28
Kannst Du nicht gleich im Frontend ändern? WIe werden die Werte denn im Backend geändert?
Aber Speicherkonflikte sind noch nicht aufgetreten?

Matthias
Titel: Re: Bug im Exiting-Event?
Beitrag von: TomLudwig am 27.02.07 - 12:05:12
Speicherkonflikte noch nie. Ich schau ja, dass das Dokument vorher gespeichert wird usw.

Ich kann leider nur im BackEnd ändern, da ich z.B. ein RichTextfeld (mit einem eingebetteten Bild) aus einem anderen Dokument kopieren muss. Dies geht soweit ich weiß nur über BackEnd, oder?

Titel: Re: Bug im Exiting-Event?
Beitrag von: Axel am 27.02.07 - 12:29:53
Und wenn du nur das RTF-Feld im Backend kopierst und alles andere mit Frontend-Methoden?

Irgendwie erschließt sich mir der Sinn der ganzen Aktion noch nicht so ganz. Kannst du mal kurz skizzieren was du überhaupt vorhast und was das Ganze werden soll.


Axel
Titel: Re: Bug im Exiting-Event?
Beitrag von: jo@chim am 27.02.07 - 12:43:00
Auf das EditMode- und Refresh-Gefrickel kannst Du verzichten: Hole Dir per Set NotesDocument=NotesUIDocument.Document das Backend, schliesse anschliessend Dein Frontend-Dokument und rufe es per Call NotesUIWorkspace.EditDocument(True, NotesDocument) wieder auf. Die Änderungen im RichText sind dann sichtbar.
Titel: Re: Bug im Exiting-Event?
Beitrag von: TomLudwig am 27.02.07 - 12:58:32
Ich kann das Dokument nicht schließen und erneut öffnen, da bei dieser Aktion dann weiter Aktionen im Hintergrund ausgeführt werden die ich nicht möchte und auch nicht beeinflussen kann.

Ich möchte aus einem bestehenden Dokument Informationen ins aktuelle Dokument übernehmen. Diese sind zum einen reine TextInformationen, die im UIDoc geschrieben werden können. Aber auch ein eingebettetes Bild, welches in einem RichTextFeld hinterlegt ist. Dieses kann, soweit ich weiß, nur im Backend kopiert werden. Oder gibts da eine andere Möglichkeit?
Titel: Re: Bug im Exiting-Event?
Beitrag von: Axel am 27.02.07 - 13:00:51
Und wenn du nur das RTF-Feld im Backend kopierst und alles andere mit Frontend-Methoden?


Hast du das mal probiert? Und dann natülich ein Refresh(True).


Axel
Titel: Re: Bug im Exiting-Event?
Beitrag von: TomLudwig am 27.02.07 - 13:46:39
Ich habs grad mit sämtlichen Kombinationen von Refresh und Reload ausprobiert.

Ich habe ein uidoc offen gehe über uidoc.document ins backend. Ändere dort das RichtTextitem und versuche dies wieder ins Frontend zu bekommen. -> keine Chance.

Hat jemand vielleicht ne BeispielMaske in der ich das ganze nachvollziehen kann?
Titel: Re: Bug im Exiting-Event?
Beitrag von: jo@chim am 27.02.07 - 13:58:04
Zitat
Ich möchte aus einem bestehenden Dokument Informationen ins aktuelle Dokument übernehmen. Diese sind zum einen reine TextInformationen, die im UIDoc geschrieben werden können.
??? Ja, aber warum tust Du das? Warum schreibst Du nicht gleich die kompletten Informationen ins Backend und öffnest das dann wieder im Frontend wie beschrieben?
Titel: Re: Bug im Exiting-Event?
Beitrag von: TomLudwig am 27.02.07 - 14:20:38
Die Maske ist Teil eines CRM Moduls. Beim Schließen und Öffnen dieser wird sehr viel Code ausgeführt der dazu führt, dass verschiedene Stati gesetzt werden. Mails verschickt werden usw.
Ich kann diesen Code nicht ändern, da er sehr sehr umfassend ist und auch an mehreren Stellen in der Datenbank wiederverwendet wird.

Wie ich die Informationen ins Dokument bekomme (BackEnd oder FrontEnd) ist mir relativ egal. Sie müssen dann nur im Dokument sichtbar sein ohne, dass es geschlossen und erneut geöffnet wird.
Und bei den Informationen handelt es sich um reine Textinformationen (Textfelder) und Bilder in RichtTextFeldern.

Das hat ja auch über den Edit-Mode bisher wunderbar funktioniert. Bis auf den "Bug" im Exiting Event der Felder. Dieses Event wird (wie ganz oben beschrieben) nicht mehr ausgeführt.
Und ich möchte wissen warum....


Titel: Re: Bug im Exiting-Event?
Beitrag von: koehlerbv am 27.02.07 - 14:23:16
Wenn Du die Quelldokumente im EditMode öffnen kannst, dann kannst Du die RT-Inhalte auch im Frontend über die Copy- und Paste-Methoden des NotesUIDocuments holen. Ansonsten ist ein ReOpen zwingend erforderlich.

Bernhard
Titel: Re: Bug im Exiting-Event?
Beitrag von: TomLudwig am 27.02.07 - 14:25:44
Geht leider auch nicht, da des RichtTextFeld berechnet ist.
Sorry. Den Teil hab ich wirklich vergessen zu schreiben.

Bisher hat die Aktualisierung ohne ReOpen ja funktioniert.
Ich scheitere nur am Exiting Event.
Titel: Re: Bug im Exiting-Event?
Beitrag von: jo@chim am 27.02.07 - 15:03:49
Zitat
Beim Schließen und Öffnen dieser wird sehr viel Code ausgeführt
Doch sicher im Query- bzw. Post-Save, oder?
Wenn Du den "sehr viel Code" nicht ausführen willst, setzt Du dort ganz am Anfang eine Abfrage in der Art
Code
If NotesUIDocument.FieldGettext("SollCRMCodeLaufen")="0" Then
Continue = False
End If
Dann schreibst Du Deine Werte (inkl. dem berechneten RTItem-Inhalt) ins Backend, stoppst mit Call NotesUIDocument.FieldSettext("SollCRMCodeLaufen","0") den Ablauf des Codes im Query- und/oder Post-Save des NotesUIDocument, schliesst es (verhinderst ggf. eine Speicher-Abfrage per NotesUIDocument.FieldSetText("SaveOptions","0") und öffnest es wieder.
Et voilà.
Titel: Re: Bug im Exiting-Event?
Beitrag von: TomLudwig am 27.02.07 - 15:27:20
Natürlich kann über die unten beschriebene Abfrage verhindert werden, dass der Code ausgeführt wird.

Die Abfrage müsste dann in allen betroffenen Events eingebaut werden. In der Maske und in allen geladenen Teilmasken. Weiter müsste in allen weiteren Masken, in denen die veränderten Teilmasken geladen werden, zusätzlich immer bei jeder Aktion der Status des Feldes gesetzt werden.

Das ist einfach nicht machbar. Es handelt sich hier um ca. 5 Teilmasken die in mehr als 30 Masken geladen werden.

Und meine Ursprüngliche Frage bezieht sich nicht auf das Einfügen von diversen Feldwerten. Mir gehts um das Exiting Event der Felder und warum dieses nicht mehr ausgeführt wird.

Titel: Re: Bug im Exiting-Event?
Beitrag von: Axel am 27.02.07 - 15:45:49
Was führst du denn in den Exiting Events überhaupt aus? Kannst du das Ganze nicht in den QuerySave-Event verlagern? Dir ist auch bewusst, dass das Exiting Event nicht immer zuverlässig ausgeführt wird (neben deinem speziellen Fall).


Axel
Titel: Re: Bug im Exiting-Event?
Beitrag von: TomLudwig am 28.02.07 - 08:29:53
Ich aktualisiere das aktuelle Dokument mit:

   Dim uiwork As New NotesUIWorkspace
   Call uiwork.CurrentDocument.Refresh(False)

Mir ist nicht bewusst, dass das Exiting Event nicht immer zuverlässig ausgeführt wird.
Was bedeutet das?

Titel: Re: Bug im Exiting-Event?
Beitrag von: Axel am 28.02.07 - 08:33:18
Das bedeutet z.B. wenn du mit dem Cursor in einem Feld mit Code im Exiting Event stehst und du speicherst das Dokument oder machst es zu, dann wird der Event nicht ausgeführt.


Axel
Titel: Re: Bug im Exiting-Event?
Beitrag von: TomLudwig am 28.02.07 - 16:42:50
Sollte der beschriebene Fall vorkommen, wäre dies egal da der User mit der Bearbeitung bereits fertig ist.

Aber ich werde wahrscheinlich eine Schaltfläche einbauen die das UIDoc aktualisiert...

Danke vielmals für eure Hilfe!