Assistenten

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

Seitenerzeugung

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.

Interaktion mit dem Benutzer

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.

Parameter-Übergabe

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

none

  • Liste mit Name-Wert-Paaren (wizard.language, wizard.button, wizard.page sowie Eingabefeldnamen).

single

  • Liste mit Name-Wert-Paaren (wie oben).
  • Die ID der betreffenden Datei.

extended

  • Liste mit Name-Wert-Paaren (wie oben).
  • Eine Liste, die die IDs der betreffenden Dateien enthält.

Hilfsprozeduren

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.