Welcome to the LimeSurvey Community Forum

Ask the community, share ideas, and connect with other LimeSurvey users!

ExpressionScript / Platzhalter in Fragetext werden nicht ausgewertet

More
2 weeks 6 days ago #274101 by nkuecuek
LimeSurvey version: Version 6.16.14+260323 
Own server or LimeSurvey Cloud: 
Code:
Own server (hochschulinternes LimeSurvey-System)
Survey theme/template: 
Code:
Standard-Theme 
==================
(Write here your question/remark)Hallo zusammen,ich arbeite aktuell an meiner Masterarbeit und setze dafür eine Online-Studie im hochschulinternen LimeSurvey-System um (LimeSurvey-Version: 6.16.14+260323  Umfrage-ID: 791927). Dabei stoße ich auf ein Problem bei der Verwendung von ExpressionScript bzw. von Platzhaltern im Fragetext und hoffe auf Unterstützung aus der Community.In meiner Umfrage habe ich mehrere Gleichungsfragen (Equation Questions) angelegt, u. a.:
  • Code:
    COND
    Code:
    if(rand(0,1) < 0.5, 1, 2)
  • Code:
    STUDIENID
    Code:
    concat('S', round(rand(100000,999999)))
  • Code:
    CHATURL
    Code:
    concat('http://localhost:8501/?pid=', STUDIENID, '&amp;cond=', COND)
  • Code:
    CHATLINK
    Code:
    concat('Chat starten')
     (nur Platzhalter für einen späteren Hyperlink)
Diese Variablen möchte ich anschließend in einer Textanzeige-Frage im Fragetext ausgeben, z. B.:
  • Code:
    {CHATLINK}
  • Code:
    COND = {COND}
  • Code:
    STUDIENID = {STUDIENID}
  • Code:
    CHATURL = {CHATURL}
Problem:
In der Umfragenvorschau werden diese Ausdrücke nicht ausgewertet, sondern als Rohtext angezeigt, z. B.:
  • Code:
    COND = if(rand(0,1) < 0.5, 1, 2)
  • Code:
    STUDIENID = concat('S', round(rand(100000,999999)))
  • Code:
    CHATURL = concat(...)
Statt der berechneten Werte sehe ich also die Formel selbst.Meine Fragen:
  1. Ist ExpressionScript / der Expression Manager in dieser LimeSurvey-Installation grundsätzlich aktiv, oder kann er serverseitig deaktiviert sein?
  2. Muss ich auf Umfrage-, Gruppen- oder Frageebene bestimmte Einstellungen vornehmen, damit Platzhalter wie 
    Code:
    {COND}
     im Fragetext korrekt ausgewertet werden?
  3. Gibt es bekannte Einschränkungen bei der Verwendung von 
    Code:
    rand()
     oder 
    Code:
    concat()
     in Gleichungsfragen, insbesondere wenn die Ergebnisse später im Fragetext bzw. in einem Link verwendet werden?
  4. Müssen Equation Questions an einer bestimmten Stelle stehen (z. B. in einer eigenen Gruppe vor der Anzeige-Frage), damit ihre Werte in nachfolgenden Fragen verfügbar sind?
Hintergrund:
Ich benötige eine zufällige Zuweisung zu zwei Bedingungen (COND = 1 vs. 2) sowie eine generierte Studien-ID, die anschließend dynamisch in einen Link zu einer externen Chat-Anwendung übergeben wird. Ein statischer Link funktioniert bereits – es geht ausschließlich um die dynamische Einbindung der berechneten Variablen.Vielen Dank im Voraus für Ihre Unterstützung!Viele Grüße
Nihal

Please Log in to join the conversation.

More
2 weeks 6 days ago - 2 weeks 6 days ago #274104 by holch
Um hier helfen zu können, bräuchten wir eine LSS Datei um zu sehen, was du wirklich gemacht hast. Wir wollen gar nicht deine ganze Umfrage, sondern nur hier den relevanten Teil. Also entweder ein kleines Beispiel basteln oder eine Kopie deiner Umfrage erstellen und alles rauslöschen was nicht notwendig ist.

Aber ich vermute mal, das Problem liegt hier:
Code:
COND = if(rand(0,1) < 0.5, 1, 2

Soweit ich weiss, kann man so in ExpressionScript keine Variablen definieren.

Du müsstest für jede Variable eine eigene Formel-Frage erstellen und dann darauf zugreifen.

Du erstellst also eine Formel-Frage mit dem Name/Code "COND" und drin steht dann sowas:
Code:
{if(rand(0,1) < 0.5, 1, 2)}

Allerdings ist das auch kein guter Code für Limesurvey, weil die Zufallszahl immer wieder neu gewürftelt wird. Daher mal im Forum suchen, wie man eine "fixe" Zufallszahl erstellt.

Dann würde ich die Zufallszahl in einer Formelfrage getrennt erzeugen und dann auf diese Frage zugreifen um zu schauen ob die Bedingung zutrifft.

Wie gesagt, mit einer LSS-Datei könnte man dir da besser weiterhelfen. So wie es aktuell dargestellt wird kann ich mir nicht wirklich genau vorstellen, was du da gemacht hast und warum es nicht funktioniert.

Help us to help you!
  • Provide your LS version and where it is installed (own server, uni/employer, SaaS hosting, etc.).
  • Always provide a LSS file (not LSQ or LSG).
Note: I answer at this forum in my spare time, I'm not a LimeSurvey GmbH employee.
Last edit: 2 weeks 6 days ago by holch.

Please Log in to join the conversation.

More
2 weeks 6 days ago - 2 weeks 6 days ago #274105 by Joffm
Ach, Leute,
was ist denn los heute? Liegt das an Ostern? Oder an der Zeitumstellung?

Der eine schreibt ungeniert Französisch hier, und @nkuecuek Deutsch.

Also, holch, verschiebe es doch in den deutschen Teil..

Please, English in this part of the forum.

Joffm

There seems to be a big misunderstanding in the way ExpressionScript works.
1. Expressions are surrounded by curly brackets.
You seem to have created a question named "COND".
COND=if(rand(0,1)<0.5,1,2) 
2. The function "rand(0,1)" returns one of the two values: 0 or 1.
Now the IF-function returns in case of 0 1, in case of 1 2.
This is equivalent to simple "rand(1,2)"
3. To store this calculation in COND it is suficient to write the function into the question text, without assignment.
This is the main use case of a question of type equation.
So only {rand(1,2)}
4. "concat" is not an implemented function in LimeSurvey. Where did you find this? Did ChatGPT tell you?
Please read the manual

And - as holch - send a lss export of the relevant questions.
 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 2 weeks 6 days ago by Joffm.

Please Log in to join the conversation.

More
2 weeks 6 days ago #274106 by holch
Ahh, war mir gar nicht aufgefallen, dass es im falschen Forum war, weil ich über einen Link in einer Email zum Beitrag kam um ihn freizuschalten. Aber ja, Deutsch bitte nur im deutschen Forum.

Hab' das mal verschoben. Kann also auf Deutsch weitergehen. Weiss ja, dass das dem Joffm sowieso lieber ist.

Help us to help you!
  • Provide your LS version and where it is installed (own server, uni/employer, SaaS hosting, etc.).
  • Always provide a LSS file (not LSQ or LSG).
Note: I answer at this forum in my spare time, I'm not a LimeSurvey GmbH employee.

Please Log in to join the conversation.

More
2 weeks 6 days ago #274107 by nkuecuek
Oh, vielen Dank für den Hinweis – da habe ich tatsächlich nicht aufgepasst, wie ExpressionScript genau funktioniert.

Ich habe in den letzten Tagen mehrere Wege ausprobiert und es am Ende zwar geschafft, über eine dynamische URL einen Studien‑Code und eine Randomisierung an eine externe Web‑App zu übergeben, aber nicht in der Form, wie ich es eigentlich brauche. Ziel ist:

LimeSurvey soll pro Teilnehmer eine feste Studien‑ID (Zufallszahl) generieren.

Außerdem soll pro Teilnehmer eine zufällige Bedingung (1 oder 2) festgelegt werden.

Beides soll an eine externe Web‑App (Chat) übergeben werden und anschließend wieder zurück nach LimeSurvey für den Postfragebogen gehen.

Ich habe jetzt, wie vorgeschlagen, technische Variablen als Gleichungsfragen angelegt und eine reduzierte LSS‑Datei der Umfrage beigefügt, in der nur der relevante Teil enthalten ist.

Konkret habe ich Folgendes versucht:

COND als Gleichungsfrage mit {rand(1,2)} zur Randomisierung der Bedingung.

STUDIENID als Gleichungsfrage mit
{if(is_empty(STUDIENID), rand(100000,999999), STUDIENID)},
damit jede Person einmalig eine Zufalls‑ID erhält, die dann stabil bleibt.

CHATURL als Gleichungsfrage mit der Gleichung
"http://localhost:8501/?pid=" + STUDIENID + "&cond=" + COND + "&rounds=5"
(in der echten Studie wird hier eine Streamlit‑URL stehen).

CHATSTART als Textanzeige, in deren Fragetext ich per {CHATURL} den fertigen Link anzeigen möchte.

Trotzdem wird {CHATURL} bei mir in der Vorschau nicht wie erwartet durch den berechneten Link ersetzt (ich habe es sowohl in einer Mini‑Testumfrage als auch in der reduzierten Kopie der Hauptumfrage probiert). Ich vermute, dass ich irgendwo noch einen Denkfehler habe – entweder bei der Reihenfolge/Auswertung der Gleichungen oder beim Einsatz von ExpressionScript in Textanzeige‑Fragen.

Das mit concat() kam tatsächlich von einer KI‑Antwort; das war im Nachhinein offenbar keine gute Idee und ich habe diesen Ansatz wieder entfernt.

Ich wäre sehr dankbar, wenn ihr euch die angehängte LSS anschauen könntet und mir sagen könntet:

Ob die Art, wie ich COND und STUDIENID als Gleichungsfragen angelegt habe, so sinnvoll ist.

Ob die Gleichung für CHATURL korrekt aufgebaut ist.

Wie genau ich {CHATURL} in einer Textanzeige‑Frage verwenden muss, damit der berechnete Link zuverlässig angezeigt wird (ggf. besondere Einstellungen/Reihenfolge, die ich übersehe).

Vielen Dank schon einmal für eure Zeit und Unterstützung!

Please Log in to join the conversation.

More
2 weeks 6 days ago #274108 by holch
Da sind einige Fehler in deiner Umfrage.

Zuerst hatte die Frage "Chaturl" gar keinen Inhalt für mich. Fand die Formel dann unter dem Feld "Equation". Um ehrlich zu sein, ich habe keine Ahnung für was dieses Feld da ist.

Ich schreibe meine Equation direkt in den Fragentext.

Aber abgesehen davon, wie soll mit diesem Code ein Link entstehen?
Code:
"http://localhost:8501/?pid=" + STUDIENID + "&amp;cond=" + COND + "&amp;rounds=5"

Selbst wenn die Syntax korrekt wäre würdest du damit allenfalls eine URL bekommen, aber keinen Link. Den Link musst du selbst mit HTML-Code erstellen.

Gehe davon aus, dass dir bewusst ist, dass "localhost" nicht funktionieren wird, richtig? Das ist nur für Tests in deiner Testumgebung, korrekt?

Jetzt aber mal grundsätzlich zu Expressionskript. Damit du auf die Variablen / die Formelfragen zugreifen kannst, müssen die Fragencodes in geschwungenen Klammern stehen. Also für deine URL brauchst du etwas in dieser Art:
Code:
http://localhost:8501/?pid={STUDIENID}&amp;cond={COND}&amp;rounds=5

Damit kriegste schon mal eine halbwegs ordentlich aussehende URL.

Anmerkung: Um das Testen zu erleichtern, hättest du auch den ganzen Privacy Schmuh und die Einführung rauslöschen können, damit man beim testen da nicht immer durchklicken muss. Kostet einfach viel zu viel Zeit. Habe es rausgelöscht, dann funktioniert die Umfrage aber nicht mehr, weil du statt die Leute die Nein sagen auszuscreenen, du die Fragen ausblendest. Auch kein guter Ansatz, weil diese Leute quasi als "abgeschlossen" in die Umfrage eingehen, und das willst du ja vermutlich nicht. Die sollen ja rausfliegen. Das macht man mit einer Null-Quote, nicht mit Relevanz-Equations auf jede Fragengruppe.

Help us to help you!
  • Provide your LS version and where it is installed (own server, uni/employer, SaaS hosting, etc.).
  • Always provide a LSS file (not LSQ or LSG).
Note: I answer at this forum in my spare time, I'm not a LimeSurvey GmbH employee.

Please Log in to join the conversation.

More
2 weeks 6 days ago #274109 by holch
So, hab jetzt mal den ganzen unnützen Kram über Bord geworfen.

Die Null-Quote kannste ja später noch implementieren, wenn alles getestet wurde und funktioniert. Quote funktioneren übrigens nicht in den Testlinks, weil da keine Daten in der Datenbank gespeichert werden. Um die zu testen musst du die Umfrage aktivieren.

So, jetzt noch ein paar Punkte:
1. Warum ist die Frage "Instruktion" eine Frage vom Typ "Longfree text"? Du willst doch da gar keine Antwort, hast aber am Ende eine Textbox. Du willst doch da nur eine Erklärung anzeigen. dafür gibt es doch den Fragentyp "Text display" (auf Deutsch vermutlich "Textanzeige" oder sowas. Habe das mal angepasst.

2. Du willst also, dass die Leute zum gleichen Fragebogen zurück kommen. Das kann je nach Servereinstellung ein Problem werden, weil vermutlich nach 15-20 Minuten im Chat die Session abgelaufen ist. Verwendest du eine offene oder geschlossene Umfrage? Sprich verwendest du Tokens / Individuelle Links für die Limesurvey-Umfrage oder gibt es eine URL für alle?

3. Ich würde den Leuten ja einen echten Link anbieten, den sie nicht kopieren müssen, sondern anklicken können. Hab ich mal gemacht...

4. Wozu eine separate Frage "Chatstart"? Hätte man doch alles in die "Instruktion" packen können. Damit das funktioniert, muss natürlich die Frage Chaturl vor der Instruktion stehen.

5. Warum erzeugst du eine Zufallszahl für die StudienID? Die Chancen, dass jemand die selbe StudienID bekommt ist zwar nicht so hoch, aber sie besteht. Denn deine Formel für die Zufallszahl schliesst ja keine bereits gezogenen Zufallszahlen aus. Warum verwendest du nicht einfach die "SAVEDID", die hat Limesurvey schon, sie ist eindeutig und man muss nix generieren. Gut, sie ist nicht wirklich zufällig, sondern konsekutiv, aber wenn du wirklich was zufälliges haben willst, kannst du ja hinten 1-3 Zufallszahlen anhängen. Jedenfalls ist so garantiert, dass niemand die gleiche SURVEYID bekommt. Hab das mal nicht eingefügt, kann man aber sicher schnell machen. Finde ich jedenfalls besser als eine reine Zufallszahl, da die SAVEDID schon automatisch von Limesurvey generiert wird. Du kannst mit {SAVEDID} drauf zugreifen. Das ist die ID die Limesurvey jedem Teilnehmer zuweist, sobald er den Umfragelink öffnet (ist quasi die ID für diese Zeile in der Datenbank)

Help us to help you!
  • Provide your LS version and where it is installed (own server, uni/employer, SaaS hosting, etc.).
  • Always provide a LSS file (not LSQ or LSG).
Note: I answer at this forum in my spare time, I'm not a LimeSurvey GmbH employee.

Please Log in to join the conversation.

More
2 weeks 6 days ago #274110 by holch
So, hab' jetzt mal meine Version angehängt.

Help us to help you!
  • Provide your LS version and where it is installed (own server, uni/employer, SaaS hosting, etc.).
  • Always provide a LSS file (not LSQ or LSG).
Note: I answer at this forum in my spare time, I'm not a LimeSurvey GmbH employee.

Please Log in to join the conversation.

More
2 weeks 5 days ago #274113 by Joffm
Hallo,
ich habe mir beide lss Exporte nicht angeschaut. Da es ja um nichts Weltbewegendes ging, lagen ja anscheinend nur Verständnisfehler vor.
Aber hierzu:

Zuerst hatte die Frage "Chaturl" gar keinen Inhalt für mich. Fand die Formel dann unter dem Feld "Equation". Um ehrlich zu sein, ich habe keine Ahnung für was dieses Feld da ist.

Wenn man eine Equation in den Fragetext der Frage Q1 schreibt - wie {rand(1,6)} - um dann später Fragen nur anzuzeigen, wenn Q1==1 oder Q1==2 ist, muss man darauf achten, dass keine zusätzlichen Zeichen dort hineingeraten. Denn dies wird alles mitgespeichert.
Dann kann es passieren, dass nicht 1, 2, 3,... gespeichert wird, sondern " 1", und der spätere Vergleich Q1==1 geht in die Hose.

Dazu haben sich die Entwickler diesen Umweg über das Feld Equation einfallen lassen.
Nun kann man die eigentliche Equation in dieses Feld schreiben, in den Fragetext aber etwas anderes, z.B. schon das Ergebnis einer Berechnung mit beschreibendem Text; in der Datenbank wird aber nur der reine Wert gespeichert.

Ich sehe allerdings keinen wirklichen Mehrwert.

Hier ein paar Bildchen.
1. Die Frage Z1 (Equation mit Text im Fragetext)
 
2. Die Frage Z2 (Equation ausgelagert, Text im Fragetext referiert darauf mit "self")
 

Jetzt das Ergebnis
3. Die Ergebnisse in einer Textanzeige referiert mit {Z1} bzw. {Z2}
 

4. Und die Speicherung
 

Man sieht, im ersten Fall wird der Text mitgespeichert. Und ein späterer Vergleich Z1==2 geht ins Leere.

Das nur dazu.

Und dies

Kann also auf Deutsch weitergehen. Weiss ja, dass das dem Joffm sowieso lieber ist.

Bitte nicht generalisieren!
Ich habe keinerlei Probleme, in der Jugendherberge von Mailand mit einem Tschechen Italienisch zu sprechen, ebenfalls in einem Dorf in Serbien mit einem Serben, oder in Schweden Englisch. Egal. Man ist in solchen Fällen ja froh, irgendeine Drittsprache zu finden, damit man kommunizieren kann.
Und das ist der Knackpunkt: Ich spreche nicht gerne unnötigerweise eine Fremdsprache, wenn beide Gesprächspartner Deutsch als Muttersprache haben. Denn es gibt immer das Problem des "language gap"
Und es gibt ein Schlüsselerlebnis. Nachdem wir vor vielen Jahren in der Jugendherberge von Neapel einen ganzen Abend lang über eine Südafrikanerin "hergefallen" waren (die Diskussion drehte sich natürlich um die Apartheidspolitik), sprach ich die nächsten zwei Tage mit einem Mitbewohner weiterhin Englisch, bis endlich die Frage kam "Wo kommst Du her?" Antwort "Österreich"
Da hatten wir uns also ohne Not zwei Tage lang "einen abgebrochen".

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless

Please Log in to join the conversation.

More
2 weeks 5 days ago - 2 weeks 5 days ago #274116 by Joffm
So, jetzt noch zwei kleine Anmerkungen zur Umfrage.
1. Für die StudienID benutzt Du eine sechsstellige Zufallszahl.
Wie holch schon schrieb wird dies in der Praxis so hinhauen, in der Theorie könnten trotzdem doppelte IDs entstehen.
Auch hatte holch ja schon die SAVEDID erwähnt.
Dies ist die laufende Nummer des Antwortdatensatzes, beginnt also mit 1.
Damit man dies ein wenig verschleiert, finde ich es ganz charmant, diese SAVEDID einfach zu einer Konstanten hinzuzuaddieren, z.B. {sum(384291,SAVEDID)}
So erhältst Du wieder irgendeine zufällig aussehende sechsstellige Zahl, diese aber ganz sicher eindeutig.

2. In der Mitte der Fragegruppe sollen Deine Teilnehmer zu der anderen Anwendung hopsen, anschließend diesen Tab schließen und in der Umfrage fortfahren.
Dann steht die Umfrage aber immer noch auf dieser selben Seite.
Daher wäre mein Vorschlag:
Falls Du javascript einsetzen kannst (Uni-Admins haben oftmals eigene Vorstellungen und verbieten dies ihren Studenten), wäre es sicher eine gute Idee, im Hintergrund schon auf die nächste Seite zu schalten, während die Chat-Anwendung bearbeitet wird.
Das wäre mit diesem script (im Quellcode der Textanzeige) erschlagen:
Code:
<script type="text/javascript" charset="utf-8">
    $(document).ready(function(){
        setTimeout(function () {
            $('#ls-button-submit').trigger('click');
        }, 10000); // Wert ist in Millisekunden; hier nach 10 Sekunden, oder was Du denkst, wie lange die Leute benötigen um auf den Link zu klicken + Polster
    });
</script>


Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
Last edit: 2 weeks 5 days ago by Joffm.

Please Log in to join the conversation.

More
2 weeks 5 days ago - 2 weeks 5 days ago #274119 by nkuecuek
Hi holch, vielen lieben Dank dir für die ausführliche Antwort und dass du dir sogar die Mühe gemacht hast, meine Umfrage aufzuräumen und eine eigene Version hochzuladen- das hat mir wirklich mega geholfen! Deine Hinweise haben mir sehr weitergeholfen, da habe ich auf jeden Fall nochmal was gelernt. Den Hinweis auf 
Code:
SAVEDID
 werde ich übernehmen und entsprechend anpassen.Die Punkte zu Screenout und Struktur  habe ich angepasst.Danke dir fürs Durchgehen.Viele Grüße
Nihal
Last edit: 2 weeks 5 days ago by nkuecuek.

Please Log in to join the conversation.

More
2 weeks 5 days ago #274121 by holch
Dafür ist das Forum ja da. Und genau deshalb fragen wir nach einer LSS, weil es uns hilft genau zu verstehen was du gemacht hast. Weil oft unterscheidet sich das, was hier im Forum beschrieben hat deutlich von dem was dann in der LSS ist.

Und wir können damit "spielen", denn manchmal wissen wir die Antwort auch noch nicht und müssen testen ob unsere Ideen funktionieren.

Schau einfach, wie weit du kommst. Wenn du wieder irgendwo hängst, dann einfach wieder hier im Forum posten. Idealerweise mit einer LSS - Beispieldatei um zu zeigen, was du schon versucht hast.

Help us to help you!
  • Provide your LS version and where it is installed (own server, uni/employer, SaaS hosting, etc.).
  • Always provide a LSS file (not LSQ or LSG).
Note: I answer at this forum in my spare time, I'm not a LimeSurvey GmbH employee.

Please Log in to join the conversation.

Moderators: holchJoffmtpartner

Lime-years ahead

Online-surveys for every purse and purpose