Showing posts with label Eclipse. Show all posts
Showing posts with label Eclipse. Show all posts

Saturday, April 18, 2015

Remote Debug an IBM Notes client from Eclipse

Normally the easiest way to debug Notes plugins is to start the Notes client directly from eclipse. I have explained how to do this in my tutorial: "Configure Eclipse 4.3 to develop plugins for Notes Part 1 and Part2". But sometimes problems are specific to a special client environment or user configuration and can not be debugged in a test environment. Yesterday i had such a problem with a feature which works great, when i launched the client from eclipse, but fails when i start the client like a user will do.

Fortunately the JVM of the Notes client has a built in remote debugging facility. It can be activated with some small modifications in the JVM.properties configuration file:

Locate the JVM.properties of the Notes client installation you want to debug. You can find it in the  "..\framework\rcp\deploy" directory in your IBM Notes program path.


Friday, April 17, 2015

How to tell Notes that it should roam the preferences of your own plugins too.

One of the best things about Notes is that it can synchronize your settings on different devices. So you have for example the same settings on your Desktop and on your Laptop. This feature is called roaming. This works really great for all IBM provided Features, but when you have deployed your own or third party eclipse features to your Notes client the settings of them will not roam to your other clients as the IBM Features do. This is very annoying for your users. So i have analyzed the whole roaming process in the client and discovered, that IBM has already implemented an mechanism to activate the roaming feature for 3rd Party Plugins. I have not found any documentation for this on the internet, but it works without any problems.

So let's have a look how the roaming of Preferences in the Notes Standard client works. If roaming is enabled for your user you will have a "roamingdata.nsf" on your client and on the server. In this database there is one document for every plugin which contains the preferences. On the client start this database is replicated with the server and then the settings in your notes data/workspace folder gets updated with the settings in the documents in "roamingdata.nsf". When you end the client every setting you have changed will be updated in the corresponding document in "roamingdata.nsf" and all changed documents will be replicated to the server.

Follow this easy steps to enable the roaming of the settings for your own plugins:

The first step is to retrieve the existing configuration file for the roaming service from the "com.ibm.notes.roaming.provider" plugin. To do this copy the plugin from the "C:\Program Files (x86)\IBM\Lotus\Notes\framework\shared\eclipse\plugins" to your desktop and change the extension of the plugin from ".jar" to ".zip" Then open this archive file and extract the roamingconfiguration.xml file in the configuration folder to a local folder. This file contains the complete configuration of the roaming service


Thursday, November 6, 2014

Notes client with embedded sametime 9 crashes when launched from eclipse

I often start my Notes client from eclipse to debug our plugins in the client. I have described how to configure eclipse to start notes from eclipse in an older blog post. Yesterday our Admin has installed the sametime 9.0 embedded client in my Notes installation and after that Notes crashes when started from eclipse with the following error in the error log:

Unhandled exception
Type=Segmentation error vmState=0x00040000
J9Generic_Signal_Number=00000004 ExceptionCode=c0000005 ExceptionAddress=94601766 ContextFlags=0001007f
Handler1=001EA730 Handler2=003CC270 InaccessibleAddress=00000000
EDI=94693AC0 ESI=722F4A00 EAX=00000000 EBX=723F90A0
ECX=00000004 EDX=00000020
EIP=94601766 ESP=72D3FCD8 EBP=723F90BC EFLAGS=00010216
GS=002B FS=0053 ES=002B DS=002B
Module=C:\Users\petterr\AppData\Local\workspacenotes\.metadata\.plugins\org.eclipse.pde.core\IBM Notes\org.eclipse.osgi\bundles\1214\1\.cp\os\win32\NativeNetInfo.dll
Module_base_address=94600000 Offset_in_DLL=00001766
Target=2_40_20131231_180656 (Windows 7 6.1 build 7601 Service Pack 1)
CPU=x86 (4 logical CPUs) (0x1f890d000 RAM)
----------- Stack Backtrace -----------
(0x94601766)
(0x94602039)
(0x9460288D)


Wednesday, July 2, 2014

Extension Spy works now in Notes 8.5.x and 9.0 too

The Extension Spy i presented in one of my latest posts had an dependency on Notes 9.0.1 so that it will not work in versions prior 9.0.1. I have removed this dependency and now the plugin should work in all Notes 8.5.x and 9.0.1 standard clients. If you had problems with the installation please remove the widget and reinstall the new version. I have tested it with 8.5.3 and 9.0.1. Please leave a comment,  if you have still  problems with the new version on your client.


