Fragebogenimport
Die CdEDB bietet für Veranstaltungen eine Möglichkeit Abfragen für den Fragebogen, die Anmeldung sowie selbst definierte Datenfelder zu importieren.
Die Konfiguration der Anmeldung und die Konfiguration des Fragebogens unterscheiden sich nur sehr wenig und werden daher hier beide als “Fragebogen” bezeichnet.
Dadurch ist es möglich eine vorgefertigte Abfrage für die eigene Veranstaltung einzurichten, z.B. findet sich im Akademieleitfaden eine vorgefertigte Konfiguration für eine Kleidungsbestellung der Akademieteilnehmer.
Weitere Optionen
Beim Import gibt es zwei zusätzliche Konfigurationsoptionen “Fragebogen erweitern” und “Bereits existierende Datenfelder überspringen”.
Der Haken “Fragebogen erweitern” steuert, ob der importierte Fragebogen an einen möglicherweise bereits existierenden Fragebogen angehängt werden soll, oder ob er ihn gänzlich ersetzen soll. Mehr Details hier: Fragebogen
Der Haken “Bereits existierende Datenfelder überspringen” steuert, ob es bei einem Import von Feldern, die (namentlich) bereits existieren zu einem Fehler kommen soll oder ob diese Felder beim Import übersprungen werden sollen. Mehr Details hier: Datenfelder
Die Import-Datei
Bei der Import-Datei handelt es sich um eine JSON-Datei, in einem ähnlichen Format wie der partielle Export. Die Import-Datei darf nur die folgenden Felder enthalten. Es müssen nicht alle Felder enthalten sein, aber eine leere Datei kann nicht importiert werden.
{
"questionnaire": {
<questionnaire kind stringified>: [
{
<questionnaire row attribute>: <associated value>
}
]
}
"fields": {
<field name>: {
<field attribute>: <associated value>
}
}
}
Fragebogen
Für <questionnaire kind stringified>
gibt es folende Optionen. Es kann jeweils
entweder die ausgeschriebene Bezeichnung oder der Zahlenwert (als string) verwendet
werden. Da JSON keine Zahlen als Schlüssel für Mappings erlaubt ist es nicht möglich
die Zahl als Zahl für den Schlüssel zu verwenden.
Eine Abfrage im “zusätzlichen Fragebogen”, der nach der Anmeldung freigeschaltet werden kann. (“QuestionnaireUsages.additional”, “1”)
Eine Abfrage direkt bei der Anmeldung (“QuestionnaireUsages.registration”, “2”)
Wenn nur eine der Fragebogenarten angegeben ist, z.B. nur der Anmeldungsfragebogen, wird der andere nicht verändert, auch nicht wenn der Haken bei “Fragebogen ergänzen” nicht gesetzt ist. Durch Entfernen des Hakens und das Spezifizieren einer leeren Liste lässt sich der bestehende Fragebogen löschen.
Die Attribute einer questionnaire row
sind:
title (str)
info (str)
input_size (int)
readonly (bool)
default_value (str, int oder null)
field_name (str)
Das Attribut field_name
darf auf ein bereits vor dem Import existierendes oder ein
in der gleichen Datei importiertes Feld verweisen.
Die Definition einer Abfrage nach den Essgewohnheiten der Teilnehmenden könnte z.B. so aussehen. Diese Abfrage wird erst nach der Anmeldung im zusätzlichen Fragebogen angezeigt.
"questionnaire": {
"QuestionnaireUsages.additional": [
{
"title": "Essen",
"info": "Bitte gib hier an, wie Du Dich auf der Akademie ernähren möchtest.",
"input_size": 0,
"readonly": false,
"default_value": null,
"field_name": "Verpflegung"
}
]
}
Datenfelder
Die Attribute eines field
sind:
kind (str oder int)
association (str oder int)
entries (str[][2] oder null)
Hinzu kommt der field_name
, ein restriktiver Bezeichner (keine Umlaute und nur
einige ausgewählte Sonderzeichen), der als Schlüssel vor dem Eintrag mit den anderen
Attributen steht. Der Name muss pro Veranstaltung einzigartig sein und der Import eines
Feldes mit einem Namen, welcher für diese Veranstaltung berreits vergeben ist führt zu
einem Fehler.
Dieser Fehler kann mit dem Haken “Bereits existierende Felder überspringen” zwar
unterdrückt werden, jedoch ist dies mit Vorsicht zu genießen, da das existierende Feld
anders definiert sein kann als das zu importierende, was wiederum zu Fehlern führen
kann. Soll bspw. ein Feld “Verpflegung” importiert werden, welches den Datentyp Text hat
und im Fragebogen mit einem default_value
von “Vegetarisch” belegt werden soll,
aber es existiert bereits ein Ganzzahl-Feld “Verpflegung”, dann schlägt der Import
trotzdem fehl, da der angegebene Vorgabewert für die Abfrage im Fragebogen nicht zum
Datentyp des verknüpften Feldes passt.
Der Wert in kind
muss zu einem der folgenden Datentypen umgewandelt werden können.
Dabei sind jeweils sowohl die str- als auch die int-Darstellung die in den Klammern
stehen erlaubt:
Text (“FieldDatatypes.str”, 1)
Ja/Nein (“FieldDatatypes.bool”, 2)
Ganzzahl (“FieldDatatypes.int”, 3)
Kommazahl (“FieldDatatypes.float”, 4)
Datum (“FieldDatatypes.date”, 5)
Datum mit Uhrzeit (“FieldDatatypes.datetime”, 6)
Der Wert in association
muss zu einer der folgenden Zuordnungen umgewandelt werden:
Anmeldungsfeld (“FieldAssociations.registration”, 1)
Kursfeld (“FieldAssociations.course”, 2)
Unterkunftsfeld (“FieldAssociations.lodgement”, 3)
Für entries
kann entweder null
angegeben werden, dann gibt es keine
Auswhlmöglichkeiten, sondern der Wert kann frei gewählt werden, oder es kann eine Liste
von Optionen angegeben werden. Dafür muss eine Liste von beliebig vielen Listen, die
selbst genau zwei Elemente haben angegeben werden. Das jeweils erste Element muss einem
zulässigen Wert für das jeweilige Datenfeld entsprechen, z.B. einem Datum beim Datentyp
“Datum”. Der jeweils zweite Wert ist ein Text, welcher dem Benutzer beim Ausfüllen des
Feldes in einem Drop-Down-Menü für diese Option angezeigt werden soll.
So führt z.B. folgende Felddefinition dazu, dass unter dem Namen “Verpflegung” für jede Anmeldung festgelegt werden kann ob die Person sich vegetarisch, vegan oder mit Fleisch ernähren soll. Dabei wird für Vegatarier die Zahl 1, Veganer die Zahl 2 und Fleischesser die Zahl 3 gespeichert. (Dieses Beispiel ist nicht notwendigerweise sinnvoll, sprechende Werte zu wählen ist üblicherweise sinnvoller).
"Verpflegung": {
"kind": "FieldDatatypes.int",
"association": "FieldAssociations.registration",
"entries": [
[1, "Ich möchte mich vegetarisch ernähren."],
[2, "Ich möchte mich vegan ernähren."],
[3, "Ich möchte Fleisch essen."]
]
Beispiel
Das folgende Beispiel legt eine beispielhafte Konfiguration für eine Abfrage von Akademiekleidungsbestellungen an.
{
"questionnaire": {
"QuestionnaireUsages.additional": [
{
"title": "Akademiekleidung",
"info": "Bitte gib hier Deine Kleidungsw\u00fcnsche an.",
"input_size": 0,
"readonly": null,
"default_value": null,
"field_name": null
},
{
"title": "Unisex T-Shirt",
"info": null,
"input_size": 0,
"readonly": false,
"default_value": null,
"field_name": "KleidungTShirtCreator"
},
{
"title": "Unisex T-Shirt Gr\u00f6\u00dfe",
"info": null,
"input_size": 0,
"readonly": false,
"default_value": null,
"field_name": "KleidungTShirtCreatorGroesse"
},
{
"title": "Damen T-Shirt",
"info": null,
"input_size": 0,
"readonly": false,
"default_value": null,
"field_name": "KleidungTShirtExpresser"
},
{
"title": "Damen T-Shirt Gr\u00f6\u00dfe",
"info": null,
"input_size": 0,
"readonly": false,
"default_value": null,
"field_name": "KleidungTShirtExpresserGroesse"
},
{
"title": "Anmerkungen zur Kleidungsbestellung",
"info": null,
"input_size": 2,
"readonly": false,
"default_value": null,
"field_name": "KleidungAnmerkungen"
}
]
},
"fields": {
"KleidungAnmerkungen": {
"kind": 1,
"association": 1,
"entries": null
},
"KleidungTShirtCreator": {
"kind": 1,
"association": 1,
"entries": [
[
"None",
"Ich will kein Unisex-T-Shirt bestellen"
],
[
"Black",
"Black"
],
[
"Anthracite",
"Anthracite"
],
[
"Spectra Yellow",
"Spectra Yellow"
],
[
"Fresh Green",
"Fresh Green"
],
[
"Varsity Green",
"Varsity Green"
],
[
"Caribbean Blue",
"Caribbean Blue"
],
[
"Royal Blue",
"Royal Blue"
],
[
"French Navy",
"French Navy"
],
[
"Red",
"Red"
],
[
"Burgundy",
"Burgundy"
],
[
"Bright Orange",
"Bright Orange"
]
]
},
"KleidungTShirtCreatorGroesse": {
"kind": 1,
"association": 1,
"entries": [
[
"None",
"-"
],
[
"XS",
"XS"
],
[
"S",
"S"
],
[
"M",
"M"
],
[
"L",
"L"
],
[
"XL",
"XL"
],
[
"XXL",
"XXL"
],
[
"3XL",
"3XL"
]
]
},
"KleidungTShirtExpresser": {
"kind": 1,
"association": 1,
"entries": [
[
"None",
"Ich will kein Damen-T-Shirt bestellen"
],
[
"Black",
"Black"
],
[
"Anthracite",
"Anthracite"
],
[
"Spectra Yellow",
"Spectra Yellow"
],
[
"Fresh Green",
"Fresh Green"
],
[
"Varsity Green",
"Varsity Green"
],
[
"Caribbean Blue",
"Caribbean Blue"
],
[
"Royal Blue",
"Royal Blue"
],
[
"French Navy",
"French Navy"
],
[
"Red",
"Red"
],
[
"Burgundy",
"Burgundy"
],
[
"Bright Orange",
"Bright Orange"
]
]
},
"KleidungTShirtExpresserGroesse": {
"kind": 1,
"association": 1,
"entries": [
[
"None",
"-"
],
[
"XS",
"XS"
],
[
"S",
"S"
],
[
"M",
"M"
],
[
"L",
"L"
],
[
"XL",
"XL"
],
[
"XXL",
"XXL"
],
[
"3XL",
"3XL"
]
]
}
}
}