Hab mich jetzt da durch gelesen und folgende Funktion sieht interessant aus:
3.4 Felder in allen Antwortdokumenten aktualisieren, sobald sich diese im Hauptdokument ändern
Sub Querysave(Source As Notesuidocument, Continue As Variant)
'------------------------------------------------------------------------------------------------------------------
'Zweck: Feldwerte werden beim Speichern in alle Antwort-Dokumente übernommen
'------------------------------------------------------------------------------------------------------------------
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( "Re_Feld1" , doc.Feld1(0) )
Call dc.StampAll( "Re_Feld2" , doc.Feld2(0) )
Call dc.StampAll( "Re_Feld3" , doc.Feld3(0) )
End Sub
Gehört das (0) zum Feldnamen oder hat es syntaktische Bewandnis?
Wenn ich das in einer Ansicht unter PostPaste einfügen will funktioniert es nicht mehr, weil er die Objekte nicht erkennt, bzw. es nicht
Source As Notesuidocument
... sondern ...
Source As Notesuiview
heißt.
Werd jetzt mal ein bischen die DOM durschauen, aber vielleicht kann mir jemand auch noch auf die Sprünge helfen wie ich den Code anpassen muß.
Gehört das (0) zum Feldnamen oder hat es syntaktische Bewandnis?
Die 0 hat eine syntaktische Bewandnis. Wenn du mit der Backendklasse NotesDocument auf ein Feld zugreifst, bekommst du immer einen Variantwert mit 1 bis x Einträgen (kann ja auch ein Mehrfachfeld sein). Mit (0) sprichst du den ersten Eintrag des Rückgabewerte an.
Schau dir mal in der Designer-Hilfe GetItemValue in der Klasse NotesDocument an.
Wenn du das in einen Ansichten-Event einfügst kann das so auch nicht funktionieren.
Ich habe den Code mal auf die Schnelle umgesetzt. Ich hoffe das funktioniert so. Ich bin mir nämlich ganz sicher, ob du mit Source.Documents die eingefügten Dokumente bekommst.
Sub Postpaste(Source As Notesuiview)
Dim docCol As NotesDocumentCollection
Dim responseCol As NotesDocumentCollection
Dim doc As NotesDocument
'eingefügtes Dokument(0) in Collection aufnehmen
Set docCol = Source.Documents
Set doc = docCol.GetFirstDocument 'Auf erstes Dokument in der Collection zugreifen
While Not (doc Is Nothing)
'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( "Re_Feld1" , doc.Feld1(0) )
Call dc.StampAll( "Re_Feld2" , doc.Feld2(0) )
Call dc.StampAll( "Re_Feld3" , doc.Feld3(0) )
Set doc = docCol.GetNextDocument(doc) 'auf nächstes Dokument zugreifen
Wend
End Sub
Axel
Hab erst gemerkt daß das gewünschte Feld nicht angepasst wird. Allerdings wird die eingebaute messagebox auch nicht ausgeworfen.
Vorgehen ist folgendes:
Markiere in der Ansicht eine Child-Zeile
STRG+C
Markiere eine andere Parent-Zeile
STRG+V
Das müsste doch das PostPaste-Event auslösen, oder?
Sub Postpaste(Source As Notesuiview)
Dim docCol As NotesDocumentCollection
Dim responseCol As NotesDocumentCollection
Dim doc As NotesDocument
'eingefügtes Dokument(0) in Collection aufnehmen
Set docCol = Source.Documents
Set doc = docCol.GetFirstDocument 'Auf erstes Dokument in der Collection zugreifen
While Not (doc Is Nothing)
'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( "ProjectNo" , doc.ProjectNo(0) )
Messagebox "test"
Set doc = docCol.GetNextDocument(doc) 'auf nächstes Dokument zugreifen
Wend
End Sub
Hallo Umi, hallo Axel,
kriegs noch nicht ganz hin:
Sub Postpaste(Source As Notesuiview)
Dim docUnid As NotesDocument
Dim docCol As NotesDocumentCollection
Dim doc As NotesDocument
Set docCol = Source.Documents
Set doc = docCol.GetFirstDocument
Set docUnid = doc.ParentDocumentUNID
docUnid.ProjectNo = doc.ProjectNo
Call docUnid.Save(True, False)
Messagebox "test"
End Sub
Sub Postpaste(Source As Notesuiview)
Dim docUnid As NotesDocument
Dim docCol As NotesDocumentCollection
Dim doc As NotesDocument
dim db as notesdatabase
Set docCol = Source.Documents
Set doc = docCol.GetFirstDocument
set db = doc.parentDatabase
on error 4091 resume next
Set docUnid = db.getDocumentByUnid(doc.parentDocumentUNID)
if not docUnid is nothing then
docUnid.ProjectNo = doc.ProjectNo
Call docUnid.Save(True, False)
end if
Messagebox "test"
End Sub