Domino 9 und frühere Versionen > ND7: Administration & Userprobleme

Welche Funktion hat der Agent (MailPolicy) in der Maildatenbank

<< < (5/7) > >>

m3:
IMHO ist der Absatz mit der "small database" Bestandteil des Disclaimers. Den satz bekommen wir bei jedem PMR zurück.
Na mal schaun, unser Auftraggeber hat sich jetzt den Premium Support geleistet, ev. wirds damit besser.

eknori (retired):
@Martin:

Ich habe in grauer Vorzeit mal gelernt, den fraglichen Code mit "Testdaten" im Kopf zu debuggen, also quasi Zeile für Zeile vor meinem geistigen Auge ablaufen zu lassen und zu sehen, was passiert.
Das ist in diesem Fall bei der Funktion recht einfach, weil es nur die Bedingung gibt: "Feld vorhanden, oder Feld nicht vorhanden".
Wenn die Funktion ein Array zurückliefern soll, dann muss es auch irgendwo gefüllt sein. Das ist insbesondere dann hilfreich, wenn ich nach dem Funktionsaufruf mit dem Rückgabewert irgend etwas machen will.
Wenn das Array aber nicht initialisiert wurde, dann kommt es zu dem Fehler.

Klar, ich kann jetzt hingehen und eine Datenbank erstellen in die ich die Funktion reinkopiere. Aber was soll das ?

Das löst in keiner Weise das eigentliche Problem.

Der Fehler ist lediglich das Sichtbare Ergebnis eines fehlers, der weit vor dem eigentlichen Funktionsaufruf aufgetreten ist.

Aufgrund eines weiteren PMR hatte ich ja dann auch die folgenden Informationen


--- Zitat ---Everytime adminp runs on the Domino server, the calendar profile of the
users mailfiles gets updated with three fields derived from the policie
set up on the server. These fields ($FL_2, $FL_3, $MPUP_N) gets deleted
from the $CalendarProfile when the user opens their mailfile.     
--- Ende Zitat ---

Das ist ja schon mall was, womit man arbeiten kann.  Eigentlich sollen die Felder ständig neu befüllt und nach Ausführung des Agenten wieder gelösht werden.

Problem bei mir war, daß aus welchem Grund auch immer das Feld $MPUP_N nicht aus dem CalendarProfile gelöscht wird. Das ist aber eine  logische Konsequenz. Denn so, wie der Agent und die damit zusammenhängenden Funktionen gestrickt sind, wird der Code, der die Flags löscht, nie angesprungen.

Also tritt der Fehler immer und immer wieder auf.

Nachdem ich das Feld dann manuell gelöscht hatte, konnte ich prima beobachten, daß der Befehl tell admino process mailpolicy diese Feld wieder im CalendarProfile erstellt hat, nicht aber eines der Felder $FL_2 oder $FL3, was wiederum zur Folge hatte, daß das Array uninitialized blieb und der Fehler ins Log geschrieben wurde. Übrig blieb dann nur wieder das Feld $MPUP_N mit den bekannten Folgen.

Nun habe ich mir das entsprechende mailpolicy doc im DominoDirectory vorgenommen. Hier hatte ich lediglich einen Disclaimertext zu Testzwecken eingefügt; alle anderen Einstellungen habe ich so belassen, wie sie bei der Neuanlage aufgrund der Vorgabewerte in den Feldern erstellt werden.

Ich weiss auch, daß ich bei Erstellung des Docs den Disclaimertext mehrfach geändert habe und das Doc dadurch auch mehrfach gespeichert wurde. ( das nur am Rande )
Ich have dann einmal versuchsweise eines der Felder, die im Standard auf "Don't Change" stehen auf "Always" gesetzt und das Document gespeichert, ohne sonst an den übrigen Werten irgend etwas zu verändern.

Dann wieder tell adminp ... und CalProf VOR dem Öffnen der MailDatei mit ScanEZ angesehen. Siehe da, der AdminP hat das Feld $FL_2 erstellt und befüllt.

