In unserem Podcast diskutiert Thomas Bahn über Nutzen, Anwendungen und Erfahrungen aus den Bereichen Chatbots und Künstliche Intelligenz. Mehr erfahren

Schablonennamen in Notes-Datenbanken programmatisch setzen

von Christoph,
assono GmbH, Standort Kiel,

Domino bringt von Haus aus den Befehl load convert mit, um über die Server-Konsole den Gestaltungsschablonennamen vieler Datenbanken auf einmal zu wechseln. Dies kann man mittels LotusScript nachprogrammieren.

Noch fehlt der Schablonenname in dieser Datenbank

1. Datenbanken durchlaufen

Um eine Schleife über mehrere Datenbanken zu drehen, bietet sich die NotesDbDirectory-Klasse an. Beim Aufruf der GetFirstDatabase-Methode gibt man an, ob nur Datenbanken, nur Schablonen oder beides berücksichtigt werden soll. Der Grundaufbau der Schleife sieht dann so aus:

Set directory = session.GetDBDirectory(server)
Set db = directory.GetFirstDatabase(DATABASE)
Do Until db Is Nothing
	If XXX Then ' hier Kriterium einfügen, welche Datenbanken bearbeitet werden sollen
		Call db.Open("", "")
		Call ChangeInheritTemplateName(db, templateName)
		Call db.Close
	End If
	Set db = directory.GetNextDatabase
Loop

2. Schablonennamen wechseln

Die Funktion ChangeInheritTemplateName im obigen Code erledigt die eigentliche Arbeit. Sie muss die nachfolgend beschriebenen Schritte enthalten.

Der Schablonenname einer Datenbank wird im sogenannten Icon-Dokument gespeichert, das immer über die spezielle Note-ID FFFF0010 geholt werden kann:

Set iconDoc = db.Getdocumentbyid("FFFF0010")

Das Item $TITLE in diesem Dokument enthält unter anderem Titel und Schablonennamen der Datenbank. Wir werden es zum Auslesen der aktuellen Werte nutzen. Es hat folgenden Aufbau:

DB_TITEL & Chr$(10) & _
DATENBANKKATALOG_KATEGORIEN & Chr$(10) & _
"#1" & MASTERSCHABLONENNAME_DIESER_DATENBANK & Chr$(10) & _
"#2" % MASTERSCHABLONENNAME_GESTALTUNG_ÜBERNEHMEN

Dabei ist die zweite Zeile mit den Kategorien optional. Ebenso sind sind die beiden letzten Zeilen leer, falls die Datenbank noch keinen Schablonennamen hat.

Wir müssen also gemäß diesem Aufbau den gewünschten Schablonennamen überschreiben oder ergänzen. Dies sieht beispielsweise im Fall, dass noch kein Schablonenname eingetragen war, so aus:

newValue = iconDoc.GetItemValue("$TITLE")(0) & Chr$(10) & "#2" & templateName

Jetzt wird es interessant, denn der neue Wert wird nicht einfach in das Item zurückgeschrieben. Stattdessen muss erstens das Icon-Dokument gespeichert werden (und zuvor bearbeitet werden, damit das Speichern ausgeführt wird):

Call iconDoc.ReplaceItemValue("$TITLE", db.title)
Call iconDoc.Save(True, True)

Dann erst trägt man den neuen Wert ein, und zwar direkt in das Title-Attribut der Datenbank, nicht in das $TITLE-Item:

db.Title = newValue

Damit lässt sich der neue Schablonenname in den Datenbank-Eigenschaften überprüfen.

Der Schablonenname wurde erfolgreich eingetragen

Eine letzte Sache, die mir bei meiner Recherche nirgendwo begegnet ist, ist noch zu beachten: Nämlich dass der Datenbank-Titel auf 96 Zeichen begrenzt ist. Ist newValue länger, wird das Ende rigoros abgeschnitten und die Datenbank hat nicht den korrekten Schablonennamen erhalten. Dies kommt natürlich nur vor, wenn der Datenbank-Titel bereits besonders lang ist und/oder die Kategorien bzw. der Masterschablonenname der Datenbank Platz in Anspruch nehmen. In der Regel reichen die 96 Zeichen aus.

Das ist insofern interessant, als dass diese Längenbeschränkung nur beim programmatischen Ansatz auftritt. Ändert man den Schablonennamen im Eigenschaften-Fester der Datenbank, hat man mehr Zeichen zur Verfügung.

Update 22.03.2021

In einer früheren Version dieses Textes stand, dass der Befehl load convert nur den Schablonennamen wechseln, nicht jedoch füllen kann, wenn vorher keine Vererbung eingestellt war.

Thomas Kürschner wies mich freundlicherweise darauf hin, dass es die nicht offiziell dokumentierten Optionen -inherit und -noinherit gibt, mit denen man steuern kann, ob die Masterschablone in den zu aktualisierenden Datenbanken geändert werden soll. Der einzig funktionierende, per Suchmaschine aufzufindende Link zu der entsprechenden ehemaligen IBM-Technote führt auf eine taiwanesiche Seite. In Kurzform:

-inherit sorgt dafür, dass in allen betroffenen Datenbanken der neue Schablonenname und das Häkchen "Gestaltung aus Masterschablone übernehmen" gesetzt werden

-noinherit aktualisiert die Gestaltung der betroffenen Datenbanken, entfernt aber das Häkchen "Gestaltung aus Masterschablone übernehmen"

Nutzt man keine der beiden Optionen, ändert sich nur dort der Schablonenname, wo vorher das Häkchen "Gestaltung aus Masterschablone übernehmen" gesetzt war. Wo es nicht gesetzt war, wird lediglich die Gestaltung aktualisiert.

Nächste Artikel in dieser Reihe:

Quelle: Change Notes Design Template Name With Lotusscript

Fachbeitrag HCL Notes HCL Domino Administration Entwicklung Für Entwickler

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

Sie haben Interesse an diesem Thema?

Gerne bieten wir Ihnen eine individuelle Beratung oder einen Workshop an.

Kontaktieren Sie uns

Weitere interessante Artikel

Sie haben Fragen?

Wenn Sie mehr über unsere Angebote erfahren möchten, können Sie uns jederzeit kontaktieren. Gerne erstellen wir eine individuelle Demo für Sie.

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 416
Vertrieb: +49 4307 900 402

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