CRUD
Die d.ecs forms engine kann beim Speichern die Werte einer Datenquelle analysieren und in die drei Bereiche aufteilen:
Create: Werte, die in d.ecs forms hinzugefügt wurden
Update: Werte, die in d.ecs forms verändert wurden
Delete: Werte, die in d.ecs forms gelöscht wurden
Dies geschieht aufgrund von Vergleichsoperationen zum letzten Lade- oder Speichervorgang. Bei Create wird alles zusammengefasst, was im Formular seit dem letzten Speichern hinzugefügt wurde. Bei Update sind nur die Änderungen vorhanden, usw.
Um diesen Mechanismus zu nutzen, müssen anstelle der saveData-Methode die folgenden drei Methoden im serverseitigen (Groovy) Skript implementiert werden:
processCreate
processUpdate
processDelete
Diese Methoden verhalten sich ähnlich wie die saveData-Methode. Der Unterschied ist nur die Vorfilterung in die drei Bereiche create, update und delete. Diese Methoden werden nur aufgerufen, wenn jeweils ein Create, Update oder Delete seit dem Erzeugen der Formular-Instanz oder dem letzten Speichern des Formulars (form.instance.save()) stattgefunden hatte.
Voraussetzung für folgendes Beispiel-Skript ist eine Datenquelle (Objektmodell) mit den Eigenschaften name, vorname, adresse, plz, ort und nr (jeweils vom Typ Mehrfachwert), eine dazu passende Datenbanktabelle und einen dazu passenden DB-Alias (myDB).
CRUD-Datenquelle
def loadData(def ds) {
def query="SELECT name,vorname,adresse,plz,ort,nr FROM forms.KUNDEN"
ds.engine.sql.executeAndStore( "myDB", query)
ds.log.info("Loaded "+ds.data.getTable().size()+" Customers")
return null
}
def processUpdate(def ds) {
def query="""UPDATE forms.KUNDEN
SET name=?, vorname=?, adresse=?, plz=?, ort=?
WHERE nr=?"""
for (row in ds.data.getTable()) {
def nr=row.getValue("nr")
if (nr==null)
throw new Exception("Missing nr in $row for processUpdate")
def name=row.getValue("name")
def vorname=row.getValue("vorname")
def adresse=row.getValue("adresse")
def plz=row.getValue("plz")
def ort=row.getValue("ort")
def params = [name,vorname,adresse,plz,ort,nr]
ds.log.info("Updating Customer "+params)
ds.engine.sql.executeUpdate("myDB",query, params)
}
return null
}
def processCreate(def ds) {
def query="INSERT INTO forms.KUNDEN VALUES(?,?,?,?,?,?)"
for (row in ds.data.getTable()) {
def nr=row.getValue("nr")
if (nr==null)
throw new Exception("Missing nr in $row for processCreate")
def name=row.getValue("name")
def vorname=row.getValue("vorname")
def adresse=row.getValue("adresse")
def plz=row.getValue("plz")
def ort=row.getValue("ort")
def params = [name,vorname,adresse,plz,ort,nr]
ds.log.info("Creating Customer "+params)
ds.engine.sql.executeInsert("myDB",query,params)
}
return null
}
def processDelete(def ds) {
def query="DELETE FROM forms.KUNDEN WHERE nr=?"
for (row in ds.data.getTable()) {
def nr = row.getValue("nr")
if (nr==null)
throw new Exception("Missing nr in $row for processDelete")
ds.log.info("Deleting Customer "+nr)
ds.engine.sql.execute("myDB",query,[nr])
}
return null
}