Autor Thema: [Gelöst] Ansicht aktualisiert sich nicht.  (Gelesen 4669 mal)

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
[Gelöst] Ansicht aktualisiert sich nicht.
« am: 07.12.10 - 12:20:34 »
Hallo,

ich habe diesmal ein Problem mit einer Mail-In Datenbank,
in dieser DB gibt es eine Ansicht, mit folgender Selection-Formel
Code
SELECT Form="Memo" & @IsAvailable(PostedDate) & !@IsTime($Deleted) & !@IsAvailable($autoMailStatus)
($deleted un $automailStatus sind Felder in der Anwendung)

Die Ansicht zeigt mir alle per Mail-In eingegangen Dokumente an.
ein periodischer Agent läuft nun regelmäßig in der DB und arbeitet alle diese Dokumente ein. (in dem er u.A. die Form ändert)

Nun kommt es hin und wieder vor, dass die Ansicht den Index nicht aktualisiert. Das heißt, es werden Dokumente angezeigt, die eigentlich nicht in der Ansicht sein sollten. In der Property-Box sehe ich auch, dass die Form NICHT mehr "Memo" ist, sondern was ganz was anderes.

Ein F9 hilft nicht. Ein STRG-SHIFT-F9 auch nicht.
ein SHIFT-F9 aktualisiert hingegen die Ansicht und die Dokumente verschwinden.

Mir kommt es so vor, als ob die Ansicht nicht "weiß" dass sie die betreffenden Dokumente enthält und somit den Index nicht aktualisiert.
Ich hab noch nicht genau heraus gefunden, wie ich den Fehler reproduzieren kann, aber er tritt scheinbar immer dann auf, wenn mein
Mailin-Agent das erste Dokument überspringt und nur das zweite einarbeitet.

Hat jemand einen Tipp, nach was ich noch suchen könnte oder hatte jemand schon mal ein ähnliches Problem?
Hab die Ansicht schon von Grund auf neu erstellt und das Problem tritt immer wieder mal auf.
Liegt es ggf daran, dass die Dokumente vom Router in die DB geschrieben wurden?

Gruß
Roland

« Letzte Änderung: 08.12.10 - 09:44:32 von pram »
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
Re: Ansicht aktualisiert sich nicht.
« Antwort #1 am: 07.12.10 - 12:33:20 »
Mach im Agent ein view.refresh
David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Ansicht aktualisiert sich nicht.
« Antwort #2 am: 07.12.10 - 12:57:52 »
... hab ich leider schon probiert. Das hilft leider nichts.
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
Re: Ansicht aktualisiert sich nicht.
« Antwort #3 am: 07.12.10 - 13:02:24 »
Hallo Roland,

poste doch mal den Code
David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Ansicht aktualisiert sich nicht.
« Antwort #4 am: 07.12.10 - 22:28:13 »
Das mit dem Code ist nicht so einfach, da dieser ziemlich umfangreich ist und ich habe es noch nicht geschafft, das Problem auf einen einfachten Testfall runter zu brechen.

Der Algorithmus ist jedenfalls wie Folgt:

Es gibt 2 Ansichten, eine Lookup-Ansicht und eine zur Anzeige.

- Die Lookup-Ansicht enthält alle Dokumente mit Form="Memo" und Status="" (bei denen kein Fehler aufgetreten sind, s.u)
- Für jedes doc rufe ich die Methode "process(doc)" auf.
- Liefert "process" einen Fehlercode so wird ein Flag im Dokument gesetzt (Status="Fehler"), damit es aus der Lookup-Ansicht heraus fällt.

Die Anzeige-Ansicht hingegen zeigt alle Memos an, also auch fehlerhafte

Die Methode "process" macht im Wesentlichen folgendes:
- es werden mehrere Definitionsdokumente gesucht, auf denen die Mail "passt". Wenn eines gefunden wird, dann wird die Mail ein Antwortdokument zu dem Definitionsdokument.
-es wird die Form geändert. (das darf man doch normalerweise ???)
- Dok wird gespeichert  (*1)

Das Problem ist nun, dass in der Anzeige-Ansicht vereinzelt noch Dokumente angezeigt werden, die eigentlich nicht mehr da sein sollten weil sie eine Form <> "Memo" haben. In der Property box sehe ich auch diese Form. Leider ist das Verhalten ziemlich nichtdeterministisch.

- Ich habe mir einen Testagenten geschrieben, der mir ein vernünftiges setup erzeugt, damit ich immer die gleichen Ausgangsbedingungen habe. (Es werden ~30 identische Mail-In Dokumente erzeugt.)

