Acties (Actions)
Aanpassingen aan databasebewerkingen.
Inleiding
Voortdurend vinden er gegevensmanipulaties plaats, en het is gebruikelijk dat er regels zijn zoals bijvoorbeeld:
- Bij het verwijderen van een klant moet ook de geschiedenis worden verwijderd.
- Bij het annuleren van een product moet het uit de bestellingen worden verwijderd en moet het totaalbedrag worden aangepast.
- Bij het afronden van een aankoop moeten de gegevens naar een ander systeem worden gestuurd dat de distributie verzorgt.
De acties (actions) dienen precies hiervoor: om code te injecteren die wordt uitgevoerd in specifieke situaties wanneer er een gegevensmanipulatie plaatsvindt.
Bij het invoegen of wijzigen van informatie worden de acties voor opslaan (save) en opgeslagen (saved) uitgevoerd:
save: Vóór het uitvoeren van het databasecommando.saved: Nadat het databasecommando is uitgevoerd.
Bij het verwijderen, wissen of elimineren van informatie worden vervolgens de acties voor verwijderen (remove) en verwijderd (removed) uitgevoerd.
remove: Vóór het uitvoeren van het databasecommando.removed: Nadat het databasecommando is uitgevoerd.
Dus wanneer we iets in een formulier wijzigen, met bewerkingen om informatie aan te maken, te wijzigen of te verwijderen, worden er verschillende databasebewerkingen uitgevoerd, en worden de bijbehorende acties (actions) uitgevoerd.
Heeft u al gehoord van database-triggers? De database-trigger wordt uitgevoerd telkens wanneer er gegevenswijzigingen zijn, dus de acties (actions) lijken op triggers, maar dan op codeniveau.
Bedenk dat elk type bewerking een afzonderlijk databasecommando uitvoert, namelijk:
- Aanmaken:
insert into ... - Wijzigen:
update ... - Verwijderen:
delete from ...
Wanneer we een van deze databasecommando's uitvoeren via _db.execute(...), wordt er geen actie uitgevoerd,
omdat het commando rechtstreeks op de database wordt uitgevoerd zonder dat het mogelijk is om met de acties te
interacteren.
In de code van de acties kunt u elk hulpmiddel van het polyglotte low-code framework gebruiken.
De acties worden uitgevoerd wanneer er een gegevensmanipulatie plaatsvindt in de backofficeformulieren die automatisch door Netuno worden gegenereerd, of wanneer we in de code databasebewerkingen uitvoeren met:
_db.insert(...),_db.form(...).insert(),_db.insertIfNotExits(...),_db.insertMany(...), enzovoort._db.update(...),_db.form(...).update(),_db.updateMany(...), enzovoort._db.delete(...),_db.form(...).delete(),_db.deleteMany(...), enzovoort.
Met andere woorden, wanneer we in de code een mechanisme van het polyglotte low-code framework gebruiken om gegevensmanipulaties uit te voeren, wordt de betreffende actie uitgevoerd als die bestaat.
Als er echter een commando rechtstreeks op de database wordt uitgevoerd, is het niet mogelijk om de actie uit te voeren.
Het wordt aanbevolen om te vermijden commando's rechtstreeks op de database uit te voeren, om de mechanismen voor gegevensmanipulatie die Netuno biedt niet te omzeilen.
In de code van de acties kunt u elke bewerking uitvoeren die verband houdt met gegevensmanipulatie.
Gegevensitem (Data Item)
Het gegevensitem (_dataItem) is een hulpmiddel van het polyglotte low-code framework dat alle gegevens bevat
die worden aangemaakt, gewijzigd of verwijderd.
Via het hulpmiddel _dataItem kunnen we toegang krijgen tot alle informatie en details van het lopende
bewerkingsproces controleren.
Zie de documentatie van het hulpmiddel DataItem voor meer details over wat het hulpmiddel
_dataItemondersteunt.
Let op: Het hulpmiddel _dataItem is alleen beschikbaar in de code van de acties (actions).
Opslaan, Bewaren, Wijzigen of Nieuw Aanmaken (Save)
Om een actie te maken die wordt uitgevoerd wanneer een nieuw record wordt aangemaakt, of wanneer iets wordt
gewijzigd, heet het script van deze actie save, wat betekent dat er iets in de database wordt opgeslagen,
bijvoorbeeld:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
mijn_app/server/actions/mijn_formulier/save.js
mijn_app/server/actions/mijn_formulier/save.ts
mijn_app/server/actions/mijn_formulier/save.py
mijn_app/server/actions/mijn_formulier/save.rb
mijn_app/server/actions/mijn_formulier/save.kts
mijn_app/server/actions/mijn_formulier/save.groovy
Deze actie wordt uitgevoerd vóór het uitvoeren van het databasecommando.
Wanneer u code wilt uitvoeren nadat de gegevens in de database zijn opgeslagen, gebruiken we de actie saved,
bijvoorbeeld:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
mijn_app/server/actions/mijn_formulier/saved.js
mijn_app/server/actions/mijn_formulier/saved.ts
mijn_app/server/actions/mijn_formulier/saved.py
mijn_app/server/actions/mijn_formulier/saved.rb
mijn_app/server/actions/mijn_formulier/saved.kts
mijn_app/server/actions/mijn_formulier/saved.groovy
Deze actie wordt uitgevoerd nadat het databasecommando is uitgevoerd.
Met andere woorden, binnen de applicatie maken we in de map server/actions een submap met de naam van het
formulier (tabel), en daarin plaatsen we een script met de naam save of saved, dat de betreffende code bevat
die vóór of na het databasecommando moet worden uitgevoerd.
Om te onderscheiden of het om het aanmaken van gegevens gaat, kunnen we met een if het resultaat van de methode
_dataItem.isInsert() controleren, bijvoorbeeld:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
if (_dataItem.isInsert()) {
// Er worden nieuwe gegevens aangemaakt...
}
if (_dataItem.isInsert()) {
// Er worden nieuwe gegevens aangemaakt...
}
if _dataItem.isInsert():
# Er worden nieuwe gegevens aangemaakt...
if _dataItem.isInsert()
# Er worden nieuwe gegevens aangemaakt...
end
if (_dataItem.isInsert()) {
// Er worden nieuwe gegevens aangemaakt...
}
if (_dataItem.isInsert()) {
// Er worden nieuwe gegevens aangemaakt...
}
Om te onderscheiden of het om een wijziging van gegevens gaat, kunnen we met een if het resultaat van de methode
_dataItem.isUpdate() controleren, bijvoorbeeld:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
if (_dataItem.isUpdate()) {
// De gegevens worden gewijzigd...
}
if (_dataItem.isUpdate()) {
// De gegevens worden gewijzigd...
}
if _dataItem.isUpdate():
# De gegevens worden gewijzigd...
if _dataItem.isUpdate()
# De gegevens worden gewijzigd...
end
if (_dataItem.isUpdate()) {
// De gegevens worden gewijzigd...
}
if (_dataItem.isUpdate()) {
// De gegevens worden gewijzigd...
}
Het ID ophalen
Om het ID (identificatie) op te halen van het item dat wordt gewijzigd:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
_dataItem.getId()
_dataItem.getId()
_dataItem.getId()
_dataItem.getId()
_dataItem.getId()
_dataItem.getId()
Controleren wat er is gewijzigd
Om te controleren wat er wordt gewijzigd, kunnen we getOldRecord() gebruiken om de oude gegevens in de
database op te halen en deze te vergelijken met de nieuwe gegevens van getRecord(), bijvoorbeeld:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
if (_dataItem.getOldRecord().getString("email") != _dataItem.getRecord().getString("email")) {
// Let op: Het e-mailadres wordt gewijzigd!
}
if (_dataItem.getOldRecord().getString("email") != _dataItem.getRecord().getString("email")) {
// Let op: Het e-mailadres wordt gewijzigd!
}
if _dataItem.getOldRecord().getString("email") != _dataItem.getRecord().getString("email"):
# Let op: Het e-mailadres wordt gewijzigd!
if _dataItem.getOldRecord().getString("email") != _dataItem.getRecord().getString("email")
# Let op: Het e-mailadres wordt gewijzigd!
end
if (_dataItem.getOldRecord().getString("email") != _dataItem.getRecord().getString("email")) {
// Let op: Het e-mailadres wordt gewijzigd!
}
if (_dataItem.getOldRecord().getString("email") != _dataItem.getRecord().getString("email")) {
// Let op: Het e-mailadres wordt gewijzigd!
}
Een fout genereren
Het is mogelijk om een fout te genereren om te voorkomen dat de bewerking doorgaat. De fout wordt normaal
gegenereerd vóór het uitvoeren van het databasecommando, dus in de actie save, bijvoorbeeld:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
_dataItem.setStatusWithError()
.setErrorTitle("E-mailadres")
.setErrorMessage("Het is niet toegestaan om het e-mailadres te wijzigen.")
_dataItem.setStatusWithError()
.setErrorTitle("E-mailadres")
.setErrorMessage("Het is niet toegestaan om het e-mailadres te wijzigen.")
_dataItem.setStatusWithError()
.setErrorTitle("E-mailadres")
.setErrorMessage("Het is niet toegestaan om het e-mailadres te wijzigen.")
_dataItem.setStatusWithError()
.setErrorTitle("E-mailadres")
.setErrorMessage("Het is niet toegestaan om het e-mailadres te wijzigen.")
_dataItem.setStatusWithError()
.setErrorTitle("E-mailadres")
.setErrorMessage("Het is niet toegestaan om het e-mailadres te wijzigen.")
_dataItem.setStatusWithError()
.setErrorTitle("E-mailadres")
.setErrorMessage("Het is niet toegestaan om het e-mailadres te wijzigen.")
Controleren of er een fout is opgetreden
Het is mogelijk om te controleren of er een fout is opgetreden bij het uitvoeren van het databasecommando. Er kunnen verschillende fouten optreden, bijvoorbeeld:
- Het is niet toegestaan om dubbele e-mailadressen te hebben.
- Een verplicht veld is niet correct ingevuld.
- En vele andere.
Fouten worden normaal gecontroleerd na het uitvoeren van het databasecommando, dus in de actie saved,
bijvoorbeeld:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
if (_dataItem.isError()) {
// Er is een fout opgetreden en de gegevens konden niet worden opgeslagen...
}
if (_dataItem.isError()) {
// Er is een fout opgetreden en de gegevens konden niet worden opgeslagen...
}
if _dataItem.isError():
# Er is een fout opgetreden en de gegevens konden niet worden opgeslagen...
if _dataItem.isError()
# Er is een fout opgetreden en de gegevens konden niet worden opgeslagen...
end
if (_dataItem.isError()) {
// Er is een fout opgetreden en de gegevens konden niet worden opgeslagen...
}
if (_dataItem.isError()) {
// Er is een fout opgetreden en de gegevens konden niet worden opgeslagen...
}
Setup
Het is mogelijk om een specifieke action te hebben die alleen wordt uitgevoerd wanneer er gegevenswijzigingen
plaatsvinden tijdens de configuratie (setup) van de database.
Bijvoorbeeld:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
mijn_app/server/actions/mijn_formulier/setup_save.jsmijn_app/server/actions/mijn_formulier/setup_saved.js
mijn_app/server/actions/mijn_formulier/setup_save.tsmijn_app/server/actions/mijn_formulier/setup_saved.ts
mijn_app/server/actions/mijn_formulier/setup_save.pymijn_app/server/actions/mijn_formulier/setup_saved.py
mijn_app/server/actions/mijn_formulier/setup_save.rbmijn_app/server/actions/mijn_formulier/setup_saved.rb
mijn_app/server/actions/mijn_formulier/setup_save.ktsmijn_app/server/actions/mijn_formulier/setup_saved.kts
mijn_app/server/actions/mijn_formulier/setup_save.groovymijn_app/server/actions/mijn_formulier/setup_saved.groovy
Verwijderen, Wissen of Elimineren (Remove)
Om een actie te maken die wordt uitgevoerd wanneer een record wordt verwijderd, heet het script van deze actie
remove, wat betekent dat er iets uit de database wordt verwijderd, bijvoorbeeld:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
mijn_app/server/actions/mijn_formulier/setup_remove.js
mijn_app/server/actions/mijn_formulier/setup_remove.ts
mijn_app/server/actions/mijn_formulier/setup_remove.py
mijn_app/server/actions/mijn_formulier/setup_remove.rb
mijn_app/server/actions/mijn_formulier/setup_remove.kts
mijn_app/server/actions/mijn_formulier/setup_remove.groovy
Deze actie wordt uitgevoerd vóór het uitvoeren van het databasecommando.
Wanneer u code wilt uitvoeren nadat de gegevens uit de database zijn verwijderd, gebruiken we de actie
removed, bijvoorbeeld:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
mijn_app/server/actions/mijn_formulier/setup_removed.js
mijn_app/server/actions/mijn_formulier/setup_removed.ts
mijn_app/server/actions/mijn_formulier/setup_removed.py
mijn_app/server/actions/mijn_formulier/setup_removed.rb
mijn_app/server/actions/mijn_formulier/setup_removed.kts
mijn_app/server/actions/mijn_formulier/setup_removed.groovy
Deze actie wordt uitgevoerd nadat het databasecommando is uitgevoerd.
Met andere woorden, binnen de applicatie maken we in de map server/actions een submap met de naam van het
formulier (tabel), en daarin plaatsen we een script met de naam remove of removed, dat de betreffende code
bevat die vóór of na het databasecommando moet worden uitgevoerd.
Conflict met relaties
Afhankelijk van het gegevensmodel kan het gebeuren dat een record dat wordt gebruikt in een relatie met een andere tabel, die ook een ander formulier is, niet kan worden verwijderd om te voorkomen dat de relatie verbroken wordt.
Dan kunnen we in de actie removed, die na het databasecommando voor verwijderen wordt uitgevoerd, als volgt
controleren of deze fout optreedt:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
if (_dataItem.isStatusAsError() && _dataItem.isStatusAsRelations()) {
_log.error(
"Kan niet verwijderen omdat er een relatie is met tabel "
+ _dataItem.getRelationTable() + " met ID " + _dataItem.getRelationItem().getInt("id")
)
}
if (_dataItem.isStatusAsError() && _dataItem.isStatusAsRelations()) {
_log.error(
"Kan niet verwijderen omdat er een relatie is met tabel "
+ _dataItem.getRelationTable() + " met ID " + _dataItem.getRelationItem().getInt("id")
)
}
if _dataItem.isStatusAsError() and _dataItem.isStatusAsRelations():
_log.error(
"Kan niet verwijderen omdat er een relatie is met tabel "
+ _dataItem.getRelationTable() + " met ID " + _dataItem.getRelationItem().getInt("id")
)
if (_dataItem.isStatusAsError() && _dataItem.isStatusAsRelations())
_log.error(
"Kan niet verwijderen omdat er een relatie is met tabel "
+ _dataItem.getRelationTable() + " met ID " + _dataItem.getRelationItem().getInt("id")
)
end
if (_dataItem.isStatusAsError() && _dataItem.isStatusAsRelations()) {
_log.error(
"Kan niet verwijderen omdat er een relatie is met tabel "
+ _dataItem.getRelationTable() + " met ID " + _dataItem.getRelationItem().getInt("id")
)
}
if (_dataItem.isStatusAsError() && _dataItem.isStatusAsRelations()) {
_log.error(
"Kan niet verwijderen omdat er een relatie is met tabel "
+ _dataItem.getRelationTable() + " met ID " + _dataItem.getRelationItem().getInt("id")
)
}
Als alternatief kunnen we in de actie remove, die wordt uitgevoerd vóór het databasecommando dat het record
verwijdert, de "opschoning" implementeren van andere records die een relatie kunnen hebben, bijvoorbeeld:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
_db.form("ander_formulier")
.where(
_db.where("mijn_formulier_id")
.equals(_dataItem.getRecord().getInt("id"))
)
.delete()
_db.form("ander_formulier")
.where(
_db.where("mijn_formulier_id")
.equals(_dataItem.getRecord().getInt("id"))
)
.delete()
_db.form("ander_formulier")
.where(
_db.where("mijn_formulier_id")
.equals(_dataItem.getRecord().getInt("id"))
)
.delete()
_db.form("ander_formulier")
.where(
_db.where("mijn_formulier_id")
.equals(_dataItem.getRecord().getInt("id"))
)
.delete()
_db.form("ander_formulier")
.where(
_db.where("mijn_formulier_id")
.equals(_dataItem.getRecord().getInt("id"))
)
.delete()
_db.form("ander_formulier")
.where(
_db.where("mijn_formulier_id")
.equals(_dataItem.getRecord().getInt("id"))
)
.delete()
Setup
Het is mogelijk om een specifieke action te hebben die alleen wordt uitgevoerd wanneer gegevens worden
verwijderd tijdens de configuratie (setup) van de database.
Bijvoorbeeld:
- JavaScript
- TypeScript
- Python
- Ruby
- Kotlin
- Groovy
mijn_app/server/actions/mijn_formulier/setup_remove.jsmijn_app/server/actions/mijn_formulier/setup_removed.js
mijn_app/server/actions/mijn_formulier/setup_remove.tsmijn_app/server/actions/mijn_formulier/setup_removed.ts
mijn_app/server/actions/mijn_formulier/setup_remove.pymijn_app/server/actions/mijn_formulier/setup_removed.py
mijn_app/server/actions/mijn_formulier/setup_remove.rbmijn_app/server/actions/mijn_formulier/setup_removed.rb
mijn_app/server/actions/mijn_formulier/setup_remove.ktsmijn_app/server/actions/mijn_formulier/setup_removed.kts
mijn_app/server/actions/mijn_formulier/setup_remove.groovymijn_app/server/actions/mijn_formulier/setup_removed.groovy
Conclusie
Met de acties (actions) kunnen we specifieke bewerkingen centraliseren die verband houden met de manipulatie
van bepaalde gegevens.
Het maakt het mogelijk om uit te rusten met code die nuttige mechanismen biedt om integriteit te waarborgen, taken te vergemakkelijken, integraties uit te voeren, parallelle bewerkingen uit te voeren, extra controles uit te voeren, en nog veel meer.
Het coderen van acties is eenvoudig en uiterst nuttig; het is mogelijk om uit te breiden met het gebruik van elk ander hulpmiddel van het polyglotte low-code framework.
In de code van de acties kunt u elk hulpmiddel van het polyglotte low-code framework gebruiken.
Overweeg het gebruik van acties en u zult snel kunnen vaststellen hoe het verkregen gemak veel nuttige strategieën kan versterken.