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 \\.

Datei

Ein solcher Produkttyp kann unter dem Reiter “Produkttyp” hinterlegt werden:

Datei

  1. Der Tab “Produkttyp”
  2. Mit dem “Plus” Button wird ein neuer Produkttyp hinzugefügt
  3. Für den Produkttypen muss ein Name vergeben werden
  4. Hier steht der Produkttyp selber, es ist ein Beispiel-JSON vorgegeben.
  5. Nach dem Klick auf “Speichern” kann der Produkttyp in der Validation verwendet werden.

Nun geht es im gewünschten Flow weiter:

Datei

  1. Der Tab “Flows”
  2. Aus der Werkzeugleiste links kann die Operation “Validation” eingefügt werden
  3. Die Validation braucht einen Namen
  4. Aus dem Drop-Down-Menue wird der gewünschte Produkttyp ausgewählt
  5. “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
  6. “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
  7. 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"
  }
]