Domino 9 und frühere Versionen > ND6: Entwicklung
Daten aus Antwortdokument ins Hauptdokument übergeben und dieses aktualisieren
(1/1)
iukhdh:
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) )
--- Ende Zitat ---
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
--- Ende Zitat ---
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?
m3:
--- Zitat ---Klappt aber nicht, durch das Saven im Backend wird das Querysave oben nicht aufgerufen.
--- Ende Zitat ---
Jup, ist so. Aus der Designer-Hilfe:
--- Zitat ---QuerySave event
...
Defined in
NotesUIDocument
--- Ende Zitat ---
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.
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
--- Ende Code ---
iukhdh:
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?
iukhdh:
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
--- Ende Zitat ---
Jetzt muss ich nur noch die Ansicht aktualisieren lassen, dann läufts. Das nehme ich mir dann für Montag vor. :)
Navigation
[0] Themen-Index
Zur normalen Ansicht wechseln