Inhaltsverzeichnis

    Anwendungsbeispiele: Direkter Datenbank-Zugriff

    Hinweis: Mit dem direkten Zugriff auf die Datenbank greifen Sie ggf. direkt in die Struktur der Datenbank ein. Wir können in diesem Fall nicht garantieren, dass diese Eingriffe auch in zukünftigen Versionen von JTL-Wawi einwandfrei funktionieren werden. Daher empfehlen wir nur ausgewiesenen Experten die Möglichkeit zu nutzen, direkt auf die Datenbank zuzugreifen.

    Fehlerbehandlung

    {% assign result = 'SELECT * FROM tBestellungEX' | DirectQuery -%}
    "{{ result.Query }}" lieferte {% if result.Fehlerhaft %}den Status: {{ result.Fehler }}{% else %}keinen Fehler.{% endif -%}
    
    #=> "SELECT * FROM tBestellungEX" lieferte den Status: Errorcode 7338
    #=> "SELECT * FROM tBestellungEX" lieferte keinen Fehler.

    In der Variable „result“ wird in dem Fall das Ergebnis aus dem Select-Befehl gespeichert. Das es sich bei dem String um eine Datenbank-Abfrage handelt müssen Sie DotLiquid durch den zusätzlichen Filter „’string’ | DirectQuery“ begreiflich machen.

    • Im „result.Query“ wird der ursprüngliche String der Abfrage gespeichert und kann so nochmal abgerufen werden.
    • In „result.Fehlerhaft“  finden wir den booleschen Wert „true“  oder „false“, je nachdem, ob die Abfrage richtig oder falsch war.
    • Sollte die Abfrage einen Fehler enthalten und deshalb nicht erfolgreich abgeschlossen werden, so können wir mit „result.Fehler“ die Fehlermeldung anzeigen lassen.
    Wichtig sind die Begriffe nach dem Punkt, also Query, Daten, Fehlerhaft und Fehler! Die Variable kann über „{% assign %}“  oder  „{% capture %}“ beliebig definiert werden.

    Einfache Abfragen

    {% assign result = 'SELECT COUNT(*) FROM tBestellung' | DirectQueryScalar -%}
    Es gibt {{ result }} Bestellungen.
    
    #=> Es gibt 425 Bestellungen.

    Unter einfachen Abfragen verstehen wir ein SQL-Select welches genau ein Ergebnis zurück gibt. Ein solches Ergebnis verarbeiten Sie im Idealfall über den Filter „’string’ | DirectQueryScalar“, so wird das Ergebnis direkt in der Variable gespeichert und kann weiter verarbeitet werden.

    Komplexe Abfragen

    1   {% assign result = 'SELECT TOP(4) * FROM tBestellung' | DirectQuery -%}
    2   "{{ result.Query }}" lieferte {% if result.Fehlerhaft %}den Status {{ result.Fehler }}{% else %}keinen Fehler.{% endif %}
    3   {% for item in result.Daten %}
    4     Bestellung: {{ item.cBestellNr }}
    5     {% capture itemquery %}SELECT * FROM tbestellpos WHERE tBestellung_kBestellung = {{ item.kBestellung | SqlEscape }}{% endcapture -%}
    6     {% assign result2 = itemquery | DirectQuery -%}
    7     {% for item2 in result2.Daten -%}
    8       {{ item2.nAnzahl | Nummer: 'N2' }}x {{ item2.cString }}
    9     {% endfor -%}
    10  {% endfor -%}

    Das Ergebnis hiervon könnte so aussehen:

    "SELECT TOP(4) * FROM tBestellung" lieferte keinen Fehler.
    
    Bestellung: AU0920121
    1,00x Adidas Frankreich Home Trikot FFF France JSY SS
    1,00x Adidas Frankreich Fleece Pullover ClimaWarm® FFF
    1,00x Adidas Frankreich Short Home FFF France Hose weiß
    1,00x Pauschale Versandkosten
    1,00x Nachnahmegebühr
    
    Bestellung: AU0920122
    1,00x Polo Ralph Lauren Big Pony gestreift Poloshirt dunkelblau/grün
    
    Bestellung: AU0920123
    1,00x Adidas Beckenbauer Tracktop weiß Jacke Firebird
    1,00x Pauschale Versandkosten
    
    Bestellung: AU0920124
    1,00x Adidas Standup Rollkragen Pullover rot
    1,00x Adidas Windbreaker Herren Windjacke schwarz Laufjacke
    1,00x Versandkosten nach Zonen
    • In der ersten Zeile definieren Sie Ihre Variable „result“ und geben Ihr unsere Abfrage in Form eines String als Wert.
    • In Zeile zwei geben wir eine Fehlermeldung aus bzw. bestätigen die Korrektheit unserer Abfrage.
    • In der dritten Zeile starten wir eine verschachtelte for-Schleife, um nacheinander die Datensätze je Ergebnis abzufragen. Dazu verwenden Sie „result.Daten“.
    • In Zeile vier wird die Bestellnummer ausgegeben.
    • In der fünften Zeile erfassen wir über „{% capture %}“  eine komplexere SQL-Abfrage, um so die Bestellpositionen einer Bestellung zu ermitteln. Der Filter „{{ ‘string’ | SqlEscape }}“ setzt jedem Hochkomma in einem String, ein weiteres Hochkomma voran, es erfolgt das sogenannte Escapen, um Fehler im Programmcode zu vermeiden.
    • In Zeile sechs speichern wir Datensätzen zu den Bestellpositionen der aktuell in der for-Schleife befindlichen Bestellung.
    • In der siebten Zeile starten wir eine for-Schleife, weil jede Bestellung mehrere Elemente enthalten kann, genügt ein DirectQueryScalar hier nicht aus.
    • In Zeile acht erfolgt die Ausgabe der Bestellpositionen. Über die Datenbankfelder sprechen wir einzelne Spalten direkt an.
    • In den Zeilen neun und zehn schließen wir die verschachtelten for-Schleifen nacheinander wieder.