RSS

Category Archives: Domino

Rendering HTML Code with DJANGO and DOJO

One of the things that I like about dojo is the django rendering engine. It provides an easy way to build HTML Templates and let you render values form a json object. The following example of a template is used to loop through a json array response.

<div>
{% for entry in feed.entries%}
<div style=”height: auto;”>
<div>
<div>{{entry.created}}</div>
<h2>
<a target=”_blank” href=”{{entry.link}}”>{{entry.title}}</a>
</h2>
</div>
<div>
<div>
{{entry.content|safe}}
</div>
</div>
</div>
{%endfor%}
</div>

This code is used in the dojo widget:

dojo.provide(“xptrss.list.feedcontroller”);
dojo.require(“dijit._Widget”);
dojo.require(“dojox.dtl._Templated”);
dojo.declare(“xptrss.list.feedcontroller”, [ dijit._Widget, dojox.dtl._Templated ], {
proxyurl:null,
feed : null,
templateString : dojo.cache(“xptrss.list.feedcontroller”,    “../../html/rssTemplate.html”),
targetid: null,
postCreate: function() {
var mySelf = this;
var xhrArgs = {
url : mySelf.proxyurl,
handleAs : “json”,
preventCache : true,
load : function(data) {
mySelf.feed = data;
mySelf.render();
dojo.style(mySelf.targetid +”_feedLoader”, {
display : “none”
});
},
error : function(error) {
alert(error);
}

}
var deferred = dojo.xhrGet(xhrArgs);
}

});

With the statement  templateString : dojo.cache(“xptrss.list.feedcontroller”,    “../../html/rssTemplate.html”) the html will be loaded. The “postCreation()” handles the loading of the values. With “mySelf.render()” the loaded JSON object will be applied to the HTML Template and the django engine loops through all entries and applies the code between {% for …. } {%endfor%} for each entry.

But what if an element in an entry (like the content value) is pure HTML Code?

The django engine is so clever and escapse all content correct, but we need the content unescaped in this particular case. The statement  {{entry.content|safe}} does the trick!

This is code from our new project XPages Toolkit.

 
Leave a comment

Posted by on July 19, 2013 in Domino, Java, XPages

 

POI 4 XPages Version 1.1.0 released!

Hi All

Only a few hours and I will travel with Roman, Peter and Andre to the IBMConnect2013. The last years “LotusSphere 2012” (the old name of the IBMConnect) was a game changer in my life. I meet great people like Niklas Heidloff, Philippe Riand, Martin Donnelly, Dan O’Conner and many more.

But these guys have inspired me to build myWebGate and POI 4 XPages.

We have greate news about both projects, but this post ist about POI 4 XPages. We have made some progresses on the project that we would like to share in the version 1.1.0:

  1. The POI 4 XPages supports now the version 3.9 of the brilliant Apache POI Project, which is the newest release
  2. We fixed some typos and a bug in the creation of Workbooks. If you try to export data to a sheet wich doesn’t exist on the exceltemplate and you choose “create” = “false”, the export fails. This was not the idea behind the “create”=”false” option. Now the export definition with this settings will be ignored, if the sheet doesn’t exist. (Marco Baumann has reported this issue at the gitHub.com)
  3. We implemented the POI  – ListObjectDataSource which is designed to export the java.util.List<?> object in version 1.0.1 but we did make a mistake in the value definition. This values have to be assigned with a SSJS function, but our binding was against a value property. We fixed this with a new “MethodBinding” assignment (like the createObject function from the ObjectDataSource in the ExtLib) called “buildValues”. This means that “values” is deprecated and only for backwards compatibilty available
  4. With version 1.1.0 we introduce a brand new feature in the workbook and document controll. A binding which we called postGenerationProcess. This feature is really powerful, let me explain why.

postGenerationProcess – all power of apache poi in your hand:

POI 4 XPages build your Workbook or Document with the “generate….” function. But when the action is started, you don’t have access to the Workbook or Document object. “postGenerationProcess” change this. In the postGenerationProcess your SSJS / Java Code will be executed, right before the Workbook or Document is transmitted from the server to the client.

The follwowing code in the postGenerationProcess prints the name of the first sheet on a workbook to the server console:

print( workbook.getSheetAt(0).getSheetName() );

While we are calling the postGenerationProcess, the POI 4 XPages Code assign the current workbook to the variable workbook, or the current document to the variable xwpfdocument. This variable are representation of the the following apache poi classes:

