Autor Thema: Daten aus Antwortdokument ins Hauptdokument übergeben und dieses aktualisieren  (Gelesen 1870 mal)

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Hallo Forum,

der Urlaub ist rum, der Halbmarathon bestanden und nun stehe ich im Geschäft mal wieder auf meinem Scriptanfängerschlauch.

Ich habe folgendes Problem wo ich einfach keine Lösung finde:

Ich übergebe aus einem Antwortdokument an das Hauptdokument mit @setdocfield Werte, die dort auch einwandfrei landen. Diese Werte müssen im Hauptdokument verarbeitet werden, und das Ergebnis an alle Antwortdokumente wieder übergeben werden.

Dank der hilfreichen Dokumentation im BP (Arbeiten mit Haupt- und Antwortdokumenten) ist das normalerweise ja kein Beinbruch, dazu habe ich im Querysave des Hauptdokuments den Code

Zitat
Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Set db = session.CurrentDatabase
   
   If Source.IsNewDoc Then Exit Sub 'Wenn UIDoc neu ist dann verlasse Script
   
   Set doc = Source.Document 'UIDoc zu Backend-doc
   
   
   'alle Antwortdocs des Backend-Docs werden in die Collection aufgenommen
   Set dc = doc.Responses
   
   'Setze alle Felder der Collection, gespeichert wird automatisch   
   Call dc.StampAll( "WerteinesPunktes" , doc.BetragjePunkt(0) )

reinkopiert und bearbeitet.


Wenn ich das Hauptdokument manuell öffne und speicher wird der BetragjePunkt übergeben, meine Berechnungen passen. Nun würde ich das aber gerne auch automatisiert durchführen.

Mein Ansatz war beim Verlassen des Antwortdokuments das Hauptdokument zu suchen, um dieses dann  zu speichern. Hab ich im Queryclose des Antwortdokuments wie folgt lösen wollen:
Zitat
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
   Dim ndAntwort As NotesDocument
   Dim ndHaupt As Notesdocument
   Dim uidoc As NotesUIDocument
   
   
   Set ndAntwort = Source.Document
   Dim Ref As String
   Ref = ndAntwort.ParentDocumentUNID
   Dim ndb As NotesDatabase
   Set ndb=source.Document.Parentdatabase
   Set ndHaupt=ndb.getdocumentbyUNID(Ref)
   
   Call ndHaupt.Save(True, False)   
   
End Sub

Klappt aber nicht, durch das Saven im Backend wird das Querysave oben nicht aufgerufen.

Kann ich das ndHaupt Dokument nun in ein Frontend umwandeln und dieses dann aktualisieren und refreshen? Dann müsste doch das Querysave greifen. Oder geht das garnicht, Backend in Frontend umwandeln?

Oder seh ich den Wald mal wieder vor lauter Bäumen nicht, und es gibt eine viel einfachere Lösung?

 
Thomas von der IuK

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
Zitat
Klappt aber nicht, durch das Saven im Backend wird das Querysave oben nicht aufgerufen.
Jup, ist so. Aus der Designer-Hilfe:
Zitat
QuerySave event 
...
Defined in
NotesUIDocument


Daher musst Du den Code, den Du im Query-Save hast, auch im Queryclose des Child.Documents explizit ausführen (ev. über eine Funktion in einer Script-Library).
Wenn Du den QuerySave laufen lassen willst, musst Du das Dokument im UI Öffnen, speichern und schließen, was für den User zu nicht nachvollziehbaren Aktionen am Schirm führt (Fenster auf, edit mode, ...). Und wenn der User genau in dem Moment ESC drückt, ...

Mein Tipp: Mach es komplett im Backend. Ist zwar ein bissl mehr Coding-Aufwand, aber von der Usability ist es besser.
« Letzte Änderung: 08.06.07 - 09:56:59 von m3 »
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 atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
Verwende
Code
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
   Dim ndAntwort As NotesDocument
   Dim ndHaupt As Notesdocument
   
   
   Set ndAntwort = Source.Document
   Dim ndb As NotesDatabase
   Set ndb=ndAntwort.Parentdatabase
   Set ndHaupt=ndb.getdocumentbyUNID(ndAntwort.~$Ref(0))
   
   ' // FELDER SETZEN

   Call ndHaupt.Save(True, False)   
   
End Sub

David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Sorry für die lange Rückantwortdauer, war grad beim Chef  :-\

@m3  Ohje, ich scheitere ja schon hier ...

@atbits  Klappt noch nicht, aber ich denke das liegt an dem was m3 oben schon geschrieben hat, das Dokument muss wohl erst noch geöffnet werden. Mal schauen

Ergänzung

Hmm, aber wenn ich das so recht anschaue, hab ich doch immernoch kein Frontenddokument, oder?
« Letzte Änderung: 08.06.07 - 11:20:01 von iukhdh »
Thomas von der IuK

Offline iukhdh

  • Senior Mitglied
  • ****
  • Beiträge: 498
  • Geschlecht: Männlich
  • To be or notes to be, this is the question
Kurzer Zwischenstand:

Martins Idee war ganz gut, ich übergebe einfach wie gehabt übers Antwortdokument die Werte  ans Hauptdokument und sag dann im Backend im Queryclose des Antwortdokuments dass die errechneten Werte vom Hauptdokument von dort aus gleich wieder an die Antwortdokumente verteilt werden sollen.

Zitat
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
   Dim ndAntwort As NotesDocument
   Dim ndHaupt As Notesdocument
   Dim uidoc As NotesUIDocument
   
   
   Set ndAntwort = Source.Document
   Dim Ref As String
   Ref = ndAntwort.ParentDocumentUNID
   Dim ndb As NotesDatabase
   Set ndb=source.Document.Parentdatabase
   Set ndHaupt=ndb.getdocumentbyUNID(Ref)
   
      'alle Antwortdocs des Backend-Docs werden in die Collection aufgenommen
   Set dc = ndHaupt.Responses
   
   'Setze alle Felder der Collection, gespeichert wird automatisch   
   Call dc.StampAll( "WerteinesPunktes" , ndHaupt.BetragjePunkt(0) )
   
   
End Sub

Jetzt muss ich nur noch die Ansicht aktualisieren lassen, dann läufts. Das nehme ich mir dann für Montag vor.  :)
Thomas von der IuK

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz