Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: iukhdh am 08.06.07 - 09:44:49

Titel: Daten aus Antwortdokument ins Hauptdokument übergeben und dieses aktualisieren
Beitrag von: iukhdh am 08.06.07 - 09:44:49
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?

 
Titel: Re: Daten aus Antwortdokument ins Hauptdokument übergeben und dieses aktualisier
Beitrag von: m3 am 08.06.07 - 09:54:42
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.
Titel: Re: Daten aus Antwortdokument ins Hauptdokument übergeben und dieses aktualisier
Beitrag von: atbits am 08.06.07 - 10:41:35
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

Titel: Re: Daten aus Antwortdokument ins Hauptdokument übergeben und dieses aktualisier
Beitrag von: iukhdh am 08.06.07 - 11:10:56
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?
Titel: Re: Daten aus Antwortdokument ins Hauptdokument übergeben und dieses aktualisier
Beitrag von: iukhdh am 08.06.07 - 12:54:09
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.  :)