workbook: org.apache.poi.ss.usermodell.Workbook -> javadoc

xwpfdocument: org.apache.poi.xwpf.usermodell.XWPFDocument -> javadoc

Imagine what you can do now, afert a document or a workbook is created!

Have Fun
Christian

Download POI4XPages here

 

40th birthday – time for a present

Hello All

Today is my 40th birthday. I think this is a good moment for a little present. Today we release the first version of POI 4 XPages. A powerfull extension for the XPages community. I started developing this project in august 2012 focussed on the 4th DeveloperContest. But as a lucky guy, my boss nominated for the position as one of the OpenNTF Directors and they community voted for me.

The contest changed my role in this project. As a director you are not allowed to contribute projects for the contest. But our plans to release our POI 4 XPages extension where still intact. The pressure form the contest was gone,but  some short demonstrations to customers showed us the high value. So some of our team asked: “Why contributing POI 4 XPages – its so powerfull, it’s so handy and it’s such a strong work – Let us sell this piece of work”.

The answer was very simple: You have just given all the reasons, why we should opensource this project!”

So on my 40th birthday I can give the developer community a powerful extension. Generating Word and Excel Files out of XPages was never easier. The groundbreaking work was done by the Apache POI team, our job was to bring this in the XPages Developer Framework.

So I hope that every XPage developer enjoy this.

Download here

 
1 Comment

Posted by on December 22, 2012 in Domino, Java, XPages

 

Documents and Spreadsheets with XPages – the Idea (Part I)

In several projects we are faced with the request to export data to a spreadsheet (mostly excel) or build a document for ms-word. So our development team requested the following: “Build an extension that helps us generate word documents or export datasets to spreadsheets”.
After some research, I found a project called Apache POI.

Apache POI covers all the stories, which we try to implement. So let’s begin with the first story: “Generating a new ms-word document”.
The story is very simple, but also very powerful. In our example the starting point is a document like the OpenNTF Contributor License Agreement. This document is needed for a company to contribute code to OpenNTF. Typically, this document has some lines (fields), which you have to fill in with your values.  Let’s try to automate this process. We will build a form in the XPages application, where you can fill in your company name, address and other things. Then we modify the standard OpenNTF form a little bit, as you can see on the screenshot below:


In your XPages form we implement the new POI Document element and then we do some wiring:

  1. We define where the modified OpenNTF Licence Agreement is. This could be a file resource in the application, or a document accessible via view and a predefined key.
  2. Defining “Bookmarks”:
    As you see on the word document, we have defined several “<<NAME OF BOOKMARK>>” tags in the text. This text must be in the same style, so they are in the same “run” Element on the document.
  3. In our “POI Document” – Control could we now define a bookmark for each <<…>> element, which contains the name and a value.
  4. As you see, the value can be computed (so a binding to a viewScope variable is possible)
  5. We define a “download” button and connect the onClick event on a new action called “Generate Document”

The user can now fill in their values on the page and generate a customized word document.  Developers are able to build in applications to produce customized documents in a very short time.
In the next blog entries, we will show you how we have build an extension of this function.

 

Tags: , , , ,

Warum FAST Prototyping nicht RAD (Rapid Application Development) ist… und warum wir lieber SCRUM einsetzen

Innerhalb der WebGate Consulting AG, meinem Arbeitgeber, sind wir es gewohnt, wichtige Themen kontrovers zu diskutieren. Dabei werden natürlich auch Argumente von Spezialisten ins Feld geführt. Eine solche Diskussion hat mich zu folgendem Video geführt:

Natürlich bin ich nicht mit allem Einverstanden, was Herr Goslin innerhalb dieses Videos sagt, aber vieles davon hat mich zum Nachdenken angeregt. Vorallem die Aussage, dass ein Prototyp weggeschmissen wird, und danach wird nochmals neu begonnen. Gemäss James Gossling ist das Ziel eines Prototyps zu sehen, ob etwas so funktionieren kann, während Entwicklung mit Architektur und Engineering zu tun hat.