Sunday, June 29, 2014

A deep look under the hood of the Notes Standard client.

The IBM Notes Standard client is an eclipse RCP (Rich client application) which has hundreds of extension points to extend the functionality of the application. This extension point allows you to extend notes in ways which were absolute impossible to do in versions prior Notes 8. The only problem is that the documentation of the extension points is still very weak and i have no hope that this will improve significantly in the next time.

So i have created a tool to graphically browse the extension registry of a running Notes client. It shows you all possible extension points with the defining plugin in in a tree structure. You can open every extension point and see which plugins extend this extension point with what parameters.

See the following screenshot for an example. I have opened the com.ibm.rcp.ui.shortcutButtonSet extension point in the com.ibm.rcp.ui (Marked with a red frame). This is the extension point which has to be used to extend the masthead in Notes 9 with your own icons. We see that all actions that are available in Notes are defined in the com.ibm.notes.client plugin (Marked in green) In the next level of the tree you can see what values the com.ibm.notes.client uses to extend the extension point. This can be very valuable source to find out how this extension point works and what to do to use this point for your own extension.


Thursday, June 26, 2014

Eclipse 4.4 Luna has been released

Eclipse 4.4 the newest and greatest release of my preferred IDE and RCP Development platform has been released. After the very buggy start of the 4.x releases with 4.1 and 4.2 the 4.x code stream is now very stable and the performance is back to an acceptable level. So if you are still developing in Eclipse 3.x now is the time to step up and see how much eclipse has improved in the last years.
 

You can find details what's new and which projects are included in Eclipse 4.4 at https://projects.eclipse.org/releases/luna

The downloads are available at http://www.eclipse.org/downloads/

If you like eclipse please donate some money to the eclipse foundation to support their great work.

Wednesday, June 25, 2014

Launch the Domino Designer from Eclipse to debug your custom Designer extensions.

Cameron Gregor asked me in a comment whether it is possible to launch the Domino Designer from eclipse in the same way like the Notes client and the answer is yes this is possible. In this post i will describe what you have to change in your existing notes launch config to start the Designer from eclipse. This enables you to debug Extensions for the designer or XPages. To follow the steps you need a working Notes plugin target and a launch config for the notes client. If you need help with this you can learn how to do this in my tutorial "How to configure Eclipse 4.3 to develop plugins for Notes Part 1 and Part2".


The goal is to have a full working Domino Designer, launched in Debug mode from eclipse.

Domino Designer launched in Debug mode from eclipse

The first step is go to your eclipse and open the "Debug Configurations" dialog.

Change Debug Configurations in Eclipse

In there duplicate your existing notes launch config.

Duplicate your IBM Notes Launch Configuration

Then change the Name and the "run a product" field to Domino Designer and com.ibm.designer.domino.product.dde.

Change Run a product com.ibm.designer.domino.product.dde

Switch to the "Arguments" Tab and change the Program arguments to

-vm ${rcp.home}/../jvm/bin\j9vm\jvm.dll
-personality com.ibm.designer.domino.personality
-product com.ibm.designer.domino.product.dde
-debug
-console
-nl en_US


Save your changes with the "Apply" button. Then click the debug button to launch Designer. Be sure that you have no open instance of Notes/Designer because only one instance can be open at the same time.

Change program arguments to launch IBM Domino Designer from Eclipse

When everything works, you will get a designer window with a welcome screen. To close the welcome screen, choose "Close Perspective" from the Window menu.

Close Perspective in IBM Designer

Then you should see your normal Designer UI. Maybe you get many error message in the Problem view that some Java elements cannot be resolved. No problem we will fix this in the next step. 

AbstractCompilePage cannot be resolved

Open the Preferences of Designer and navigate to "Plug-in Development" -> Target Platform. Change the location from "NotesProgDir\framework\eclipse" to "NotesProgDir\framework\rcp\eclipse". Click Apply and "Ok". Eclipse will reload the target platform.

Change Target Platform of Eclipse

After reload all error message will be solved automatically in the background. Now you can try or debug your extensions in  Designer.


Wednesday, June 11, 2014

Eclipse.org got a new beautiful design

The Eclipse.org website got a complete overhaul. It has now a responsive design and looks fresh and beautiful compared to the old one. If you have not visited it lately, give it a try.



Thursday, June 5, 2014

Howto use Xulrunner instead of Internet explorer as browser component in a Notes RCP

One of the coolest features in Notes RCP applications is, that you can embed a browser widget in your application. You can use the browser widget as a document viewer, to view an interactive map for example with openlayer, or to visualize your data as a chart with dojo chart running inside the browser widget.


Tuesday, June 3, 2014

Eclipse 4.4 Luna - Release Teaser

Eclipse 4.4 Luna will be released soon. Watch this little teasers to get an idea how this fantastic new release will look like and what new features will be available.


Monday, November 4, 2013

Eclipse Quo Vadis?

Heise hat heute einen sehr interessanten Kommentar zu der Lage der Entwicklung des Eclipse Ökosystems veröffentlicht. Ich bin auch der Meinung, dass Eclipse momentan ein relativ großes Problem hat Entwickler für die Arbeit an der Basis (SWT/jFace und dem gesamten darauf aufbauenden Technologiestack) zu begeistern. Es konnten die Ressourcen die IBM nicht mehr in dem Aussmaß wie früher zur Verfügung stellt nicht gleichwertig von anderen Eclipse Membern ersetzt werden.

Ich hoffe auch, dass die IBM aufgrund von Problemen die in Eclipse basierenden Rational Produkten auftreten sein Engagement wieder etwas hochfahren wird.

Wednesday, August 7, 2013

Contextsensitive help for Notesplugin developer in Eclipse

When you develop plugins for the notes platform the target platform, does not contain any javadocs. So you do not get context sensitive help on java classes in Eclipse. This makes the development especially for beginners needlessly difficult and annoying.

Here is an example: You want to make a new SWT Text Field and get only a the Constructor signature with not very helpful parameter names. What the hell is arg1? So you have to open a browser go to the javadocs of SWT and search for the Text class and after reading the description go back to eclipse.

 

Wouldn't it be so much nicer if you can get useful parameter names and the javadoc direct in the syntax completion window like you get it when you develop plugins against the standard RCP target.


Follow this steps to teach the eclipse IDE that it shoukld search for the source in another place.

First go to your plugin in the package Explorer in your eclipse IDE. Open the  "Plugin Dependenices" and search for the plugin for which you want do add java source. In our example this is org.eclipse.swt.win32.win32.x86.versionNumber.



Download the Eclipse RCP source from the eclipse download archive page in the correct version. In our example the correct version is 3.6.2.

Unzip the "org.eclipse.swt.win32.win32.x86.source.version.jar" from the downloaded SDK to a new directory where you want to store all java source packages for Notes. Do not place this directory somewhere in the Notes program directory.

Right click the Notes plugin in package explorer and select "Properties" from the context menu. Paste the fully qualified path to the extracted source plugin in the Location path or select external File and browse to the source plugin file. Then finish the dialog with ok. Now your have context help for every SWT Class in your eclipse IDE.


You can repeat the above steps for other plugins in Notes which are eclipse based, for example jface, eclipse forms or the workbench. Be aware, that most other plugins are not version 3.6.2, but 3.4.2. So you have to download the 3.4.2 SDK from the download archive.

I think this is really a great step forward for every plugin developer for Notes.



Wednesday, June 26, 2013

Eclipse 4.3 Kepler has been released.

Today the Eclipse Foundation has released Eclipse 4.3 (Kepler). Eclipse 4.3 is really a step in the right direction after the little bit disappointing 4.2 Version. Especially the performance of many functions like the switch to other editor parts has improved. Many other projects like WTP, RAP, BIRT has although seen great new features. So i really recommend, that every User of Eclipse 4.2 should upgrade his installation to 4.3. Users of the older 3.x code stream should wait till the first Service Release of 4.3 which i expect in September.

You can find all new features and bugfixes with screenshots in the "What's new" chapters of the online help of eclipse.

 

Tuesday, April 16, 2013

Tabris a cool way to reuse your Notes/Eclipse RCP skills in the mobile app development

Today the final version of Tabris has been released. Tabris is a native peer client for a RAP (Remote Application Plattform formerly Rich Ajax Plattform) Server. RAP is a mature technology to run SWT/Jface Applications and Eclipse RCP Plugins on a server and render the UI to different clients like a webbrowser or native clients. The RAP Server and the Webclient are opensource. With the Tabris SDK they first commercial native client to RAP Server for Android and IOS is available. So you can reuse your existing SWT/Jface skills and build native apps for Android and IOS right like you are building Plugins for Notes today. Demos of the Tabris functionality are availabe on the google playstore. I think this is really a very cool technology and every Eclipse RCP developer should try this out.

Demos of RAP for Webclients


Saturday, February 16, 2013

Lotusscript Code aus Java plugin aufrufen

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.

Wednesday, January 9, 2013

Detail Formatter erleichtern das Debuggen in Eclipse

Wer kennt nicht diese ärgerlichen Klassen, die toString() nicht überschreiben und deshalb im Debugger keine vernünftigen Informationen zu Objekten dieser Klassen angezeigt werden.


Man sieht hier auf den ersten Blick nur, dass das eine Objekt die id 18 hat und das andere die id 31. Erst wenn man das Objekt aufklappt, wird einem eine unter Umständen lange und unübersichtliche Liste aller Felder dieses Objekts angezeigt.  Bei eigenen Klassen kann man die fehlende toString() Methode ja noch nachrüsten, aber bei fremden Klassen wäre man verloren wenn es nicht die "Detail Formatter" Funktion von Eclipse geben würde.

Einfach einen Rechtsklick auf das Objekt für den man einen Formater erstellen und die Funktion "New Detail Formatter" aufrufen.


Jetzt kann man den Javacode angeben, der den String berechnet, den man gerne als Anzeige für diese Klasse im Debugger haben möchte. In meinen Fall hätte ich gerne für jedes Person Objekt den Vor und Nachname angezeigt.


Schon haben wir in der Detailanzeige des Debuggers nicht mehr die Objektid sondern schon unseren schönen aussagekräftigen Inhalt.



Immer noch nicht ganz ideal, den viel schöner wäre wenn man nicht auf eine Zeile klicken müsste, sondern wenn gleich unter Value der berechnete Wert stehen würde. Aber auch dafür bietet Eclipse eine Lösung. Unter Preferences->Java->Debug->Detail Formatters kann man die Option "As the label for variables with detail formatters" auswählen und schon wird der berechnete Text auch in der Value Spalte angezeigt.



Die Detail Formatters bleiben persistent, das heißt sobald ich mir diesen einmal für eine Klasse erstellt habe, wird dieser in jeder Debugsession von Eclipse verwendet. Ich muss also jeden "Detail Formater" nur einmal definieren.


Sunday, November 11, 2012

Problem beim Build von Plugins für Notes in PDE

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 UIProgressMonitor. 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.

Tuesday, November 6, 2012

Content Assist in Domino Designer oder Eclipse anpassen.

Aufgrund der historisch gewachsenen API der Notes.jar können die Syntaxvervollständigungsvorschläge teilweise etwas verwirrend sein. Es gibt die selben Typennamen in bis zu 4 Paketen. Es ist auf den ersten Blick nicht leicht zu erkennen welchen Namen man jetzt importieren soll.


Der Richtige in dem Fall wäre der Erste.

Eclipse bzw. DDE bieten aber eine komfortable Einstellungsmöglichkeit mit der man die Vorschläge für die falschen Paketen ausschließen kann.

Unter DDE muss man den Menüpunkt "Datei->Vorgaben" und unter Eclipse "Windows->Preferences" aufrufen. Dort kann man dann  unter "Java->Darstellung->Typfilter" die Pakete hinzufügen, für die man keine Syntaxvervollständigung mehr haben will.


Und schon klappt es auch mit der verbesserten Syntaxvervollständigung.


Übrigens für Entwickler die viel mit SWT und jface arbeiten, kann man mit der selben Funktion auch awt und swing unterdrücken, da es auch hier viele Überschneidungen der Typnamen gibt.

Wednesday, October 31, 2012

vbscript in eclipseplugin verpacken und aufrufen

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.

Monday, October 22, 2012

Internationale Sonderzeichen in Lotus Notes plugins

Wenn man in seinem Javacode internationale Sonderzeichen wie z.B. Umlaute in String Literalen verwendet, kann es passieren dass nach dem Export des Plugins die Sonderzeichen falsch angezeigt werden. Dies passiert dadurch, dass beim Kompilieren von Plugins standardmäßig nicht UTF-8 sondern ein nicht Unicode fähiger Characterset verwendet wird. Man kann das Problem einfach lösen, in dem man in die build.properties seines Plugins den Eintrag "javacDefaultEncoding.. = UTF-8" ergänzt.

Eine Beispiel "build.properties" Datei sieht dann folgendermaßen aus:

source.. = src/
output.. = bin/
javacDefaultEncoding.. = UTF-8
bin.includes = META-INF/,\
               .,\
               plugin.xml,\
               icons/


Dann sollten String Literale in diesem Plugin richtig angezeigt werden.
ad