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.
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.
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.