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
Der "Trick" an der Sache ist,
dass man ein Item der Ansicht ändern muss, und zwar die $FormulaClass.
Normalerweise steht da immer die 1, und das heißt: zeige Dokumente. Andere
Werte bewirken, dass etwas anderes angezeigt wird. Welche Werte wie funktionieren,
ist dokumentiert in der Datei include\nsfnote.h, die zum IBM Lotus C API
Toolkit for Notes & Domino gehört.
Note
Class Type
| Hex
Value
| Decimal
Value
| Comments
|
NOTE_CLASS_DOCUMENT
| 0x0001
| 1
| document
note
|
NOTE_CLASS_INFO
| 0x0002
| 2
| notefile
info (help-about) note
|
NOTE_CLASS_FORM
| 0x0004
| 4
| form
note
|
NOTE_CLASS_VIEW
| 0x0008
| 8
| view
note
|
NOTE_CLASS_ICON
| 0x0010
| 16
| icon
note
|
NOTE_CLASS_DESIGN
| 0x0020
| 32
| design
note collection
|
NOTE_CLASS_ACL
| 0x0040
| 64
| acl
note
|
NOTE_CLASS_HELP_INDEX
| 0x0080
| 128
| Notes
product help index note
|
NOTE_CLASS_HELP
| 0x0100
| 256
| designer's
help note
|
NOTE_CLASS_FILTER
| 0x0200
| 512
| filter
note
|
NOTE_CLASS_FIELD
| 0x0400
| 1024
| field
note
|
NOTE_CLASS_REPLFORMULA
| 0x0800
| 2048
| replication
formula
|
NOTE_CLASS_PRIVATE
| 0x1000
| 4096
| Private
design note [...]
|
NOTE_CLASS_DEFAULT
| 0x8000
| 32,768
| MODIFIER
- default version of each
|
NOTE_CLASS_ALL
| 0x7FFF
| 32,767
| all
note types
|
NOTE_CLASS_ALLNONDATA
| 0x7FFE
| 32,766
| all
non-data notes
|
NOTE_CLASS_NONE
| 0x0000
| 0
| no
notes |
Es gibt aber keine Möglichkeit, um das
$FormulaClass-Item mit dem Domino Designer zu ändern. Da muss ein ganz
kleiner LotusScript-Agent ran.
Sub
Initialize
Dim
session As
New
NotesSession
Dim
db As
NotesDatabase
Dim
view As
NotesView
Dim
doc As
NotesDocument
Set
db =
session.CurrentDatabase
Set
view =
db.GetView("Design
elements\0x7FFE all design elements")
' adapt view title
Set
doc =
db.GetDocumentByUNID(view.UniversalID)
Call
doc.ReplaceItemValue("$FormulaClass",
"32766")
' shows all non-data
notes
Call
doc.Save(True,
True)
End
Sub
Die Version, die ich für alle Ansichten
in der Demo-Datenbank benutzt habe, steht im "Configure design elements
views"-Agenten.
So viele Typen, wie soll man die
bloß auseinander halten?
Damit die Ansicht mit allen Gestaltungselementen
vernünftige Typen anzeigt, musste ich ziemlich viel ausprobieren. Mein
Startpunkt war der folgende Eintrag im Lotus
Domino Designer Wiki von Andre
Guirard: Make
a Notes view list design elements (using LotusScript or Java)
Das Problem dabei war: Die Formeln funktionieren
nur innerhalb einer Note Class richtig. Speziell die Formeln für Masken,
Ansichten und Agenten gehen so nicht in einer Ansicht mit allen Gestaltungselementen.
Und bei einigen Elementen ist schon die Note Class eindeutig, so dass es
gar keine Formel gibt.
Ich habe in diesen Fällen versucht,
über die $Flags, $FlagsExt oder andere Items eine möglichst eindeutige
Zuordnung hinzukriegen. Aber um es klar zu sagen: Ich glaube selbst nicht,
dass die aktuelle Formel alle Fälle zu 100% richtig abdeckt. Wenn es bei
irgendjemanden nicht richtig funktioniert, bitte mir Bescheid geben.
Da die resultierende Formel ziemlich
lang geworden ist, verweise ich an dieser Stelle einfach mal auf die Formel
der Type-Spalte, die es in jeder der Ansichten gibt (und ab Notes 7 auch
als Shared Column namens "Design Element Type").
Was kann jetzt mit diesen Ansichten
anrichten?
Ich habe in der "Design elements\0x7FFE
all design elements"-Ansicht einige nützliche Spalten eingefügt:
Schon mal im Server-Log eine Fehlermeldung
gehabt, die nur auf die Note-ID oder UNID verweist? Schnell gefunden...
Schnell sehen, ob die Gestaltungsaktualisierung
für einzelne Elemente gesperrt ist, oder aus welchen Schablonen einzelne
Elemente abstammen? Bitte schön. Ein Gestaltungselement scheint bei einem
Client einfach nicht vorhanden zu sein? Vielleicht hat da jemand eine Sprache
eingestellt.
Auch immer mal wieder hilfreich: Wer
hat alles an der Datenbank rumgeschraubt, wann waren die letzten Änderungen,
warum ist die leere Datenbank schon so groß usw.
Was geht noch?
Ich hatte kürzlich den Fall, dass in
einer Konfigurationsmaske ein öffentlicher Ordner ausgewählt werden sollte
- keine Ansichten, keine privaten Ordner. Ich habe gleich erst einmal losgelegt,
bin durch die session.CurrentDatabase.Views durchgelaufen und habe alles
rausgefiltert, was nicht in die Auswahl sollte. Den Rest, also die Liste
der öffentlichen Ordner, wollte ich dann in ein "Berechnet zur Anzeige"-Feld
schreiben. Leider waren es aber sehr, sehr viele Ordner und die Liste passte
nicht mehr in ein Textfeld.
Mit dem obigen Trick und einer passenden
Selektionsformel habe ich mir eine Ansicht gebaut, die genau die öffentlichen
Ordner angezeigt hat und aus der der Benutzer per @PickList einen Ordner
auswählen konnte.
Über Single-Category-Lookups geht das
bei kleineren Listen auch direkt mit den allgemeinen Ansichten in der Demo-Datenbank.
War das schon alles?
Bei weitem nicht! Denn was man sieht,
kann man auch (leichter) ändern. Wie wäre es mit einer Aktion oder einem
Agenten, der die Referenzen zu anderen Schablonen aus auswählten Gestaltungselementen
entfernt. Einfach das $Class-Item löschen. Oder $Language. Oder das Aktualisierungsschutzflag:
einfach das große "P" aus den $Flags löschen.
Bei den spezielleren Ansichten kann
man dann auch noch passendere Spalten für den jeweiligen Anwendungsfall
basteln, z. B. Details zu den Agenten-Einstellungen. Eine große Hilfe dabei
dürfte die Referenz der Werte in den $Flags- und $FlagsExt-Items sein,
die in der Datei include\stdnames.h steht, die auch zum IBM Lotus C API
Toolkit for Notes & Domino gehört. Ich habe die wichtigsten Zeilen
auch als Tabelle der Download-Datei beigelegt.
Demo-Datenbank:
DesignElementsViews.zip
(170
KB )
Thomas Bahn, Diplom-Mathematiker, IT-Spezialist & Speaker auf Fachkonferenzen
Thomas Bahn ist Mitgründer und Geschäftsführer der assono GmbH. Seit mehr als 20 Jahren berät er erfolgreich Unternehmen aus ganz Deutschland rund um das Thema Software und Digitalisierung. Insbesondere in den Bereichen HCL Notes und Domino (ehemals IBM) als auch bei aktuellen, unternehmensrelevanten KI-Themen wie Chatbots kennt er die neusten Entwicklungen und weiß, wie diese sich gewinnbringend für Unternehmen einsetzen lassen. Aufgrund seines Expertenwissens ist Thomas Bahn regelmäßiger Sprecher auf nationalen und internationalen Fachkonferenzen.
Sie haben Fragen zu diesem Artikel? Kontaktieren Sie uns gerne: blog@assono.de