Die Validation bietet die Möglichkeit einen Datensatz, nach vorgegeben Richtlinien, zu überprüfen. Diese Richtlinien werden in einem Schema definiert, dieses muss als gültiges JSON vorliegen. Je nachdem ob die Richtlinien/Bedingungen im Schema erfüllt sind, erscheint ein Datensatz auf dem Ausgang “erfolgreich” oder “fehlerhaft”. So können z.B. Attribute auf “vorhandensein” oder das korrekte Format überprüft werden.
Zunächst ein Beispiel für das Attribut “product_id”:
[{
"key": "product_id",
"name": null,
"description": null,
"attributeType": "text",
"pattern": null,
"fixedValues": null,
"defaultValue": null,
"attributeSortingHint": 20,
"unit": null,
"isMandatory": true,
"isVariantAttribute": false,
"attributeGroup": null,
"attributeGroupSortingHint": null
}]
| Schlüssel | mögliche Werte | Kommentar |
|---|---|---|
| key | Attributname | Welches Attribut soll überprüft werden |
| name | ein beliebiger Wert/Text | (lokalisierter) Attributname |
| description | ein beliebiger Wert/Text | (lokalisierte) Beschreibung |
| attributeType | text / number / date | Von welchem Typ muss das Attribut sein |
| pattern | regularExpression | welches Muster muss erfüllt werden |
| fixedValues | Eine Liste der Werte die erlaubt sind | z.B. [‘1’,‘2’,‘7’], alle anderen Werte führen zu “fehlerhaft” |
| defaultValue | Ein beliebiger Wert/Text | Ist das Attribut leer wird dieser Wert eingetragen |
| attributeSortingHint | Eine beliebige ganze Zahl | Nach diesen Zahlen werden die Attribute im Schema sortiert |
| unit | Ein beliebiger Wert/Text | Es kann eine Einheit erzwungen werden |
| isMandatory | true / false | Ist das Attribut zwingend erforderlich |
| attributeGroup | Ein beliebiger Wert | Das Attribut wird einer Gruppe zugeschlagen |
| attributeGroupSortingHint | Eine beliebige ganze Zahl | Nach diesen Zahlen werden die Gruppen sortiert |
| Ist der Wert ‘null’ angegeben wird die Zeile nicht beachtet und bei der Überprüfung übergangen. |
Beispiel für den Schlüssel ‘pattern’: "([0-9a-zA-Z\\._-]+\\.(png|PNG|gif|GIF|jp[e]?g|JP[E]?G))"
Der öffnende und der schließende Slash werden nicht benötigt. Ein Backslash muss doppelt escaped werden \\.

Ein solches Schema kann unter dem Reiter “Schemas” hinterlegt werden:

- Der Tab “Schemas”
- Mit dem “Plus” Button wird ein neues Schema hinzugefügt
- Für das Schema muss ein Name vergeben werden
- Hier steht das Schema selber, es ist ein Beispiel-JSON vorgegeben.
- Nach dem Klick auf “Speichern” kann das Schema in der Validation verwendet werden.
Nun geht es im gewünschten Flow weiter:

- Der Tab “Flows”
- Aus der Werkzeugleiste links kann die Operation “Validation” eingefügt werden
- Die Validation braucht einen Namen
- Aus dem Drop-Down-Menue wird das gewünschte Schema ausgewählt
- “Nur Validieren” Button
“Aus”: Attribute/Spalten die nicht im Schema genannt auftauchen werden aus dem Datensatz entfernt
“Ein”: Attribute/Spalten die nicht im Schema genannt auftauchen bleiben erhalten und werden lediglich als fehlerhaft markiert - “Fehlerhafte Zeilen erhalten” Button
“Aus”: Zeilen/Datensätze die die Bedingungen des Schemas nicht erfüllen werden gelöscht
“Ein”: Zeilen/Datensätze die die Bedingungen des Schemas nicht erfüllen werden lediglich als fehlerhaft markiert - Wenn die Einstellungen vorgenommen wurden wird hier die Validierung gestartet
Benutzerdefinierte Validierung
Manchmal reichen die Validierungsfunktionen des Schemas nicht aus, um einige komplexe Anwendungsfälle abzudecken. In diesen Fällen kann der Benutzer ein Werkzeug definieren, um die Daten denoch zu validieren. Ein solches Werkzeug kann unter dem Reiter “Schemas” bei “Validation Werkzeuge” erstellt werden. Wie bei den normalen Werkzeugen wird Java-Script verwendet. Allerdings erfordern die Chioro-Schema-Werkzeuge bestimmte Objekttypen, die zurückgegeben werden müssen. Das Format dieser Objekte wird im Folgenden anhand eines Beispiels beschrieben:
Angenommen, wir haben ein Attribut “name”, das ein verschachteltes Objekt mit den Eigenschaften firstName und lastName enthält. Es soll validiert werden, dass sowohl Vorname als auch Nachname existieren. Um das zu erreichen können wir das folgende Werkzeug definieren:
Beispieldaten:
| id | name | expected errors |
|---|---|---|
| 1 | {firstName: ‘lutz’, lastName: ‘wagner’} | none |
| 2 | ‘lutz wagner’ | first name is not defined, last name is not defined |
| 3 | {‘lastName’: ‘wagner’} | first name is not defined |
Beispielwerkzeug (Name = nameValidator):
function nameValidator(key) {
let attributeValue = source(key);
if(!attributeValue.firstName) {
return {"errors":["first name is not defined"]}
}
if(!attributeValue.lastName) {
return {"errors":["last name is not defined"]}
}
}
Für das obige Beispieltool muss das Schema wie folgt konfiguriert werden:
[{
"key": "name",
... andere Attribute wie im obigen Beispiel
"customValidation": "nameValidator" <===
}]
Also sieht das komplette Schema folgendermassen aus:
[
{
"key": "name",
"name": [
{
"lang": "deu",
"value": "Attribut Name"
}
],
"description": [
{
"lang": "deu",
"value": "Attribut Beschreibung"
}
],
"attributeTypeList": false,
"attributeType": "text",
"pattern": null,
"fixedValues": null,
"defaultValue": null,
"attributeSortingHint": 9999,
"unit": null,
"isMandatory": true,
"isVariantAttribute": false,
"attributeGroup": null,
"attributeGroupSortingHint": null,
"customValidation": "nameValidator"
}
]