01.09.2010

Aptana Eclipse-Editoren im Domino Designer

Category: Lotus Notes, Web-Entwicklung, Entwicklung

Ich habe gerade erst wieder einmal im Domino Designer mit Cascading Stylesheets (CSS) arbeiten wollen und dabei fiel mir wieder einmal auf, dass dort auch in Version 8.5.1 immer noch keinen brauchbaren Editor dafür existiert. Es gibt keine Code Completion, keine Gliederung, ...

Da ich das Aptana Studio nutze, wenn ich sonst für das Web oder BlackBerry-Anwendungen entwickle, bin ich damit vertraut, und so kam mir die Idee, dass ich Aptana auch im Domino Designer als Plug-in installieren könnte.

Read More

13.08.2010

dojo und Notes: Artikel 8 - dijit.Dialog - Modale Dialoge mit AJAX-Fähigkeiten

Category: dojo, Web-Entwicklung, Entwicklung, Lotus Domino


dojo-Logo
Während der letzte Artikel in der dojo-Serie nur eine kleine Anpassung war, beschäftigen wir uns heute mit dijits. Mit dijits bezeichnet man Oberflächenelemente in dojo (dojo interface widgets = dijit). Aus dem vielfältigen Angebot verwenden wir in unserem Beispiel den dijit.Dialog. Der dijit.Dialog erzeugt einen modalen Dialog und ist ein gutes Beispiel für die Genialität von dojo.

Dem dijit.Dialog kann kann der anzuzeigende Inhalt als HTML-Knoten übergeben werden. Wenn statt desen dem Dialog-Objekt eine passende URL übergeben wird, wird der Inhalt automatisch per AJAX nachgeladen und angezeigt. Die ganze Komplexität, die dafür notwendig ist, ist in dem Objekt gekapselt. Als Anwendungsentwickler muss man lediglich das Objekt verwenden. Es ist einfach genial.
Read More

30.07.2010

dojo und Notes: Artikel 7 - dojo.fx.Toggler - Objektzustand speichern

Category: dojo, Web-Entwicklung, Entwicklung, Lotus Domino


dojo-Logo
Wer das Beispiel aus dem Artikel von letzter Woche ausprobiert hat, dem wird vielleicht eine Kleinigkeit aufgefallen sein. Beim ersten Klick auf die Sessionüberschrift wird die Sessionbeschreibung sichtbar. Klickt man anschließend noch einmal auf die Sessionüberschrift, passiert "anscheinend" nichts. Wir hatten es so programmiert, dass sich die Sessionbeschreibung öffnen sollte. Das sie schon offen ist, ist lediglich ein kurzes Flackern zu sehen. Wir werden die Programmierung so anpassen, dass die Funktion sich den Zustand merkt und die Sessionbeschreibung entweder anzeigt oder wieder verbirgt.
Read More

29.07.2010

Ein Mysterium in klassischen Domino-Web-Anwendungen

Category: Lotus Notes, Web-Entwicklung, Entwicklung

Bei der klassischen Web-Entwicklung unter Lotus Domino (ohne XPages) stößt man bei der Verwendung von Umlauten in Feldnamen auf ein "großes" Problem: Die Feldnamen werden bei der Generierung der Web-Seite durch Domino in einen kryptischen String umgewandelt. Will man jetzt z.B. clientseitig, also im Browser, eine Validierung vornehmen, so ist es nicht möglich, nur anhand der Feldnamen im HTML auf die Namen im eigentlichen Dokument zu schließen. Am besten wäre es, die Feldnamen für die JavaScript-Validierung zu berechnen, bevor das HTML generiert und an den Browser geschickt wird.

Read More

23.07.2010

dojo und Notes: Artikel 6 - dojo.fx.Toggler und dojo.behavior - Animation an bestimmte Ereignisse knüpfen

Category: dojo, Web-Entwicklung, Entwicklung, Lotus Domino


dojo-Logo
Wo wir im letzten Artikel aufgehört haben, geht es in diesem Artikel weiter. Die Sessionbeschreibungen, die wir beim letzten Mal mit Hilfe des dojo.fx-Packages ausgeblendet haben, sollen beim Klick auf die Sessionüberschrift wieder eingeblendet werden. Wenn in die Sessionbeschreibung geklickt wird, soll diese wieder ausgeblendet werden. Für das Ein- und Ausblenden von Elementen gibt es im dojo.fx-Package den Toggler. Um Funktionsaufrufen an bestimmte Ereignisse zu binden, verwenden wir das dojo.behavior-Package.
Read More

22.07.2010

2 SSJS libs, one XPage and a Mystery

Category: Lotus Domino, Entwicklung, XPages, SSJS

At times, I spend waste a lot of time due to my stubbornness, when something that should work, doesn't work.

This time, the problem - at its core - involved only two server-side JavaScript script libraries and one XPage.


First I wrote a SSJS library
commonUtils.jss, which creates the object de.assono.commonUtils. Then I developed a second library myViewUtils.jss, which in turn creates the object de.assono.myViewUtils. In order to use the first library, I import it into the second one.

After that, I implemented a simple XPage, which uses both objects, and therefore I included both SSJS libraries as resources into the XPage.


The result:

A picture named M2

For some reason, the object
de.assono.myViewUtils seems to be undefined?!

Read More

17.07.2010

Quick-Tipp: einfacher Excel-Export aus Domino-Web-Anwendungen

Category: Quick-Tipp, Lotus Notes, Entwicklung

Manchmal möchte man Daten aus einer Domino-Web-Anwendung exportieren, um sie anschließend mit einer Tabellenkalkulation wie z. B. Microsoft Excel weiter zu bearbeiten, aufzubereiten und zu visualisieren.

Ein einfacher, sehr flexibler Weg ist ein LotusScript-Agent in der Web-Anwendung, der eine HTML-Tabelle "ausdruckt":

Sub Initialize()
        Print |Content-Type:application/vnd.ms-excel|
        Print |Content-Disposition: Attachment; filename="exportToExcel.xls"|
        Print ||
        Print |<table>|
        Print |<tr><th>Tabelle</th><th>1. Spalte</th><th>2. Spalte</th><th>3. Spalte</th></tr>|
        Print |<tr><td>1. Zeile</td><td>1</td><td> 2</td><td> 3</td></tr>|
        Print |<tr><td>2. Zeile</td><td>2</td><td> 4</td><td> 7</td></tr>|
        Print |<tr><td>3. Zeile</td><td>3</td><td> 7</td><td>14</td></tr>|
        Print |<tr><td>4. Zeile</td><td>4</td><td>11</td><td>25</td></tr>|
        Print |</table>|
End Sub


Der ganze "Trick" besteht darin, am Anfang den Content-Type auf "application/vnd.ms-excel" zu setzen.

Statt des statischen Inhalts im obigen Beispiel müsste der Agent natürlich die zu exportierenden Daten zusammensuchen (z. B. alle Dokumente einer Ansicht) und die einzelnen Zeilen berechnen.

15.07.2010

dojo und Notes: Artikel 5 - dojo.fx - Animation

Category: dojo, Web-Entwicklung, Entwicklung, Lotus Domino

dojo-Logo
In dem letzten Artikel dieser Serie habe ich dojo.query() vorgestellt. In diesem Artikel werden wir dojo.query() ebenfalls einsetzen. Dieses Mal im Kombination mit dem dojo.fx-Package, welches Funktionalitäten zur Aninmation innerhalb von Webseiten zur Verfügung stellt. Gerade in dynamischen Webanwendungen, in denen Elemente nachgeladen oder einblendet werden können, helfen Animationen dem Anwender die Veränderung besser wahrzunehmen. Statt also ein neues Element einfach nur sichtbar zu machen, wird das Element sanft eingeblendet. Diese Bewegung ist für den Anwender besser nachzuvollziehen, als wenn aus dem Nichts plötzlich ein Element vorhanden ist, welches vorher nicht dar war.
Read More

02.07.2010

dojo und Notes: Artikel 4 - dojo.query - CSS3-Abfragen

Category: dojo, Web-Entwicklung, Entwicklung, Lotus Domino

A picture named M2
Der letzte Artikel beschäftigte sich primär mit der Vorstellung der Beispielanwendung und mit dem ersten Schritt dahin. Heute beschäftigen wir uns mit dojo.query(), was so ziemlich die wichtigste und mächtigste Methode im dojo Toolkit ist. Vereinfacht ausgedrückt, liefert dojo.query() eine Menge von HTML DOM Knoten zurück, die eine vorgegebene CSS Selektion erfüllen. Das geniale daran ist, dass damit CSS-3 Abfragen auch in Browsern möglich sind, die gar kein CSS-3 unterstützen.
Read More

26.06.2010

dojo und Notes: Artikel 3 - Vorstellung des Anwendungsszenarios "SpeedAgendaing" und der erste Schritt dahin

Category: dojo, Web-Entwicklung, Entwicklung, Lotus Domino

A picture named M2
Im letzten Artikel haben wir uns mit den Bestandteilen von dojo beschäftigt. Bevor wir nun endlich in den Einsatz von dojo in Lotus Notes-Anwendungen einsteigen, will ich kurz die Beispiel-Anwendung vorstellen, die ich verwenden werde. Ursprünglich habe ich sie für das EntwicklerCamp entwickelt. Rudi Knegt, die treibende Kraft hinter dem EntwicklerCamp und AdminCamp,  kam vor zwei oder drei Jahren mit der Idee des SpeedAgendaing. Am Morgen eines Konferenztages hat jeder Referent kurz Zeit, für seinen Vortrag zu werben. Ich habe für meinen SpeedAgendaing Auftritt die Situation aufgegriffen, vor der jeder Teilnehmer einer Konferenz steht: aus verschiedenen parallelen Tracks auswählen zu müssen.

Dazu habe ich alle Session, die zur gleichen Zeit, wie mein eigener Vortrag liefen, aufgelistet. Neben dem Titel war zunächst nur ein Bild des Referenten und der Name zu sehen. Wurde der Titel angeklickt, wurde die Sessionbeschreibung eingeblendet. Beim Klick auf das Bild oder den Referentennamen wurde die Selbstbeschreibung des Referenten per AJAX nachgeladen. Zur Entscheidungsfindung konnten die einzelnen Sessions per Drag & Drop in eine neue Reihenfolge bringen. Schlußendlich konnte die Entscheidung mit Drag & Drop auf die Sessionuhrzeit zum Ausdruck gebracht werden.
Die fertige Webseite für das SpeedAgendaing kann hier live ausprobiert werden.

Read More

18.06.2010

dojo und Notes: Artikel 2 - Vorstellung dojo

Category: dojo, Web-Entwicklung, Entwicklung, Lotus Domino

A picture named M2
Nachdem ich im letzten Artikel das obligatorische Hello World Beispiel für dojo gezeigt habe, will ich in diesem Artikel die einzelnen Bestandteile von dojo kurz vorstellen. dojo besteht aus drei Teilen.
A picture named M3

Read More

14.06.2010

Kaspersky blockiert dojo JavaScript-Datei

Category: dojo, Web-Entwicklung, Entwicklung, Lotus Domino, Sicherheit

A picture named M2
Nach meinem letzten dojo-Artikel - "Motivation und 'Hello World'-Beispiel" hatte mich ein Kollege angesprochen, dass er in dem eingebetteten IFrame statt der drei Kalender nur drei unspektakuläre Eingabefelder sehen konnte.
Screenshot dojo Kalender:
Screenshot dojo Kalender

Nach einigem Ausprobieren stellte sich heraus, dass die Anti-Banner Komponente in der Kaspersky-Suite die JavaScript-Datei "popup.js" blockiert.
A picture named M4
Ob das tatsächlich eine geeignete Art und Weise ist, vor unerwünschten Popups zu schützen, lassen wir mal dahingestellt sein.

Wer also ebenfalls in dem dojo-Artikel keinen Kalender sehen konnte, sollte einmal seinen Virescanner überprüfen.

07.06.2010

dojo und Notes: Artikel 1 - Motivation und "Hello World"-Beispiel

Category: dojo, Web-Entwicklung, Entwicklung, Lotus Domino

A picture named M2
Wie angekündigt der erste Artikel aus der dojo-Artikel Serie.

Bevor wir uns mit der eigentlichen Technik beschäftigen, erst einmal die Frage nach dem Warum? Es gibt eine ganze Reihe von Alternativen. Was spricht also für dojo als JavaScript-Framework?
Read More

20.05.2010

dojo und Notes: neue Artikelserie

Category: dojo, Web-Entwicklung, Entwicklung, Lotus Domino


A picture named M2
Als ich letztens meinen Vortrag vom EntwicklerCamp "dojo und Notes" intern noch einmal gehalten habe, kam ich auf die Idee, aus dem Vortrag eine kleine Artikelserien zu machen. In den nächsten Wochen werde ich jeweils eine dojo-Technik an einem Beispiel kurz vorstellen. Alle Beispiel werden a) zum Download bereit stehen und b) auch in Lotus Notes Webanwendungen vor der Version 8.5. funktionieren. Ich werde diesen Blogeintrag verwenden, um das Inhaltsverzeichnis vorzuschreiben. Insofern lohnt es sich, einen Lesezeichen auf diese Seite zu setzen.
Read More

17.12.2009

Abstract classes concrete

Category: OOP, Entwicklung, LotusScript


If you have some knowledge about other object-oriented programming languages, like Java, you probably like abstract classes. These are classes you cannot instanciate directly, i.e. create new objects from them. But you can derive other classes from them and create objects from these subclasses. In an abstract class you can have attributes and methods like in any other class.

Normally, abstract classes model some kind of concept or abstraction, for example Animal. There are dogs and cats, but no creature is merely an animal, its always of a concrete kind of animal.

In the abstract class Animal you put those attributes and members, which all animals have in common. Then you build subclasses like Dog or Cat, which add new or overwrite inherited members.

Other classes are abstract, because they have methods, which cannot be implemented at this level. Only concrete subclasses "know", how to implement them.

A typical example of this is a generic Sorter class with a Sort method. The concrete subclasses BubbleSorter, HeapSorter and QuickSorter overwrite the abstract Sort method with different implementations.

Unfortunately, in LotusScript there are no abstract classes. But there is a workaround, which can kind of simulate them:
Read More

23.10.2009

Leerer Objekt-Handle-Fehler in Lotus Notes 8.5 Standard-Client

Category: Lotus Notes, Entwicklung, LotusScript


Als ich vor kurzem eine neue Anwendung bei einem Kunden installiert hatte, konnte ich beim Öffnen der installierten Datenbank einen nicht alltäglichen Fehler beobachten:

A picture named M2


Ein Blick ins Fehlerprotokoll brachte die folgende Zeile als Ursache des Fehlers zum Vorschein:
workspace.EditDocument(false, doc, true)

Anwendungen auf Basis des assono Framework erlauben dem Verwalter der Datenbank, durchgeführte Änderungen und Erweiterungen mit Hilfe eines Dokuments "Letzten Nachrichten" zu hinterlegen. Beim Öffnen der Datenbank wird dann jeder Benutzer einmalig (nach jeder Änderung des Dokuments) über die Neuerungen informiert. Hierbei wird mit workspace.EditDocument das Dokument im Notes-Client geöffnet und angezeigt.
Read More

20.10.2009

Neues Projekt auf OpenNTF.org: assono Framework 2

Category: assono Framework 2, OpenNTF, Entwicklung


Wir haben es getan. Endlich. War schon lange geplant: Ab heute gibt es die erste Version (mit der Nummer 2.0 ) unseres assono Framework 2 unter der Apache Licence 2.0 auf OpenNTF.org:

A picture named M2


Im Blog findet Ihr unter dem Stichwort OOP einige Einträge, in denen das zugrundeliegende MVC-Pattern genauer beschrieben wird. Insbesondere unser Vortrag AD311 - Object Oriented Programming with Lotusscript – Take It To the Next Level von der Lotusphere 2008 sollte einen guten Einstieg in das Framework bieten.

20.08.2009

Domino - Welten verkleben mit Perl

Category: Lotus Domino, Java, Perl, Entwicklung


Wenn man Notes/Domino und Perl in einem Satz erwähnt, werden die meisten (zumindest die, die beides kennen) sicher sofort an OLE-Automatisierung denken, aber es geht auch anders.

