Welcome to the LimeSurvey Community Forum

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

Ausgabe Antworten aus MultiSelect & Matrix

  • Marurllan_192739
  • Marurllan_192739's Avatar Topic Author
  • Offline
  • Banned
  • Banned
More
2 years 7 months ago - 2 years 7 months ago #219818 by Marurllan_192739
Ausgabe Antworten aus MultiSelect & Matrix was created by Marurllan_192739
LimeSurvey Cloud 3.27.16

Hallo Zusammen,

Ich würde gerne bei meiner Umfrage bestimmte Fragen mit Antworten in meine End-URL integrieren. Aktuell schaffe ich es mit implode() und auch über list(). Mein Code sieht gerade so aus:
Code:
www.url.de?{list(Q2_SQ001.shown,Q2_SQ002.shown,Q2_SQ003.shown,Q2_SQ004.shown)}

Q2 is die Frage, SQ001 etc. sind die Teilfragen. Gibt es eine Möglichkeit den Code zu verkürzen um nicht jede Teilfrage in den Code schreiben zu müssen? Die Frage bezieht sich auf Multiselect und auch auf Matrixen.

Vielen Dank für Eure Unterstützung.
Last edit: 2 years 7 months ago by Marurllan_192739.
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 7 months ago #219820 by Joffm
Replied by Joffm on topic Ausgabe Antworten aus MultiSelect & Matrix
[url] manual.limesurvey.org/ExpressionScript_-....22that.22_variables [/url]

Dein Beispiel würde also zu 
list(that.Q2.shown)}

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The following user(s) said Thank You: Marurllan_192739
The topic has been locked.
  • Marurllan_192739
  • Marurllan_192739's Avatar Topic Author
  • Offline
  • Banned
  • Banned
More
2 years 7 months ago #219822 by Marurllan_192739
Replied by Marurllan_192739 on topic Ausgabe Antworten aus MultiSelect & Matrix
Vielen Dank!

Funktioniert super! Ich habe dann noch weiter gemacht und die Funktion listifop gefunden. Diese wurde von dir auch schon super im Forum erklärt. Ich habe jetzt einige question prperty (retProp) ausprobiert. Am liebsten hätte ich ein String mit nur SQ002&SQ003&... Gibt es da ein Command für nur die SubQuestion? Ansonsten muss ich es wohl mal mit regexMatch versuchen.


Aktuelle Ausgabe:

www.url.de?frage1=194269X86X955SQ002&194269X86X955SQ003


Bis dahin super vielen Dank =)
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 7 months ago #219825 by Joffm
Replied by Joffm on topic Ausgabe Antworten aus MultiSelect & Matrix
Sorry, aber jetzt hast Du mich etwas verwirrt.

Was willst Du eigentlich übergeben?
Jetzt sieht es so aus, als wollest Du keine Ergebnisse übergeben, sondern die SGQA Codes.
Also etwas wie {list(that.Q2.sgqa)},
vielleicht verziert mit etwas Stringfunktion
{str_replace(", ","&",list(that.Q2.sgqa))}

Gibt bei mir z.B.
188316X3414X43379SQ001&188316X3414X43379SQ002&188316X3414X43379SQ003&188316X3414X43379SQ004&188316X3414X43379SQ005&188316X3414X43379SQ006&188316X3414X43379SQ007&188316X3414X43379SQ008&188316X3414X43379SQ009&188316X3414X43379SQ010

Ansonsten solltest Du einmal ein Beispiel als lss Export schicken mit Erklärung, was wann, warum und wie übergeben werden soll.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The following user(s) said Thank You: Marurllan_192739
The topic has been locked.
  • Marurllan_192739
  • Marurllan_192739's Avatar Topic Author
  • Offline
  • Banned
  • Banned
More
2 years 7 months ago #219848 by Marurllan_192739
Replied by Marurllan_192739 on topic Ausgabe Antworten aus MultiSelect & Matrix
Ok, verwirren wollte ich niemanden.

Das große Ziel ist, die End-URL mit Antworten aus der Umfrage zu bestücken, sodass auf der Landingpage für den Teilnehmer eine kleine kurze Auswertung stattfinden kann. Dies geht über die URL-Parameter. Top!
Mein Ziel ist es, die URL-Parameter so kurz wie möglich zu halten. Deswegen eignen sich die Variable-Attributes .shown / .question nicht, da die Teilfragen ab und an recht lang sind.

Darum bin ich auf die SGQA Codes gekommen. Wenn ich {list(that.Q2.sgqa)} benutze, werden mir alle SGQA Codes der Frage ausgegeben, auch die, die nicht ausgewählt wurden. Mit {listifop("code", "==","Y","sgqa","&", that.Q2.sgqa)} bekomme ich jetzt nur die SGQA Codes, die in der Frage auch angeklickt wurden. Passt!

Am liebsten hätte ich eine noch kürzere Ausgabe. Der SGQA Code wirft dann doch auch viele Informationen aus. 194269X86X955SQ001&194269X86X955SQ003. Schöner wäre nur den Code der Teilfragen, also SQ001&SQ003. Deswegen die Fragen, ob es eine bekannte Möglichkeit gibt, auf die Codes der Teilfragen zu reduzieren. Ich habe nichts gefunden.


Ok, habe mir die Frage jetzt selbst beantwortet =)

{str_replace("194269X86X955","",listifop("code", "==","Y","sgqa","&", that.Q2.sgqa))}

Gruß

 
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 7 months ago #219849 by Joffm
Replied by Joffm on topic Ausgabe Antworten aus MultiSelect & Matrix

die End-URL mit Antworten aus der Umfrage zu bestücken

Das hatte ich mir am Anfang auch gedacht.
Daher: Was willst Du mit den SGQA-Codes?
Wie willst Du mit dem SGQA-Code einer Einfachnennung herausbekommen, wie diese Frage beantwortet wurde?
Außerdem ist der SGQA-Code ja auch nur ein Synonym für {Q2}; musste halt benutzt werden, als es ExpressionScript / Manager noch nicht gab.

Wenn ich Daten übergebe, schaue ich auch, dass es kurz wird (der GET-Parameter ist ja sowieso in der Länge begrenzt)
Einfachnennung ist klar: Da "knallt" man einfach die Codes in definierter Reihenfolge mit "join" hintereinander. Sollte es mehrstellige Codes geben, evtl. als "001012004123002..."
Geht auch bei Mehrfach: eben mit "join".
Da kann dann entweder mittels
{join(if(Q1_SQ001=="Y","1","0"),if(Q1_SQ002=="Y","1","0"),if(Q1_SQ003=="Y","1","0"),... einen String erzeugen wie "10011011". Da weißt Du genau, welche Option ausgewählt wurde, welche nicht.
Nach Deinem Beispiel möchtest Du nur die ausgewählten?
Gut, dann eben so
{join(if(Q1_SQ001=="Y","1",""),if(Q1_SQ002=="Y","2",""),if(Q1_SQ003=="Y","3",""),...
Dann gibt es so etwas: "1379"; erstes, drittes, siebtes und neuntes Item wurde gewählt.
Und wieder, wenn es auch zweistellige Codes gibt:
{join(if(Q1_SQ001=="Y","01",""),if(Q1_SQ002=="Y","02",""),...,if(Q1_SQ013=="Y","13",""),...
Das ist alles auf jeden Fall kürzer als wenn Du immer das "SQ0.." mit herumschleppst.

Bei Matrizen kannst Du wieder ein simples join machen (vorausgesetzt einstellige Codes, und nicht den "A1", "A2",... Unsinn)
join(that.Q1) gäbe dann eben so etwas wie "5526154331", die Antwortcodes der Teilfragen der Matrix

Die Zielanwendung kann dann ja leicht mittels "substr" die Antwort zu jeder Frage herausfischen.

Und diese Erzeugung des Übergabestrings würde ich in einer Gleichungsfrage "eqParam" vorziehen, dass in der end-url nur noch steht : "https://......?param={eqParam}

Joffm
 

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The topic has been locked.
  • Marurllan_192739
  • Marurllan_192739's Avatar Topic Author
  • Offline
  • Banned
  • Banned
More
2 years 7 months ago - 2 years 7 months ago #219851 by Marurllan_192739
Replied by Marurllan_192739 on topic Ausgabe Antworten aus MultiSelect & Matrix
Danke für die super ausführlichen Infos. Mit dem join() komme ich jetzt gut klar.

Top, Danke
Last edit: 2 years 7 months ago by Marurllan_192739.
The topic has been locked.
  • holch
  • holch's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 7 months ago #219852 by holch
Replied by holch on topic Ausgabe Antworten aus MultiSelect & Matrix
Wäre es mit der Übergabe der Saved-ID und einem Script das per API auf die Antworten zugreift nicht noch kürzer?

I answer at the LimeSurvey forum in my spare time, I'm not a LimeSurvey GmbH employee.
No support via private message.

The following user(s) said Thank You: Marurllan_192739
The topic has been locked.
  • Marurllan_192739
  • Marurllan_192739's Avatar Topic Author
  • Offline
  • Banned
  • Banned
More
2 years 7 months ago #219857 by Marurllan_192739
Replied by Marurllan_192739 on topic Ausgabe Antworten aus MultiSelect & Matrix

Wäre es mit der Übergabe der Saved-ID und einem Script das per API auf die Antworten zugreift nicht noch kürzer?
 
Hey,

das ist sicherlich auch ein interessanter Ansatz. Da müsste ich dann mal schauen, welcher der beiden Wege in der Programierung mehr Aufwand bedeutet.

Besten Dank
The topic has been locked.
  • Joffm
  • Joffm's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 7 months ago #219866 by Joffm
Replied by Joffm on topic Ausgabe Antworten aus MultiSelect & Matrix
Ach, @holch,
wenn ein Thread so harmlos beginnt mit "Wie kann ich "list(Q1_SQ001,Q1_SQ002,Q1_SQ003,...)" kürzer machen?" denkt man nicht mehr daran, den Workflow in Frage zu stellen.

Zunächst ist mir ja nicht klar, wie umfangreich und kompliziert die Auswertung sein wird und ob man sie nicht auch direkt in LimeSurvey hinbekommt.
Da geht überraschend viel.
 

Aber gut:
Im Rahmen eines Bewerbungsfragebogens wurde auch ein BIF-6F (Bochumer Inventar zur beruflichen Persönlichkeitsbeschreibung) ausgefüllt.
Das kann LimeSurvey dann nicht mehr, da man hier in hinterlegten Tabellen nachschauen muss.

Also wurde die SAVEDID an eine php-Seite übergeben, welche nur sagte "Vielen Dank, Ihre Daten sind bei uns eingegangen. usw."
Im Hintergrund wurde dann der BIF berechnet, ein schönes pdf erstellt (mit den Daten und einer graphischen Darstellung des BIF) und eine mail verschickt, dass es eine neue Bewerbung gibt.

Da ich mit der API nicht "auf DU und DU" bin, wurde hier der direkte Zugriff auf die Datenbank gewählt.
Nachteil: Man muss mit den SGQA Codes abfragen, die wenig sprechend sind; daher wurde eine "Übersetzungsdatei" eingebunden.
Code:
$survey=193161;
$tbl_daten='lime_survey_'.$survey;
$tbl_timing='lime_survey_'.$survey.'_timings';
$col_name=$survey.'X42X545';
$col_dob=$survey.'X42X546';
$col_gender=$survey.'X42X554';
$col_schul=$survey.'X42X547';
$col_taet=$survey.'X42X548';
$col_erf=$survey.'X42X549';
$col_upload=$survey.'X43X550';
$col_cv=$survey.'X43X551';
...

Dann sind die Abfragen ein wenig anschaulicher.
Code:
"SELECT
    {$col_quelle}SQ001 as Q1,{$col_quelle}SQ002 as Q2,{$col_quelle}SQ003 as Q3,{$col_quelle}SQ004 as Q4,
    {$col_quelle}other as QOther,{$col_quelle_sonst2} as QSo2,{$col_quelle_sonst3} as QSo3,
    {$col_name}SQ001 as vname,{$col_name}SQ002 as name,concat({$col_name}SQ003,', ',{$col_name}SQ004,' ',{$col_name}SQ005) as adresse,
    {$col_name}SQ006 as phone,{$col_name}SQ007 as email,
    {$col_dob} as dob,
    {$col_gender} as gender,
    {$col_schul} as schule,
    {$col_upload}_filecount as fc,{$col_cv} as cv,
    7-{$col_T1}SQ001 as W01,7-{$col_T1}SQ002 as W02,{$col_T1}SQ003 as W03,{$col_T1}SQ004 as W04,7-{$col_T1}SQ005 as W05,7-{$col_T1}SQ006 as W06,7-{$col_T1}SQ007 as W07,
    7-{$col_T1}SQ008 as W08, ...,
    FROM {$tbl_daten} WHERE id={$SID}"

Das war schnell gemacht, weil ich daran gewöhnt bin.

Eine Auflistung der Antworten eines Teilnehmers mit der API ginge wohl so:
Code:
<?php
require_once 'jsonrpcphp/JsonRPCClient.php';
 
define( 'LS_BASEURL', 'https://www.myServer.de/limesurvey');  // adjust this one to your actual LimeSurvey URL
define( 'LS_USER', 'ICH_ICH' );
define( 'LS_PASSWORD', 'meinPassword' );
 
// the survey to process
$survey_id=886223;
 
// instantiate a new client
$myJSONRPCClient = new \org\jsonrpcphp\JsonRPCClient( LS_BASEURL.'/index.php/admin/remotecontrol' );
// receive session key
$sessionKey= $myJSONRPCClient->get_session_key( LS_USER, LS_PASSWORD );
 
if(is_array($sessionKey))
{
    header("Content-type: application/json");
    echo json_encode($sessionKey);
    die();
}
 
/* Get the responses */
/*
export_responses(
string $sSessionKey,
integer $iSurveyID,
string $sDocumentType,
string $sLanguageCode = null,
string $sCompletionStatus = 'all',
string $sHeadingType = 'code',
string $sResponseType = 'short',
integer $iFromResponseID = null,
integer $iToResponseID = null,
array $aFields = null
) : array|string
*/
$response = $myJSONRPCClient->export_responses(
    $sessionKey,
    $survey_id,
    'json', // Document type : pdf,csv,xls,doc,json
    null, // Language code : null : default from survey
    'complete', // Stautus complete|incomplete|all
    NULL, // Heading : code|full|abbreviated : question text, default code
    'short', // answer : short|long , default : long
    $SID,   // die übergebene SAVEDID als Startwert
    $SID    // die übergebene SAVEDID als Endwert
); // See http://api.limesurvey.org/classes/remotecontrol_handle.html#method_export_responses or https://github.com/LimeSurvey/LimeSurvey/blob/master/application/helpers/remotecontrol/remotecontrol_handle.php#L2382 or
 
    $decodedString = base64_decode($response);
    $aResponses = json_decode($decodedString, True);
        // Find the first response ID
    $aFirstResponse = reset($aResponses['responses'][0]);
 
  //Hier als Tabelle auf den Bildschirm gebracht.
    echo '<table style="border-collapse: collapse; text-align: left;">';
        echo '<tr>';
            // Insert column headers
            foreach($aFirstResponse as $key => $value) {
                echo '<th style="border: 1px solid #CCC; padding: 2px 7px;">'.$key .'</th>';
            }
        echo '</tr>';
        foreach($aResponses['responses'] as $key => $row) {
        echo '<tr>';
                // Insert the data
                foreach(reset($row) as $key => $item) {
                    echo '<td style="border: 1px solid #CCC; padding: 2px 7px;">'.$item .'</td>';
                }
            echo '</tr>';
        }
    echo '</table>';
 
// release the session key
$myJSONRPCClient->release_session_key( $sessionKey );
 
?>

Was Du letztendlich machst, musst Du selbst entscheiden.

Joffm

Volunteers are not paid.
Not because they are worthless, but because they are priceless
The topic has been locked.
  • holch
  • holch's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 7 months ago #219872 by holch
Replied by holch on topic Ausgabe Antworten aus MultiSelect & Matrix
@Joffm: Bei der ursprünglichen Frage hätte ich die API auch nicht ins Spiel gebracht

Aber dann wurde es ja immer komplizierter. Für 1-2 Variablen lohnt sich der API Ansatz sicher nicht. Aber wenn man darüber nachdenkt die Variablen zu kürzen, dann ist es vermutlich eine gute Idee sich die API mal genauer anzuschauen. Sicher im ersten Moment etwas mehr Einarbeitung, aber danach vermutlich die sauberste Lösung.

I answer at the LimeSurvey forum in my spare time, I'm not a LimeSurvey GmbH employee.
No support via private message.

The topic has been locked.
  • holch
  • holch's Avatar
  • Offline
  • LimeSurvey Community Team
  • LimeSurvey Community Team
More
2 years 7 months ago #219873 by holch
Replied by holch on topic Ausgabe Antworten aus MultiSelect & Matrix
Allerdings, und das ist mir jetzt erst beim schreiben aufgefallen, muss man da vermutlich noch mehr auf den Datenschutz achten. Denn mit der Übergabe der SAVEDID via URL an ein Skript, das dann die Angaben ausliest, könnte man ja theoretisch die SAVEDID manipulieren und andere Daten auch auslesen. Aber ich bin kein Programmierer...

Bei der Übergabe der kompletten Daten via URL sind es halt wirklich nur die Daten die vorher eingegeben wurden. Da kann man eigentlich keinen Zugriff auf die Daten anderer damit bekommen.

I answer at the LimeSurvey forum in my spare time, I'm not a LimeSurvey GmbH employee.
No support via private message.

The topic has been locked.
Moderators: Joffm

Lime-years ahead

Online-surveys for every purse and purpose