Heute ist der erste jährliche Yellow
Day!
Und natürlich trage ich heute gelb.
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.
Man kann nur Ansichten, Dokumente und Rahmengruppen
in die Seitenleiste integrieren (zumindest ohne von Hand eine Notes-URL
zu ändern: Creating
Form Design Element Sidebar Widgets).
Ich habe deshalb eine Rahmengruppe "Projektaufwand" erstellt,
die nur aus einem Rahmen besteht, in dem als benanntes Element die Maske
"Projektaufwand (schmal)" dargestellt werden soll:
Für die "Installation" der
Rahmengruppe in die Seitenleiste kann man am einfachsten die Starteigenschaften
der Datenbank ändern und dort die entsprechende Rahmengruppe auswählen:
Dann öffnet man die Datenbank. So wird
die Rahmengruppe und damit die Maske dargestellt. Die Widget-Toolbuttons
sind jetzt aktiv und ich klicke auf den dritten Button:
Die Maske wird (innerhalb der unsichtbaren
Rahmengruppe) in der Seitenleiste geöffnet. Außerdem erscheint unter dem
Abschnitt "Eigene Widgets" ein neues Widget.
Um nicht bei jedem Start des Notes-Clients
die Seitenleiste für die Eingabemaske neu öffnen zu müssen, kann man eine
Eigenschaft der Komponente setzen:
So erscheint die Maske automatisch und
steht jederzeit für Eingaben zur Verfügung.
Es gibt noch ein kleines Problem: Wie
öffnet man nach dem Speichern eines Dokuments ein neues, leeres Dokument
in der Seitenleiste? Ich weiß es nicht.
Aber ich habe mir einen kleinen Workaround
ausgedacht. Die Eingabemaske enthält ein verstecktes Textfeld "SaveOptions".
Es ist "Berechnet zur Anzeige" und hat den festen Wert "0".
So werden die Dokumente gar nicht mehr direkt gespeichert.
Statt einer Aktion in der Aktionsleiste
habe ich am Ende der Maske den Button "Speichern" erstellt, der
ein neues Dokument im Back-end erstellt, die eingegebenen Werte dorthin
übernimmt und anschließend die Maske wieder leert und damit vorbereitet
für die nächste Eingabe:
Sub
Click(Source As Button)
Dim
newDoc As NotesDocument
'
sind Eingaben in Ordnung?
If
Not GetBaseController().IsModelValid() Then
Exit Sub
'
neues Projektaufwand-Dokument erstellen und Werte aus diesem Dokument kopieren
Set
newDoc = currentDB.CreateDocument
Call
uidoc.Document.CopyAllItems(newDoc)
Call
newDoc.RemoveItem("SaveOptions")
Call
newDoc.ComputeWithForm(False,
False)
Call
newDoc.Save(True,
True)
'
dieses Dokument wieder leeren
Call
ClearForm
Call
uidoc.Refresh()
End Sub
Und das war's schon. Ganz ohne Java
und Eclipse-Plugin kann man so seine Anwendung in die Seitenleiste des
aktuellen Notes-Clients bringen.
Nebenbei bemerkt, sollte man natürlich
das Layout der Maske an die Gegebenheiten anpassen: Die Seitenleiste wird
meistens relativ schmal geöffnet, also sollte die Maske entsprechend "vertikal"
gestaltet sein. Außerdem muss diese Maske auch nicht druckbar sein und
kann für den Bearbeiten-Modus optimiert werden.
Wie man im Code des Speichern-Buttons
sieht, benutzen wir für die Eingabemaske dieselbe Model-Klasse wir für
die Hauptmaske, so dass die Validierung immer identisch ist und nur an
einer Stelle gepflegt werden muss.