Inbox Refresh über lokalen Agent ohne Domino Server

  • Hallo,


    wie bei meiner Vorstellung bereits angedroht hier die Schilderung meines Problems.


    Es existiert bereits ein ähnlicher Thread, der aber mein Problem nicht so richtig beschreibt. Daher hier mein Thread.


    Ich möchte meinen alten Lotus Notes Client 6.5.1 auf die Version 8.5.2 updaten. Dazu habe ich erstmal den neuen
    Client in einer VMWare installiert, um damit zunächst etwas rumzuspielen. Fixpack 4 ist installiert, der Client läuft
    unter WinXP SP3.


    Ich habe KEINEN Dominoserver. Der Client soll wie schon der alte als reiner POP3/SMTP-Client laufen. Nun habe
    ich festgestellt, dass der neue Client den Eingang einer neuen Mail nur im Systray und in der Statusleiste (You have
    1 new Mail) anzeigt. In der Inbox taucht die Mail erst nach Drücken von F9, dem Refresh Button, einem Ansichts-
    wechsel usw. auf. Alle relevanten Häkchen sind gesetzt (Check for new mail every "1" minutes, Refresh Inbox automatically).


    Der Client ist über ein Transform als Multiuser Client installiert, der Ordner Data liegt also im Profil des Users, nicht
    im Programmordner. Das haben wir bei Bayer auch so gemacht und da funtz alles ohne Probleme, nur halt in einer
    Umgebung mit Dominoservern.


    Dazu gibt es im Web diverse Beiträge, wie das Problem zu beheben sei, die mir aber alle nicht weiterhelfen konnten.
    Das Problem tritt in vielen Versionen in den verschiedensten Variationen auf und immer wird seitens IBM versprochen,
    dass es in der nächsten Version oder mit dem nächsten Fixpack behoben wird.


    Ich habe es sowohl mit meinen alten Daten aus dem 6er Client, als auch mit einem komplett neuen Profil versucht,
    aber ohne Erfolg. Auch die ganze Löscherei von CACHE.NDK usw., Schablonenwechsel etc. hat nichts gebracht.


    Möglicherweise ist das Problem ja sogar behoben und tritt nicht mehr auf, solange der Client von einem Dominoserver
    "betreut" wird. Dies ist aber in meiner Umgebung, wie bereits erwähnt, nicht der Fall.


    In der Notes Hilfe habe ich unter "Reading mail and checking for new mail" folgendes Zitat gefunden:

    Zitat

    ...Open your mail, if necessary, and then click the Refresh button above the message list or press F9 to update the Inbox with new messages.

    Das könnte man ja so verstehen, dass das beschriebene Verhalten normal ist, also works as designed wie man so schön sagt.
    Kann das jemand bestätigen?


    Dann hab ich mir gedacht, dass man das vielleicht über einen Agent lösen kann. Wollte mich schon immer mal mit LotusScript
    usw. beschäftigen, jetzt habe ich endlich einen Grund dazu.


    Also habe ich mal etwas in der Designer-Hilfe und im Web gestöbert und das hat mich zu folgendem kleinen Codeschnipsel geführt:


    Code
    Sub Initialize
    	Dim ws As New NotesUIWorkspace
    	Call ws.viewRefresh
    End Sub


    Wohlgemerkt das ist mein gesamtes Script, nicht das jemand denkt, es wäre nur ein Auszug.


    Das funktioniert auch, solange ich den Agent manuell im Debugger ausführe. Direkt nach "Call ws.viewRefresh" ist die Mail in
    der Inbox zu sehen. Vorher habe ich andere Sachen ausprobiert, ohne Debugger, und die Mail ist auch erschienen. Aber dann
    habe ich herausgefunden, dass nicht der Agent, sondern mein rumgeklicke der Auslöser für das Erscheinen der Mail verantwortlich
    war.


    Soweit so schlecht. Wenn ich den Miniagent nun per Scheduler ausführe, passiert rein garnichts. Das Agent Log behauptet,
    der Code wäre ausgeführt worden, aber nichts passiert. Der Haken "Enable scheduled local agents" unter "Basic Notes Client
    Configuration" ist übrigens gesetzt!


    Ich hab's zuvor mit den Einstellungen "Trigger= On event = Before new mail arrives bzw. After new mail has arrived" versucht,
    aber dann habe ich in einem PDF auf "atnotes.de" gelesen, dass ein solcher Agent serverbasierend ist. Das verstehe ich so,
    dass ich diese Trigger nicht ohne Dominoserver nutzen kann. Ist das so richtig?


    Wie sieht es dann mit einem Scheduler aus? Kann man den Agent ohne Server über den Scheduler starten? Augeführt wird
    er laut Agent Log ja, es passiert nur nichts.


    Dann habe ich wieder in der Designer-Hilfe unter "NotesUIWorkspace" folgendes gelesen:

    Zitat

    You cannot use the UI classes in a background agent, an agent called through an API, or an agent called by the NotesAgent Run method. Only workstation users can run scripts that access UI objects.

    Ist das der Grund dafür, dass mein Agent nichts tut? Ich bin davon ausgegangen, dass der Agent unter meinem Account
    läuft, auch wenn er per Scheduler gestartet wird. Wenn das aber nicht der Fall ist, weiß ich nicht mehr weiter und brauche
    eure Hilfe.


    Den Agent mit dem Trigger "Action menu selection" zu starten macht keinen Sinn, dann kann ich auch gleich F9 drücken
    oder den Refresh Button anklicken. Was ich noch nicht versucht habe ist über die Klasse NotesTimer zu gehen und den
    Agent dann einmalig aus dem Menü zu starten. Allerdings habe ich in der Hilfe zu dieser Klasse folgendes gelesen:

    Zitat

    NotesTimer is intended for use in Notes UI objects and not agents.

    Womit ich wieder am Anfang stehe. ;(


    Ach ja, mit Formula Language habe ich es auch zuerst versucht, aber da steht dann wieder, dass man die Funktion
    @Command nicht in einem scheduled Agent verwenden kann, sonst würde ich es mit Reload- bzw. RefreshWindow
    machen.


    Wäre schön, wenn mir hier jemand mal unter die Arme greifen könnte. Um es nochmal klarzumachen, ich bin absoluter
    Neulig was das Scripting unter Notes angeht. Also bitte habt Mitleid. :D


    Ich sag dann schonmal :danke:

    Gruß
    Aschy
    _______________________________________________
    "AOL for Dummies" is kind of redundant, don't you think?

  • Wenn dann müsstest du das in einen NotesTimer in z.B. ein QueryOpen Script einbauen, denn nur dann wird es tatsächlich durch den benutzer und nicht im Hintergrund getriggert.
    Dazu gab es aber hier im Forum schon einige Threads. Suche doch mal nach NotesTimer

  • Danke für deine Antwort.


    Dann werde ich mal nach QueryOpen suchen. Wo müsste ich das Script denn dann einbauen? In einem
    Agent kann ich den NotesTimer ja nicht nutzen, wenn ich das richtig verstanden habe, oder?


    Sind meine Vermutungen bez. der Ursachen für die Nichtfunktion meines Agents denn soweit richtig?


    Gibt es im Web irgendwo eine Seite, mit deren Hilfe ich als Anfänger etwas besser in LotusScript einsteigen kann?
    Ich muss ja bei Null anfangen und ich will euch nicht mit jedem doofen Befehl hier belästigen. Ich kenne ja noch nicht
    mal den Unterschied zwischen einem Sub Initialize und einem Sub Click.


    Die Designer-Hilfe ist zwar eine recht gute Referenz, aber sie setzt meiner Meinung nach doch schon grundlegende
    Kenntnisse voraus, die ich leider noch nicht habe. Die einzige "Programmiersprache", mit der ich ganz gut zurecht
    komme, ist AutoIT. Von C++ oder anderen objektorientierten Sprachen habe ich null Ahnung.


    Danke!


    Ach ich sollte ja nach NotesTimer suchen, werde ich dann auch mal machen.

    Gruß
    Aschy
    _______________________________________________
    "AOL for Dummies" is kind of redundant, don't you think?

    Einmal editiert, zuletzt von XJR-Maniac ()

  • Ja sind sie, ansonsten hätte ich dich schon korrigiert.


    LotusScript ist Visual Basic kompatibel, d.h. du kannst dir da sowohl Tutorials zu VB wie auch zu Lotus Script anschauen.


    Zu der Frage mit Sub Initialize und Click findest du ebenfalls in der Designer Hilfe die Erklärung.
    Generell ist das eine beim Erstellen des Objektes, das andere beim Anklicken.

  • Ja sind sie, ansonsten hätte ich dich schon korrigiert.

    Jippie, na dann besteht ja noch Hoffnung für mich, bedeutet es doch, dass ich wenigstens schon ein kleines bißchen verstanden habe ;)

    LotusScript ist Visual Basic kompatibel, d.h. du kannst dir da sowohl Tutorials zu VB wie auch zu Lotus Script anschauen.

    Meinst du VB oder VBS? Irgendwie kommt mir die Syntax ja bekannt vor, auch wenn ich in VBS nicht so richtig firm bin.
    Ich verstehe zwar die meisten Scripte nach einiger Zeit. Aber wenn ich selbst was erstellen soll, muss ich immer etwas
    zum abgucken haben, sonst klappt das nicht! Solltest du doch VB (ohne Script) meinen, dann fange ich da halt auch
    nochmal ganz von vorne an. Aber was soll's, ich bin ja mit 49 noch nicht ganz senil. Das wird schon klappen. Wenn die
    Sprachen kompatibel sind, hilft mir das bestimmt weiter.

    Zu der Frage mit Sub Initialize und Click findest du ebenfalls in der Designer Hilfe die Erklärung.
    Generell ist das eine beim Erstellen des Objektes, das andere beim Anklicken.

    Dann werde ich nochmal ganz in Ruhe die Designer Hilfe studieren. Irgendwie hat sich mir das Thema noch nicht so
    ganz erschlossen. Aber wenn ich einmal mit dem coden angefangen habe, will ich immer, dass alles sofort klappt.
    Dann übersehe ich oft die einfachsten Hinweise.


    Jetzt habe ich doch einen Thread gefunden, der mein Problem beschreibt, nachdem ich nach NotesTimer gesucht habe:


    Automatische Aktualisierung des Email-Eingangs


    Ich hab immer nur nach "Inbox refresh" gesucht, deshalb ist mir dieser Thread wohl entgangen.


    In dem Thread steht, man solle den NotesTimer im Postopen der Ansicht einbauen. Jetzt habe ich aber schon gelernt
    (glaube ich), dass ($Inbox) keine Ansicht (View), sondern ein Ordner (Folder) ist. Muss ich das jetzt in den Ordner
    ($Inbox) eintragen oder in eine bestimmte View? ?(


    Jetzt habe ich das Mailfile mal im Designer geöffnet. Dort gibt es im Ordner $Inbox zwei Objekte(?) mit dem Namen
    $Inbox: ($Inbox) (Globals) und ($Inbox) (Folder). In ($Inbox) (Folder) existiert sowohl ein Postopen als auch ein Queryopen
    Objekt(?). Das Queryopen ist leer. Kann ich den Code aus dem oben genannten Thread in das Queryopen übernehmen?


    Natürlich nicht alles, sondern wie im Thread beschrieben jeweils den entsprechenden Code in Declarations und Initialize
    kopieren, die beide ebenfalls leer sind. Und anstatt Sub Postopen müsste es dann Sub Queryopen heißen, aber das
    steht ja bereits da drin.


    In Postopen ist bereits Code enthalten, und ich wüsste jetzt nicht, wie ich den zusätzlichen Code da reinfriemeln sollte.
    Einfach vor dem Sub End anhängen??? Zum Glück läuft das ganze in einer VMWare, die man zur Not wieder zurücksetzten
    kann, wenn was schief geht. Dann fang ich halt nochmal ganz von vorne an.


    Oder muss das ganze in ($Inbox) (Globals)? Da hier aber fast garnichts drinsteht, würde ich aus dem Bauch heraus mal
    sagen, nein. Oder wie oder was???


    Danke!

    Gruß
    Aschy
    _______________________________________________
    "AOL for Dummies" is kind of redundant, don't you think?

  • Sch**** die Wand an, das klappt!!!


    Upps, ich hoffe, dass hier double posts erlaubt sind ;-)))


    Da kann ich nur sagen, vielen herzlichen Dank!!!


    Ich habe den Code wie in dem gefundenen Thread in ($Inbox) (Folder) unter Queryopen etc. eingetragen. Allerdings musste
    ich den Include-Befehl aus den Declarations entfernen, da ich nach dem Einfügen einen Fehler angezeigt bekam:


    "PUBLIC is not allowed in this module".


    Hab mir die Datei "lsconst.lss" dann mal angeschaut und konnte keinen Bezug zu meinem Script feststellen. Hier werden halt
    diverse Variablen als PUBLIC definiert. Nach dem Entfernen wurden keine Fehler mehr angezeigt. Also alles schön gespeichert
    und mir schnell eine kleine Mail geschickt und siehe da, die Inbox zeigt nach kurzer Zeit die neue Mail an.


    Das einzige, was er noch nicht macht, ist einen Sound abzuspielen, wenn die neue Mail in der Inbox ankommt. Aber das
    hängt vermutlich mit dem ursprünglichen Problem zusammen, dass die Inbox nicht selbsttätig refreshed wird. Fragt sich
    nur, warum die anderen Events funktionieren, also Systray Icon und Popup Alert. Aber egal, man kann halt nicht alles haben.


    Nochmals vielen Dank für deine Hilfe, taurec!!!

    Gruß
    Aschy
    _______________________________________________
    "AOL for Dummies" is kind of redundant, don't you think?

  • Ich habe jetzt festgestellt, dass die Lösung noch einer kleinen Anpassung bedarf, damit der Refresh nur dann erfolgt,
    wenn die Inbox die aktuelle View ist. Ansonsten tritt in bestimmten Ansichten, z.B. Replication and Sync, eine
    Fehlermeldung auf. Und in anderen Ansichten ist der Refresh auch nicht so richtig erwünscht, z.B. wenn man im
    Ordner Sent mit aktiver Vorschau scrollt, sorgt der Refresh dafür, dass der Focus immer auf den obersten Eintrag
    springt und dann natürlich in der Vorschau angezeigt wird. Das passiert natürlich auch im Ordner Inbox, aber da
    muss ich dann halt damit leben.


    Bei meiner ersten Bastelei mit dem Agent hatte ich das Ermitteln der aktuellen View schonmal hinbekommen,
    dürfte also nicht so schwierig sein.

    Gruß
    Aschy
    _______________________________________________
    "AOL for Dummies" is kind of redundant, don't you think?

  • Ja das war wohl nichts. Hätt ich auch gleich drauf kommen können.


    Ich hab zwar jetzt ein kleines Script gebastelt, das die View ermittelt:


    Code
    Sub WasWeißIch
    	Dim workspace As New NotesUIWorkspace
    	Dim view As NotesUIView
    	Set view = workspace.CurrentView
    	If view.ViewName = "($Inbox)" Then
    		MessageBox view.ViewName,, "Inbox active"
    	Else
    		MessageBox view.ViewName,, "Other Folder"
    	End If
    End Sub


    Aber wenn schon der Refresh in dem "elapsedTimerHandler" (s.o.) unter Replication and Sync Probleme macht, dann dürfte der zusätzliche
    Code erst Recht nicht laufen. Und so ist es dann auch. Wenn ich das Script in den "elapsedTimerHandler" dazufummele, gibt es wieder
    Mecker, wenn ich bei geöffneter Inbox Replication and Sync zusätzlich öffne:


    "Object variable not set"


    Damit will er mir wohl sagen, dass in dieser Ansicht die Varieble "view" nicht gesetzt werden konnte und somit leer ist. Ohne mein Hilfsscript
    bekomme ich die Meldung:


    "Notes Error - Specified command is not available from the workspace."


    Ich glaube, ich lasse alles so wie es jetzt ist. So oft gucke ich dem Replicator ja nicht bei der Arbeit zu. Und dass die Ansicht "Sent" refreshed
    wird muss ich wohl geträumt haben. Der Refresh erfolgt dann nämlich überhaupt nicht, weil er ja im Ordner ($Inbox) definiert ist und nicht im
    Ordner (Sent). Ich habe das beschriebene Phänomen zwar beobachtet, aber nur beim Scrollen in der Inbox.


    Falls doch noch jemandem was nützliches dazu einfällt, immer her damit. Ich find's sehr interessant, mich mal mit was neuem zu beschäftigen.
    Und im Moment fällt mir nichts vernünftiges ein, was ich mal mit AutoIt zusammenschustern könnte ;)

    Gruß
    Aschy
    _______________________________________________
    "AOL for Dummies" is kind of redundant, don't you think?