Dies ist eine Vorschau des aktuellen Arbeitsstandes der Dokumentation!
# Groovy-Script zum laden von Entiäten aus der Datenbank
Gerade wenn die Scripte etwas größer werden (was sie schnell werden) sollte man sie in Dokumentvorlagen auslagern. Deshalb ignorieren wir am besten das Feld Code
Für das Beispiel der Bestellungen gehen wir jetzt wieder in die Dokumentvorlagen und legen ein Groovy-Script bestellungen-action an.
Link zur Groovy-Doku: https://groovy-lang.org/documentation.html
Hier fügren wir folgenden Code ein:
import groovy.sql.Sql
import com.batix.table.TableMetadata
import com.batix.util.BatixRecord
import groovy.json.JsonBuilder
def laden() {
// Wird aufgerufen, wenn der API-Endpunkt mit der HTTP GET-Methode aufgerufen wird
}
def erstellen() {
// Wird aufgerufen, wenn der API-Endpunkt mit der HTTP POST-Methode aufgerufen wird
}
def editieren() {
// Wird aufgerufen, wenn der API-Endpunkt mit der HTTP PUT-Methode aufgerufen wird
}
def loeschen() {
// Wird aufgerufen, wenn der API-Endpunkt mit der HTTP DELETE-Methode aufgerufen wird
}
def httpMethod = request.getMethod().toLowerCase()
switch (httpMethod) {
case "get":
laden()
break
case "post":
erstellen()
break
case "put":
editieren()
break
case "delete":
loeschen()
break
default:
response.setStatus(405, "Diese Http-Methode wird für diese Ressource nicht unterstützt")
}
Falls die HTTP-Methoden noch kein Begriff sind, empfiehlt sich diese Dokumentation: https://developer.mozilla.org/de/docs/Web/HTTP/Methods
Nun implementieren wir die Methode zum laden von Bestellungen.
import groovy.json.JsonBuilder
import groovy.sql.GroovyRowResult
import groovy.sql.Sql
import java.text.SimpleDateFormat
def laden() {
/*
* Zuerst sollten die Request-Paramter ausgelesen werden
* Anhand dieser entscheiden wird, welche Bestellungen wir aus der Datenbank abfragen
*/
String id = request.getParameter("id")
String kunde = request.getParameter("kunde")
String abDatum = request.getParameter("abDatum")
// Wird z.B. im Format yyyy-MM-dd an Server gesendet, Alle bestellungen ab dem Datum
Sql sql = new Sql(action.connection)
if (id != null) {
// Wenn eine ID an den Server Gesendet wurde, will man nur die eine Bestellung mit dieser ID laden
GroovyRowResult bestellungRow = sql.firstRow("""
SELECT * FROM bxc_bestellung b
WHERE b.ID = ?
""", [id /* Parameter der das ? ersetzt */])
// aus der Datenbank-Row ein JSON-String erzeugen und an den Webclient senden
print(new JsonBuilder(bestellungRow).toPrettyString())
} else {
// ID wurde nicht übergeben, das heißt es sollen Bestellungen gefiltert werden
Date datum = null
if (abDatum != null) {
/*
Der Request-Parameter abDatum ist ein String
Um damit arbeiten zu können müssen wir diesen in ein Date-Object parsen
*/
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")
datum = sdf.parse(abDatum)
}
/* hier ein etwas anderes Beispiel um ein SQL-Statement auszuführen.
* Statt Platzhalter mit '?' zu kennzeichnen kann man sie in den String direkt mit
* '$<variable>' einfügen
*/
GroovyRowResult[] bestellungRows = sql.rows("""
SELECT * FROM bxc_bestellung b
WHERE ($kunde IS NULL OR b.Kunde = $kunde)
AND ($datum IS NULL OR b.Bestelldatum >= $datum)
""")
// aus den Datenbank-Rows ein JSON-String erzeugen und an den Webclient senden
print(new JsonBuilder(bestellungRow).toPrettyString())
}
}