So kann man mit dem Perlmodul "Inline::Java" die Java-Schnittstellen des Domino-Servers nutzen und so die Stärken von Perl und Java kombinieren.
Gerade wenn man mal ein kleines Tool für zwischendurch benötigt, ist Perl hier sehr nützlich - im Hintergrund verrichtet natürlich immer noch Java die Arbeit.
Read More

18.08.2009

Quick-Tipp: @LocationGetInfo - undokumentiert, aber nützlich

Category: Lotus Notes, Entwicklung


Ich bin kürzlich wieder über eine undokumentierte, aber in einigen Fällen recht nützliche Formelsprachen-Funktion gestolpert: @LocationGetInfo.

Prinzipiell kann man über diese Funktion auf Felder der aktuellen Arbeitsumgebung zugreifen, aber leider nicht auf alle.  

Folgende Aufrufe funktionieren:
@LocationGetInfo([AreaCode])
@LocationGetInfo([BookmarksFilename])
@LocationGetInfo([CatalogServer])
@LocationGetInfo([Country])
@LocationGetInfo([HomeServer])
@LocationGetInfo([InternationalPrefix])
@LocationGetInfo([InternetMailAddress])
@LocationGetInfo([LongDistancePrefix])
@LocationGetInfo([MailProtocol])
@LocationGetInfo([NamePreference])
@LocationGetInfo([SametimeServer])
@LocationGetInfo([WebRetriever])

Am interessantesten sind aber diese beiden:
@LocationGetInfo([FullName])
@LocationGetInfo([UNID])

[Fullname] steht für den Namen der aktuellen Arbeitsumgebung, [UNID] für ihre UNID.
Read More

11.08.2009

Ye118w Day: Ansichten mit Gestaltungselementen

Category: Ye118wDay, Lotus Notes, Entwicklung


A picture named M2
Kaum dreht man sich um, schon ist wieder ein Jahr vorbei. Zeit für den zweiten, jährlichen Yellow Day!



Ich habe wieder etwas Nützliches, wenn es auch nicht mehr ganz neu ist (Fun with $FormulaClass, Dan Velasco, DominoPower Magazine, August 1999, also genau 10 Jahre alt!):

Notes-Ansichten, die Gestaltungselemente statt Dokumente zeigen


A picture named M3


Read More

06.08.2009

SnTT: OnChange-Event bei Feldern im Notes-Client

Category: Show-n-Tell Thursday, LotusScript, Entwicklung


Show-n-Tell Thursday
Das OnChange-Event für Felder ist ein wenig versteckt. Aber wenn man es einmal gefunden hat, möchte man es nicht mehr missen. Die Anwendung ist sehr einfach. Das OnChange-Event wird immer dann ausgelöst, wenn sich ein Feldwert geändert hat und das Feld verlassen wird. Das gilt für alle Arten von Feldern inklusive Richtext Feldern.

Die meisten Entwickler denken, dass dieses Event nur für JavaScript existiert, weil dieses die Voreinstellung ist. Es muss nur lediglich bei "Starten" statt "Web" auf "Client" gestellt werden und schon kann bei den Programmiersprachen auch LotusScript ausgewählt werden.
A picture named M3
Ich liebe dieses Event, weil es mich davon befreit, mir einen Feldinhalt beim Betreten zu merken und dann beim Verlassen mit dem aktuellen zu vergleichen. Das OnChange-Event wird nur ausgelöst, wenn sich wirklich der Feldinhalt geändert hat.

06.08.2009

Quick-Tipp: Schnelleinstieg in Symphony-Macro-Programmierung

Category: Quick-Tipp, Lotus Symphony, Lotus Notes, Entwicklung


Nützlicher Artikel für alle, die einen schnellen Einstieg in die Macro-Programmierung in IBM Lotus Symphony suchen:

A quick start to using macros and controls in IBM Lotus Symphony
http://www.ibm.com/developerworks/lotus/library/symphony-macros/

Summary:  This article provides a step-by-step guide to get you started with macro programming for IBM® Lotus® Symphony™ in OpenOffice.org BASIC. It introduces the macro editor, shows how to add a control object to a Lotus Symphony document, demonstrates how to associate a control event to a macro, and introduces how to access data in a Lotus Symphony spreadsheet.

Autor: Tim Robinson (timro@us.ibm.com), Senior Software Engineer, IBM

26.05.2009

Ressourcendatenbank - Notes-Crash beim Drucken des Kalenders

Category: Entwicklung, Lotus Notes benutzen, Lotus Notes

Einer unserer Kunden benötigte zu Reporting Zwecken eine Funktion, die es ihm ermöglicht, den Kalender aus der Ressourcenverwaltung in eine Mail einzufügen und diesen eingefügten Text anschließend zu bearbeiten. Nichts einfacher als das dachte er sich und benutzte die Ihm schon aus seiner Maildatenbank bekannte Druck-Funktion "Kalender in Dokument drucken". Mit der Auswahl des Kalenderstils "Kalenderliste" kann er den Druckbereich (Zeitraum) festlegen und mit dem Klick auf "Vorschau" und dem anschließenden "Weiterleiten" die Liste editierbar an eine neue Mail hängen. So funktionierte es jedenfalls immer in seiner Maildatenbank... Doch beim Klick auf die "Vorschau" nahm diese Unternehmung ein jähes Ende - mit einem Crash des Notes Client (AUTSCH!).

Dieser Crash kann beliebig oft reproduziert werden - klappt garantiert immer =;o)

KalenderDrucken.JPG

Jetzt stellt sich natürlich die Frage: Woran liegt das? Was ist im Kalender der Ressourcendatenbank anders als im Kalender der Maildatenbank? Die Lösung ist einfach (wenn man vom Aufwand absieht, der zu ihr führte): In den Reservierungsdokumenten der Ressourcendatenbank gibt es kein "Subject" Feld!

Sorgt man dafür, das beim Einstellen einer Reservierung automatisch (ereignisgesteuerter oder periodischer Agent) ein "Subject"-Feld im Reservierungsdokument erstellt wird, welches sinnvollerweise die Reservierungsbeschreibung enthält, dann funktioniert die Druck-Funktion "Kalender in Dokument drucken" wie gehabt. Die Reservierungsbeschreibung ist aus dem Feld "txtPurpose" zu übernehmen.

14.05.2009

Notes 8.5 – Skript speichern und NotesViewNavigator

Category: Lotus Notes, Lotus Domino, Entwicklung


Ich bin weiß Gott enthusiastisch im Bezug auf die Änderungen und Neuerungen in der IBM-Produktpalette, besonders im Bezug auf IBM Lotus Notes/Domino. Deswegen konnte ich es kaum erwarten, den 8.5er Client auf meinem Rechner zu installieren, obwohl wir da eigentlich noch keine Notwendigkeit haben.

Leider hatte ich noch keine Gelegenheit die neuen Features auszuprobieren (XPages – Yeah!), so dass sich meine Erfahrungen nur auf die „klassische“ Notes-Entwicklung beziehen. Und die birgt einige Tücken. Hier zwei Beispiele:

In Einzelfällen kommt es vor, dass Skriptbibliotheken nicht gespeichert werden: Man drückt seine gewohnte Tastenkombination Strg + S und es passiert nichts. Da Letzteres auch der Fall ist, wenn man erfolgreich gespeichert hat, arbeitet man nun weiter und führt schließlich seinen Code aus, nur um dann festzustellen, dass er sich nicht im Entferntesten verhält, wie erwartet. Ein Blick in den Debugger offenbart, dass hier noch alter Code ausgeführt wird. Oder der Client stürzt ab (was leider auch häufiger passiert) und man stellt dann später fest, dass die Bibliothek nicht mehr auf dem Stand ist, den man eigentlich schon gespeichert hat.
Hier hilft nur, die Bibliothek regelmäßig zu schließen. Wenn man dann gefragt wird, ob man speichern will und der Klick auf „Ja“ mit Untätigkeit quittiert wird, ist es an der Zeit - nach einem kurzen Moment der Panik ;) - die Bibliothek komplett zu exportieren und sie dann zu reimportieren.


Ein ebenfalls neues „Feature“ ist seltsames Verhalten im NotesViewNavigator. Die folgende Folge soll eigentlich den zweiten Eintrag in einer Ansicht zurück liefern:

Set viewNav = view.CreateNavigator
Set viewentry = viewNav.GetFirst
Set viewentry = viewNav.GetNext(viewentry)

Sie liefert jedoch – Nothing. Nein, das liegt nicht daran, dass es das zweite Dokument nicht gibt, denn DIESE Folge liefert den korrekten Eintrag:

Set viewNav = view.CreateNavigator
Set viewentry = viewNav.GetFirst
Set viewentry = viewNav.GetNext(viewentry) ' Ist doch Nothing?
position = viewentry.GetPosition(Separator) ' hol die Position des Dokumentes in der Ansicht
Set viewentry = viewNav.GetPos(position) ' hole das Dokument anhand der Position

Mit anderen Worten: man kann aus Nichts einen Eintrag machen, wenn man weiß, wo das Nichts ist – hübscher Trick, nicht? (Paradox ist - wenn sich jemand im Handumdrehen den Fuß bricht ;) )

Natürlich ist das Problem bekannt – und zwar nicht erst seit gestern:
http://www-10.lotus.com/ldd/nd85forum.nsf/5f27803bba85d8e285256bf10054620d/f30ab19043084832852575520050c96f?OpenDocument
Erfasst als SPR #  PRUN7NZRBR

11.05.2009

JavaScript im Notes-Client verursacht Notes-Client-Crash

Category: JavaScript, Entwicklung


In dem Blog-Eintrag SnTT: Anzeige der noch verbleibenden Zeichen während der Eingabe verwende ich JavaScript, um die Anzahl der noch verbleibenden Zeichen im Notes-Client anzuzeigen.

Wie sich jetzt herausstellt, kann diese Technik zu einem Crash des Notes-Clients führen (AUTSCH!).

Reproduzierbar ist der Crash, wenn zum Zeitpunkt des Schließen des Dokuments der Eingabefokus sich im Feld mit der Anzeige befindet. Aber selbst, wenn im QueryClose Event verhindert wird, dass der Fokus auf besagten Feld liegt, gibt es noch hin- und wieder Abstürze.

15.02.2009

NotesHound und parallele Notes-Installationen

Category: Lotus Notes, Entwicklung


NotesHound (http://www.noteshound.com/) ist eine kostengünstige Sammlung nützlicher Werkzeuge von Ken Haggman und Daniel Lehtihet. Den NotesHound Class Navigator, den es seit geraumer Zeit auch einzeln gibt, haben wir ja schon in diversen Konferenzvorträgen erwähnt und für OOP-Entwickler in LotusScript empfohlen.

In SnTT: Installing and running Notes R5, 6, 7 and 8 concurrently hatten wir ausführlich erklärt, wie man ohne VMs (und den damit verbundenen zusätzlichen Speicherverbrauch und ohne weitere Betriebssystem-Lizenzen) mehrere Notes-Versionen auf einem Rechner so installieren kann, dass man sogar alle gleichzeitig starten kann.

Leider gibt es mit allen NotesHound-Werkzeugen - außer dem NotesHound Class Navigator - ein Problem: Sie lassen sich nur in der zuletzt installierten Notes-Version starten, sonst gibt es eine Fehlermeldung.

Read More

23.10.2008

SnTT: Feststellen, ob das Design einer Datenbank verborgen ist

Category: Show-n-Tell Thursday, Lotus Notes, Entwicklung


Show-n-Tell Thursday
Letztens musste ich herausfinden, ob das Design einer Datenbank Anwendung verborgen ist. Leider gibt es in LotusScript keine Eigenschaft, die man einfach abfragen könnte. Die Lösung, die schließlich funktioniert hat, setzt auf DXL.

Der Trick besteht darin, dass ein DXL-Export einer Datenbank Anwendung mit verborgenem Design nur die Basisinformationen über die Datenbank Anwendung aber keine Designelemente enthält. Anschließend muss man nur noch suchen, ob es einen Eintrag für eine Maske "<form>" gibt. Wenn kein Eintrag vorhanden ist, ist das Design wohl verborgen. (Abgesehen von Notes Datenbanken Anwendungen die keine Maske enthalten. Aber die kann man wohl vernachlässigen.)
Read More

16.09.2008

Softsphere 2008: Fehlerbehandlung in Formelsprache, LotusScript, Java und JavaScript

Category: Softsphere, Konferenzen, Entwicklung


Softsphere 2008

Nun ist es geschafft. Mein Vortrag zum Thema "Fehlerbehandlung in Formelsprache, LotusScript, Java und JavaScript" auf der Softsphere 2008 ist gerade erfolgreich zu Ende gegangen. Wen es interessiert, findet anbei die Präsentation und die Beispieldatenbank. Aber nicht dass sich jemand beschwert, in der Beispieldatenbank seien ja nur Fehler.



15.09.2008

Softsphere 2008: einfach - OOP - einfach

Category: Softsphere, Konferenzen, OOP, Entwicklung


Softsphere 2008

Ich habe heute wieder mal versucht, neue Notes-Entwickler in die Konzepte, Prinzipien und Vorteile objektorientierter Entwicklung einzuführen. Das Thema liegt mir am Herzen, weil ich wirklich überzeugt bin, dass man mit OOP bessere Anwendungen schreiben kann. Und bessere Notes- und Domino-Anwendungen sind gut für die gesamte Plattform. Und wer weiß, vielleicht darf ich ja auch irgendwann einmal eine Datenbank weiterentwickeln, die einer der Teilnehmer nach einen meiner Vorträge geschrieben hat. Und käme mir die bessere Wartbarkeit sogar selbst zu gute.

Ich habe wieder den "Zen-Ansatz" für Präsentationen nach dem Buch "PresentationZen" von Garr Reynolds genutzt. Starke, teilweise emotionale Bilder, ganz wenig Text, keine "Bullet Points". Und viel dazu erzählt.

Damit man die Session gut nacharbeiten kann (und für die, die daran nicht teilnehmen konnten), habe ich ein sehr ausführliches Handout vorbereitet, das neben den Folien auch ausgiebige Notizen beinhaltet. Schreibt mir mal per E-Mail oder einfach als Kommentar hier, ob euch der Ansatz auch so gut gefällt wie mir.

Und nach der langen Vorrede hier die Dateien zum Download:

einfach- OOP - einfach-Präsentation
pdf.gif Softsphere 2008 - einfach - OOP - einfach-Präsentation

einfach - OOP - einfach-Demo-Datenbank
zip.gif Softsphere 2008 - einfach - OOP - einfach-Demo-Datenbank

11.08.2008

Ye118w Day: Bringen Sie ihre Notes-Anwendung in die Seitenleiste (ohne Java)

Category: Ye118wDay, Lotus Notes, Entwicklung


A picture named M2
A picture named M3
Heute ist der erste jährliche Yellow Day!
Und natürlich trage ich heute gelb.  

A picture named M4


Im Geiste dieses Tages möchte ich heute zeigen, wie man eine vorhandene Notes-Anwendung ohne Java in die Seitenleiste des Notes 8.0.1 Standard-Clients bringen kann.


Eine Ansicht dort zu installieren, geht ja schon recht einfach mit Bordmitteln. Ich wollte aber ständig eine bestimmte Eingabemaske in der Seitenleiste zur Verfügung haben, wo ich im Verlauf eines Tages immer wieder schnell ein Dokument erstellen kann. In diesem Fall ist es eine Anwendung, wo ich meine Projektzeiten erfasse. Aber prinzipiell wäre das auch ein guter Platz für das Kontaktformular einer CRM-Anwendung oder für Ereignisprotokolle eines User-Help-Desk oder ...

Im Bild kann man sehen, wie die Eingabemaske fertig aussieht.

Read More

24.07.2008

SnTT: Aktion kontinuierlich ausführen

Category: Show-n-Tell Thursday, Lotus Notes, Entwicklung


Show-n-Tell Thursday
In einem Kundenprojekt hatte ich letztens die Anforderung, eine Aktion so lange immer wieder auszuführen, bis der Anwender sie abbricht. In dem konkreten Fall sollten Referenznummern nacheinander eingegeben und verarbeitet werden.

Ich habe lange experimentiert mit sich selbst aufrufenden Agenten und auch mit der NotesTimer Klasse. Aber bei allen Lösungen wurde der Anwender in seinem Arbeitsfluss irgendwie gestört.
Die Lösung war nachher relativ einfach. Die Aktion ruft sich am Ende mit einer simulierten Tastenkombination selber auf.
Read More

03.07.2008

SnTT: Datumswerte ohne Zeitangabe via LotusScript

Category: Show-n-Tell Thursday, Lotus Notes, Entwicklung


Show-n-Tell Thursday
Wenn per LotusScript Datumswerte in ein Feld geschrieben werden, so werden Sie immer inklusive der Uhrzeit gespeichert. Wenn keine Uhrzeit angegeben ist, gerne auch mit "00:00:00". Im Allgemeinen stört das eigentlich relativ wenig. Nur wenn das zugehörige Notes-Dokument in einer Kalenderansicht dargestellt werden soll, hat es ziemliche Auswirkung. In der Tagesansicht erscheint ein entsprechendes Dokument um 00:00 Uhr.

Das Kalenderverhalten ist an der Stelle eindeutig. Ist nur ein Datumswert vorhanden, steht der Eintrag über dem Zeitraster. Stehen Datums- und Uhrzeit-Angaben in dem Feld wird der Eintrag in das Zeitraster eingeordnet. Nur kann man wie gesagt leider per LotusScript keinen Datumswert ohne Zeitangabe erzeugen.

A picture named M3

Wieder einmal stellt Evaluate die Rettung dar.
Read More

02.07.2008

Quick-Tipp: Anwendung immer in neuem Fenster öffnen

Category: Quick-Tipp, Lotus Notes, Entwicklung


Auf Xing wurde gerade gefragt, wie man Notes-Anwendungen so einstellen kann, dass sie - analog zu den Hilfe-Datenbanken - in einem neuen Fenster geöffnet werden.

Es gibt da einen Trick: Man muss in den Datenbank-Eigenschaften - Gestaltung - Im Datenbankkatalog auflisten - Kategorien eine bestimmte Kategorie eintragen: NotesHelp.

A picture named M2


Die Anwendung wird dann ähnlich wie die Hilfe-Datenbanken in einem speziellen Fenster geöffnet.

11.06.2008

ILUG 2008: simply - OOP - simply

Category: ILUG, Konferenzen, OOP, Entwicklung


ILUG 2008

Ich wünschte, ich hätte mehr Zeit... Auch ich würde die ILUG-Konferenz über den grünen Klee loben. Es war wirklich eine großartige Konferenz.

Da es schon wieder fast 2 Uhr ist, lieber in aller Kürze: Hier ist meine Präsentation (mit Notizen) und die Demo-Datenbank, die ich während der Session gezeigt habe:

simply - OOP - simply-Präsentation
pdf.gif ILUG 2008 - simply - OOP - simply-Präsentation

simply - OOP - simply-Demo-Datenbank
zip.gif ILUG 2008 - simply - OOP - simply-Demo-Datenbank

13.05.2008

Quick-Tipp: $DontAutoProcessURL verhindert automatisches Erstellen von URL-Hotspots (Update 2)

Category: Quick-Tipp, Lotus Notes, Entwicklung

Großen Dank an Kevin Pettitt.

Ich hatte seit einiger Zeit damit zu kämpfen, dass wenn ich in unserem Blogsphere-basierenden Blog einen Eintrag erstellt habe, in dem ich
  • unter Notes 8
  • RichText als Posting Type eingestellt habe und
  • per [ [...] ] HTML-Code markiert habe,
darin vorhandene http://... immer zu URL-Hotspots konvertiert wurden, wenn ich den Eintrag gespeichert habe.

Es mag ja bei einfachen E-Mails sinnvoll sein, dass man die URL-Hotspots nicht manuell erstellen muss, aber bei [ [<img src="http://www.assono.de/blog/...>] ] ist das mehr als ärgerlich, wenn der dann entstehende HTML-Source etwa so aussieht:
<img src="<a href="http://www.assono.de/blog/..."...>

Und weil es IBM ist, die den Notes-Cliententwickelt, gibt es auch einen "Kompatibilitätsschalter", der das alte Verhalten - also kein URL-Hotspot automatsch generieren - wieder herstellt: $DontAutoProcessURL

Die Maske muss ein Feld $DontAutoProcessURL enthalten und dieses den Wert "1" (Text) und schon funktioniert alles wieder wie gehabt.

In der Blogsphere-Schablone hat Kevin das schon repariert, so dass mit der nächsten Version (RC1 ?!) der "Fehler" nicht mehr auftritt.

Quelle: $DontAutoProcessURL tweak, Kevin Pettitt

Update:
Was ich eben vergessen habe: Entwickler von kombinierten Notes-Client- und Domino-Web-Anwendungen (wie z. B. die meisten CMS-Anwendungen) sollten die geänderte Behandlung von http:// in RichText-Feldern beachten - oder eben ein $DontAutoProcessURL Textfeld in ihrer Maske einbauen.
Update 2:
Kevin hat inzwischen selbst über das Thema einen Blogeintrag geschrieben: Blogsphere in Notes 8: How To Get URLs Working in Rich Text Posts

09.05.2008

SnTT: Kölner Phonetik - das bessere Soundex?!

Category: Show-n-Tell Thursday, Lotus Notes, Entwicklung


Show-n-Tell Thursday
"Die Kölner Phonetik (auch Kölner Verfahren) ist ein phonetischer Algorithmus, der Wörtern nach ihrem Sprachklang eine Zeichenfolge zuordnet, den phonetischen Code. Ziel dieses Verfahrens ist es, gleich klingenden Wörtern den selben Code zuzuordnen, um bei Suchfunktionen eine Ähnlichkeitssuche zu implementieren. Damit ist es beispielsweise möglich, in einer Namensliste Einträge wie "Meier" auch unter anderen Schreibweisen, wie "Maier", "Mayer" oder "Mayr", zu finden. Die Kölner Phonetik ist, im Vergleich zum bekannteren Russell-Soundex-Verfahren, besser auf die deutsche Sprache abgestimmt. Sie wurde 1969 von Postel veröffentlicht." (Wikipedia, http://de.wikipedia.org/wiki/K%C3%B6lner_Phonetik)

@Soundex ist bereits in der Formelsprache vorhanden und wird zum Beispiel im Domino-Verzeichnis benutzt, um ähnlich klingende Namen zu finden (siehe erste Spalte in der ($Users)-Ansicht). Leider "funktioniert" der Soundex im Deutschen nicht so gut, wie z. B. im Englischen. Wir sprechen halt die Buchstaben etwas anders aus. Deswegen hat Herr Postel auch ein für das Deutsche besser passendes Verfahren entwickelt: die Kölner Phonetik.

Read More

09.05.2008

Performance basics for IBM Lotus Notes developers (Update)

Category: Lotus Notes, Entwicklung


Ich wollte eigentlich schon häufiger mal Einträge im Best Practice Makes Perfect-Blog von Andre Guirard empfehlen, und der aktuelle Eintrag ist wieder mal äußerst empfehlenswert:

Performance basics for IBM Lotus Notes developers
Er verweist darin auf einen 24-seitigen Artikel (Whitepaper), in dem er zu den folgenden Punkte Empfehlungen macht:
  • General principles
  • Database-level performance considerations
  • Formula performance
  • Form design
  • ViewsCode
  • Testing
  • Use Profile documents

Weitere tolle Einträge in seinem Blog:
Nochmals Danke, Andre

Quelle: Best Practice Makes Perfect-Blog, Andre Guirard

Update:
Patrick Kwinten hat noch ein paar mehr Tipps auf Lager: Performance basics for IBM Lotus Notes developers - Some additions?, All about Lotus Domino Development (AaLDD)

09.04.2008

Noteshound Class Navigator jetzt einzeln verfügbar

Category: Lotus Notes, Entwicklung


Wer schon in einem unserer Konferenzvorträge über objektorientierte Programmierung (OOP) in LotusScript war, der weiß, dass wir für diese Art der Entwicklung ein Werkzeug besonders empfehlen: den Noteshound Class Navigator.

Anders als der Script Browser von Craig Schumann (Teamstudio), arbeitet er "nur" auf dem aktuell im Domino Designer geöffneten Gestaltungselement - also meistens der Script-Bibliothek - dabei arbeitet er aber besonders schnell und unterstützt die objektorientierte Programmierung sehr effizient.

Ein Nachteil des Class Navigators war bisher, dass er nur mit 12 anderen Werkzeugen im Paket als Noteshound verkauft wurde. Zwar lohnt sich auch der gesamte Werkzeugkasten ($495 pro Developer oder $1995 pro Unternehmen), aber der Preis war oftmals doch eine Hürde.

Jetzt gibt es den Noteshound Class Navigator aber auch ein einzelnes Produkt für sehr günstige $49,95 - inklusive Aktualisierungen und neuer Versionen für immer!

A picture named M2


Es gibt auf den Seiten des Anbieters auch eine Vorschau und ein Verweis auf ein YouTube-Video.

28.03.2008

LotusScript: CopyToDatabase verwirrt NotesDocument.Responses

Category: Entwicklung


Eine Zeit lang habe ich gerne mit Antwortdokumenten in Lotus Notes gearbeitet. Ich mochte die Art, wie sie eindeutige Beziehungen zwischen verschiedenen Dokumenten herstellten. In letzter Zeit bin ich ein wenig davon abgekommen, weil Antwortdokumente in bestimmten Bereichen unflexibel sind. Nun bin ich auf einen eigenartigen Fehler gestoßen, der mein Vertrauen in die Antworthierarchien ein wenig erschüttert.

Für eine Anwendung sollten Hauptdokumente inklusive ihrer Antwortdokumente kopiert werden. Mit einer Kombination aus NotesDocument.CopyToDatabase und NotesDocument.MakeResponse eigentlich kein Problem. Bis die Anwender sich darüber beschwerten, dass beim Löschen von Hauptdokumenten auf einmal die falschen Antwortdokumente mit gelöscht wurden.

In der Anwendung war im Postdocumentdelete-Event eine Funktion implementiert, dass beim Löschen eines Hauptdokumentes über die Eigenschaft NotesDocument.Responses auch die zugehörigen Antwortdokumente mit gelöscht wurden.
Read More

23.01.2008

SnTT: Konfigurationsdokumente - schnell und zuverlässig

Category: Show-n-Tell Thursday, Lotus Notes, Entwicklung


Show-n-Tell Thursday
Um die Konfiguration einer Notes-Anwendung zu speichern, gibt es zwei offensichtliche Möglichkeiten und eine dritte, nicht ganz so offensichtliche, die die Vorteile der anderen beiden Alternativen in sich vereint, in zwei Varianten:


Read More

21.01.2008

SnTT: Wie funktioniert eigentlich Replikation? (Update)

Category: Show-n-Tell Thursday, Lotus Notes, Administration, Entwicklung


Show-n-Tell Thursday
In der
Notes/Domino-Forum von Xing wird ein Problem bei Feldreplikation im Cluster beschrieben. Das möchte ich zum Anlass nehmen, den "Mechanismus" Replikation einmal gründlicher zu beleuchten.

Startet ein Notes-Client oder ein Domino-Server eine Replikation mit einem (anderen) Domino-Server, so wird dort zunächst nach einer Notes-Datenbank mit der gleichen Replik-ID gesucht. Die Replik-ID einer Datenbank findet man im 2. Reiter der Datenbank-Eigenschaften:

A picture named M2


Read More

20.12.2007

My third article in THE VIEW

Category: Lotus Notes, Entwicklung, THE VIEW, AJAX, Web-Entwicklung


After a quite long pause, my third article will be published soon: in the January/February 2008 issue of THE VIEW:

Boost your Web users' productivity:
Three more advanced AJAX techniques you can apply to Domino Web applications

From the content:
Increase user productivity and free developer time with three advanced, practical AJAX-enabled features for Domino Web applications. Automatically log details of JavaScript errors to the Domino server; monitor a view for any new documents and keep browser users up-to-date; and create a dynamic form that browser users tailor for their immediate needs.

Here is the database with the demos mentioned in  the article:

2007-12-20-Demos-AJAX-articles.zip

13.11.2007

DNUG Herbstkonferenz 2007 - Objektorientierte Programmierung (OOP) in LotusScript

Category: DNUG, Konferenzen, Entwicklung, OOP


Nun ist es vollbracht. Mein Vortrag "Objektorientierte Programmierung (OOP) in LotusScript - Der nächste Schritt" bei der DNUG Herbstkonferenz ist zu Ende. Die für die Session angesetzen 90 Minuten waren doch schneller vorbei, als ich erwartet habe.

Wie der Titel schon andeutet, habe ich über eines meiner Lieblingsthemen gesprochen: die Vorteile der Objektorientierung in LotusScript. Inhalt war weniger, was OOP ist. Vielmehr wurde gezeigt, wie das Model View Controller Pattern in Lotus Notes  realisiert werden kann. Die in diesem Pattern beschriebene Trennung zwischen Fachklasse (Model), Darstellung (View) und Benutzerinteraktion (Controller) nutzen wir, um unser Framework aufzubauen. Die Details dazu finden Sie in den Folien. Weil Konzepte bisweilen mit Code verständlicher ist, gibt es auch eine Beispieldatenbank.



Update:
Der Download des PDF-Dokumentes funktioniert nun.

14.11.2007

DNUG Herbstkonferenz 2007 - Entwurfsmuster für Notes-Entwickler

Category: DNUG, Konferenzen, Entwicklung, OOP


"Ein Entwurfsmuster ist eine Lösung zu einem Problem in einem Kontext."

Was das bedeutet und warum es gut ist, Entwicklungsmuster zu kennen, habe ich heute versucht, in meinem Vortrag "Entwurfsmuster für Notes-Entwickler" auf der  DNUG Herbstkonferenz 2007 zu vermitteln.

Zum noch einmal Nachlesen und für die, die nicht nach Bonn kommen konnten, sind hier die Präsentation und die LotusScript-Beispiel-Datei:


12.11.2007

Mehrsprachigkeit bei Lotus Notes-Anwendungen

Category: Lotus Notes, Entwicklung


Mehrsprachigkeit in Lotus Notes Anwendungen ist leider nicht mit einem Knopfdruck erledigt. Der von der IBM vorgesehene Weg führt zu einer Verdoppelung aller Design-Elemente, was nicht unbedingt erstrebenswert ist. Aber mit der richtigen Kombination von verschiedenen Techniken kann der Arbeitsaufwand zumindest reduziert werden.
Read More

11.09.2007

AdminCamp 2007: Mein Vortrag zur "Kryptographie in Notes/Domino"

Category: AdminCamp, Konferenzen, Lotus Notes, Lotus Domino, Entwicklung, Administration


Zurzeit findet im Maritim Gelsenkirchen das AdminCamp 2007 statt.

Auffälligste Neuerung war für mich das neue Logo:

neues AdminCamp-Logo

Hübsch, nicht wahr?

Wie bisher wimmelt es hier von hervorragenden Experten, wie Susan Bulloch, Gregory Engels, Rudi Knegt, Jürgen Kunert, Gerald Peters und viele, viele mehr.  Auch bei den Themen hat man - wie immer - die Qual der Wahl.

Heute durfte ich meinen Vortrag zum Thema "Kryptographie in Notes/Domino - Pragmatische Einführung für Administratoren" halten.

Read More

29.07.2007

Quick-Tipp: Programmatically create memo with doclink on top, sig on bottom

Category: Quick-Tipp, Lotus Notes, Entwicklung


Joe Litton has written some LotusScript code to programmatically create a memo with a doclink on top and the signature of the current user on bottom. He used a modified InsertSignature function (originally from the CoreEmailClasses script library).

But there is a much shorter solution using the formula language, if the doclink should link to the current document or the document currently selected in the current view:

@Command([EditMakeDocLink]);
@Command([Compose]; @MailDbName; "Memo");
@Command([EditGotoField]; "EnterSendTo");
@Command([EditInsertText]; "Lists of recipients...");
@Command([EditGotoField]; "Body");
@Command([EditInsertText]; @NewLine + @NewLine + "Further text..." + @NewLine);
@Command([EditGotoField]; "Body");
@Command([EditInsertText]; "Click on this link to open the referred document:  ");
@Command([EditPaste]);

Text inserted after the @Command([EditPaste]) is always inserted before the doclink! Thus you have to write the text, which should appear after the doclink first, than re-enter the body field, write the text before the doclink and than paste it.

This solution also solves the problem, that if the user closes the memo without sending it, it does not leave is unwanted draft document.

06.07.2007

GhostTyper

Category: Lotus Notes, Entwicklung


Theo Heselmans hat in seinem Blog Tools vorgstellt, ohne die er sich Entwicklung unter Lotus Notes nicht mehr vorstellen kann. Zu der Liste würde ich gerne noch ein Tool hinzufügen, ohne das ich nicht heute nicht mehr entwickeln möchte: der GhostTyper.
Im GhostTyper können Code Snippets definiert werden, die direkt aus dem Domino Designer heraus eingefügt werden können. Besonders gut gefällt mir, dass im GhostTyper Parameter für die Code Snippets definiert werden können, die dann an beliebiger Stelle eingesetzt werden.
Der GhostTyper ist Shareware und die Kosten von ca. 40,- EUR sind für den Geschwindigkeitsgewinn vernachlässigbar.
Read More

31.05.2007

SnTT: Design-Update für "Gemeinsam, privat bei Erstbenutzung"-Ordnern

Category: Show-n-Tell Thursday, Lotus Notes, Entwicklung


Manchmal wäre es wirklich nützlich, diese "Gemeinsam, privat bei Erstbenutzung"-Ordner (Shared, private on first use = SPOFU) verwenden zu können.

Soll zum Beispiel jeder Benutzer einer Notes-Anwendung die Möglichkeit haben, in einem Ordner seine Favoriten zu sammeln, und hat er keine Berechtigung, alle Dokumente der Datenbank zu verändern - es kann also nicht irgendetwas für diesen Benutzer in das Dokument selbst eingetragen werden - dann bleiben nur noch private oder eben  "Gemeinsam, privat bei Erstbenutzung"-Ordner übrig.

Ein solcher Ordner ist auch schnell erstellt. Die Sache hat trotzdem einen gewichtigen Haken: Hat der Benutzer einmal auf den gemeinsamen Ordner geklickt und damit seine private Kopie erstellt, kann man die Gestaltung dieser Kopie nicht mehr zentral aktualisieren.

Eine typische Lösung für das Problem ist es, diesen Ordner zu löschen, so dass der Benutzer das nächste Mal, wenn er den Ordner benutzen will, wieder eine neue private Kopie - jetzt vom veränderten Original erstellt.

Dieser Ansatz ist aber nicht ideal:

Zum einen stellt sich die Frage, wann die Privatkopie gelöscht werden soll. Bei jedem Verlassen der Datenbank? Dann kann der Benutzer diesen Ordner praktisch gar nicht zum langfristigen Sammeln benutzen, weil er zwischen zwei Sitzungen immer geleert würde. Oder man setzt zentral irgendeine Art Signal, zum Beispiel einen bestimmten Feldwert in einem Datenbankprofil-Dokument. Dann muss man aber immer, wenn man die Gestaltung des Ordners verändert, daran denken, dieses Flag zu setzen. Besser wäre es, wenn dieses Löschen automatisch immer genau dann und nur dann passieren würde, wenn sich die Gestaltung des Originals verändert.

Zum anderen bedeutet das Löschen des Ordners natürlich auch, dass alle Dokument-Zuordnungen verloren gehen. Spätestens nach dem zweiten, dritten Mal wird kaum ein Benutzer den Favoritenordner mehr verwenden, wenn der seinen Inhalt sowieso irgendwann wieder verliert.

Aber mit ein wenig "Magie" und Fleiß lassen sich beide Probleme in den Griff bekommen...

Read More

30.05.2007

Mein zweiter Artikel in THE VIEW (Update 2007-12-20)

Category: Lotus Notes, Entwicklung, THE VIEW, AJAX, Web-Entwicklung


In der Mai/Juni-Ausgabe von THE VIEW ist mein zweiter Artikel erschienen:

Leverage the full power of AJAX
in Domino Web applications

Aus dem Inhalt:
Deepen your understanding of Asynchronous JavaScript and XML (AJAX) with four practical demonstrations of AJAX techniques that provide fast, flexible features for Web applications. Building on the March/April 2007 article, "Enhance Web application performance and flexibility with these 10 AJAX/Domino techniques," this article demonstrates dynamic widgets, instant validation, progress indicators, and more. Examine each feature’s AJAX mechanics and gain insight into which AJAX technique to use in different circumstances...

Für Leute mit einem Abo der elektronischen Variante ist hier der Link zu meinem Artikel: http://drh02.eapps.com/eview/volr6.nsf/0/cb5406a7e9e41f5e852572e30071802e?OpenDocument

Hier ist die Datenbank mit den Demos zum Artikel:

2007-12-20-Demos-AJAX-articles.zip
(Update 2007-12-20: Neue Version der Demo-Datenbank mit kleineren Korrekturen)

Leider darf ich den Artikel selbst hier nicht veröffentlichen (aus offensichtlichen Gründen ). Wer kein Abo von diesem hervorragenden Magazin hat, kann vieles auch den Folien zum meinem diesjährigen Vortrag beim EntwicklerCamp 2007 - AJAX in Domino-Web-Anwendungen - entnehmen.

20.05.2007

OOP in LotusScript - Building a MVC Framework

Category: EntwicklerCamp, Konferenzen, Lotus Notes, Entwicklung, OOP


I finally found the time to translate my session "OOP in LotusScript - Building a MVC Framework" held at the EntwicklerCamp.

OOPLotusScript_en.pdf
The sample application is still in German OOPBeispiel.zip

26.04.2007

SnTT: Eingebettete Picklist

Category: Show-n-Tell Thursday, Lotus Notes, Entwicklung


Manchmal möchte man einem Benutzer aus einer langen Liste von Möglichkeiten auswählen lassen. Typischerweise sind die Optionen dann in verschiedenen Notes-Dokumenten gespeichert und können vielleicht nach unterschiedlichen Gesichtspunkten sortiert werden, zum Beispiel eine Liste von Produkten, die zum einen innerhalb einer Produkthierarchie stehen, zum anderen nach Kategorie, Name oder Produktnummer sortierbar sind.

Typische Lösungen für diese Aufgabe sind:
  1. Man implementiert eine Aktion, die @Picklist aufruft und das Ergebnis der Auswahl in ein Feld speichert.
  2. Man realisiert die Auswahl in einer eignenen Dialogbox und erstellt dafür eine (Teil-)Maske.
  3. Man erstellt mehrere Auswahlfelder für die verschiedenen Hierarchiestufen, wobei die "unteren" von den "oberen" abhängen und sich die Optionen jeweils abhängig von den schon getroffenen Auswahlen abhängen.
  4. Oder man erstellt einfach eine laaaaaange Dialogliste/Liste.

Ich möchte einen weiteren Weg aufzeigen, der über eine eingebettete Ansicht und einen eingebetteten Editor funktioniert. Ich sehe dabei folgende Vorteile:
 
  • Der Benutzer bleibt im gleichen Kontext (anders als bei @Picklist oder der Dialogbox).
  • Die Ansicht kann dynamisch nach verschiedenen Gesichtpunkten sortiert werden (anders als bei Dialoglisten-Kaskade oder einer einzelnen Dialogliste).
  • Man kann die Ansicht optisch strukturieren (abwechselnde Zeilenhintergrund).

Read More

15.04.2007

SnTT: IDs für Gemeinsame Aktionen sicht- und änderbar

Category: Show-n-Tell Thursday, Lotus Notes, Entwicklung


Ich bin eben bei einer fremden Datenbank in der Ansicht der Gemeinsamen Aktionen auf ein Phänomen gestoßen:

A picture named M2

Read More

11.03.2007

Mein erster Artikel in THE VIEW (Update 2007-12-20)

Category: Lotus Notes, Entwicklung, THE VIEW, AJAX, Web-Entwicklung


Juchu! In Kürze erscheint die Die März/April-Ausgabe von THE VIEW mit meinem ersten Artikel ist erschienen:

Enhance Web application performance and flexibility
with these 10 AJAX/Domino techniques

Aus dem Inhalt:
Fill your toolbox with these 10 techniques for calling a Domino Web server using Asynchronous JavaScript and XML (AJAX). Discover the advantages and limitations of the response-data formats available for each technique, including their effect on the browser user experience and the overhead they incur in either development time or execution. By using AJAX to get or change data or start processes, your Web applications gain performance, speed, and flexibility that vastly improve the Web user experience. This article explains each technique, lists its pros and cons, and provides code samples in a download database ...

Für Leute mit einem Abo der elektronischen Variante ist hier der Link zu meinem Artikel: http://drh02.eapps.com/eview/viewr6.nsf/0/c4c35ccbe9af0c58852572a50064cb8e?OpenDocument

Hier ist die Datenbank mit den Demos zum Artikel. Daneben enhält das Archiv auch die beiden beschriebenen Servlets:

2007-12-20-Demos-AJAX-articles.zip
(Update 2007-12-20: Neue Version der Demo-Datenbank mit kleineren Korrekturen)

Leider darf ich den Artikel selbst hier nicht veröffentlichen (aus offensichtlichen Gründen ). Wer kein Abo von diesem hervorragenden Magazin hat, kann vieles auch den Folien zum meinem diesjährigen Vortrag beim EntwicklerCamp 2007 - AJAX in Domino-Web-Anwendungen - entnehmen.

Update: Inzwischen ist auch mein zweiter Artikel - Leverage the full power of AJAX in Domino Web applications -  erschienen. Die obige Datenbank enthält die Beispiele und Demos zu beiden Artikeln.

08.03.2007

SnTT: Abgerundete Ecken und Layer

Category: Show-n-Tell Thursday, Lotus Notes, Entwicklung, Interface Design


SNTT.gif
Seit dem Ben Langhinrichs gezeigt hat, wie mit einfachen Mitteln Tabellen mit runden Ecken im Notes Client realisiert werden können, wollte ich es immer mal produktiv einsetzen. Bisher habe ich es nie getan, weil das alt bekannte Thema "Notes und Drucken" dem im Wege stand. Während der Lotusphere - Session: Designing the User Experience: Why Your Interface Matters von Chris Blatnick und Nathan T Freeman ist mir eine Lösung dazu eingefallen.


Aber erst einmal der Reihe nach. Für runde Ecken in Tabellen benötigt man zwei Zutaten. Eine Image Ressource wie z.B. diese A picture named M2 und natürlich eine Tabelle.

Tabellen-Eigenschaften
In den Tabellen-Eigenschaften muss beim Rand der Typ "Image" ausgewählt werden und unter Image muss der Name der Image Ressource angegeben werden. Damit der Effekt auch gut sichtbar wird, muss der Rand eine ausreichende Breite haben. In unserem Beispiel sind es 9 Pixel.
Das Ergebnis kann sich durchaus sehen lassen.A picture named M4



Zumindest bis es ans Drucken geht.

Druckvorschau/ 

Wie nicht anders erwartet, wird beim Drucken nicht die Image Ressource verwendet. Aber dafür wird auf jeder Seite ein 9 Pixel breiter Rand angefügt, was einen nicht wirklich schönen Trauerrand ergibt.

Aber es gibt eine Lösung für das Problem: Layers. In der Maske werden zwei Tabellen verwendet. Die Tabelle mit den abgerundeten Ecken befindet sich in einem Layer. Die zweite Tabelle ist nur für die Druckausgabe da und wird von dem Layer mit der ersten Tabelle vollständig verdeckt. (In dem Screenshot habe ich den Layer bewusst so verschoben, dass die darunter liegende Tabelle zu sehen ist.)

A picture named M6


 Jetzt muss nur noch in der Zeile, in der sich der Layer Anchor befindet, beim Hide-When die Option für das Drucken ausgewählt werden.

A picture named M7 

Somit wird der Layer mit den runden Ecken zwar auf dem Bildschirm angezeigt, aber auf dem Papier kommt nur die einfache Tabelle zum Vorschein.

01.03.2007

EntwicklerCamp 2007 - AJAX in Domino-Web-Anwendungen

Category: EntwicklerCamp, Konferenzen, Lotus Notes, Entwicklung, AJAX, Web-Entwicklung


Aller guten Dinge sind drei.  Nachdem Bernd seinen zweiten Vortrag gehalten hatte, kam ich dran mit "AJAX in Domino-Web-Anwendungen - der nächste Schritt".

Es ging dabei im Wesentlichen um zwei Fragen:
  • Wie kann man den Domino-Server per AJAX aufrufen?
  • Welcher Datenformate gibt es für die Antwort?

Ich habe 10 Wege beschrieben, wie man an die Daten kommt oder sie verändern kann, und 5 Datenformate für die Transport des Ergebnisses. 6 fortgeschrittene Beispiele dienten zur Verdeutlichung dieser Techniken. Der darin verwendete Code kann frei verwendet werden. Es gelten die üblichen Einschränkungen.

Die Gestaltungselemente in dieser Datenbank dürfen frei verwendet werden. Wir haben sie selbst erstellt und so sie sind wahrscheinlich frei von Rechten Dritter. Mit Ihrer Benutzung erklären Sie sich bereit, uns von eventuellen Ansprüchen Dritter freizustellen.

Der enthaltene Code wurde getestet. Dennoch schließen wir jede Haftung für Schäden aus, die durch die Verwendung dieses Codes entstehen. Wenn Sie diesen Code verwenden, erklären Sie sich damit einverstanden, uns von einer eventuellen Haftung freizustellen.


2007-02-28 AJAX in Domino-Web-Anwendungen - der nächste Schritt.pdf
2007-02-28 AJAX in Domino-Web-Anwendungen - der nächste Schritt.zip



Für den schnellen Einstieg in die Entwicklung von Domino-Web-Anwendungen mit AJAX ist hier noch einmal mein Vortrag vom letzten Jahr:

AJAX in Domino-Web-Anwendungen.pdf
EC-Demo.zip
AJAX in Domino-Web-Anwendungen-2006-02-22.zip

28.02.2007

EntwicklerCamp 2007 - OOP in LotusScript

Category: EntwicklerCamp, Konferenzen, Lotus Notes, Entwicklung, OOP


Auch den zweiten Vortrag auf dem diesjährigen EntwicklerCamp habe ich über die Bühne gebracht. In "OOP in LotusScript - der nächste Schritt" habe ich beschrieben, wie in LotusScript ein Framework nach dem Model-View-Controller-Pattern aufgebaut werden kann. Die Grundidee ist, dass durch Verwendung von Fachklassen und geeignete Basisklassen Anwendungen schneller entwickelt werden können, die auch noch besser zu warten sind.

Die Details wie so etwas zu erreichen ist, kann den Folien entnommen werden. Weil es manchmal einfacher ist, neben der Theorie auch die Umsetzung zu sehen, gibt es zu den Folien auch eine Beispiel-Anwendung. Der darin verwendete Code kann frei verwendet werden. Es gelten die üblichen Einschränkungen.

Die Gestaltungselemente in dieser Datenbank dürfen frei verwendet werden. Wir haben sie selbst erstellt und so sie sind wahrscheinlich frei von Rechten Dritter. Mit Ihrer Benutzung erklären Sie sich bereit, uns von eventuellen Ansprüchen Dritter freizustellen.

Der enthaltene Code wurde getestet. Dennoch schließen wir jede Haftung für Schäden aus, die durch die Verwendung dieses Codes entstehen. Wenn Sie diesen Code verwenden, erklären Sie sich damit einverstanden, uns von einer eventuellen Haftung freizustellen.


OOPLotusScript.pdf - OOPBeispiel.zip


Für einen Einstieg in die Objektorientierte Programmierung in LotusScript ist hier noch einmal mein Vortrag vom letzten Jahr.

OOLotusScript.pdf - OOSampleDB.zip

Tags

Deutsche RSS-Feeds (German)

Custom Button Custom Button

English RSS feeds

Custom Button Custom Button