Menü der Dokumentation

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
}