Domino 9 und frühere Versionen > Entwicklung
Antwortdokumente aktualisieren
KSKGG:
Hallo,
in einer Datenbank werden im Haupdokument bestimmte informationen wie Name, Vorname, Telefon USw vorgehalten.
In einem Antwortdokumnet werden Name, Vorname und Telefonnummer übernommen und in einem Richtext-Feld die Unterschrift als Bild eingefügt.
Wie kann man die Felder Name Vorname und Telefon im Antwortdokument automatisiert ändern, wenn sie sich im Hauptdokument ändern?
Im voraus vielen Dank
Gruß
Holger
koehlerbv:
Im Query- oder PostSave könntest Du Dir eine NotesDocumentCollection alles unmittelbaren Responses erzeugen mit
NotesDocumentCollection = NotesDocument.Responses.
Dann sollte es ein leichtes sein, ein Update der ResponseDocs durchzuführen.
HTH,
Bernhard
PS: Geschickt wäre es sicherlich, wenn man sich bereits im PostOpen die originalen Feldwerte merkt und im QuerySave / PostSave nur ein Update der Responses vornimmt, wenn tatsächlich Änderungen durchgeführt wurden.
Axel:
Hi,
ich hab mal so was gemacht. Ich begeb mich mal auf die Suche nach dem Code.
Axel
Axel:
Hi,
ich bin fündig geworden.
Ich habe damals folgende Vorgehensweise gewählt:
1. In die Hauptmaske habe ich ein berechnetes Textfeld (Mehrfachwerte zugelassen) mit Namen xFieldList eingefügt. Als Werteformel habe ich den Feldnamen selbst eingetragen.
2. Im globalen Declarations-Abschnitt der Hauptmaske habe ich folgende Variablen deklariert:
'Variablen für Abgleich
Dim tmpAnrede As String
Dim tmpTitel As String
Dim tmpVorname As String
Dim tmpName As String
3. Im Postopen-Event habe ich die globalen Variablen mit den Feldinhalten gefüllt.
If (Not doc.IsNewNote) Then
tmpAnrede = doc.Anrede(0)
tmpTitel = doc.Titel(0)
tmpVorname = doc.Vorname(0)
tmpName = doc.Name(0)
End If
4. Im querySave-Event der Hauptmaske habe ich dann geprüft, ob sich einer oder mehrere Werte geändert haben. Wenn ja wird die funktion für den Abgleich aufgerufen.
Dim ichange As Integer
' Prüfung ob sich die, für den Abgleich relevanten, Felder geändert haben.
If Not doc.IsNewNote Then
If tmpAnrede <> doc.Anrede(0) Then
doc.GetFirstItem("xFieldList").AppendToTextList("Anrede")
ichange = True
End If 'If tmpAnrede <>...
If tmpTitel <> doc.Titel(0) Then
doc.GetFirstItem("xFieldList").AppendToTextList("Titel")
ichange = True
End If 'If tmpAnrede <>...
If tmpVorname <> doc.Vorname(0) Then
doc.GetFirstItem("xFieldList").AppendToTextList("Vorname")
ichange = True
End If 'If tmpAnrede <>...
If tmpName <> doc.Name(0) Then
doc.GetFirstItem("xFieldList").AppendToTextList("Name")
ichange = True
End If 'If tmpAnrede <>...
End If
If ichange Then
Call UpdateResponseDocs(doc)
Call doc.RemoveItem("xFieldList")
End If
Die Funktion zum Abgleich sieht so aus:
Sub UpdateResponseDocs(pdoc As NotesDocument)
On Error Resume Next
Dim collection As NotesDocumentCollection
Dim rdoc As NotesDocument
Dim objProgress As CProgressBar
Dim i As Integer
Set collection = pdoc.Responses
If collection.Count > 0 Then
For i = 1 To collection.Count
Set rdoc = collection.GetNthDocument(i)
' Abgleich von Name und Zusatzinformation
Forall s In pdoc.xFieldList
Call rdoc.ReplaceItemValue(s, pdoc.GetItemValue(s))
End Forall 'Forall s In pdoc.xFieldList
Call rdoc.ComputeWithForm(False, False)
Call rdoc.Save(True, True)
Next 'For i = 1 To collection.Count
End If 'If collection.Count > 0
End Sub
Axel
Heiggo:
Kann da noch folgendes anbieten :-)
Sub Querysave(Source As Notesuidocument, Continue As Variant)
'---
'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
Set doc = Source.Document
Set dc = doc.Responses
'1. Wert(rot)=Feld in Hauptdokument, 2. Wert(blau)=Neues Feld in Antwortdokument
Call dc.StampAll( "Name" , doc.Name(0) )
Call dc.StampAll( "Vorname" , doc.Vorname(0) )
Call dc.StampAll( "Telefon" , doc.Telefon(0) )
End Sub
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln