Hallo Gemeinde,
ich stehe hier vor einem kleinem Problem.
Beschreibung:
In der DB habe ich Hauptdocs sowie entsprechende Responses. Nun passiert folgendes - die Hauptdocs enthalten Felder die beim erstellen der Responses mitübergeben werden. Die Felder im Hauptdocument erhalten ihre Werte teilweise aus DBLookup-Übergaben. Erstelle ich ein RepDoc ist auch alles o.k. Ändert sich der Wert nachträglich in der DBLookup-Tabelle werden die Hauptdocs mit einem Refreshagent oder nach öffnen aktualisiert. Die darunterliegenden RespDocs bleiben aber mit den alten Inhalten bestehen.
Öffne ich das entsprechende Hauptdoc und gehe auf den EditMode und speicher es dann wieder ab - werden auch die Responsdoc´s aktualisiert. Ich hoffe mich einigermaßen deutlich ausgedrückt zu haben.
Meine Fragen:
Wie kommt es.?
Wie kann ich ein Refresh auf die entsprechenden Respdocs erreichen?
Die besagten Felder im Respdoc sind computed.
Weder die Commandanweisung Toolsrefreshed.... noch ein refresh aus Script heraus fruchtet.
Danke für Euere Hilfe
Hauptdoc und zugehörige Responses
- RonMat
- Erledigt
-
-
Der Refreshagent wird nur die Hauptdocs anpassen.
Er muss dies natürlich auch mit allen Response-Dokumenten machen, denn woher sollen die sonst wissen das sich etwas geändert hat. -
Hi Taurec,
danke für die schnele Antwort. Aber irgentwie funzt es trotzdem nicht. Ich kann mir die entsprechenden Haupt und Respdocs in eine Ansicht anzeigen lassen - markieren und refreshen. Gleiche Problem.
Habe die entsprechenden Felder schon aus SubMasken herausgenommen und sie gleich auf die Hauptmaske gelegt - ich bekomme die Mist-RespDocs nicht aktualisiert.
Immer editMode wechseln - speichern - aufrufen - dann ist das o.k.
Bei ca 50000 Docs schafft man dann wirklich Arbeitsplätze. Von de Idee nicht schlecht - aber wenn ich das meinem Boss verkaufen will , dann wird er mir wohl alles Gute wünschen -
Wie sieht denn der Agent zum Refreshen aus ?
Kannst du denn mal posten oder mir zuschicken ? -
In angepassten Ansichten habe ich es mit
@Command( [ToolsRefreshSelectedDocs] ) ausprobiertund im Scrip ( musste ich eben aus dem Kopf machen, weil DB nicht vorliegt - bin nicht in der Firma)
Dim session As New NotesSession
Dim db As NotesDatabase
Dim collection As NotesDocumentCollection
Dim doc As NotesDocument
Set db = session.CurrentDatabase
Set collection = db.UnprocessedDocuments
Set doc = collection.GetFirstDocument()
While Not(doc Is Nothing)
test = doc.ComputeWithForm( False, False )
Call doc.Save( True, True )
Set doc = collection.GetNextDocument(doc)
Wend
End Sub -
Das was dieser Agent macht ist nur das Aktualisieren der berechneten Felder im Dokument.
Was du brauchst ist ein Agent der die geänderten Werte des Hauptdokumentes in die Responses schreibt.
Gemacht wird es ja schon, da wenn du das Dok speicherst die Werte in die Responses übernommen werden.
Schau doch mal im QuerySave des Hauptdocs nach -
Taurec, erstmal vielen Dank für Deine Zeit.
Also im QuerySave werden die Daten nicht aktualisiert (hierfür ist keine Aktion einprogrammiert worden)
Die RespDoc Maske übernimmt die entsprechenden Felder aus dem Hauptdocument. (Beim anlegen funktioniert es ja auch gut.
Aber Du hast mich da auf eine Idee gebracht.
Ich hatte im Querysave ein Script erstellt der
1. dem Hauptdoc eine laufende Nummer verpasst
2. den Status an Respdocs weiterzugebenDas Script sieht nachfolgend beschrieben aus
Dim s As New notessession
Dim db As notesdatabase
Set db = s.currentdatabase
Dim view As notesview
Set view = db.getview("VTB_Counter")
Dim ws As New notesuiworkspace
Dim uidoc As notesuidocument
Set uidoc = ws.currentdocument
Dim doc As notesdocument
Set doc = view.GetFirstDocument
Dim Act_No As String
Dim Carrier As String
Dim AG_Code As String
Dim Ref_res As String
Dim Last_No As Variant
If uidoc.IsNewDoc Then ' *****Öffne die entsprechende View und hole letzte WO Nummer
Last_No=doc.GetItemValue("WO_Counter")
Act_No=Last_No(0)+1
'_________________________________________________________________
'*****Werte aus dem Dokument auslesen
Carrier=uidoc.FieldGetText("WO_Carrier")
AG_Code=uidoc.FieldGetText("WO_AgencyCode")
'_________________________________________________________________
'******Zähler in Format bringen > Carrier+AgencyCode+WONummer(6-stellig)<
Dim RefNo_Form As String
RefNo_Form= Right$("000000" & Cstr(Act_No),6)
'----------------------------------------------------------------------
T="IWO-" 'Vorangestellter Text vor der eigentlichen Referenznummer
Ref_res=T+Carrier + AG_Code +RefNo_Form
Uidoc.FieldSetText "WO_Ref_hide", Ref_res
Uidoc.FieldSetText "WO_Counter",Act_No
UiDoc.FieldSetText "WO_Drafted","YES"
UiDoc.FieldSetText "WO_Status_Drafted",Cstr(Now())
End If
'*********************************************************************************
' Response Dok´s nachziehen um das Feld "EditLock abzugleichen
'*********************************************************************************
Dim Respdoc As NotesDocument
Dim ws2 As New notesUIWorkspace
Set Respdoc = ws2.CurrentDocument.document
Dim Wert As String
wert=uidoc.FieldGetText("EditLock")
Dim DocCount As Long
Set db = Respdoc.ParentDatabase
Dim RespDocColl As notesdocumentCollection
Dim RespDocCollDoc As notesdocument
Dim PosCount As Integer
Set RespDocColl = Respdoc.Responses
Dim i As Integer
On Error Resume Next
If RespDocColl.count > 0 Then
For i = RespDocColl.count To 1Step -1
Set RespDocCollDoc = RespDocColl.GetNthDocument(i)
Call RespDocColl.StampAll("EditLock",Wert)
Next
End IfIch denke, an dieser Stelle könnte ich mir entsprechende Werte holen und diese der RespDocs "überbügeln".
Nur was passiert dann, die Werte werden nur nach dem abspeichern des Hauptdocs aktualisiert. Oder habe ich z.Z. ein Brett vorm Kopf??? -
Und genau diese Aktualisierung musst du dann noch in deinen Aktualisierungsagenten übernehmen.
Dann werden sie auch sonst aktualisiert -
Danke