Autor Thema: Antwortdokumente aktualisieren  (Gelesen 4646 mal)

Offline KSKGG

  • Frischling
  • *
  • Beiträge: 4
  • Ich liebe dieses Forum!
Antwortdokumente aktualisieren
« am: 24.05.04 - 15:35:48 »
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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Antwortdokumente aktualisieren
« Antwort #1 am: 24.05.04 - 15:42:37 »
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.

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Antwortdokumente aktualisieren
« Antwort #2 am: 25.05.04 - 10:46:45 »
Hi,

ich hab mal so was gemacht. Ich begeb mich mal auf die Suche nach dem Code.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Antwortdokumente aktualisieren
« Antwort #3 am: 25.05.04 - 11:57:32 »
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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Heiggo

  • @Notes Preisträger
  • Senior Mitglied
  • ****
  • Beiträge: 368
  • Geschlecht: Männlich
  • Ich habe nix gemacht!
Re:Antwortdokumente aktualisieren
« Antwort #4 am: 26.05.04 - 00:57:39 »
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
(¯`·._ (¯`·._-=- ...und für Bernhard... nur OFw d.R. :-) -=-_.·´¯)_.·´¯)

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Antwortdokumente aktualisieren
« Antwort #5 am: 26.05.04 - 11:45:02 »
...
'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) )
...

Auch eine Möglichkeit, wobei der Kommentar allerdings etwas verwirrent ist. Eigentlich müsste es heissen:

1. Wert(rot)= Feld im Antwortdokument, 2.Wert(blau)=Neuer Wert aus Feld im Hauptdokument.

Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline KSKGG

  • Frischling
  • *
  • Beiträge: 4
  • Ich liebe dieses Forum!
Re:Antwortdokumente aktualisieren
« Antwort #6 am: 26.05.04 - 12:32:07 »
Hallo,

danke an alle hat mit dem letzten Hinweis von Axel funktioniert.

Gruß

Holger :) :)

Offline Heiggo

  • @Notes Preisträger
  • Senior Mitglied
  • ****
  • Beiträge: 368
  • Geschlecht: Männlich
  • Ich habe nix gemacht!
Re:Antwortdokumente aktualisieren
« Antwort #7 am: 26.05.04 - 18:47:15 »
Uuuuups :-) Sorry, das passiert, wenn man so auf die Schnelle mal was zwischenkommentiert ohne groß darüber nachzudenken :-)


/Edit:
DoppelUps... sorry... thx for correction :-)
/EditEnd
...
'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) )
...

Auch eine Möglichkeit, wobei der Kommentar allerdings etwas verwirrent ist. Eigentlich müsste es heissen:

1. Wert(rot)= Feld im Antwortdokument, 2.Wert(blau)=Neuer Wert aus Feld im Hauptdokument.

Axel

« Letzte Änderung: 26.05.04 - 18:49:57 von SiebertH »
(¯`·._ (¯`·._-=- ...und für Bernhard... nur OFw d.R. :-) -=-_.·´¯)_.·´¯)

Offline Schnulli

  • Aktives Mitglied
  • ***
  • Beiträge: 107
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re:Antwortdokumente aktualisieren
« Antwort #8 am: 29.06.04 - 16:02:12 »
Hallo zusammen,
ja, der Code ist super! Habe ihn auch schon im Einsatz!

Jetzt habe ich dazu noch eine Frage:

Bei diesem Code werden ja bei jedem Speichern des Hauptdokumentes die Antwortdokumente aktualisiert.
Ich möchte aber, daß die Antwortdokus nur dann aktualisiert werden, wenn vor dem Speichern zumindest eines der relevanten Felder geändert wurde.
Leider weiß ich nicht, wie ich das in LS vormulieren muss ...
 ???
Iris
Notes 8.5.3
Notes-Formelsprache (keine Script-Kenntnisse)

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Antwortdokumente aktualisieren
« Antwort #9 am: 29.06.04 - 16:15:07 »
Hi,

das ist relativ einfach. Ich hab's weiter oben schon mal gepostet.

Hier nochmal in entwas einfacherer Form.

Zitat
1. Im globalen Declarations-Abschnitt der Hauptmaske habe ich folgende Variablen deklariert:

'Variablen für Abgleich
Dim tmpVorname As String
Dim tmpName As String
Dim tmpTelefon As String

2. Im Postopen-Event habe ich die globalen Variablen mit den Feldinhalten gefüllt.

If (Not doc.IsNewNote) Then
   tmpVorname = doc.Vorname(0)
   tmpName = doc.Name(0)
   tmpTelefon = doc.Telefon(0)
End If

3. 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 tmpVorname <> doc.Vorname(0) Then
      ichange = True
   End If  'If tmpVorname <>...
     
   If tmpName <> doc.Name(0) Then
      ichange = True
   End If  'If tmpName <>...

   If tmpTelefon <> doc.Telefon(0) Then
      ichange = True
   End If  'If tmpTelefon <>...
     

End If

If ichange Then
   Set doc = Source.Document
   Set dc = doc.Responses
   
  '1. Wert(rot)= Feld im Antwortdokument, 2.Wert(blau)=Neuer Wert aus Feld im Hauptdokument.

   Call dc.StampAll( "Name" , doc.Name(0) )  
   Call dc.StampAll( "Vorname" , doc.Vorname(0) )
   Call dc.StampAll( "Telefon" , doc.Telefon(0) )
End If


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Schnulli

  • Aktives Mitglied
  • ***
  • Beiträge: 107
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re:Antwortdokumente aktualisieren
« Antwort #10 am: 29.06.04 - 16:27:24 »
Sorry!  :-X

Wer lesen kann, ist klar im Vorteil!!!!  :-\

Vielen Dank, werde es gleich ausprobieren!
Iris
Notes 8.5.3
Notes-Formelsprache (keine Script-Kenntnisse)

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re:Antwortdokumente aktualisieren
« Antwort #11 am: 29.06.04 - 16:32:52 »
Hi,

kein Problem. Das passiert jedem von uns.  ;)


Axel
 
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Schnulli

  • Aktives Mitglied
  • ***
  • Beiträge: 107
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re:Antwortdokumente aktualisieren
« Antwort #12 am: 29.06.04 - 17:32:57 »
Hallo Axel,

hm, jetzt habe ich doch ein kleines Problem:

habe in die Declarations:

Dim tmpChamp As String
Dim tmpPLeiter As String
Dim tmpStatus As Integer


..und in den Post-Open-Event folgendes eingetragen:

Sub Postopen(Source As Notesuidocument)
If (Not doc.IsNewNote) Then
tmpChamp = doc.Champ(0)
tmpPLeiter = doc.PLeiter(0)
tmpStatus = doc.Status(0)
End If   
End Sub

Beim Neuerstellen erscheint dann aber die Fehlermeldung:

"Variant does not contain an object!"

Hab ich schon wieder etwas überlesen???
Iris
Notes 8.5.3
Notes-Formelsprache (keine Script-Kenntnisse)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re:Antwortdokumente aktualisieren
« Antwort #13 am: 29.06.04 - 17:42:25 »
Überlesen hast Du nix, aber Code verwendet und diesen nicht verstanden ... Das sollte man nicht machen.

Source im PostOpen ist ein NotesUIDocument. Du verwendest dann doc, was in diesem Kontext ein NotesDocument (also Backend) wäre - aber von Dir nicht deklariert wird.

Sub Postopen(Source As Notesuidocument)

dim doc as NotesDocument

If (Not Source.IsNewNote) Then
Set doc = Source.Document
tmpChamp = doc.Champ(0)
tmpPLeiter = doc.PLeiter(0)
tmpStatus = doc.Status(0)
End If  
End Sub

Bevor Du das jetzt einsetzt, schau Dir bitte vorher die Klassen NotesDocument und NotesUIDocument an - Du kannst es dadurch eher vermeiden, dass Du im QuerySave die nächsten Fehler einbaust.

HTH,
Bernhard

Offline Schnulli

  • Aktives Mitglied
  • ***
  • Beiträge: 107
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re:Antwortdokumente aktualisieren
« Antwort #14 am: 30.06.04 - 09:40:23 »
Überlesen hast Du nix, aber Code verwendet und diesen nicht verstanden ... Das sollte man nicht machen.

Da hast Du allerdings Recht!  :-\
Meine LS-Kenntnisse beschränken sich leider noch auf copy+paste und anpassung von Feld und Maskennamen etc.
Habe einen LS-Kurs beantragt, hoffe, daß er genehmigt wird, damit ich Euch nicht mehr mit solchen Basics nerve. Sorry.

Trotzdem Danke!
Iris
Notes 8.5.3
Notes-Formelsprache (keine Script-Kenntnisse)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz