Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Bert am 16.01.08 - 11:55:48

Titel: Agent Cacheproblem
Beitrag von: Bert am 16.01.08 - 11:55:48
Hallo,
ich habe folgendes Problem mit Lotus Notes 6.5
Ich starte aus einer Ansicht einen Agenten, der das aktuelle Dokumente auf Feldinhalt etc. überprüft und bei fehlerhaftem Inhalt einen Fehler ausgibt.
Nach einer Änderung des Dokumentes und nochmalogem Start des Agenten bleibt der Cach-Inhalt im Agenten immer noch gleich, d.h. er greift nicht auf das geänderte Dokument zurück. Erst wenn ich den Agent auf einem anderem Dokument starte oder die DB neu öffne, wird der Cache aktualisiert.

Wie kann ich dem Agenten "beibringen" auf das aktuelle Dok zuzugreifen.
(Ich habe bereits den Agenten als Aktion oder auf als Agenten gestarten - kein Unterschied)

Danke
Bert
Titel: Re: Agent Cacheproblem
Beitrag von: ata am 16.01.08 - 12:07:09
... wie ist der Agent getriggert?
... verwendest du einfache Aktionen oder wie sieht der Code des Agenten aus?

Toni
Titel: Re: Agent Cacheproblem
Beitrag von: Bert am 16.01.08 - 12:17:06
Hallo ata,

der Agent steht unter gemeinsame Aktionen und per Menue aus der Asicht aufgerufen.
Aufgerufen wird der Agent:

Sub Click(Source As Button)
   Dim ses As New notessession
   Dim db As notesdatabase
   Dim col As notesdocumentcollection
   Set db = ses.currentdatabase
   Set col = db.unprocesseddocuments
   Set doc = col.getfirstdocument
   ....
                (Untersuchung z.B. der  Felder "PB_info")
                If doc.PB_info(0)<>"" Or doc.MBV_link<>"" Then
      test(23)="OK"
                else
                                test(23)="Fehler"
   End If

es kommt immer zum Fehler


Gruß Bert
Titel: Re: Agent Cacheproblem
Beitrag von: ata am 16.01.08 - 12:20:49
... bei mir gibt es keine Shared Actions - die meide ich wie der Teufel das Weihwasser  ;D - probier den Code in einer direkten Masken-Aktion - könnte sein, daß dann dein Cache-Problem gelöst ist...

Toni
Titel: Re: Agent Cacheproblem
Beitrag von: koehlerbv am 16.01.08 - 12:24:15
Ist das
doc.MBV_link<>""
aus dem Originalcode? Denn dies würde zu einem Laufzeitfehler führen.

Bernhard
Titel: Re: Agent Cacheproblem
Beitrag von: Bert am 16.01.08 - 12:31:40
Hallo Ata,

ich habe den kompletten Script in einen "normalen" Agenten gespeichert und rufe diesen aus der Ansicht mit @Command ([ToolsRunMacro]; "Doc_Freigabe") auf.
Dennoch habe ich das gleiche Problem.
Wenn ich den Inhalt des aktuellen Dokumentes anzeigen lasse - über Eigenschaften - sehe ich den korrekten Wert, der Agent nimmt dennoch irgendwelche Cache-Daten.

Danke
Bert
Titel: Re: Agent Cacheproblem
Beitrag von: Bert am 16.01.08 - 12:38:44
Hallo Bernhard,

der script

 doc.MBV_link<>""

führt bei mir zu keinem Fehler.
Bei MBV_Link handelt es sich um ein RT Feld. Ich überprüfe lediglich an dieser Stelle, ob in den Feld (Text, oder Link) steht.

Gruß Bert
Titel: Re: Agent Cacheproblem
Beitrag von: ata am 16.01.08 - 13:05:16
... auf Felder greift man aber als Array zu

If Cstr( doc.Feldname(0) ) <> "" Then ...

Toni
Titel: Re: Agent Cacheproblem
Beitrag von: Bert am 16.01.08 - 13:16:41
Hallo Toni,

danke , werde ich berücksichtigen.
Aber den Fehler beseitigt es nicht!
Ich habe übrigend mein Notes neu gestartet - und siehe da- der Agent funktioniert mehrfach richtig. Dann wieder nicht.
Jetzt wird das Problem zu einem echten Problem.
Mal cahed es die Feldinhalte mal nicht !
Da finde mal einer den Fehler

Gruß Bert
Titel: Re: Agent Cacheproblem
Beitrag von: ata am 16.01.08 - 13:23:04
... das sieht etwas obskur aus.  ???

Ich hatte durchaus auch schon solche Erscheinungen in Notes, die auf versteckte Fehler hindeuten. Mach mal einen Recompile in der Datenbank und schu mal, ob es Fehler gibt - bzw. wie sie sich dann verhält...  :-:

Toni
Titel: Re: Agent Cacheproblem
Beitrag von: Bert am 16.01.08 - 13:42:37
Hallo Toni,
auch da brachte bisher keinen Erfolg:

"Der komplette Code wurde erfolgreich kompiliert"

-geht -  geht nicht --
--ratlos-

Kann ich irgendwie beim Aufruf des Agenten den Cache beeinflussen ? , oder gar löschen ?

Gruß Bert
Titel: Re: Agent Cacheproblem
Beitrag von: Driri am 16.01.08 - 13:50:41
Mit welchem Client wurde rekompiliert ? Es gab in einer Version des 6.5er Designers einen Bug, so daß der Code eben nicht neu kompiliert wurde (glaub 6.5.5 ?).
Titel: Re: Agent Cacheproblem
Beitrag von: m3 am 16.01.08 - 13:54:12
1) Läuft der Agent durch oder bricht er ab?
2) Hast Du Fehlerbehandlung (On Error ...) drinnen?
3) Welches Ziel hat der Agent (Alle ausgewählten Dokumente, Alle Dokumente in der View, ...)
4) Schaust Du ev. in einer anderen Replik (z.B. am Server) nach, obwohl der Agent am Client läuft und Du siehst die Änderungen nicht, weil die beiden DBs nicht miteinander repliziert haben?
5) Was machst Du mit dem doc? Änderst Du da auch Werte und speicherst es dann? Wenn ja, poste doch etwas mehr Code, damit wir nicht im Trüben fischen müssen.





Titel: Re: Agent Cacheproblem
Beitrag von: ata am 16.01.08 - 13:58:27
Zitat
Ich habe übrigend mein Notes neu gestartet - und siehe da- der Agent funktioniert mehrfach richtig. Dann wieder nicht.

... war dazwischen noch was anderes?

Toni
Titel: Re: Agent Cacheproblem
Beitrag von: koehlerbv am 16.01.08 - 14:04:25
Der Fehler muss im Agent liegen, da Dokumente (ausser ProfileDocs) gar nicht gecached werden.

Bernhard
Titel: Re: Agent Cacheproblem
Beitrag von: ata am 16.01.08 - 14:08:04
... Profildokumente scheiden aus, da die Collection mit Unprocessed gezogen wird. Daher denke ich auch, daß in dem Agent Dinge passieren, die irgendwas anstellen...

Toni
Titel: Re: Agent Cacheproblem
Beitrag von: Andrew Harder am 16.01.08 - 14:23:19
Ändere doch bitte einmal die Abfrage
Code
If doc.PB_info(0)<>"" Or doc.MBV_link<>"" Then
in
Code
Dim sPB_info as string
Dim sMBV_link as string

...

sPB_info = doc.GetFirstItem( "PB_info" ).text
sMBV_link = doc.GetFirstItem( "MBV_link" ).text

If not ( len( sPB_info ) = 0 or len( sMBV_link ) = 0 ) then

Vorteil: Du siehst im Debugger gleich den Textinhalt der Felder.

Ansonsten zusätzlich zu Martins Post: Was passiert alles, bevor Du Dir das nächste Dokument holst (Codezeilen).
Titel: Re: Agent Cacheproblem
Beitrag von: Bert am 16.01.08 - 14:58:42
Hallo,
erst einmal Danke für die ganzen Hinweise,
ich werde diese gleich in meinen Agenten einbauen.
Hier erst einmal ein Auszug aus dem Agenten:

                Dim dc As NotesDocumentCollection
   Dim doc As NotesDocument
   Dim ses As New notessession
   Dim db As notesdatabase
   Dim col As notesdocumentcollection
   Set db = ses.currentdatabase
   Set col = db.unprocesseddocuments
   Set doc = col.getfirstdocument
   
   Dim Feld(4) As String
   Dim Feldinfo(4) As String
   Dim test(10) As Variant
   Dim ausdruck (14) As Variant
   Dim item As notesrichtextitem   
   Dim rtitem As Variant
   On Error Resume Next
   a=""
   f=0
   
   'RTFeldgrösse berechenen
   Feld(0)="SachLL" 'RTFELDER
   Feld(1)="PCode"
   Feld(2)="PGTest"
   Feld(3)="L_Ver_PIInst"
   Feld(4)="L_Ver_PIInfo"
   
   ' sub zur Berechnung der Feldgrösse !
                ' Rückgabe String wenn Feldgröße erreicht (Dokumentationsmenge)
   For r=0 To 4
     FG= feldgrösse(Feld(r))
     If FG<>"" Then FG=Feldinfo(r)+Chr$(10)
     fehler=fehler+FG
   Next
   
   If fehler<>"" Then
    ausgabe=Chr$(10)+"Bei folgenden 'Dokumentationsreitern' wurde nicht die geforderte
                                  Dokumentationsmenge angegeben:"+Chr$(10)+Fehler+_
      "Bitte mehr dokumentieren!"+Chr$(10)+Chr$(10)+Chr$(10)
      f=f+1
   End If
   
   '______________________
   test(1)=doc.PRGNAME(0)
   test(2)=doc.Aktenführer(0)
   test(3)=doc.verantwMA(0)
   test(4)=doc.PRGKategorie(0)
   test(5)=doc.PRGKlasse(0)
   test(6)=doc.Lizenzart(0)
   
   If Cstr(doc.PQ_info(0))<>"" Or Cstr(doc.MAQ_link(0))<>"" Then
      test(7)="OK"
   End If

   If Cstr(doc.PQ_info(0))<>"" Or Cstr(doc.MAK_link(0))<>"" Then
      test(8)="OK"
   End If

   If Cstr(doc.PB_info(0))<>"" Or Cstr(doc.MBV_link(0))<>"" Then
      test(9)="OK"
   End If

   If Cstr(doc.P_info(0))<>"" Or Cstr(doc.PPV_link(0))<>"" Then
      test(10)="OK"
   End If
   
   ausdruck(1) ="Fehlerhinweise..."
   ausdruck(2) ="Fehlerhinweise..."
   ausdruck(3) ="Fehlerhinweise..."
   ......
   
   
   
   For x = 1 To 10
     If Trim(test(x))="" Then
       f=f+1         
       ausgabe = ausgabe + ausdruck(x)+Chr$(10)
     End If
   Next
   
   
       If f>0 Then
          If F=1 And Fehler<>"" Then
    meldung="Es wurde " + Str(f) + "   Fehler  beim Check gefunden ! - Freigabe möglich "+_
                                   Chr$(10)+"Bitte prüfen Sie den entsprechenden Inhalt !"+Chr$(10)+_
                                   Chr$(10)+ausgabe
     Messagebox  meldung ,"16", "Ergebnis des Checks"
           Else
     meldung="Es wurden " + Str(f) + "   Fehler  beim Ceck gefunden ! - Eine Freigabe "+_
                                  "nicht möglich.   " + Chr$(10)+Chr$(10)+ausgabe
     Messagebox  meldung ,"16", "Ergebnis des Checks:"
         Exit Sub
           End If
      End If


Ich denke mir, wenn der Fehler in dem Agenten selbst liegt, kann es nur in der Dokumentenauswahl liegen, oder?


Gruß
Bert

Titel: Re: Agent Cacheproblem
Beitrag von: Bert am 16.01.08 - 15:08:35
Hallo Driri,
es haldelt sich nin der Tat um die Version 6.5.5. Ist dort ein BUG im System.
Wird dieses erst mit der 7er Version beseitigt. Wäre echt schlecht, da unser ganzes Haus mit
Ver 6. arbeitet.

Hallo m3,
also:
- der Agent läuft durch - auch mit Debugger kein (erkennbarer) Fehler
- Agent läuft für ausgewählte Dokumente
- mit einer Replik kann es nicht zu tun haben, da ich die DB schon von sämtlichen Repliken
  entkoppelt habe (vollkommen separate DB)
- Mit dem Agent will ich keine Dokumente ändern, sondern einfach nur deren Inhalte checken!
  Die Bearbeitung soll dann im Dokument erfolgen.
  Erst wenn der Check erfolgreich war, erfolgt eine Weiterarbeitung - Freigabe etc...-

