Domino 9 und frühere Versionen > Entwicklung

Antwortdokumente aktualisieren

(1/3) > >>

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