Assistenten (engl. "wizards") bestehen aus Programmcode, der eine Abfolge von Dialogen im HTML-GUI des Content Managers bewirkt. Eine solche Dialogsequenz gibt Redakteuren die Möglichkeit, eine Aufgabe in vorgegebenen, optional korrigierbaren Schritten auszuführen. Assistenten werden als Tcl-Skripte implementiert und können daher auf einfache Weise die volle Funktionalität des Content Managers nutzen. Als Beispiele und Vorlagen für Entwicklung Ihrer eigenen Assistenten können die Assistenten verwendet werden, die im Fiona-Demo-Content enthalten sind.
Assistenten werden analog zu einfachen Tcl-Prozeduren mit Hilfe einer Definition in der Datei contentMenu.xml
als kundenspezifische Befehle in den Content Navigator eingebunden. Diese Datei befindet sich im instanzenspezifischen Verzeichnis config
(siehe Zusätzliche Menübefehle konfigurieren). Die Definition eines Assistenten in dieser Datei unterscheidet sich von derjenigen einer einfachen Tcl-Prozedur nur durch das Property dialog
, das den Wert true
haben muss.
Im Lieferumfang enthaltene Assistenten sind in der Datei itemRegistry.xml
definiert, die sich im instanzenspezifischen Verzeichnis webapps/GUI/WEB-INF
befindet.
Wenn der kundenspezifische Befehl im GUI aufgerufen wird, sendet das GUI einen entsprechenden XML-Request zum Content Manager. Dieser extrahiert daraus den Namen des kundenspezifischen Befehls und ermittelt den Namen der Tcl-Prozedur, die mit diesem Befehl verknüpft ist. Anschließend ruft der Content Manager diese Tcl-Prozedur mit den Argumenten aus dem Request auf. Die Tcl-Prozedur wertet die ihr übergebenen Argumente aus und schreibt als Ergebnis HTML-Text in die Standard-Ausgabe. Dieser ausgegebene Text wird als Antwort auf den Request an das GUI gesendet, wo er verarbeitet (d. h. umgewandelt) und schließlich zum Browser gesendet wird:
Die vom Tcl-Skript erzeugte Wizard-HTML-Seite wird vom GUI als Formular dargestellt, dessen Elemente der Benutzer ausfüllt und abschickt, um zur nächsten Verarbeitungsrunde fortzuschreiten. Da das Tcl-Skript der darzustellenden Seite einen Namen geben muss und der Benutzer das darin enthaltene Formular mit einem Submit-Button abschickt, erfährt das Tcl-Skript stets, auf welcher Seite der Benutzer welche Aktion ausführen möchte und kann die Dialogsequenz entsprechend fortführen oder beenden. Der Kreislauf kann durch das Tcl-Skript beendet werden, indem es ein leeres Ergebnis (nichts oder nur Leerraumzeichen) ausgibt. (Technisch bilden das Tcl-Skript und das GUI eine state machine, in der der aktuelle Zustand durch den Seitennamen und die gewünschte Zustandsänderung durch die Submit-Aktion definiert wird.)
Die Tcl-Prozedur erzeugt eine Dialogseite, indem sie dessen HTML-Text in die Standard-Ausgabe schreibt. Da das GUI diesen HTML-Text in ein Formular in einer Seite einbettet, darf er die Elemente body
, head
und form
nicht enthalten.
Der Seitenname muss mit dem folgenden Element gesetzt werden:
<npsPage name="SeitenName" title="Titel"> <!-- Inhalt der Seite: HTML-Code und Assistenten-Tags --> </npsPage>
Der Wert des optionalen Feldes title
wird vom GUI als Seitentitel verwendet. Wenn das Formular abgeschickt wird, wird dem Wizard neben anderen Werten (siehe unten) auch der Seitenname übergeben.
Der Tcl-Code kann die üblichen HTML-Formularelemente verwenden (d. h. in die Standardausgabe ausgeben, um den Benutzer Werte eingeben zu lassen.
Mit Hilfe zahlreicher Assistenten-Tags können Sie auf Funktionen des Content Navigators zugreifen, beispielsweise um Buttons zu generieren, Auswahldialoge zu nutzen und dergleichen.
Wenn der Benutzer einen Assistenten aufruft, wird die entsprechende Prozedur mit zwei Argumenten aufgerufen. Die Prozedur muss folgendermaßen definiert werden:
proc wizardCommand {paramList args} { ... }
Das Argument paramList
enthält eine Liste mit Name-Wert-Paaren, die die in der jeweiligen Session gespeicherten Variablen und die dazu gehörenden Werte enthalten. Die Liste wird nicht für jedes Formular neu erzeugt, sondern es handelt sich immer um die gleiche Liste, d. h. der Namensraum ist für alle Dialoge gleich. Demzufolge müssen Formularfelder über alle Dialoge hinweg eindeutige Namen haben, um die Dialoge in beliebiger Reihenfolge aufrufen zu können.
Die Liste enthält anfänglich die folgenden benannten Werte:
Name | Bedeutung |
---|---|
wizard.page |
Name der mit npsPage name="..." generierten Seite, aus
deren Formular die Eingaben stammen. Beim ersten Aufruf des Wizard-Codes, d. h.
nachdem der Benutzer den Wizard aufgerufen hat, hat der Parameter den Wert
init . Anhand des Wertes dieses Parameters kann der Wizard-Code
erkennen, auf welcher Seite sich der Benutzer befand, als er einen Submit-Button
angeklickt hat. |
wizard.button |
Name des zuletzt gedrückten Submit-Buttons (generiert mit
npsButton name="..." ). Wenn der Tcl-Code des Wizards das erste Mal
aufgerufen wird, hat der Parameter den Wert init . Anhand des Wertes
dieses Buttons kann der Tcl-Code erkennen, welche Aktion der Benutzer ausgewählt
hat. |
wizard.tickets |
Eine Liste, die Name-Wert-Paare enthält. Die Namen sind Bezeichner, die Werte Streaming-Ticket-IDs. Mit Hilfe dieser Werte kann man Editoren wie den HTML-Editor aus Assistenten heraus aufrufen und ihnen einen Hauptinhalt oder den Wert eines HTML-Feldes übergeben. |
wizard.language |
Spracheinstellung des Benutzers als Kürzel (de, en usw.) |
wizard.attributeName |
Bei der Bearbeitung von Feldern wird dem Assistenten in dieser Variablen der Name des Feldes übergeben. |
wizard.contentId |
Bei der Bearbeitung von Feldern wird dem Assistenten in dieser Variablen die ID der betreffenden Dateiversion übergeben. |
Diese Liste mit Name-Wert-Paaren wird jedes Mal aktualisiert und mit den Werten aus bisher unbekannten Feldern erweitert, wenn der Anwender auf einen Submit-Button klickt. Im aktuellen Formular nicht referenzierte Feldnamen werden vom GUI nicht aus der Liste entfernt.
Als zweites Argument, args
, werden dem Assistenten die IDs der Dateien übergeben, mit denen er arbeiten soll, sofern dies bei der Konfiguration des Menüeintrags vorgesehen wurde. Bei Menü-Einträgen mit dem selectionType
single
ist args
eine einzelne ID, bei extended
die Liste der IDs der Dateien, die auf einer GUI-Seite mit Mehrfachauswahl selektiert wurden.
Die Argumente, die der Wizard in Abhängigkeit vom selectionType
erhält, sind in der folgenden Tabelle zusammengefasst:
selectionType | Argumente |
---|---|
|
|
|
|
|
|
Fiona wird mit einer Assistentenbibliothek (share/script/cm/serverCmds/wizardLib.tcl
) und einem WizardController (share/script/cm/serverCmds/wizards/lib/wizardController.tcl
) geliefert, die die Erstellung von Assistenten wesentlich vereinfachen.