Gruß
Bert
Titel: Re: Agent Cacheproblem
Beitrag von: koehlerbv am 16.01.08 - 15:16:47
Wegen Recompile guckst Du Funktioniert mit 6.5.6 "Werkzeuge-Lotus Sript vollständig neu kompilieren" ? (http://atnotes.de/index.php?topic=39588.0)

Bernhard
Titel: Re: Agent Cacheproblem
Beitrag von: ata am 16.01.08 - 15:18:53
... mir fallen einige Dinge auf:


... da scheinen einige Leichen begraben...

Toni
Titel: Re: Agent Cacheproblem
Beitrag von: ata am 16.01.08 - 15:23:11
... und ...

Zitat
On Error Resume Next

... ist hier sicherlich kein ausreichendes Fehlerhandling...

Toni
Titel: Re: Agent Cacheproblem
Beitrag von: m3 am 16.01.08 - 16:04:36
Hallo,
erst einmal Danke für die ganzen Hinweise,
ich werde diese gleich in meinen Agenten einbauen.
Hier erst einmal ein Auszug aus dem Agenten:
Ich seh kein doc.Save(....)
Titel: Re: Agent Cacheproblem
Beitrag von: Andrew Harder am 16.01.08 - 16:45:38
Hallo,
erst einmal Danke für die ganzen Hinweise,
ich werde diese gleich in meinen Agenten einbauen.
Hier erst einmal ein Auszug aus dem Agenten:
Ich seh kein doc.Save(....)

- Mit dem Agent will ich keine Dokumente ändern, sondern einfach nur deren Inhalte checken!
  Die Bearbeitung soll dann im Dokument erfolgen.
  Erst wenn der Check erfolgreich war, erfolgt eine Weiterarbeitung - Freigabe etc...-

Also ich habe es jetzt so verstanden:
Es gibt in einer Ansicht einen Aktionsknopf, welcher per Formelsprache einen Agenten aufruft.
Dieser Agent überprüft nun die markierten Dokumente auf gewisse Freigabekritierien  und warnt per Messagebox, falls ein Dokument diesen nicht entspricht.
Er ändert also kein Feld sondern sagt dem Aufrufenden nur, ob das markierte Dokument freigegeben werden kann.

Bert ändert nun ein solches Dokument, welches den Kriterien nicht entsprach und speichert es.
Dannach ruft er den Agenten nochmals auf (eingestellt ist: markierte Dokumente), doch der Agent meckert das gleiche Dokument nochmals an.

Wenn ich das so richtig verstanden habe, dann würde ich das anderst lösen, doch viele Wege führen bekanntlich nach Rom.

Meine Frage dazu:
Ich habe ja weiter oben geschrieben, das man sich die beiden Felder besser in Variablen zum debuggen reinholen sollte.
Steht in diesen Variablen im Debugger dann wirklich ein falscher Wert drinne und wenn ja, ist es wirklich der alte Wert?
Merke Dir für alle Fälle mal die DocumentUNID, nicht das das ein anderes Dokument ist (möglicherweise indem man eines mehrmals kopierte).
Titel: Re: Agent Cacheproblem
Beitrag von: Bert am 16.01.08 - 19:40:15
Hallo Andy,

besser hätte ich es nicht beschreiben können.
Genau so funktioniert - besser funktioniert es manchmal nicht !

Für heute muß ich leider weg ich werde morgen den Agenten mit "allen guten Anregungen" umschreiben und dann ausgiebig testen.
Ich melde mich morgen.

Herzlich Dank
Bert
Titel: Re: Agent Cacheproblem
Beitrag von: Bert am 17.01.08 - 12:26:05
Hallo alle miteinander,

ich habe - glaube ich - den Fehler bei Notes gefunden.
Ich hätte gleich auf Toni hören sollen.
Es lag an den "gemeinsamen Aktionen".
Diese werde ich in Zukunft ab sofort meiden (Toni: wie der Teufel das Weihwasser..)

Ich habe folgendes festgestellt.

1. Ich habe den Script in einen "ordentlichen" Agenten eingestellt und es erchienen bei Option declare 2 Definitionsfehler, die allerdings nicht den Cache-Fehler hervorgebracht haben dürften, ABER..

2. diese Fehler wurden in der gemeinsamen Aktion NICHT gefunden, denn...

3. Der debugger findet bei einer gemeinsamen Aktion (LN Vers. 6.5.4/5) überhaupt keinen Fehler - man kann schreiben was man will - alles ohne Fehler ! -, daher..

4. Ich nehme nun an, da der debugger schon den schript nicht 'sauber' übersetzen kann, wird auch Lotus Notes selbst die gemeinsamen Aktion nicht sauber abarbeiten.

-> Ich werden von nun an schön per AGENT schreiben und max. mit ToolsRunMacro die gemeinsamen Aktionen aufrufen.

Meine gem.Aktionen werde ich nun alle umsetzen - uff.Arbeit!

Ich hoffe das wars.

Ich danke Euch allen.
MFG
Bert
Titel: Re: Agent Cacheproblem
Beitrag von: m3 am 17.01.08 - 12:59:57
Dazu noch ein Tipp: Ich setze den Code für LS-Agenten immer in eine Scriptlibrary, im Agent ruf ich dann immer nur eine Funktion auf.

So kann man nicht nur die von Dir beschriebenen Probleme umgehen, sondern muss den Agent nicht auch jedes mal neu signieren, falls er in der Prod.-Umgebung mit einer anderen ID signiert werden muss.