Dies ist Version . Es handelt sich nicht um die aktuelle Version und kann folglich auch nicht geändert werden.
[Zurück zur aktuellen Version]   [Diese Version wiederherstellen]

formgen Control Scripte#

Einführung#

formgen bietet die Möglichkeit zu definierbaren Zeitpunkten in den Ablauf des Fragebogens per Scripting einzugreifen. Die Möglichkeiten sind sehr umfangreich und werden anhand von Beispielen konkretisiert.

Die Skriptsprache enspricht der Java Syntax und wird, während der Fragebogen läuft, interpretiert.

Lebenszyklus#

Zum gezielten Eingreifen in die Verarbeitung werden verschiedenen sog. callbacks in der Scriptsprache angeboten. Der Lebenszyklus des Fragebogens dient in der zeitlichen Achse als Vorgabe.

customproxy - Die Methode customproxy wird aufgerufen, um eine Transformation aus dem in der Datenbank gespeicherten "Roh-Fragebogen" (das model.Questionaire Objekt) auszuführen. Das Ergebnis der Transformation ist der dem User angezeigte Fragebogen (das QuestionaireProxy Object)

QuestionaireProxy customproxy(com.pilodata.formgen.model.Questionaire model, QstContext context)

init - Wenn die Struktur des Fragebogens steht, wird init aufgerufen. Der Fragebogen ist als Variable qst verfügbar. Ab hier können Ein- oder Ausstiegspunkte für die Seiten gesetzt werden.

void init()

enter - Die Antworten der User sind ab hier geladen. Das Objekt condition ist verfügbar und Fragen/Antworten können ab hier ein- und ausgeblendet werden.

void enter(TagletContext ctx)

start - Die erste Seite des Fragebogens wird dargestellt

void start()

nextPage - Die Funktion nextPage wird jedesmal beim Blättern aufgerufen

boolean nextPage(int currentPage, int nextPage)

exit - Die Funktion exit wird beim Ausstieg des Users aus dem Fragebogen aufgerufen

void exit(TagletContext ctx)

Beispiele#

Folgende Beispiele sollen die Verwendung der Scripte verdeutlichen.

Fragebogen bei der Instanziierung verändern#

Hier wird eine Transformation durchgeführt. Ausgangsbasis ist der in der Datenbank definierte Fragebogen. Als Ergebnis wird der User Fragebogen erzeugt.

Beispiel 1: Verwürfelt die Seiten 2,3,4 und die Seiten 7,8,9,10 auf dem Fragebogen

QuestionaireProxy customproxy(com.pilodata.formgen.model.Questionaire model, QstContext context) {
  PageShuffleQuestionaireProxy sp = new PageShuffleQuestionaireProxy(model, context);
  sp.shuffle(new int[] {2,3,4});
  sp.shuffle(new int[] {7,8,9,10}); 
  return sp;
}

Beispiel 2: Baut einen Fragebogen schrittweise zusammen

QuestionaireProxy customproxy(com.pilodata.formgen.model.Questionaire model, QstContext context) {
  BuildQuestionaireProxy bp = new BuildQuestionaireProxy(model, context);
  bp.addQuestionsByGroup(1, "all");
  return bp;
}

Veränderung des Fragebogens kurz vor der Anzeige#

Beispiel 1: Verändert einen Fragebogen zur Laufzeit und sortiert die Fragen der Gruppe "a" auf der Seite 5 um

void enter(TagletContext ctx) {
  QuestionairePage qp = qst.getQuestionairePage(5);
  qp.shuffleGroup("a");
}

Beispiel 2: Blockrotation von Seiten (ab Build 1492)

void start() {
  BlockModifier bm = new BlockModifier(qst);
  bm.addBlock(2);
  bm.addBlock(4,5);
  bm.addShuffledBlock(12, 15);
  bm.shuffle();  // or bm.rotate();
}

In diesem Beispiel werden die Seite 2, die Seiten 4-5 und die Seiten 12-15 als Blöcke definiert. Über bm.shuffle() werden diese Blöcke dann zufällig verwürfelt. Ein bm.rotate() würde die Blöcke wie ein Band rotieren.
Zusätzlich werden die Seiten 12 bis 15 über addShuffledBlock() innerhalb des Blockes zufällig angeordnet.
Es werden die ganzen Seiten vertauscht, so dass eine zugeordnete Seitenlogik erhalten bleibt.

Kontrolle während der Ausführung#

Beispiel 1: Setzen von globalen Variablen beim Einstieg
void start() {
    // Get the "ref" http Parameter
    String ref = qst.getVariable("reference"); 
    // Check if not empty
    if (StringUtils.isNotEmpty(ref)) {
        // Set a global Variable
        qst.setVariable("price", "abc");
    }
}

Beispiel 2: Callback für einen Event setzen

void init() {
    // Define a callback on exit of page 2
    qst.pagecall(2, ON_EXIT, "page2()");
}

void page2() {
    // Check for question "age"
    if(condition.isAnswerSet("age","1") ) {
        // Quit Questionnaire
        qst.jump(-1);
    }
    if(condition.isAnswerSet("age","2") ) {
        // Jump to page 4
        qst.jump(4);
    }
}

Bei der Initialisierung des Fragebogens wird die Funktion page2() registriert. Diese wird beim Verlassen von Seite 2 aufgerufen. Weitere Informationen zu den einzelnen Events hier: Control Skripte Callbacks.

TODO#

  • Verstecken von Antworten anhand einer Gruppe bnzw. ziehen von Antworten aus einer Liste

Neuen Anhang hinzufügen

Du bist nicht autorisiert, Anhänge zu dieser Seite hochzuladen.
« Diese Version wurde am 25-Jan-2010 16:12 von Administrator veröffentlicht.