0 votes
in SoSci Survey (dt.) by s122873 (130 points)
edited by s122873

Liebes SoSci Survey Team,

aktuell versuche ich, eine Befragung zu gestalten bei der die einzelnen Teilnehmer jeweils zu einer "etwas" längeren Liste von verschiedenen Objekten + zugehörigen Metainformationen (in der internen DB abgelegt) jeweils identische Fragen zu ALLEN in der DB vorhandenen Objekten (ohne Randomisierung) beantworten sollen. Nach dem was ich in verschiedenen Foreneinträgen und in der Doku fand scheint das Multilevel-Design dafür ideal zu sein.

Auf einer lokal hier in der Uni bereitstehenden SoSci Survey-Installation hatte ich schon früher eine ähnlliche Befragung angelegt, die im Prinzip auf den gleichen Daten beruht, bei der allerdings je Teilnehmer nur eines der hinterlegten Objekte randomisiert gezogen wurde. Das funktionierte perfekt.

Bei meinem Versuch, für die neue Befragung dem in der Online-Doku zu "Multi-Level Struktur" gezeigten Beispiel 2 zu folgen war ich allerdings leider nicht erfolgreich. Der Teilfragebogen wird korrekt aufgerufen und erhält im ersten Durchlauf auch die korrekten Daten aus der DB, beim Klick auf "weiter" erscheinen allerdings wieder die Daten zum ersten Eintrag der DB, auch die Fortschrittsanzeige bleibt auf 0% stecken. Wird der Aufruf für multiLevelDown(...); auskommentiert läuft die eigentliche Schleife (per loopPage(...) aufgerufen, verifiziert über debug(...)-Ausgabe) wie erwartet.

Um nun Probleme aus meinem Code auszuschließen habe ich in einem separaten Projekt versucht, das erwähnte Beispiel 2 aus der Doku nachzubauen, allerdings mit ähnlichen Effekten. Auch ein kurzer Test auf Ihrem Server (scheint eine minimal neuere Version zu sein gegenüber unserer lokalen Version 3.2.00) führte leider nicht weiter. Einziger Unterschied war, dass dort der Debug-Modus im Verlauf stabiler läuft - auf unserer lokalen Instanz schließt er direkt ab dem Zeitpunkt, ab dem in Schleifenablauf "weiter" gedrückt wurde.

Für Tipps, was evtl. schief läuft oder worauf noch zu achten ist wäre ich sehr dankbar nachdem ich anhand der bisherigen Foreneinträge zum Thema nicht weiterkomme...

[Ergänzung: Code im Hauptbogen]

// Liste mit Keys, über die die gewünschten Items aus der DB referenziert werden
// (hier als Beispiel, die Liste der relevanten Objekte wird im Code an anderer Stelle 
// zusammengestellt und umfasst > 100 Elemente)
// (per debug() verifziert)
$items = array("APP001", "APP002", "APP003", "APP004", "APP005");
    
registerVariable('items');
if (count($items) > 0) {
      $i = loopPage($items);
      multiLevelDown('sub01', $i);
    }

[Ergänzung: Code im refernezierten Bogen "sub01"]

$element = multiLevelData();
debug($element);
put('IV01_01', $element);
     
 $inhalt = dbGet($element);
  
 // Die Inhalte aus der DB werden in Folge per html(...) dargestellt, teilweise 
 // über JavaScript-Code (in einem HTML-Code-Element ergänzt) ein- oder ausklappbar 
$toggleit = "<a id='klapp' style='color: black; font-weight: bold;' href='javascript:toggle(";
$toggleit = $toggleit.'"'.'apptext'.'","'.'klapp'.'"'.')'."'".">[Hier drücken, um den Beschreibungstext einzublenden]</a>";
    
html('<div style=" background: #555555; color: #ffffff; padding: 5px 10px 5px 10px; font-size: 1.2em; margin-bottom: 0px; margin-top: 0px; font-family: monospace; heigth: auto;"><div style="float: left; width:100%;">App-Beschreibungstext: <b>'.$inhalt[1].'</b></div><div style="clear: both;"></div></div><div id="appeinaus" style="background: #eeeeee; padding: 10px; font-family: monospace; font-size: 1.2em;">'.$toggleit.'</div><div id="apptext" style="background: #eeeeee; padding: 10px; font-family: monospace; font-size: 1.2em; display: none;">'.$inhalt[2].'</div><div style="margin-bottom:30px;"></div>');

[Ergänzung: Debug-Ausgabe im Bogen "sub01"]

Debug-Informationen beim ersten Aufruf des Bogens:

[Information]	Interview number 336 is to be continued
[Information]	Questionnaire main from project appanalyse126 will be used
[Information]	Retention period on page 1 has been 2 seconds
[Processing]	Reading answers from page 1
[Processing]	Create questionnaire page no. 2
[Information]	loopPage() will now repeat page 2 for 126 times, starting with value APP001
[Information]	Create new record (CASE 337)
[Information]	Switching record: CASE 336 → CASE 337
[Information]	Interview number 337 is to be continued
[Processing]	Create questionnaire page no. 1
debug()	Content: $element = APP001 (string)
[Information]	The internal variable IV01_01 gets a value of APP001.
[Content]	Create question HH01
[Content]	Create question HP01
[Content]	Create question HD01
[Content]	Create question HD07
[Content]	Create question HD02
[Content]	Create question HD08
[Content]	Create question HD03
[Content]	Create question HD09
[Content]	Create question HD04
[Content]	Create question HD10
[Content]	Create question HD05
[Content]	Create question HD11
[Content]	Create question HD06
[Content]	Create question IN02

Ab dem Drücken auf "Weiter" wird zwar noch der richtige Bogen dargestellt, aber ohne Inhalte. Auch werden (auf unserer lokalen SosciSurvey-Instanz v.3.2.00) keinerlei Debug-Informationen mehr angezeigt, der Bogen scheint in einer Endlos-Schleife festzuhängen.
Identische Effekte treten auf, wenn das oben erwähnte Beispiel 2 zum Abschnit "Multi-Level Struktur" der Online-Doku per Copy/Paste übernommen wird.

by SoSci Survey (302k points)
Vermutlich funktioniert entweder das "Durchlaufen" der Nummern im Haupt-Fragebogen nicht oder es gibt Probleme bei der Übergabe der Stimulus-Nummer an den untergeordneten Fragebogen. Wenn Sie Ihre Frage um den verwendeten PHP-Code und die Debug-Information ergänzen, kann ich gerne konkreter werden.
by s122873 (130 points)
Vielen Dank für die rasche Reaktion, habe die relevanten Code-Teile und Ausgaben eben ergänzt.
by SoSci Survey (302k points)
Könnten Sie den PHP-Code im übergeordneten Fragebogen bitte wie folgt vereinfachen und um ein debug() ergänzen:

$items = array("APP001", "APP002", "APP003", "APP004", "APP005");
$el = loopPage($items);
debug($el);
multiLevelDown('sub01', $el);

Was zeigt die Debug-Information dann bei der ersten und zweiten Wiederholung an?
by s122873 (130 points)
Wenn ich Ihren Code direkt übernehme ändert sich erst einmal nichts, d.h. der erste Eintrag wird korrekt dargestellt, danach wird aber wie zuvor nicht mehr weitergeschaltet.
 
Die Ausgabe von debug($el) im Hauptbogen klappt nur, wenn der multiLevelDown-Aufruf auskommentiert ist. Solange zusätzlich zum PHP-Code auf der Seite noch weitere Elemente (HTML oder andere) eingefügt sind zeigt die Debug-Ausgabe dann für $el völlig korrekt nacheinander die einzelnen Einträge aus $item an.

[Information]    Interview started (new case no. 398)
[Information]    Questionnaire main from project appanalyse126 will be used
[Processing]    Create questionnaire page no. 2
[Information]    loopPage() will now repeat page 2 for 5 times, starting with value APP001
debug()    Content: $el = APP001 (string)

Sobald nur noch der PHP-Codeblock auf der Seite steht erhalte ich auf der Seite selbst zusätzlich zur erwarteten Ausgabe:

   Debug information for $el:
   $el = APP001 (string)

die Meldung

   Questionnaire Error (page 2)
   The interview tried to jump to page no. 2 (ID LOOP) that has already been
   processed when running the current output. Please check if goToPage()
   creates a loop.

und in der zugehörigen Debug-Information
[Information]    Interview started (new case no. 404)
[Information]    Questionnaire main from project appanalyse126 will be used
[Processing]    Create questionnaire page no. 2
[Information]    loopPage() will now repeat page 2 for 5 times, starting with value APP001
debug()    Content: $el = APP001 (string)
[Information]    No visible content on this page, continue with page 2
[Processing]    Create questionnaire page no. 2

Bei loopPage alleine auf der Seite scheint mir diese Meldung noch verständlich, da ja irgendetwas dargestellt werden muss. Verstehe ich hier im Zusammenhang mit multiLevelDown dennoch evlt. etwas falsch - dachte bisher, bei in diesem Fall sei kein zusätzlicher Seiteninhalt auf der aufrufenden Seite mehr nötig da der Inhalt vom untergeordneten Fragebogen geliefert wird?

Allerdings treten auch bei zusätzlich im aufrufenden Bogen eingefügten (und dann nicht dargestellten) Elementen immer noch die gleichen Probleme auf sobald der multiLevelDown-Aufruf wieder aktiviert wird. Die Debug-Information (im Unterbogen) entspricht beim ersten Aufruf in etwa dem, was ich schon zuvor gepostet hatte:

[Information]    Interview started (new case no. 416)
[Information]    Questionnaire main from project appanalyse126 will be used
[Processing]    Create questionnaire page no. 2
[Information]    loopPage() will now repeat page 2 for 5 times, starting with value APP001
debug()    Content: $el = APP001 (string)
[Information]    Create new record (CASE 417)
[Information]    Switching record: CASE 416 → CASE 417
[Information]    Interview number 417 is to be continued
[Processing]    Create questionnaire page no. 1
debug()    Content: $element = APP001 (string)
[Information]    The internal variable IV01_01 gets a value of APP001.
[Content]    Create question HH01
[Content]    Create question HP01
[... weitere Create question-Meldungen ...]

Debug-Informationen ab dem zweiten Aufruf kann ich leider nicht liefern, da die Debug-Bar ab dem ersten Klick auf "Weiter" nicht mehr sichtbar ist (die entsprechenden Elemente fehlen dann auch im Quellcode der dargestellten Seite).

1 Answer

0 votes
by SoSci Survey (302k points)

Debug-Informationen ab dem zweiten Aufruf kann ich leider nicht liefern, da die Debug-Bar ab dem ersten Klick auf "Weiter" nicht mehr sichtbar ist

Dieses Problem ist in der aktuellsten Interims-Version behoben - wenn Ihre IT eine kurze Mail schreibt, kann ich ihnen gerne das entsprechende Update zukommen lassen.

Das Problem mit der unendlichen Wiederholung der gleichen Seite konnte ich im Test replizieren. Und zwar dann, wenn im untergeordneten Fragebogen nur eine einzige Seite vorhanden ist. Dabei handelt es sich um einen Programmfehler, der mit dem nächsten Update behoben wird - aber derweilen können Sie einfach im "sub01" eine zusätzlliche Seite vor der "letzten Seite" einfügen, die entweder leer ist oder folgenden PHP-Code enthält:

multiLevelReturn();

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...