Ich glaube, dass wir gerade in der Notes / Domino Welt bezüglich FAST Prototyping und RAD einen grossen Fehler gemacht hatten. Betrachtet man RAD nämlich unter der Lupe, so sind im RAD sehr viele Ähnlichkeiten zu SCRUM zu entdecken. Und dabei geht es NICHT darum einen Prototypen zu bauen, sonderen Elemente um Element wird lauffähige Software entwickelt. Auch wenn dem Endkunden in kurzen Zyklen jeweils ein lauffähiges Element seiner Software gezeigt wird, sollte bei RAD vom Endprodukt her entwickelt werden.

Nun wird aber schon in der Beschreibung von RAD das Wort Prototype verwendet, was nicht sehr förderlich ist. Das Problem beim Prototype ist, dass “Abkürzungen” gemacht werden. So werden zum Beispiel Schichten vermischt oder gar übersprungen. Error Handling wird nicht implementiert und noch vieles weiteres wird nicht korrekt umgesetzt. Das gleiche Problem ergibt sich auch den vielen CodeSnippets, die im Internet herumschwirren. Die Snippets zeigen eine isolierte Funktionsweise eines Elementes auf. Auch hier werden einfach starke Vereinfachungen gemacht.

Wer jetzt bereits bei SCRUM nachgeschaut hat, fragt sich sicher, was denn anderst ist als bei RAD. Nun für mich ist eines der signifikaten Elemente, dass der Fokus auf den Stories des Users liegt. In kurzen Sätzen (3 Zeiler) definiert der Kunde, was er will. Und er gewichtet, was er haben will. Der Architekt der Software hingegen ermittelt die Abhängigkeiten der Stories und kann so aufgrund der Kundengewichtung ermitteln, welche Stories wie miteinander zusammen hängen. Das iterationsbasierte Vorgehen liefert dem Kunden lauffähige Software mit abgeschlossenen Userstories. Und abgeschossen heisst eben: ABGESCHLOSSEN. Kein Prototype, sondern es ist für die Userstorie alles umgesetzt und es wurde (da auch hier der Scope auf dem Endzustand ist) eine saubere Architektur und korrekte Entwicklungsprinzipien umgesetzt.

Mit dem Fokus auf die Userstory wird automatisch auch der Fokus auf den Kundennutzen gelegt. Ich glaube dies hilft auch in der Offertphase. Die Frage ist dann nämlich ganz simpel, ist die Umsetzung der Userstories die Offerte wert? Ist mein Nutzen so gross, dass ich sehr gerne das Geld ausgebe?

 

Tags: , , , ,

N-Tier Struktur mit IBM Domino

In der modernen Software Architektur ist das Schichtenmodell (N-Tier) Standard und weit verbreitet. Die Vorteile liegen auf der Hand, da die Trennung von Präsentation, Logik und Datenhaltung auch eine horizontale Entwicklung begünstigt.
Die traditionelle Lotus Notes / Domino Entwicklung hat die Trennung von Präsentation, Logik und Datenhaltung bis jetzt nicht gefördert. Durch das Fast-Prototyping wurden sogar bewusst die Schichten übersprungen und die vertikale Entwicklung, sowie knappe Budgets haben eine saubere Trennung der Schichten stark behindert. Die logische Konsequenz war, dass Domino den Ruf bekam, nicht modern zu sein, keine N-Tier Struktur zu unterstützen. Automatisch wurde somit Domino von Architekten, die N-Tier als Muss-Anforderung definierten, gestrichen. Und dies zu Unrecht. Ich habe während meiner Programmiererzeit schon viele Anwendungen gesehen, die keine N-Tier Struktur besassen, aber auf Plattformen liefen, die als N-Tier Plattformen galten. Genau so habe ich einige Domino Anwendungen gesehen, die das N-Tier Architektur Prinzip passgenau umgesetzt hatten.
Mit dem neuen Relese 8.5.3 geht aber IBM konsequent den Schritt weiter, um diesen Missstand zu bekämpfen. XPages impliziert eigentlich eine N-Tier Struktur. Es ist jetzt nicht nur möglich Applikationen nach den N-Tier Architektur Prinzipien auf zu bauen, nein es ist sogar gewünscht.

Aber wie erreichen wir das? Hier einige Ideen dazu:

1. Verstehen, was Präsentation, Businesslogik und Datenhaltung bedeutet
2. Horizontale Entwicklung fördern
3. Definierte Schnittstellen zum Datenaustausch zwischen den Ebenen nutzen (zb. Präsentation zu Logik via JSON/REST, Logik zu NSF Store via NotesAPI)

Und vor allem darüber sprechen (und zwar mit dem neuen Vocabular)

 
Leave a comment

Posted by on February 18, 2012 in Domino, Java, XPages

 

Tags: , ,

IBM Domino ist in der Neuzeit angekommen

An einem Kurs für Fachvorgesetzte von Auszubildenden habe ich folgenden Satz aufgeschnappt und mir verinnerlicht: “Ihr müsst Euren Absolventen keine Prüfungsaufgabe in Form von ‘vergleiche Programmiersprache A mit B und bewerte welche besser ist’ stellen. Das Resultat ist von Anfang an klar”. Gespannt hatte ich auf die Antwort gewartet. Nach einer dramatischen Pause, dann die Erlösung: “Es ist immer die Sprache, die der Absolvent am Besten beherrscht”.
Eigentlich einleuchtend, und trotzdem absolut signifikant für die folgenden Ausführungen. Mir ist bewusst, dass ich vielen Lotus Notes Jüngern der alten Garde jetzt ziemlich Kopfschmerzen bereite, aber ich habe gelernt, dass der Blick in den Spiegel dann notwendig ist, wenn es nicht gut läuft.
Blicken wir ganz kurz in den Spiegel. Der Markt im Lotus Notes Sektor ist abnehmend. Neue, junge Entwickler zu finden, ist extrem schwierig und viele Verkaufsargumente für Lotus Notes Projekte sind hinfällig. Und wo liegt das Problem? “Schlechtes IBM Marketing” höre ich immer wieder, oder “Feature X, Funktion Y wurde nicht realisiert”. Nein das Problem ist leider 30cm vom Spiegel entfernt. Wir haben verpasst, dass die einmalige Sonderstellung von Lotus Notes / Domino von der Zukunft überholt wurde. Wir hatten über DesignPattern, MVC und 3 Tier Strukturen gelacht. Uns über Datenbankanbindungen amüsiert, Versionsabhängikeiten bewitzelt und uns hinter der Einmaligkeit von Lotus Notes versteckt, wenn es um neuartige Programmierung ging.
Und damit ist ein grosse Graben entstanden. Welche Programmiersprache ist die Beste? Die die ich gerade am Besten kann. An den Universitäten und Berufsschulen wurde JAVA, PHP und Integrationen mit mySQL unterrichtet. Junge Menschen lernten von der Basis her objektorientiert Programmieren, Businesslogik vom PresentationLayer zu trennen und das Thema Datenhaltung war in den Händen der RDBMS Fanatiker. Anstelle sich dieser Realität zu stellen, und das gute an den Denkstrukturen zu adaptieren, haben wir es als “Nicht Relevant” abgetan…. bis jetzt!

Aber der Domino Server ist in der Neuzeit angekommen. Vermutungen, die ich hatte, wurden an der Lotussphere bestätigt. Liebe Freunde, der Domino Server ist ein toller JAVA Application Server geworden, ohne die Schwerfälligkeit von Datenbankanbindung, komplexer Administration und unhandlichem Deployment. Nein, einfach ein RockSolid Server, der ein OSGi Layer hat, mit XPages ein auf JSF basierendes Presentation Framework, die Businesslogik kann in der Applikation direkt als JAVA Klassen abgelegt werden und dazu noch der beste dokumentorientierte Store, den man sich vorstellen kann.

Wenn wir jetzt noch das Vocabular der Neuzeit lernen und unseren Kunden selbstsicher die neuartige Architektur, sowie die Zukunftssicherheit des gesamten Framework erklären können, wird diese Plattform wieder hochattraktiv für junge, motivierte und innovative Entwickler. Und welcher Server ist der beste Server? Natürlich der Server, den ich am besten kenne.

Und eigentlich müsste das der Domino Server sein:
– Userverwaltung, Rollen und Rechtekonzept: DONE und bis auf Datenlayerimplementiert
– Anbindung an Storage: DONE (inkl. genialer Suchenginge)
– 3 Tier Struktur: Presentationlayer: XPages, BusinessLogik: JAVA, Storage: NSF
– Graphischer Desigern: Vorhanden.

Die Liste der Killerfeatures könnte ich noch erweitern (zb. offene Standards), aber passen wir das Vocabular an und sprechen wir die Sprache der Informatikmassen.

 
Leave a comment

Posted by on February 12, 2012 in Domino, Java, XPages

 

Persönliche Lotussphere Nachlese

Ja sie ist vorbei die LS 2012. Meine erste Lotussphere, die ich erleben durfte. Von meinen Arbeitskollegen wurde ich auf das Erlebnis vorbereitet und es wurde von den guten alten Tagen gesprochen. Immer wieder wurde ich von meinem Chef während der Lotussphere mittels “Achtung du bist jetzt Brainwashed” auf den Umstand der riesigen Begeisterung aufmerksam gemacht. Darum ist es wohl auch gut, dass jetzt über eine Woche vergangen ist, wir zu dritt durch Florida gereist sind, und wir Abstand gewinnen konnten, bis ich jetzt meine persönliche Nachlese schreibe.
Und trotzdem fällt meine Nachlese sehr positiv aus. Positiv in dem Sinne, dass IBM die Transformation von Lotus Notes und Domino sehr aktiv vorantreibt. Aber betrachten wir einmal das Big Picture. Während von 10 Jahren die Lotussphere der Ort für Lotus Notes/Domino Fans war, hat sich die Situation ganz stark verändert. Im Zentrum stand dieses Jahr (wie auch schon in vergangen Jahren) nicht ein Produkt oder ein Brand, sondern eine Denkweise. Vor einem Jahr wurde SocialBusiness als Zukunft proklamiert und dieses Jahr hat sich diese Denkweise etabliert. Laut Ronnie Maffa steht dabei vor allem der Mensch im Zentrum und alle Bemühungen in der Art und Weise wie Software, Social Software funktionieren soll, ist inspiriert von dem Verständnis des Menschen. So war es auch nicht verwunderlich, dass während dem Ausblick auf die Zukunft von IBM Connections der Mensch und nicht die Features des nächsten Releases wichtig waren.
“Wer den Menschen versteht, versteht auch, was wir als nächstes tun werden”, so Maffa.
Aber auf der anderen Seite scheint sich auch eine technische Revolution anzubahnen. Seid 4 Jahren wurde, wenn man den Releasezahlen glaubt von 8.5.0 bis 8.5.3 nur Minorreleases der Domino Plattform produziert. Schaut man aber dem Motor unter die Haube, entdeckt man einen radikalen Umbau. Nicht nur das, mit der Integration des XPages Framworks ist auch massive Veränderung im Bereich der Entwicklungsmethodik entstanden. Neue Releases und Erweiterungen zum XPageframework werden auf der Communityplattform von OpenNTF produziert und getestet. Alles was für die Plattform Lotus Domino wertvoll ist, wird dabei direkt mittels Upgradepack in kurzen Intervallen zum Produkt hinzugefügt und bekommt somit den Support von IBM. Dabei bleiben diese Elemente weiterhin OpenSource, d.h. Verbesserungen können durch die Community gemeldet werden und werden auch integriert.
Es gibt aber noch eine weitere Revolution. Pete Janzen, Produktmanager des Lotus Domino Designer wurde gefragt, was mit den Feature Request der Community die bezüglich den “alten” Lotus Notes Elemente gestellt wurden. Hätten die überhaupt eine Chance, bzw. könnte IBM nicht einmal ein paar Entwickler für das abstellen und nicht nur immer für das XPage Framework. Seine Antwort war sehr diplomatisch, seine Gestik und Mimik aber nicht. Ich versuche es einmal so auszudrücken: Jede Verbesserung, die XPage und dem neuen OSGi Kernel etwas bringen, kommen in den C++ Kernel rein. Das hat Pete Janzen so NICHT GESAGT, aber das habe ich bei verschiedenen Gesprächen und Sessions so rausgehört und interpretiert.
Wenn wir übrigens die Verbesserungen der letzten Releases angucken, dann scheint sich dies zu decken. Wenn wir schon bei OSGi sind, mir scheint, dass es IBM gelungen ist, innerhalb von wenigen Releaszyklen den Domino Server mit einem unheimlich starken Framework zu versehen, dass für die Zukunft wohl keine Fragen mehr offen lässt. Oder sagen wir es doch einfach mal salopp: Der Domino Server ist ein solid-rock-enterprise “JAVA” Server, mit einer mächtigen dokumentorientierte Datenstorage, der eine einfaches Deployment von Applikationen ermöglicht.
Für mich war die Message aus technologischer Sicht ziemlich deutlich: Java und XPages steht über allem!

 
Leave a comment

Posted by on January 29, 2012 in Domino, Java, XPages