- in der Anzeigeansicht werden diese 30 Dokumente angezeigt
- Anschließend läuft der Mailin-Import Agent (Algoritmus von oben)
- Nach dem Lauf sollte die Ansicht leer sein, ist sie aber meist nicht  :(
- Der Effekt tritt scheinbar auch nur dann auf, wenn die Ansicht im Client offen ist, während am Server der Agent läuft
- Die Anzahl der "Geisterdokumente" variiert sogar von Lauf zu Lauf

*1) - Baue ich eine simple "Delay" schleife (for x = 1 to 10000) vor dem Speichern des Doks ein, erhöht sich die Wahrscheinlichkeit, das Dokumente "hängen" bleiben.

Meine Vermutung ist, dass die Anzeige-View es nicht mit bekommt, dass sich von dem Dokument die Form geändert hat und deshalb ein partielles Update des Indexes erforderlich wäre.
Schuld ist vielleicht "Optimize document table map":
Zitat
This feature has not changed for the past few releases of Lotus Notes/Domino. This feature is designed to speed up view indexing for applications with structures that resemble the Domino Directory. (In other words, they contain many documents that use one form and a small number of documents using a different form. Think of Person documents versus Server documents in the Domino Directory.)

The idea is that, instead of checking every document note to see whether or not it should be included in a view index, we make two passes. The first pass merely checks to see if the correct form name is associated with that document. The second pass, if needed, checks for the various other conditions that must be met to include this document note in the view index.
Scheinbar rechnet Notes nicht damit, dass sich von einem Dokument die Form ändert.

Ich hab noch ein paar Workaround-Ideen für morgen in diese Richtung...

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline atbits

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 708
  • Geschlecht: Männlich
  • sei Du selbst die Veränderung, die Du Dir wünschst
    • atBits
Re: Ansicht aktualisiert sich nicht.
« Antwort #5 am: 07.12.10 - 22:38:48 »
Versuche mal nach jedm doc.save ein view.refesh zu machen, normalerweise hilft das.
Dann mußt Du dir natürlich nicht immer dasnächste Dokument in drr View holen sondern immer das erste!
David Schiffer
================================
atBits GmbH & Co. KG - https://atbits.de
im Einsatz: Lotus Domino 8.5, 9, 10

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Ansicht aktualisiert sich nicht.
« Antwort #6 am: 07.12.10 - 23:13:34 »
Ja, das hab ich schon gemerkt, dass ein view.getNextDocument(...) das übernächste nimmt, wenn das aktuell bearbeitete aus der Ansicht raus fällt.  ;)

Den Tipp mit dem Refresh beim Save werd ich auf jeden Fall nochmal probieren, ich seh allerdings da ein kleines Designproblem. Ich habe Backend und UI getrennt. Deshalb auch die Lookup und die Anzeigeansicht.
Nun kann ich zwar auf der Anzeigeansicht einen Refresh machen, aber ich kann nicht garantieren, dass sich jemand eine weitere Ansicht bastelt in der die Dokumente angezeigt werden sollen die dann nicht aktualisiert wird (ok dann hat er halt pech gehabt :D)

Hab noch folgendes gefunden: http://www-10.lotus.com/ldd/nd6forum.nsf/869c7412fe5d56b7852569fa007826e3/e859aae5c4106e07852573950001d822?OpenDocument

Werd morgen mal aus SELECT Form = "Memo" folgendes machen:

SELECT @text(Form) = "Memo"
oder
SELECT Form + "dummy" = "Memodummy"

Evtl kann man da die Optimierung austricksen (oder ich schalte sie ganz ab)

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
[Gelöst] Re: Ansicht aktualisiert sich nicht.
« Antwort #7 am: 08.12.10 - 09:43:38 »
Also: ich hab einen Workaround gefunden:

Scheinbar kommt Notes nicht klar, wenn folgende Bedinungen zutreffen:
- bei Dokumenten die FORM ändern
- eine Ansicht die diese Dokumente anzeigt im Client offen ist
- die Option "Optimize document Table map" aktiv ist

Es kann dann passieren, dass nichtdeterministisch einzelne Dokumente in der Ansicht "hängen" bleiben.
Irgendwelche Refreshes (vor und nach dem Speichern) bringen leider nichts
Nun möchte ich nicht für die ganze DB "Optimize Table Map" abschalten.

Ändert man jedoch die Select-Formel auf:
Code
SELECT Form + "dummy" = "Memodummy" ...
kann Notes diese Ansicht nicht mehr optimieren und der Index aktualisiert sich dann korrekt.  ;D

Gruß
Roland
 
« Letzte Änderung: 08.12.10 - 09:45:11 von pram »
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz