Ye118w Day: Ansichten mit Gestaltungselementen

von Thomas Bahn,
assono GmbH, Standort Kiel,

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

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:


A picture named M2

Schon mal im Server-Log eine Fehlermeldung
gehabt, die nur auf die Note-ID oder UNID verweist? Schnell gefunden...


A picture named M3

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.


A picture named M4

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:

zip.gif
DesignElementsViews.zip
(170
KB )

Fachbeitrag IBM Notes IBM Notes Traveler Tipp Entwicklung

Sie haben Fragen zu diesem Artikel? Kontaktieren Sie uns gerne: blog@assono.de

Sie wollen eine individuelle Lösung? Kontaktieren Sie uns

Weitere interessante Artikel

Sie haben Fragen? Wir sind für Sie da.

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Sie können uns auf verschiedene Weisen für eine unverbindliche Erstberatung erreichen:

assono GmbH

Standort Kiel (Zentrale)
assono GmbH
Lise-Meitner-Straße 1–7
24223 Schwentinental

Standort Hamburg
assono GmbH
Bornkampsweg 58
22761 Hamburg

Telefonnummern:
Zentrale: +49 4307 900 407
Techn. Hotline: +49 4307 900 403
Vertrieb: +49 4307 900 402

E-Mail-Adressen:
kontakt@assono.de
bewerbung@assono.de