Autor Thema: Probleme @DbLookUp im Agent  (Gelesen 3910 mal)

Jürgen Schomann

  • Gast
Probleme @DbLookUp im Agent
« am: 23.09.15 - 13:09:18 »
Ich habe folgenden Agenten, der für alle ausgewählten Dokumente läuft. Dazu existiert eine Ansicht sortiert nach dem Feld F1.

FIELD F1 := "neu";
_Values := @DbLookup("" : "NoCache"; ""; "vaTestDbLookUp"; "neu"; 2);
@Prompt([Ok];"";@Text(@Elements(_Values)));
SELECT @All

der Agent modifiziert die Dokumente, so dass mit dem @DbLookup jedes mal in der Ansicht ein Dokument mehr erscheint.
@DbLookUp liefert aber immer nur die zu Beginn vorhandene Anzahl Dokumente.
Wenn z. B. vor Start des Agenten 2 Dokumente mit Feld F1 = "neu" vorhanden waren, liefert mir @DbLookUp immer nur diese 2 Dokumente obwohl durch jeden Durchlauf ein Dokument mit dem Feld F1 = "neu" mehr entsteht, also müsste 3, 4 usw. Dokumente geliefert werden.
Irgendwie sind die geänderten Dokumente anscheinend noch nicht in der Ansicht oder der Cache funktioniert nicht. Auch die Angabe 'ReCache' statt 'NoCache' ändert nichts daran.

Wenn ich den gleichen Vorgang in LotusScript wie folgt nachstelle funktioniert es:

Dim session As New NotesSession
Dim dbThis As NotesDatabase
Dim db As NotesDatabase
Dim view As NotesView
Dim dc As NotesDocumentCollection
Dim dc2 As NotesDocumentCollection
Dim doc As NotesDocument

Set dbThis = session.CurrentDatabase
Set view = dbThis.GetView("vaTestDbLookUp")
Set dc = dbThis.UnprocessedDocuments
Set doc = dc.GetFirstDocument
While Not (doc Is Nothing)
   If doc.IsValid And doc.UniversalID <> "" Then
         
      Call doc.ReplaceItemValue("F1", "neu")
      Call doc.Save(True, False)
      Set dc2 = view.GetAllDocumentsByKey("neu", True)
      MsgBox dc2.Count
         
   End If
   Set doc = dc.GetNextDocument(doc)
Wend

O. g. Agent ist nur ein stark abgerüstetes Beispiel.
Gibt es irgend eine Idee dazu?

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Re: Probleme @DbLookUp im Agent
« Antwort #1 am: 23.09.15 - 13:53:09 »
Hi,

zwei Ideen ...

zum einen, wird deine Ansicht automatisch aktualisiert lt. Eigenschaften der Ansicht?

zum zweiten ... setze die Eigenschaft "AutoUpdate" deiner Ansicht vor der Schleife auf true, damit wird bei Änderungen die Ansicht aktualisiert.

Zusätzlich ein viwXXX.refresh vor jedem getallDocumentsByKey könnte auch was bringen.

Ich denke mal, er aktualisiert die Ansicht einfach nicht, wenn sich im Hintergrund was tut.

Deswegen der refresh nach jedem Aufruf und die anderen Maßnahmen.

LG
Marco

Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Jürgen Schomann

  • Gast
Re: Probleme @DbLookUp im Agent
« Antwort #2 am: 23.09.15 - 14:19:07 »
Wie gesagt in LotusScript funktioniert es ja. Die Ansicht wird automatisch aktualisiert,. Auch mit Index Verwerfen-Optionen habe ich schon probiert. AutoUpdate ist Standard = True und Refresh weiß ich auch, es ist ja nur ein stark abgerüstetes Beispiel.
Aber das Problem besteht weiter, da ich diesen Agent in der Formelsprache benötige. Das ist ein ziemlich umfangreicher Agent aus einer Fremdanwendung und ein Umstellen in LotusScript viel zu aufwendig.

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Re: Probleme @DbLookUp im Agent
« Antwort #3 am: 23.09.15 - 15:21:37 »
Ja, sorry ... war zu schnell beim Lesen.

Hmmm ...
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Offline it898ur

  • Senior Mitglied
  • ****
  • Beiträge: 478
Re: Probleme @DbLookUp im Agent
« Antwort #4 am: 24.09.15 - 07:31:19 »
Hallo,

schon mal ein @UpdateFormulaContext getestet?

Viele Grüße

André

Jürgen Schomann

  • Gast
Re: Probleme @DbLookUp im Agent
« Antwort #5 am: 24.09.15 - 16:53:04 »
Wie soll das gehen?
Der Agent soll für alle ausgewählten Dokumente laufen. Die Funktion @UpdateFormulaContext ist aber nur möglich wenn als Ziel für den Agenten 'Keines' angegeben ist und der Nutzer direkt mit dem Dokument arbeitet.

Offline it898ur

  • Senior Mitglied
  • ****
  • Beiträge: 478
Re: Probleme @DbLookUp im Agent
« Antwort #6 am: 25.09.15 - 08:00:30 »
Hallo,

diese Einschränkung der Funktion hatte ich nicht bedacht. Ich kenne diesen Effekt jedoch auch aus vergangenen Zeiten - wenn ein Formelagent auf viele Dokumente läuft und dabei Felder setzt und mit Lookups Daten liest, gab es immer mal wieder "Sprünge" in den Werten, weil zwischenzeitlich die Ansichten zu langsam waren.

Inzwischen haben wir die betroffenen Codeteile bei uns alle auf Script umgestellt und arbeiten verstärkt mit Listen, die die geänderten Dokumente vermerken, um die Anzahl der Ansichtszugriffe - vor allem bei ständigen Änderungen niedrig zu halten.
Dies ist zwar ein einmalig etwas größerer Aufwand, dies wird jedoch mit Stabilität und Geschwindigkeit belohnt - bei Fremdanwendungen sollte sich um so was natürlich der Hersteller kümmern.

Gruß

André

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 249
  • Geschlecht: Männlich
Re: Probleme @DbLookUp im Agent
« Antwort #7 am: 26.09.15 - 10:27:40 »
Ich würde mal behaupten, dass beim Formel Agenten das Dokument erst NACH dem Abschluss des Agenten gespeichert wird und somit vorher noch die alte Anzahl geliefert wird.
-Werner

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Probleme @DbLookUp im Agent
« Antwort #8 am: 26.09.15 - 22:48:14 »
Nein.
Vor der Anwendung auf die ausgewählten (oder auch alle!) Dokumente ermittelt die Formula-Engine, was der Agent zu tun hat. Dazu gehört das @dbLookup, das damit immer den initialen Zustand hat. Anschliessend werden die "gesammelten Erkenntnisse" auf die betroffenen Dokumente zur Anwendung gebracht. Keine Anweisung des Agents mit einem @dbLookup bezieht sich zudem auf eine Anweisung, die die Änderung der Dokumente betrifft.

Bernhard

Jürgen Schomann

  • Gast
Re: Probleme @DbLookUp im Agent
« Antwort #9 am: 11.10.15 - 12:51:18 »
Dass die Formela-Engine vorher das DbLookUp durchführt kann auch nicht sein. Bei mehreren Versuchen wurde manchmal doch der aktuelle Wert ermittelt. Außerdem könnten die Angaben  für das DbLookUp ja auch erst dynamisch anhand des aktuellen Dokuments ermittelt werden. Z. B. welche Ansicht oder welches Feld/welche Spalte zurückgegeben werden sollen. Dann kann im Vorfeld ja auch nichts  ermittelt werden. Ich glaube, dass es eher ein Zeitproblem ist.

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz