Posts Tagged: ‘Lotus Notes’

Lotusscript Code aus Java plugin aufrufen

16. Februar 2013 Posted by Ralf Petter

In bestehenden Notesanwendungen steckt jede Menge Lotusscript Code der über viele Jahre aufwendig entwickelt wurde, deshalb möchte man bei der Entwicklung von Plugins nicht das Rad neu erfinden, sondern bestehenden Code auch aus Eclipse plugins aufrufen. Wie dies geht möchte ich heute gerne zeigen:

Als erstes muss man die Notes API (com.ibm.notes.java.api und com.ibm.java.ui) dem Plugin als Abhängigkeit hinzufügen.

Als Beispiel habe ich eine scriptlibrary mit einer Funktion getUmsatz mit den Parametern Kundennummer und Jahr hergenommen. In der Funktion der Scriptlibrary werden aufwendige Datenbankzugriffe und Berechnungen durchgeführt, die wir in java nicht nachprogrammieren wollen.

Da man von Java nicht direkt auf die Library zugreifen kann, braucht man als erstes einen kleinen Agent der als Brücke zwischen dem Plugin und der Scriptlibrary fungiert.



Option Public
Option Declare
Use "UmsatzScriptLibrary"
Sub Initialize
Dim ses As New NotesSession
Dim context As NotesDocument
Set context=ses.Documentcontext
Call context.Replaceitemvalue("umsatz", getUmsatz(context.Getitemvalue("kundenNummer")(0), context.getItemValue("jahr")(0)))
Print context.Getitemvalue("umsatz")(0)
context.save True,false
End Sub


Der Agent macht nichts anderes, als dass er ein in Memory Dokument über den Dokumentcontext holt. Die Aufrufparameter für die getUmsatz Funktion ausliest und das Ergebnis der Funktion in der Variable Umsatz speichert. Natürlich konnte man den Agent auch dahingehend erweitern, dass in dem in Memory Dokument auch ein Parameter für die auzurufende Funktion mitgegeben wird und er dann die richtige Funktion aus der Scriptlibrary aufruft.

Wichtig bei dem Agent ist, dass man das Ziel auf "None" setzt. Sonst funktioniert der Zugriff auf das übergebene Dokument nicht zuverlässig.


Der Javateil ist etwas aufwendiger:


public static void berechneKundenUmsatz(String kundenNummer, int jahr) {
try {
// Starte den Zugriff auf den Workspace und erstelle ein
// NotesAgentDataobjekt mit unserem Brückenagent.
NotesUIWorkspace ws = new NotesUIWorkspace();
NotesAgentData data = new NotesAgentData(new NotesDatabaseData("",
"test.nsf"), "agent");
// Füge die Aufrufparameter für die Scriptlibrary dem data Objekt
// hinzu. Diese werden später im documentcontext als Items
// verfügbar.
data.addItem("kundenNummer", kundenNummer);
data.addItem("jahr", new Integer(jahr).toString());
// Erstelle ein Callback Objekt. die Methode done dieses Objekts
// wird nach Ausführung des Brücken Agent aufgerufen.
NotesDocumentDataCallback callBack = new NotesDocumentDataCallback() {
@Override
public void done(final NotesDocumentDataEvent event) {
// Erstelle einen Notessessionjob in dem wir auf das
// zurückgegebene Dokument zugreifen können.
NotesSessionJob job = new NotesSessionJob(
"verarbeite Ergebnis") {
@Override
protected IStatus runInNotesThread(Session session,
IProgressMonitor arg1) throws NotesException {
// Lade das Dokument, dass der Agent mit dem
// Ergebnis befüllt hat.
Document doc = event.getDocumentData()
.open(session);
// Speichere das Resultat in einer Finalen Variable,
// dass wir es im UIThread weiterverwenden können.
final double result = doc
.getItemValueDouble("umsatz");
// Mache irgendetwas im UI mit dem Resultat. In
// unserem Beispiel eine Dialogbox anzeigen.
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
MessageBox box = new MessageBox(PlatformUI
.getWorkbench()
.getActiveWorkbenchWindow()
.getShell());
box.setMessage("Das Ergebnis ist: "
+ result);
box.open();
}
});
return Status.OK_STATUS;
}
};
// starte den Notesjob
job.schedule();
}
};
// Führe den Agent mit dem data und callback Objekt aus. Der letzte
// Parameter bedeutet, das der UIContext keine Rolle spielt. Das
// heißt es ist egal auf welches Dokument im UI derzeit geöffnet
// ist.
ws.runAgent(data, callBack, false);
} catch (NotesException e) {
e.printStackTrace();
}

}
Das ist jetzt natürlich nur ein kleines Beispiel, bei dem der Aufwand vielleicht nicht dafür steht, aber in dem Lotusscript agent kann auch auf das UI zugegriffen werden. Das heißt der Agent kann Dialoge anzeigen und er kann auch mehrere Werte oder eine ganze Liste als Ergebnis zurückliefern. Damit kann man auch bei der Entwicklung von Plugins sehr leicht bestehenden Code wieder verwenden.

Lösen von Notes Performanceproblemen mit dem NRPC Parser

4. Februar 2013 Posted by Ralf Petter

Der Notes Client besitzt eine eingebaute Tracefunktion um die NRPC (Notes Remote Procedure Call) Kommunikation zwischen einem Client und dem Server zu tracen. Leider ist das Log, dass diese Tracefunktionalität zur Verfügung stellt, etwas unübersichtlich und kryptisch. Jedoch gibt es auf OpenNTF eine Datenbank mit der man die Analyse vereinfachen kann.

Hier die Schritte um eine Performanceanalyse mit der Datenbank durchzuführen:

Downloaden Sie den NRPC Parser von OpenNTF und signieren Sie die Datenbank mit einer Developer id, damit Sie keine Probleme mit der ECL haben.

Öffnen Sie die Parserdatenbank und klicken Sie auf die

 Schaltfläche. Damit werden in Ihrer notes.ini die Einträge
  • Client_Clock=1
  • Debug_Console=1
  • Debug_Outfile=c:\Program Files (x86)\IBM\Lotus\Notes\Data\RPC.txt
  • CONSOLE_LOG_ENABLED=1
gesetzt. Diese bewirken, dass in die Datei RPC.txt  nach dem Neustart des Clients jeder RPC protokolliert wird.

Jetzt muss der Notesclient neu gestart werden und man kann die Funktion in Notes durchführen mit der man ein Performanceproblem hat. z.B. eine Datenbank öffnen, oder ein Dokument aufmachen.

Danach sollte man die Notes.ini Einträge mit

wieder deaktivieren und den Notesclient neu starten.

Danach kann man mit der Schaltfläche
die erstellte Datei analysieren lassen und bekommt dann für jeden Aufruf einer Funktion auf dem Server eine Zeile in der genau  steht was gemacht wurde, wie lange dieser Aufruf gedauert hat und wieviele Daten vom Server gesendet und empfangen wurden.


Aufwendige Operationen sind rot markiert. Die Spalte Sent gibt die Datenmenge in Bytes an die der Server gesendet hat. Die Spalte Rec'd gibt an, wieviel Daten der Server vom Client empfangen hat.

Achtung Bei der Verwendung neuerer Clientversionen ist standardmäßig die Ausgabe der ThreadID in das Consolelog aktiviert. Wenn diese aktiviert ist, funktioniert die Auswertung des NRPC Parser nicht. Deshalb bei Verwendung des NRPC Parsers mit dem notes.ini Eintrag DEBUG_THREADID=0 die Ausgabe der Thread-ID deaktivieren.









Notes 9 Verbesserung beim e-mail typeahead

14. Januar 2013 Posted by Ralf Petter

Das Typeahead bei e-mail Adressfeldern ist eine sehr praktische Sache, aber seit Einführung dieser Funktion stört mich die Tatsache, dass immer zuerst die lokalen Adressbücher vor den Serveradressbüchern durchsucht werden, obwohl davon auszugehen ist, dass die Serveradressbücher im Normalfall die viel akuraten Informationen enthalten. Mit Notes 9 wurde nun eine neue notes.ini Variable (TypeaheadShowServerFirst=1) eingeführt mit der man dieses Verhalten umkehren kann.

Ohne TypeaheadShowServerFirst=1



Mit TypeaheadShowServerFirst=1

Die Notes.ini Variable kann natürlich auch über eine Desktoppolicy gesetzt werden. Leider gibt es jedoch keine Benutzerschnittstelle für diese meiner Meinung nach extrem wichtige Einstellung.

Laut Doku in der Version 9 soll diese Variable auch in 8.5.3 funktionieren. In meinem 8.5.3 FP1 Client hat die Variable jedoch keine Funktion.


Übersicht Beiträge zu Notes 9 Beta:
  
Notes 9 Volltextsuche kleine Änderung große Usability Verbesserung
Notes 9 Suche in Ansichten wurde vereinheitlicht und verbessert. 
Neues Feature Database Maintenance in Domino 9
Coole neue notes.ini Variable in Domino 9 für Copy style compact
Notes 9 SE erste Eindrücke aus Sicht des Plugin Entwicklers 
Erste Eindrücke vom Browserplugin und iNotes 
Notes 9 als Anwender; erster Blick Hui, zweiter Blick leider Pfui.

Neuer Neuer Artikel im Wiki über Plugin und Feature Deployment

11. Januar 2013 Posted by Ralf Petter

Die IBM hat eine sehr gute Beschreibung (Managing features in the IBM Lotus Notes 8.5.x Client) über die verschiedenen Möglichkeiten der Installation von Features und Plugins im Lotus Notes Domino Wiki veröffentlicht. Ich war am Anfang sehr skeptisch bezüglich der Wikis aber in letzter Zeit wird wirklich sehr guter Content seitens der IBM veröffentlicht. Hoffentlich hält der positive Trend an.

Zugriff auf die Hard und Softwarekonfiguration über WMI mittels Lotus Script

10. Januar 2013 Posted by Ralf Petter

Unter Windows gibt es mit dem Windows Management Instrumentation ein sehr mächtiges Werkzeug mit dem man auf diverse Hardware und Software Informationen in Windows zugreifen, bzw mit dem man auch administrative Dinge erledigen kann. Normalerweise verwendet man WMI aus einem vb oder aus einem Powershell script.

Heute möchte ich aber zeigen, dass man den selben Mechanismus auch bequem von Lotus script für die Beschaffung von diversen Infos verwenden kann. Als Beispiel möchte ich einen Agenten anführen, der z.B. die derzeitige Bildschirmauflösung ausliest. Eventuell will man ja in einem Notesscript je nach verwendeter Bildschirmauflösung verschiedene Framesets anzeigen.


Sub Initialize
Dim objWMIService As Variant
Dim colItems as Variant
Dim strComputer As String
strComputer="."
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_DesktopMonitor",,48)
Forall objItem In colItems
print "Monitor Höhe:" & objItem.ScreenHeight
Print "Monitor Breite:" & objItem.ScreenWidth
End forall
End Sub


02-04  die verwendeten Variablen werden definiert.
05 Mit WMI kann man auch auf Remotecomputer zugreifen. Im Normalfall will man jedoch auf seinen eigenen Computer zugreifen, was man durch den Punkt erreichen kann.
06  Das WMI Service Objekte wird instantiert.
07 WMI stellt die Informationen in einer Datenbank ähnlichen Struktur zur Verfügung die mit einer an SQL angelehnten Syntax abgefragt werden kann. Ich komme dann noch später dazu wie man auf diese SQL Kommandos kommt.
08-11 Mittels einer Forall Schleife werden alle Sätze gelesen. Normalerweise sollte hier nur ein Satz zurückgegeben werden, ausser der Benutzer hat mehrere Monitore;-)

Obiges Gerüst kann man natürlich nicht nur für den obigen Zweck verwenden sondern mit den richtigen WMI SQL's kann man praktisch auf jede Info die in Windows gespeichert ist zugreifen. Um den Querystring zusammenzubauen kann man entweder die Doku in der MSDN durcharbeiten oder besser auf den genialen WMI Code Creator  zurückgreifen.


Mit dem kann man sich bequem die Informationen zusammenklicken und bekommt dann den Code in vbscript angezeigt. Mittels diesen Infos kann man dann oben angeführtes Lotus Script Beispiel überarbeiten und auf die gewünschten Infos zugreifen.


Notes 9 Volltextsuche kleine Änderung große Usability Verbesserung

6. Januar 2013 Posted by Ralf Petter

Oft sind es die Kleinigkeiten die einen großen Sprung in der Verwendbarkeit einer Anwendung bewirken. Genauso eine Kleinigkeit wurde in Notes 9 endlich verbessert. Welcher Betreuer kennt nicht das Problem, Anwendern zu erklären wie sie Suchergebnisse der Volltextsuche anders als nach Relevanz sortieren können. Selbst Anwender die darauf geschult wurden, scheitern immer wieder daran auf mehr zu klicken und dann in der großen Anzahl der "Mehr Optionen" die richtige für die Ergebnissortierung zu finden. Mit Notes 9 hat die IBM endlich zumindest in diesem Bereich reagiert und diese absolut essentielle Auswahlbox aus den Tiefen der Optionen geholt und prominent platziert.


Bei der Implementierung der Funktion hat die IBM sogar daran gedacht, dass bei einer Änderung in der Auswahlbox die Sortierung sofort geändert wird. Das heißt man muss nicht wie bisher nach der Änderung noch einmal auf Suche klicken.

Wie wichtig die IBM dieses Feature nun nimmt sieht man daran, dass jetzt sogar Tooltips in die Spaltenköpfe von den Java Ansichten (in den klassischen Notes Ansichten fehlen diese) integriert wurden. Das heißt wenn man mit der Maus auf einen Spaltenkopf zum sortieren positioniert, dann bekommt man vorgeschlagen über den Auswahldropdown die Ergebnissortierung zu ändern.


Soviel Liebe zum Detail würde ich mir an mehr Stellen im Client wünschen.

Notes 9 Suche in Ansichten wurde vereinheitlicht und verbessert.

5. Januar 2013 Posted by Ralf Petter

In Notes 8.x gab es neben der Volltextsuche noch zwei andere Suchen um Dokumente in Ansichten zu finden. Dies war in meinen Endbenutzerschulungen immer ein Thema warum es mehrere Suchen gab und wann man welche verwendet. Vor allem warum man vor der Schnellsuche immer nach der zu durchsuchenden Spalte sortieren muss, war für unsere Benutzer schwierig zu verstehen. In Notes 9 SE hat man nun die Suche mit "STRG+E" und die Schnellsuche die durch beliebigen Tastendruck aufgerufen wurde in eine Suche zusammengefasst.

Je nachdem ob man die neue Suche mit "STRG+F" oder einen beliebige Tastendruck aufgerufen hat wird das Suchfenster mit unterschiedlicher Vorauswahl angezeigt.

Mit "STRG+F" bekommt man die Suche im Modus, dass in allen Spalten gesucht wird.


Man kann aber jederzeit über die Drop Down box die Suche auf eine Spalte einschränken, was dann der Schnellsuche (Vorauswahl wenn man in der Ansicht eine Taste drückt) entspricht. Dabei wird die Ansicht automatisch nach der ausgewählten Spalte sortiert. Super ist, dass das Suchfeld je nach Spaltentyp Hilfen für die Eingabe anbietet. z.B. bei Personenfeldern wird Typeahead und bei Datumsspalten ein Datumsauswahl dropdown angeboten.

Was weniger gut ist, dass vom Wechsel von any column zu einer Spalte kein Hinweis angezeigt wird, dass bei der Spaltensuche immer vom Anfang der Spalte weg gesucht wird. Das heißt, bei der "Any Column" Version kann ich einen Teilbegriff der an belibiger Stelle vorkommt eingeben und bei der Spaltensuche muss der Suchbegriff mit dem Beginn der Spalte ident sein. Das hätte man leicht anders lösen können in dem man auch bei der Spaltensuche eine Option "nach Teilbegriffen suchen" anbieten würde.

2 Bugs hat die Suche in der Public Beta auch noch. Beim Typeahaed in der Personenspalte werden nur lokale Kontakte vorgeschlagen, obwohl in der Hilfe eindeutig dokumentiert ist, dass auch das Domino Directory durchsucht wird. Ausserdem haben die Hilfebuttons neben den Feldern keine Funktion.

Prinzipiell muß ich anmerken, dass solche Dialog immer in der Grösse angepasst werden können sollten.

Fazit: Tolle Verbesserung gegenüber Notes 8.x die aber noch perfektioniert werden könnte.


Notes 9 SE erste Eindrücke aus Sicht des Plugin Entwicklers

2. Januar 2013 Posted by Ralf Petter

Nach dem ich mir ein wenig den neuen Client, iNotes und das Browserplugin angeschaut habe, möchte ich mir heute den neuen Client aus der Sicht eines Plugin Entwicklers ansehen.

Die Einrichtung von Eclipse zur Entwicklung von Plugins für Notes 9 Social Edition hat schon Mikkel Heisterberg in einem sehr guten Howto (Eclipse 3.x, Eclipse 4.2) beschrieben. Deshalb kann ich mir dies hier sparen.

Ich habe dann also mal in meine neue Notesumgebung sämtliche Features und Plugins, die wir für den Notes Client entwickelt haben eingespielt und erfreulicherweise laufen alle Plugins ohne Probleme und Einschränkungen in Notes 9 Social Edition. Aber auch hier zeigt sich, dass sich die IBM wenig Mühe gegeben hat, ein konsistentes UI zu erreichen. Notes 8.x war sehr gut an das Farbschema (blau weiße Farbverläufe) von Eclipse angepasst. Deshalb haben sich Plugins die das Standarddesign der Platform übernommen haben sehr gut in den Notes Client eingefügt. Als kleines Beispiel wie das aussieht hier ein Screenshot aus unserem Hardwareinventoryplugin unter Notes 8.5.3:


Die Blautöne der Eclipsebereiche harmonieren relativ gut mit den Blautönen die in Lotus Notes 8.x verwendet wurden.

Leider passen die blauen Farbverläufe nicht mehr zu den grauen Farbverläufen von Notes 9


Dabei sollte es für die IBM ein leichtes sein, die Eclipseplugins dahingehend anzupassen, dass zum ausgewählten Theme passende Farben zurückgegeben werden, wenn ein Plugin Defaultfarben abruft. Ich habe mal Quick and Dirty das "org.eclipse.ui.forms" Plugin von Notes gepatched und schon sehen alle Plugins etwas mehr nach der Farbgebung von Notes aus.


Mit etwas Mühe hätte man da jeden Pluginprogrammierer viel Arbeit ersparen können und selbst erstellte Plugins würden sich automatisch ohne viel Aufwand in den neuen Notesclient einfügen.

Leider gibt es ausser den Änderungen beim Design praktisch kaum etwas neues für Plugin Entwickler. Für eine 8.5.4 wäre es ja auch durchaus in Ordnung gewesen, dass die IBM keine Updates an den Frameworks gemacht hat. Aber wenn man schon mit Notes 9 eine komplett neue Version akündigt kann ich nicht verstehen, warum man den Eclipse RCP Basiscode nicht aktualisiert hat. Wenn man bedenkt, dass jedes Jahr eine neue Version von Eclipse erscheint, dann ist relativ klar, dass viele aktuelle Plugins nicht mehr die uralte 3.4.2 Version von Notes 9 unterstützen. Hier würde ich mir wünschen, dass die IBM so rasch wie möglich zumindest auf die neueste 3.x Version updated. Derzeit ist ja schon 4.2 aktuell. Auch dass noch immer auf Java 1.6 statt 1.7 gesetzt wird, finde ich persönlich sehr schade. Ein echtes Highlight wäre für mich, wenn die IBM hier noch nachbessert und vielleicht bei nächster Gelegenheit Java FX integriert.

Auch die Domino Java API's haben kein Update erfahren. Hier wäre wirklich schon dringender Handlungsbedarf, da sich die Java API von Domino vom Design her sich immer noch wie Java 1.1 anfühlt. z.B. wird noch immer Vector verwendet, statt den mit 1.2 verbesserten Collectionsklassen. Auch Generics werden nach wie vor nicht unterstützt. Nicht einmal die neuen Calendarklassen werden offiziell unterstützt, wenn Sie auch in der Betaversion scheinbar drinnen sind.

Als Fazit kann man nur sagen, dass die IBM alle Leute die sich mit 8.x stark in der Pluginentwicklung engagiert haben mit Version 9 hängen lässt. Bei uns in der Firma geht der Trend dahin, dass wir unsere Plugins die wir für den Notesclient entwickelt haben, nach Vanilla Eclipse portieren und den Notes nur noch da verwenden, wo es gar nicht anders geht.


Notes 9 als Anwender; erster Blick Hui, zweiter Blick leider Pfui.

28. Dezember 2012 Posted by Ralf Petter

Endlich über die Weihnachtsfeiertage bin ich auch mal dazu gekommen mir die Beta von Notes 9 Social Edition im Detail anzusehen. Vorweg schicken möchte ich, dass ich Notes seit über 12 Jahren sowohl als Anwender als auch als Administrator und auch als Entwickler verwendet habe und auch nach wie vor verwende. Ich stehe Notes prinzipiell sehr positiv gegenüber und war auch immer ein Verfechter des Standardclients auch wenn die ersten Versionen des Standardclients sehr buggy waren. Ich war aber speziell ab der 8.5.1 der Meinung, dass Notes auf einen sehr guten Weg war. Die neuen Features wurden immer stabiler und auch die Performance wurde langsam besser. Als ich dann gehört habe, dass bei Notes 8.5.4 bzw. jetzt Notes 9 nocheinmal Verbesserungen am UI gemacht würden, war ich begeistert.

Für den Test habe ich eine komplett neue Umgebung installiert, ohne irgendeine Übernahme von Altdaten, damit sollten die besten Voraussetzungen geschaffen sein, dass Notes 9 sein volles Potential ausspielen kann.

Der Startschirm von Notes sieht auch wirklich sehr gut aus. Die reduzierte Farbwahl und die Fonts sehen wirklich sehr stimmig aus.



Auch die Mailansicht sieht auf den ersten Blick sehr ansprechend aus und erzeugt ein starkes ich will das so bald wie möglich auf meinem Arbeitsrechner haben .



Aber all diese Dinge haben auch schon in 8.5.3 schon ziemlich gut ausgesehen und leider hat die IBM es versäumt das wichtigste zu machen. Die Dinge in Notes die bisher schon total veraltet und vom Design inkosistent waren auf das Design von 8.5.3 oder 9 zu heben. In diesem Bereich versagt Notes 9 völlig. Eher ist es so, dass neue Inkosistenzen dazu gekommen sind.

Und bei diesen Dingen im alten Design handelt es sich nicht etwa um wirklich selten verwendete Features. Hier ein paar Beispiele:


Der Öffnen Dialog eine sehr of verwendete Funktion sieht immer noch weitgehend wie in Notes 7 aus. Die Fensterdekorationen und auch der Hinweis für die Vergrösserung des Fensters sind für Windows 7 vollkommen untypisch. Die Icons passen überhaupt nicht zum Rest des Clients. Die Knöpfe sehen ziemlich nach Windows 98 aus.

Übrigens im Designer wurde der selbe Dialog gegen einen neuen ausgetauscht, der nicht nur eine Windows 7 Fensterdekoration sondern auch die richtigen Knöpfe und auch ganz andere Icons für die Anwendungen und Ordner verwendet. Man muss aber sagen, dass auch diese Icons noch im 8.x Gewand sind und von der Farbe nicht zu Notes 9 passen :-( Wie viel Aufwand wäre es wohl gewesen diesen Dialog ohne Workingset Rubrik auch im Client zu verwenden.


Super konsistent sind auch die Beschreibungen ("On My Computer" vs. "local").


Fast noch schlimmer, der Passwortdialog von Lotus Notes der ebenfalls schon lange nicht mehr neu designed wurde.



Dieser Dialog ist die erste Visitenkarte die jeder Anwender bei der Verwendung von Notes bekommt. Leider vermittelt dieser Dialog und vor allem auch der Schlüsselring ein für das Jahr 2012 unerträgliches Windows 98 Feeling.

Alle Dialogboxen in Notes verwenden total unterschiedliche UI Widgetsets.Hier mal eine kurze Zusammenstellung was die UI Designer der IBM so an verschiedenen Buttonstilen zu bieten haben.

 
 


Es kann doch nicht sein, dass ein und die selbe Awendung vier verschiedene Stile für normale Schaltflächen in Dialogen (In normalen Notesmasken wird natürlich wieder eine andere Optik benützt) verwenden muss. Bevor man das bereits gute Design der Notes PIM CA's wieder komplett überarbeitet wäre es doch mal an der Zeit gewesen, eventuell alte Dialoge an das aktuelle Design anzupassen. Übrigens wenn man für die Schaltflächen die Widgets vom Operating System verwenden würde, wie in den Eclipseteilen der Anwendung, dann hätte man automatisch immer einheitliche Schaltflächen und diese würden auch immer automatisch nativ aussehen.

Das selbe gilt natürlich für alle anderen UI Elemente genauso. z.B. für die Checkboxen.

Einmal richtig, wie es unter Windows 7 aussehen soll.

Dann wieder im Stil von Windows 98 und das nicht etwa an einer ganz anderen Stelle sondern im selben Einstellungsdialog von Notes 9!

Ebenfalls unverständlich die schon unter Notes 8 wie ein Fremdkörper wirkende Follow Up Ansicht, die bei uns in der Firma sehr gerne verwendet wird, wurde nicht aktualisiert. Wie viel Aufwand wäre das wohl gewesen (hochgerechnet mit testen und übersetzen vielleicht 1 Mannwoche).


So passen halt weder die Schriftarten, noch die Aktionsleiste noch die Spaltenköpfe noch das generelle Design der Ansicht zum neuen bzw. auch nicht zum 8.x.x Inbox design.

Das in der Maildatenbank für die Follow Up Funktion unterschiedliche Symbole für die Darstellung der selben Priorität verwendet werden, ist da nur noch die Spitze des Eisbergs.

z.B. im Dialog zur Erstellung eines Follow Ups
 z.B. in der Inbox View


Sollte doch normal eine Bildressource sein und dann überall gleich aussehen oder nicht?

Auch uralte Bugs bei der Fontauswahl wie z.B. SPR KSOR/USEJ3 im Standardclient sind in Notes 9 noch immer nicht gefixt.

Man könnte diesen Rant jetzt ewig fortsetzen, aber das erspare ich mir. Als Resumee bleibt Notes 9 sieht auf den ersten Blick fantastisch aus, aber leider hat die IBM wieder nur die Komponenten die bereits unter Notes 8 Standard sehr gut ausgesehen haben verbessert. Die anderen Komponenten sehen nach wie vor wie in Notes 7 aus und werden berechtigter Weise von Endbenutzern sehr häufig kritisiert.

 P.S. Ich bin nach wie vor der Meinung, dass IBM Notes eine gute Software ist, aber leider wird nie dieser letzte Aufwand betrieben um die ganzen Ecken und Kanten abzuschleifen die derzeit verhindern, dass Notes eine von Anwendern gliebtes Programm wird.





Einen Notesagenten aus einem cmd script starten.

4. Dezember 2012 Posted by Ralf Petter

Im atnotes Forum wurde die Frage gestellt, wie man einen Notes agent aus einem cmd Befehlszeilenscript aufrufen kann. Über Befehlszeile oder über eine URL ist das relativ schwierig, da aber Lotus Notes sein API über COM anbietet ist es ein leichtes dass in einem vbscript zu implementieren. Dieses vbscript kann dann aus dem cmd script aufgerufen werden.


Dim s
Dim db
Dim agent
Set s=CreateObject("Lotus.NotesSession")
Call s.Initialize
Set db=s.GetDatabase("servername","db.nsf")
Set agent=db.GetAgent("agent")
Call agent.Run
servername, db.nsf und agent müssen natürlich angepasst werden.

IBM Connections 4 Profile und Dateien jetzt auch für Notes und Domino-Kunden inklusive

14. November 2012 Posted by Thomas Bahn

IBM ConnectionsLotus Notes
Ab sofort dürfen Kunden, die einen aktiven Wartungsvertrag für IBM Lotus Notes und Domino haben (und also berechtigt sind, die Version 8.5.3 zu nutzen), auch IBM Connections 4 Profile (Profiles) und Dateien (Files) installieren und nutzen (IBM Connections 3.01 war ja schon seit letztem Jahr inklusive).

In zwei Wochen, am 27. November kommt dann auch die Berechtigung für den Tivoli Directory Integrator in der Version 7.1.

Quelle: Ed Brills Blog,
http://www.edbrill.com/ebrill/edbrill.nsf/dx/updating-entitlements-in-notesdomino-8.5.3

Problem beim Build von Plugins für Notes in PDE

11. November 2012 Posted by Ralf Petter

Beim letzten Update meiner diversen selbst erstellten Plugins zum Notes Client kam es zu einem rätselhaften Fehler. Ich habe alle Plugins ausgiebig durchgetest, in dem ich Notes aus Eclipse aufgerufen habe. Alles lief absolut problemlos. Also in Eclipse eine Updatesite erstellt und alle Plugins bauen lassen. Der Buildprozess lief ohne ersichtlichen Fehler durch. Doch nach der Ausrollung der neuen Plugins in unsere Notesumgebung kam es plötzlich an manchen Stellen der Anwendung zu Abbruchfehlern (The method beginTask(String, int) of type DummyProgressMonitor must override a superclass method). Eine schnelle Kontrolle in Eclipse zeigte aber alles in Ordnung. beginTask überschreibt die Methode beginTask in IProgressMonitor. Auch funktionieren die Plugins einwandfrei, wenn ich Notes aus Eclipse starte.

Eine kurze Internetrecherche zeigt, dass es im JDK 1.5 ein Problem gab, dass die @Override Anotation beim Überschreiben von Methoden aus Interfaces nicht zulässig war. Aber ich verwende doch überall das 1.6 JDK. Also, die Ausgabelogs des Build nach Error durchsucht und in den Builds an jeder Stelle an der ein Interface überschrieben wird, beim Compilieren die oben angeführte Fehlermeldung gefunden. Hm alles klar, das Plugin Development Environment verwendet für den Build für die Updatesite einen 1.5 Compiler statt eines 1.6, obwohl ich in den Standardeinstellungen von Eclipe überall 1.6 festgelegt habe.

Die Lösung fand sich im MANIFEST.MF file des Plugins. Dort war die Direktive "Bundle-RequiredExecutionEnvironment: JavaSE-1.5" angegeben. Diese Direktive wirkt scheinbar ausschließlich auf den Buildprozess beim Erstellen einer Updatesite. Beim normalen Build für den Test des Plugins aus Eclipse wird diese Einstellung nicht verwendet. Diese Direktive kann auch über das UI eingestellt werden und sollte natürlich für den Export in Lotus Notes auf 1.6 stehen.


Für mich haben sich aus diesem Problem zwei Lehren ergeben. Erstens immer die erstellten Logs des Buildprozess durchsehen, da Eclipse keinen Fehler bringt, wenn beim Build Fehler kommen. Und zweitens immer nach dem Erstellen der Updatesite noch einmal alles durchtesten.

Profiling mit der IBM JVM von Lotus Notes (Teil 2)

8. November 2012 Posted by Ralf Petter

Nachdem wir im ersten Teil die IBM Support Assistant Workbench installiert haben, wollen wir uns diesmal ansehen wie man den Healthcenteragent in die JVM von Notes installiert und welche Einstellungen man anpassen muss, damit das Profiling funktioniert.

Als erstes muss man den Healthcenteragent aus der Workbench extrahieren. Man ruft dazu das Hilfecenter auf.



In diesem wählt man in der linken Seitenleiste zuerst den Eintrag "Tool: IBM Monitoring and Diag..." dann den Punkt "Monitoring a running..." und dann "Installing the Health.."  Auf der rechten Seite wird dann eine Liste mit den Agents angezeigt. Für Lotus Notes unter Windows sollte man den "Windows x86 32 bit" auswählen.


Nach dem Anwählen des Agent erhält man ein Zip File, dass man entpacken muss. In dem Zipfile befindet sich ein Ordner "jre". Den Inhalt dieses Ordners muss man in das jvm Verzeichnis von Notes einkopieren. Unter Windows befindet sich dieses standardmäßig in "C:\Program Files (x86)\IBM\Lotus\Notes\jvm". Eventuell ist schon eine ältere Version des Healtcenteragent installiert. Diese kann problemlos überschrieben werden. Falls man mit eingeschränkten Rechten arbeitet, muss man eventuell noch das Administratorpasswort eingeben. Wichtig ist, dass der Inhalt des jre Verzeichnis aus dem zip wirklich genau in die Verzeichnisstruktur der jvm passt.

Nachdem der Healthcenteragent in der JVM installiert ist, muss man noch den Aufruf der JVM von Notes anpassen, damit der Agent bei jedem Start von Notes aktiviert wird. Dies erreicht man in dem man die Datei "C:\Program Files (x86)\IBM\Lotus\Notes\framework\rcp\deploy\jvm.properties" editiert. In diese Datei muss erstens der Eintrag "vmarg.Xhealthcenter=-Xhealthcenter:port=1999" ergänzt und die Optimierung "vmarg.Xtrace=-Xtrace:none" ausgeschaltet werden.

Die Datei sollte dann ca. so aussehen:


Die Portnummer 1999 sollte natürlich frei sein. Diese Portnummer wird verwendet, damit sich die Workbench mit der laufenden JVM verbinden kann.

Die Datei speichern und Lotus Notes neu starten.

Sobald Notes neu gestartet ist, kann man in der Workbench das Profiling starten.


IBM Monitoring and Diag... auswählen und auf starten klicken.



Einmal weiter klicken und dann in dem Verbindungsdialog die Portnummer die man in der jvm.properties verwendet hat angeben.


Den Haken bei Scan next 100 port for available connections kann man rausnehmen, wenn man die Portnummer richtig angegeben hat. Dann auf weiter klicken.

Wenn alles richtig funktioniert hat, dann sollte die Workbench die laufende Notes jvm gefunden haben und man kann den Assistent mit fertigstellen abschließen.

Nach wenigen Sekunden beginnt die Aufzeichnung des Überwachungsvorgang.



Man kann nun die verschiedenen Bereiche für die schon Daten gesammelt wurden aufrufen. z.B. die Garbagge Collection Ansicht.




Man bekommt auch mehr oder weniger sinnvolle Hinweise, dass etwas nicht richtig konfiguriert ist.

Im dritten Teil der Profiling Serie möchte ich dann zeigen, wie man einzelne Methoden seiner Klassen überwachen kann.

Übrigens falls man sein Programm statt mit der IBM JVM auch mit der Oracle JVM laufen lassen kann, gibt es einen viel einfacheren und meiner Meinung nach auch besseren Profiler.

P.S. Wenn man nicht gerade die Workbench verwendet, sollte man in der jvm.properties den Healthcenter Eintrag wieder auskommentieren, damit man keinen unnötigen Overhead produziert.


Profiling mit der IBM JVM von Lotus Notes (Teil 1)

7. November 2012 Posted by Ralf Petter

Für die JVM von Oracle gibt es einen gratis Profiler der sehr gut funktioniert und auch sehr einfach einzusetzen ist. Leider kann dieser Profiler nicht mit der IBM JVM die z.B. in Lotus Notes genutzt wird, verwendet werden. Auch die IBM bietet einen Profiler an, der aber leider ziemlich aufwendig zu installieren ist.

Der erste Schritt ist, dass man falls man die IBM Support Assistance Workbench noch nicht hat, diese unter http://www-01.ibm.com/software/support/isa/ herunterlädt.

Der Inhalt der heruntergeladenen Datei muß nun in einen temporären Ordner entpackt werden.
Der temporäre Ordner sollte auf der gleichen Platte wie das Installationsziel sein, da sonst der Installer während der Installation abstürzt.

Im entpackten Ordner muß man dann die Datei "setupwin32.exe aufrufen.

Die Eula abnicken und solange weiter klicken, bis das Programm fertig installiert ist.

Danach sollte man wenn man mit einem Benutzer arbeitet, der auf das Programmverzeichnis keine Schreibrechte hat für die Workbench ausnahmsweise Schreibrechte vergeben. Der Updater der beim Starten der Anwendung läuft ist nicht schlau genug, dass er über die UAC höhere Rechte anfordert.


Jetzt kann man die Support Assistant Workbench starten. Den Anfangsassistenten kann man falls man nicht einen Proxy einstellen muß beherzt duchklicken. Es dauert dann etwas bis die Workbench sich aus der Updatesite im Internet die richtigen Updates gezogen hat.



Dann die Updates die er anbietet installieren, man braucht jedoch keine Produkt Addons installieren. Diese Seite einfach abbrechen.

Nach einiger Zeit sollte man dann die Meldung bekommen, dass die Workbench erfolgreich upgedated wurde.

Nach dem Fertigstellung muss man dann noch einmal  neustarten.

Jetzt kann man die JVM Healthcentertools in die Support Workbench installieren. Dazu muss man im Menü "Aktualisieren->Neue suchen..." den Punkte "Tool-Add-ons" aufrufen.


Nach einiger Nachdenkpause der Workbench kann man dann in das kleine Suchfeld den Begriff "health" eingeben und dann das Healthcenter auswählen.

Danach wieder die Lizenzbedienungen abnicken und wenige Minuten später sollten auch die Addons installiert sein. Jetzt will die Workbench natürlich wieder einmal neu starten.

Nach dem Neustart ist die Workbench mit dem JVM Profiler soweit startklar.

Die Installation des Healthcenteragent in Lotus Notes und welche Einstellungen in Lotus Notes angepasst werden müssen damit der agent funktioniert, beschreibe ich dann in Teil 2.
 

vbscript in eclipseplugin verpacken und aufrufen

31. Oktober 2012 Posted by Ralf Petter

Ein vbscript in ein Eclipse Plugin einbauen und aus diesem Plugin aufrufen, ist nicht ganz einfach. Folgende Schritte müssen beachtet werden.

1. Das vbscript muss in das Plugin entweder direkt in das Hauptverzeichnis, oder ein beliebiges Unterverzeichnis des Plugins importiert werden.



2. In den build.properties des Plugins muss das script zum export ausgewählt sein, da es sonst beim Pluginexport nicht in das Plugin eingefügt wird.


3. In dem Feature mittels dem dieses Plugin installiert wird, muss man die Option, dass das Plugin bei der Installation entpackt wird, anwählen. Sonst wird das vbscript in ein jar eingepackt und man kann es nicht ohne grössere Probleme aufrufen.


4. Wenn die Vorbereitungen passen, dann kann man das vbscript aus jeder Eclipse RCP wie z.B. Lotus Notes mit folgenden Javacode aufrufen.


URL url = FileLocator.find(Activator.getDefault().getBundle(), 
new Path(File.sperator+"test.vbs"), null);
Process p = Runtime.getRuntime().exec(System.getenv("WINDIR") + File.seperator+"system32"+File.seperator+"cscript.exe \""
+ FileLocator.resolve(url).getPath().substring(1) + "\"");

Natürlich kann man mit der selben Vorgehendsweise auch andere ausführbare Dateien, die in einem Plugin enthalten sind aufrufen.

Ich verwende diese Technik z.B. in einem Plugin das in Lotus Notes mithilfe von externen vbscripts ein Hardware und Softwareinventory des Rechners auf dem der Notesclient installiert ist erstellt. Wie man seinen Code bei jedem start des Notesclient automatisch ausführen kann, hebe ich mir dann für einen anderen Post auf.