Beispiel-Assistent

Der WizardController macht es möglich, ereignisgesteuerte Assistenten zu schreiben. Ferner vereinfacht er die Erstellung von Dialogelementen. Sie können den WizardController mit der Prozedur useWizardController, die Bestandteil von wizardLib.tcl ist, einbinden. Informationen zur Funktionsweise finden Sie in der Datei wizardController.tcl.

Das folgende Beispiel zeigt einen einfachen Assistenten, mit dem der Titel einer Datei bearbeitet werden kann. Zur Behandlung von Ereignissen ruft der WizardController Prozeduren auf, deren Namen er aus dem Seitennamen und der Benutzeraktion (dem Namen des verwendeten Buttons) zusammensetzt. Zur Verdeutlichung sind die Namensbestandteile in diesen Prozedurnamen farblich hervorgehoben.

if {[app get appName] ne "CM"} {
   return
}

namespace eval ::enterTitle {

   useWizardController


   proc initRender {paramList args} {
        variable objId
        set objId $args
        return
   }


   proc handleInitPage {buttonName} {
        variable objId
        if {![obj withId $objId get isEdited]} {
            return [renderErrorPage "Die Datei hat keine Arbeitsversion." "Fehler"]
        }
        if {[whoami] ne [obj withId $objId editedContent get editor]} {
            return [renderErrorPage "Sie sind nicht der Bearbeiter der Datei." "Fehler"]
        }
        return [renderEnterTitlePage]
   }


   proc handleCancelAction {pageName} {
        return ""
   }


   proc renderEnterTitlePage {} {
        set content [::layout::textField contentTitle Titel "Neuer Titel"]
        return [renderPage -title "Titel setzen" -buttons [list ok cancel]\ 
            "enterTitle" $content]
   }


   proc handleEnterTitleOkPageAction {} {
        variable objId
        obj withId $objId editedContent set title [getParam contentTitle]
        addNpsRefresh $objId
        return [renderSuccessPage]
   }


   proc renderSuccessPage {} {
        set content "<p>Titel erfolgreich gesetzt</p>"
        return [renderPage -title "Vielen Dank!" -buttons [list ok] "success" $content]
   }


   proc handleSuccessOkPageAction {} {
        return ""
   }


   # Beliebige Seite dieses Assistenten ausgeben
   proc renderPage {args} {
       variable objId 
       return [eval [list npsPage -affectedNodes [list $objId]] $args]
   }
}