Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: giochips am 21.08.08 - 11:14:35
-
Hallo Leute,
bin mal wieder auf eure Hilfe angewiesen.
Ich hab eine Datenbank mit Hauptdokumenten (Name, Kd-Nr, Anschrift von Kunden). Zu jedem Hauptdokument gibt es Antwortdoks mit Informationen über Buchungen zu diesen Kunden. (Z.B. enthält ein Antwortdok die Felder Buchungstag, Verwendungszwecke, Konto Empfänger...) Jeder Kunde kann unterschiedlich viele Antwortdoks haben.
Nun soll ein Anschreiben an die Kunden erfolgen, in welchem diese Buchungsinformationen mitgeteilt werden. Das Anschreiben hab ich als Maske gestaltet. Im Postopen-Ereignis der Maske holt mir ein Script die Informationen aus den jeweiligen Antwortdoks und schreibt diese Inhalte in Felder des aktuellen Doks. Die Felder in der Maske bleiben leer. Wenn ich mir in den Eigenschaften des Doks diese Felder anschauen, dann sind die Felder aber richtig gefüllt. Dann, sobald ich das Dok in den Bearbeitenmodus versetze sind die Felder in den Eigenschaften des Doks aber auch wieder leer!!??
Lasse ich das gleiche Script im Ereignis QueryModeChance laufen, dann funktionierts. Die Feldinhalte werden in der Maske dargestellt. (Natürlich erst wenn ich das Dok bearbeite) Warum funzt das aber nicht im Postopen??
Hier noch mein Script:
Dim uiws As New NotesUIWorkspace
Dim uidoc As NotesuiDocument
Dim doc As NotesDocument
Dim responsedoc As NotesDocument
Dim responsecol As NotesDocumentCollection
Set uidoc=uiws.currentDocument
Set doc=uidoc.Document
Set responsecol=doc.Responses
Dim Feldzahl As Integer
Dim Buchungstag As String, BLZ As String, Kto As String, VWZ As String
Feldzahl=1
Set responsedoc=responsecol.GetFirstDocument
Do Until responsedoc Is Nothing
Buchungstag="TmpBuchungstag"&Feldzahl
BLZ="TmpEmpfängerBLZ"&Feldzahl
Kto="TmpEmpfängerKto"&Feldzahl
VWZ="TmpVWZ"&Feldzahl
Call doc.ReplaceItemValue(Buchungstag, responsedoc.Buchungstag)
Call doc.ReplaceItemValue(BLZ, responsedoc.BLZEmpfänger)
Call doc.ReplaceItemValue(Kto, responsedoc.KontoEmpfänger)
Call doc.ReplaceItemValue(VWZ, responsedoc.Verwendungszweck)
Call doc.Save(True, True)
Set responsedoc=responsecol.GetNextDocument(responsedoc)
Feldzahl=Feldzahl+1
Loop
Call doc.Save(True, True)
End Sub
Vielen Dank für Eure Hilfe!!
Marco
-
Call notesUIDocument.Reload( ) bzw. Call notesUIDocument.Refresh( )
Wenn Du was im Backend-Dokument änderst, muss Du das dem UIDoc mitteilen.
-
Es fehlt auch ein noch ein
If Source.EditMode = False Then
Exit Sub
End If
Bernhard
-
Call notesUIDocument.Reload( ) bzw. Call notesUIDocument.Refresh( )
Wenn Du was im Backend-Dokument änderst, muss Du das dem UIDoc mitteilen.
Also lt. meiner Literatur brauch man sich bei Änderungen im Backend nicht um die Aktualisierung des Frontends kümmern. Man kann das aber über die Eigenschaft autoreload=false abschalten und dann mit notesUIDocument.Reload() manuel ausführen.
Hab im meinem Script nach den Doc.Save den Reload ausgeführt und erhalte folgende FM:
Dokumentbefehl ist nicht verfügbar
@koehlerbv:
Willst du damit sagen, das Dokument muß im Bearbeitenmodus sein? Weil wenn ich das richtig verstehe, führt dein Codeschnippsel zum Verlassen des Scripts, wenn dies nicht so ist!? oder?
Danke!
Marco
-
NotesUIDocument.Refresh oder .Repload oder ein NotesUIWorkspace.ViewRefresh (=F9) sind nur im EditMode zulässig.
Bernhard
-
Call notesUIDocument.Reload( ) bzw. Call notesUIDocument.Refresh( )
Wenn Du was im Backend-Dokument änderst, muss Du das dem UIDoc mitteilen.
Also lt. meiner Literatur brauch man sich bei Änderungen im Backend nicht um die Aktualisierung des Frontends kümmern.
Wenn Du meinst.
-
Call notesUIDocument.Reload( ) bzw. Call notesUIDocument.Refresh( )
Wenn Du was im Backend-Dokument änderst, muss Du das dem UIDoc mitteilen.
Also lt. meiner Literatur brauch man sich bei Änderungen im Backend nicht um die Aktualisierung des Frontends kümmern.
Wenn Du meinst.
Ich sag ja nur was in meinem Buch steht... übrigens von IBM Press!! Aber ich hab auch schon vermutet, dass das nicht so richtig stimmen kann. Das zeigt nämlich folgendes: Warum kann ich die Eigenschaften des Doks abrufen und die Feldinhalte sind richtig und sobald ich zum bearbeiten öffne sind die Felder wieder leer. Da scheint ja das Frontend das Backend zu überschreiben...
:-\
-
Hab jetzt folgendes probiert:
Versetze das Dokument gleich am Anfang des Scripts mit Call uiws.EditDocument in den Bearbeitungsmodus. Ich sehe die Maske im Bearbeitungsmodus mit den richtig eingesetzten Feldern und werde gefragt ob ich die Änderungen speichern möchte. Und egal ob ich "ja" oder "nein" sage, werden anschließend die Felder wieder geleert.
Lediglich wenn ich auf "Abbrechen" gehen, bleiben die Feldinhalte bestehen.
So langsam bin ich am Verzweifeln!!
Vielleicht sollte ich schon vor dem Öffnen in der Maske die Feldinhalte per Agent füllen und dann erst die Maske öffnen??
Wie würdet ihr ein "Serienbrief" gestalten? Auch mit Hilfe einer Maske? Oder setze ich hier schon falsch an?? :-:
Danke für eure Hilfe!!
Marco
-
Beim Öffnen eines Dokumentes im UI werden die zu diesem Zeitpunkt in dem Items enthaltenen Werte gelesen und angezeigt. Das UIDoc aktualisiert sich nicht automatisch, wenn Änderungen im Backend gemacht werden.
Mit deinem Script öffnest Du ein neu erzeugtes, leeres Dokument und schießt nach dem Öffnen die Werte im Hintergrund um. Das Backend-Dokument doc enthält dann andere Werte, als im uidoc angezeigt werden.
Wenn Du nun das uidoc speicherst, werden die Werte im doc durch die Werte aus dem Frontend ersetzt. Da hier die Felder leer sind, werden die vorher gesetzten Werte im doc also quasi wieder gelöscht.
-
Hab meine Strategie geändert. Habs jetzt in einen Agenten gepackt, der als erstes die Felder im Dokument erzeugt und mit dem Inhalt aus den Responses füllt. Dann erst öffne ich das Dok in der entsprechenden Maske (Serienbrief).
Keine Probleme mehr :D
Vielen Dank für eure Hilfe!!!!!!
Marco