Autor Thema: Maske mit Feldinhalten aus Anwortdokumenten füllen  (Gelesen 3477 mal)

Offline giochips

  • Junior Mitglied
  • **
  • Beiträge: 85
  • Geschlecht: Männlich
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
Woher soll ich wissen was ich denke, bevor ich gehört habe was ich sage??!!

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Maske mit Feldinhalten aus Anwortdokumenten füllen
« Antwort #1 am: 21.08.08 - 11:20:42 »
Call notesUIDocument.Reload( ) bzw. Call notesUIDocument.Refresh( )

Wenn Du was im Backend-Dokument änderst, muss Du das dem UIDoc mitteilen.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Maske mit Feldinhalten aus Anwortdokumenten füllen
« Antwort #2 am: 21.08.08 - 11:22:47 »
Es fehlt auch ein noch ein
If Source.EditMode = False Then
   Exit Sub
End If

Bernhard

Offline giochips

  • Junior Mitglied
  • **
  • Beiträge: 85
  • Geschlecht: Männlich
Re: Maske mit Feldinhalten aus Anwortdokumenten füllen
« Antwort #3 am: 21.08.08 - 11:35:04 »
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
Woher soll ich wissen was ich denke, bevor ich gehört habe was ich sage??!!

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Maske mit Feldinhalten aus Anwortdokumenten füllen
« Antwort #4 am: 21.08.08 - 11:45:06 »
NotesUIDocument.Refresh oder .Repload oder ein NotesUIWorkspace.ViewRefresh (=F9) sind nur im EditMode zulässig.

Bernhard

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Maske mit Feldinhalten aus Anwortdokumenten füllen
« Antwort #5 am: 21.08.08 - 11:53:52 »
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.
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline giochips

  • Junior Mitglied
  • **
  • Beiträge: 85
  • Geschlecht: Männlich
Re: Maske mit Feldinhalten aus Anwortdokumenten füllen
« Antwort #6 am: 21.08.08 - 12:17:31 »
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...

 :-\
Woher soll ich wissen was ich denke, bevor ich gehört habe was ich sage??!!

Offline giochips

  • Junior Mitglied
  • **
  • Beiträge: 85
  • Geschlecht: Männlich
Re: Maske mit Feldinhalten aus Anwortdokumenten füllen
« Antwort #7 am: 21.08.08 - 13:19:33 »
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
Woher soll ich wissen was ich denke, bevor ich gehört habe was ich sage??!!

Driri

  • Gast
Re: Maske mit Feldinhalten aus Anwortdokumenten füllen
« Antwort #8 am: 21.08.08 - 13:31:18 »
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.

Offline giochips

  • Junior Mitglied
  • **
  • Beiträge: 85
  • Geschlecht: Männlich
Re: Maske mit Feldinhalten aus Anwortdokumenten füllen
« Antwort #9 am: 21.08.08 - 17:19:47 »
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
Woher soll ich wissen was ich denke, bevor ich gehört habe was ich sage??!!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz