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
11 hours 3 minutes 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
8 hours 16 minutes ago - 8 hours 10 minutes 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: 8 hours 10 minutes ago by holch.

Please Log in to join the conversation.

More
7 hours 11 minutes ago - 6 hours 56 minutes 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: 6 hours 56 minutes ago by Joffm.

Please Log in to join the conversation.

More
5 hours 53 minutes 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
4 hours 55 minutes 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
1 hour 52 minutes 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
1 hour 16 minutes 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
1 hour 12 minutes 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.

Moderators: holchJoffmtpartner

Lime-years ahead

Online-surveys for every purse and purpose