So wie der Agent programmiert ist, sollte niun alles sauber laufen. Und das tut es auch!

Die Felder $MPUP_N und $FL_2 werden gelöscht; ein Zeichen dafür, daß der Code bis ( fast ) zum Ende des Agenten sauber durchgelaufen ist.  Ab dann lief der Agent bei jedem Start der Datenbank sauber durch.

@Domino770:

Würde mich aber jetzt doch einmall interessiern, warum der Client bei dir abstürzt. Da muss aber noch einiges mehr passieren, als ein nicht initialisiertes Array.

domino770:
Ich habe neuerdings folgendes festgestellt.

Der Client stürzt nicht überall ab, sondern wenn man in anderen Anwendungen auch arbeitet.
Bei näherer Untersuchung habe ich dann folgendes festgestellt.

Wir haben eine Anwendung in der alle User arbeiten. Wenn die Maildatenbank der User nicht geöffnet ist, laufen alle Programmierten Aktions oder Programme normal.
1. test ich öffne die Maildatenbank und führe eine Aktion mit uidoc.refresh aus dauert es Stundenlang. (1. Test: nach 30 Minuten habe ich den Client abgeschossen). Der user hat dann nur noch die Sanduhr.

In der Noteslog steht dann als letztes die folgende Fehler-Meldung

 Agent '(MailPolicy)|MailPolicy' - Fehler: Attempt to access uninitialized dynamic array

2. Testlauf: genau Dasselbe
3. Testlauf genau Dasselbe
4. Testlauf es funktioniert :P :o

so jetzt hänge ich hier und starre die Wandtapete an und warte auf die Männer mit den weissen Kitteln ???
oder wann es das nächste mal nicht funktioniert.

eknori (retired):

--- Zitat ---Der Client stürzt nicht überall ab, sondern wenn man in anderen Anwendungen auch arbeitet.
--- Ende Zitat ---

Ich denke, der Client stürzt ab, wenn du die Maildatenbank öffnest ??

Und plötzlich kommt noch eine andere Anwendungs ins Spiel ...

Ganz toll ... wirklich, ganz toll ...  :P :P

domino770:
ja das ist es ja..



die ersten male war es auch so, dass der Client beim Öffnen der Maildatenbanken abgestürzt ist, wenn der Agent gelaufen ist, obwohl keine Andere Anwendung geöffnet hat :-:

jetzt habe ich gedacht Probierst mal einfach aus, wie sich das Auswirkt auf wenn ich in einer anderen Anwendung arbeite und die Maildatenbank einfach offen lasse..

Der Effekt ist eigentlich derselbe, nur unsere User denken, das liegt an den anderen Anwendungen. Habe eben noch nachgeforscht. Egal was die User machen, wenn es abstürzen will, stürzt es ab, auch wenn Sie eine Mail in der Maildatenbank öffnen wollen.

Das ist es ja warum ich die Wandtapete anschaue...

Ich werde jetzt einfach den Code ändern und damit hat sich das Problem.

in folgender weise...

DefineWorkType = ""
      counter = 0
      Redim Preserve WorkItemNames(Counter) As String
      WorkItemNames(Counter) = ""
      
      If Not (Me.m_CalProfile Is Nothing) Then      
         If Me.m_CalProfile.HasItem("$FL_2") Then
            Redim Preserve WorkItemNames(Counter) As String
            WorkItemNames(Counter) =  "$FL_2"
            Counter = Counter + 1
         End If
         
         If Me.m_CalProfile.HasItem("$FL_3") Then
            Redim Preserve WorkItemNames(Counter) As String
            WorkItemNames(Counter) = "$FL_3"
            Counter = Counter + 1
         End If
      End If
      
      DefineWorkType = WorkItemNames



damit ist das array inistialiesiert und es dürft keine Fehlermeldung kommen. Ich werde es die nächsten Tage bei den Usern beobachten. Ob das die Lösung war....

HERZLICHEN DANK FÜR EURE MÜHEN!!!!!

Und den Supportvertrag mit IBM werden wir hoffenlich auflösen. ... >:(

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln