Die Validation bietet die Möglichkeit einen Datensatz, nach vorgegeben Richtlinien, zu überprüfen. Diese Richtlinien werden in einem Produkttyp definiert, dieses muss als gültiges JSON vorliegen. Je nachdem ob die Richtlinien/Bedingungen im Produkttyp 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 Produkttyp 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 solcher Produkttyp kann unter dem Reiter “Produkttyp” hinterlegt werden:

- Der Tab “Produkttyp”
- Mit dem “Plus” Button wird ein neuer Produkttyp hinzugefügt
- Für den Produkttypen muss ein Name vergeben werden
- Hier steht der Produkttyp selber, es ist ein Beispiel-JSON vorgegeben.
- Nach dem Klick auf “Speichern” kann der Produkttyp 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 der gewünschte Produkttyp ausgewählt
- “Nur Validieren” Button
“Aus”: Attribute/Spalten die nicht im Produkttyp genannt auftauchen werden aus dem Datensatz entfernt
“Ein”: Attribute/Spalten die nicht im Produkttyp genannt auftauchen bleiben erhalten und werden lediglich als fehlerhaft markiert - “Fehlerhafte Zeilen erhalten” Button
“Aus”: Zeilen/Datensätze die die Bedingungen des Produkttyps nicht erfüllen werden gelöscht
“Ein”: Zeilen/Datensätze die die Bedingungen des Produkttyps 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 Produkttyps 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 “Produkttyp” bei “Validation Werkzeuge” erstellt werden. Wie bei den normalen Werkzeugen wird Java-Script verwendet. Allerdings erfordern die Chioro-Produkttyp-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 der Produkttyp wie folgt konfiguriert werden:
[{
"key": "name",
... andere Attribute wie im obigen Beispiel
"customValidation": "nameValidator" <===
}]
Also sieht der komplette Produkttyp 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"
}
]