Feb 172011
 

… oder wie man Lotus Notes in so etwas ähnliches wie einem email-Client verwandelt.

Kürzlich hat meine Firma von MS Outlook auf Lotus Notes als email-System umgestellt. Die Freude hielt sich bei den meisten von uns in Grenzen – wirkt doch selbst die neueste Version von Notes manchmal, als wären 10 Jahre Entwicklung spurlos daran vorbeigegangen: selbst Features, die bei einem email-Client heute völlig selbstverständlich sind, sind ungenügend, auf seltsame Weise implementiert oder fehlen ganz.

Eines davon ist das New-Mail-Popup. Sie wissen schon, das ist das kleine rechteckige Fenster, das beim Empfang einer neuen eMail am unteren rechten Bildschirmrand erscheint und darauf hinweist, daß da etwas eingetroffen ist – vorzugsweise gleich mit dem Titel der Nachricht und wer sie geschickt hat.
Ein Convenience-Feature, das man mit der Zeit schätzen lernt – erlaubt es einem doch, mit einem Blick wichtige Nachrichten von unwichtigen zu unterscheiden und nur für solche den Mail-Client zu öffnen, die eine sofortige Reaktion erfordern.
Wie angenehm das ist, erkennt man erst, wenn man es nicht mehr hat.

Lotus Notes notification with Growl and the Metro display CC BY
Lotus Notes hat so ein nettes Zusatzprogramm, den “Notes Minder”. Toll, dachte ich, das ist, was ich brauche. Kaum hat man das Ding konfiguriert (ja genau, man muß es separat konfigurieren), macht sich aber auch schon Enttäuschung bereit. Das versprochene ‘Popup’ ist ein modaler (!) Dialog – jede Mail verlangt also sofortige, unbedingte Aufmerksamkeit. Außerdem ist er häßlich.
Mag man den Minder nicht, bleibt nur die akustische Benachrichtigung, die Notes von Haus aus beherrscht. Aber dann heißt es bei jeder email (auch bei den völlig unwichtigen Nachrichten): Arbeit unterbrechen, Notes öffnen, Nachrichten lesen, Notes schließen und Arbeit wieder aufnehmen. Das ist wirklich suboptimal.

Ich verwende jetzt schon eine Weile Growl für Windows. Das tut eigentlich nichts anderes, als von einer Unzahl möglicher Plugins Nachrichten entgegenzunehmen und – man rät es schon – als Popup anzuzeigen, das je nach Lust und Laune konfiguriert werden kann bzgl. Aussehen, Platzierung, Verweildauer, begleitendem Sound usw. Für Outlook gibt es ein Plugin. Für Notes natürlich nicht.

Aber da ist der einzige große Vorteil von Lotus Notes: seine Programmierbarkeit. Inzwischen (Gott sei Dank!) nicht mehr nur in LotusScript, sondern auch in Java. Die so geschriebenen Agents können auch auf dem Client ausgeführt werden, was sie ideal für die gewünschten Notifications macht.

Ich habe also einen Java-Agent geschrieben, der Growl-Notifications verschickt. Hier der Quellcode – nicht sehr lang, aber für einen Notes-API-Frischling trotzdem nicht ganz einfach:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
 
import lotus.domino.AgentBase;
import lotus.domino.AgentContext;
import lotus.domino.Document;
import lotus.domino.DocumentCollection;
import lotus.domino.Session;
 
public class JavaAgent extends AgentBase {
    private static final String ICON = "c:\windows\formatted\pathto\icon.png";
    private static final String NOTIFICATION_TYPE = "New Document";
    private static final String APPLICATION_TAG = "Lotus Notes";
 
    public void NotesMain() {
        System.out.println("Starting notification agent");
 
        try {
            final Runtime runtime = Runtime.getRuntime();
 
            // Register application on growl. This has to be done only once,
            // but it doesn't hurt to do it every time:
            runtime.exec("growlnotify /a:"" + APPLICATION_TAG + "" /r:"" + NOTIFICATION_TYPE + "" /i:"" + ICON
                + "" "Application registered"");
 
            final Session session = getSession();
            final AgentContext agentContext = session.getAgentContext();
 
            final DocumentCollection dc = agentContext.getUnprocessedDocuments();
            Document doc = dc.getFirstDocument();
 
            // Go through each unprocessed document that's not marked as read.
            // Display a maximum number of 10 notifications:
            for (int notificationCount = 0; notificationCount < 10 && doc != null; doc = dc.getNextDocument()) {
                if (!doc.getRead()) {
                    final String subject = doc.getItemValueString("Subject");
                    String from = doc.getItemValueString("From");
 
                    if (from.startsWith("CN=")) {
                        from = from.substring(3, from.indexOf("/"));
                    }
 
                    runtime.exec("growlnotify /a:"" + APPLICATION_TAG + "" /n:"" + NOTIFICATION_TYPE + "" /t:""
                        + subject + "" /i:"" + ICON + "" "" + from + """);
                    notificationCount++;
                    doc.markRead();
                }
            }
        } catch (final Exception e) {
            e.printStackTrace();
        }
    }
}

Ich muß gestehen daß ich faul war. Ich verwende Growl Notify zumn Versenden der Benachrichtigungen (growlnotify.exe muß sich im Pfad befinden).Eine native Java Growl library wäre vermutlich sowohl eleganter als auch schneller gewesen, aber das Kommandozeilen-Utililty ist einfach verdammt bequem. Vielleicht verbessere ich das Ganze irgendwann noch…

Der Agent ist als ‘scheduled’ mit einen minütlichen Intervall konfiguriert. Ich habe zwar durchaus versucht, den “After new mail arrives” – Event-Trigger zu vewenden, aber entweder muß man den Code dafür signieren, oder der Agent muß auf dem Server laufen – auf jeden Fall hat er nicht auf neue emails reagiert. Macht auch nichts. Emails müssen zumindest eine Minute warten können.

 Posted by at 20:21

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)