Autor Thema: Felder in Antwortdokumenten aktualisieren  (Gelesen 2592 mal)

Offline 2stupid4this

  • Junior Mitglied
  • **
  • Beiträge: 70
  • Geschlecht: Männlich
  • Never touch a running system!
Felder in Antwortdokumenten aktualisieren
« am: 22.09.06 - 09:17:33 »
Irgendwie stehe ich auf dem Schlauch.
Habe ein Dokument, welches Antwortdokumente besitzt. Diese Antwortdokumente können unter umständen ebenfalls Antwortdokumente enthalten. Nun möchte ich bei Änderung des Feldes imHauptdokument bei allen Antwortdokumenten und Antworten auf Antworten diesen Feldinhalt ebenfalls durchschreiben. Bis zum ersten Antwortdokument ja kein Problem, aber ich würde dies geren mit einer Art schleife machen, damit das alles dynamisch und nicht fest ist. Einmal kann es nur ein Antwortdokument geben, ein anderes mal mehrere. Dioe Dokument, die ihrerseit wieder Antwortdokumente besitzen haben die Form "Kapitel" die restlichen die Form "Inhalt". Kapitel kann somit sowohl wieder ein Kapitel, als auch Inhalt als Antwortdokumente haben, usw.

Habs mal so angedacht, aber das funktioniert so nicht:
Code
sub Änderung(doc as NotesDocument)
...
Set col=doc.Responses
Set respdoc=col.GetfirstDocument
While Not respdoc Is Nothing 
call respdoc.ReplaceItemValue("Berechtigung",doc.Berechtigung)
call respdoc.save(False,False)
if respdoc.Form(0)="Kapitel" then call Änderung(respdoc)
set respdoc.GetNextDocument(respdoc)
wend
Beim verschachteln wird ja doc mit respdoc überschrieben. Denke ich hier irgendwo um die ecke, bzw. kann mir jemand den Kntoen im Kopf lösen.

Danke im voraus
2stupid4this
Wer Rechtschreibfehler findet, darf diese behalten.

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: Felder in Antwortdokumenten aktualisieren
« Antwort #1 am: 22.09.06 - 10:24:29 »
Ich habe das Aktualisierungsproblem bei Antwortdokumenten so gelöst:
Die Referenzfelder im AW-Dokument sind vom Typ berechnet mit der Formel

Code
@If(@IsNewDoc;FeldImHauptDok;@GetDocField($Ref; "FeldImHauptDok"))

Die Option Formeln übernehmen Werte aus gewähltem Dokument in der Maske muss hierfür aktiviert sein.

Falls Du diese berechneten Felder in den Antwortdokumenten zeitnah aktualisieren willst, kannst Du das über ein LS ähnlich dem, mit dem Du es versucht hast im QuerySave erreichen:

Code
Sub updateResponses(Source)
Dim doc As NotesDocument
Dim rdoc As NotesDocument
Dim dc As NotesDocumentCollection
Dim success As Variant
Set doc = Source.document
Set dc = doc.responses
If Not (dc Is Nothing) Then
Set rdoc = dc.GetFirstDocument
While Not ( rdoc Is Nothing )	
success = rdoc.ComputeWithForm( False, False )
If success Then
Call rdoc.Save( False, False )
End If
Set rdoc = dc.GetNextDocument(rdoc)
Wend
End If
End Sub

Ansonsten tuts ein Agent, der alle Antwortdokumente per @Command( [ToolsRefreshAllDocs] )  aktualisiert
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

Offline 2stupid4this

  • Junior Mitglied
  • **
  • Beiträge: 70
  • Geschlecht: Männlich
  • Never touch a running system!
Re: Felder in Antwortdokumenten aktualisieren
« Antwort #2 am: 22.09.06 - 13:03:01 »
Das mit den berechneten felder funktioniert leider nicht, da in abhängigkeit von einem anderen Feld das Übeschreiben unterbunden werden soll. Vor allem habe ich ja nicht nur eine Gliederungsebene (Antwort auf Hauptdokument), sondern unter Umständen mehrere Ebenenen und genau da liegt mein Problem, dass ich das nicht hinbekomme, ausser ich gebe dreimal den gleichen Code für die Aktualiserung ein, jedesmal mit einer anderen Variablen, damit ich jederzeit in jeder Ebene mit der Aktualisierung weitermachen kann.
Wer Rechtschreibfehler findet, darf diese behalten.

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Felder in Antwortdokumenten aktualisieren
« Antwort #3 am: 22.09.06 - 13:49:54 »
Sowas muss rekursiv geköst werden, d.h., wenn Du eine Aktualisierung für ein Dokument mit Responses machst, rufst Du Deine Update-Routine auf. Und diese ruft sich selber wieder auf, wenn ein zu aktualisierendes child document wiederum auf "HasReponses" positiv reagiert.

Bernhard

Offline ossigo

  • Aktives Mitglied
  • ***
  • Beiträge: 149
Re: Felder in Antwortdokumenten aktualisieren
« Antwort #4 am: 22.09.06 - 15:04:08 »
Unter Best Practices findest Du einen Thread über Haupt und Antwortdokumente (http://atnotes.de/index.php?topic=13984.0)
Dort unter 3.9 steht was für rekursives Löschen von Antwortdokumente. So in der Art kannst Du das auch für Deine Zwecke gebrauchen, must nur anpassen...

Jens

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Felder in Antwortdokumenten aktualisieren
« Antwort #5 am: 23.09.06 - 08:54:29 »
Deinem Code fehlt eigentlich nur eine Kleinigkeit, damit du das Handle auf das übergebene Dokument behältst.

sub Änderung(doc as NotesDocument)
...
Set col=doc.Responses
Set respdoc=col.GetfirstDocument
While Not respdoc Is Nothing
call respdoc.ReplaceItemValue("Berechtigung",doc.Berechtigung)
call respdoc.save(False,False)
if respdoc.Form(0)="Kapitel" then
Set changedoc=respdoc
call Änderung(changedoc)
End If
set respdoc.GetNextDocument(respdoc)
wend

Gruß

Norbert
Situs vilate in isse tabernit.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz