Trace:
Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
jvx:server:storage:insteadof [2018/02/07 08:15] admin |
jvx:server:storage:insteadof [2020/06/29 13:12] (current) cduncan Edited for English grammar (capitalization, punctuation, correct verb conjugation) |
||
---|---|---|---|
Line 2: | Line 2: | ||
~~Title: InsteadOf Trigger~~ | ~~Title: InsteadOf Trigger~~ | ||
- | If you're an Oracle user, you'll know that it's possible to update views with insteadOf triggers. An insteadOf trigger will do the CRUD operation(s) and it will be called with new/changed values like any other trigger. It's like a procedure which does CRUD programmatically. It's a simple concept but not available in all databases. | + | If you're an Oracle user, you'll know that it's possible to update views with insteadOf triggers. An insteadOf trigger will do the CRUD operation(s), and it will be called with new/changed values like any other trigger. It's like a procedure that does CRUD programatically. It's a simple concept but not available in all databases. |
- | With JVx' DBStorage it's super easy to use insteadOf triggers in your business logic independent of the database. | + | With JVx' DBStorage, it's super easy to use insteadOf triggers in your business logic independent of the database. |
- | We have a short example for you. Imagine you have an Activity table with columns: name, cost, valid_from, valid_to, ... The table also has a foreign key to a contract. One contract has one or more activities: | + | We have a short example for you. Imagine you have an activity table with columns: name, cost, valid_from, valid_to, etc. The table also has a foreign key to a contract. One contract has one or more activities: |
{{:jvx:server:storage:contract_activity_io.png?nolink|}} | {{:jvx:server:storage:contract_activity_io.png?nolink|}} | ||
- | Our GUI shows a list of all available activities and it should be possible to change the contract. If the contract is available, this would be a straight forward implementation because JVx supports everything out-of-the-box. But we want to insert a new contract if it isn't available. Without additional popups, ... | + | Our GUI shows a list of all available activities and it should be possible to change the contract. If the contract is available, this would be a straightforward implementation because JVx supports everything out of the box. However, we want to insert a new contract if it isn't available without additional popups. |
{{:jvx:server:storage:insteadofgui.png?nolink|}} | {{:jvx:server:storage:insteadofgui.png?nolink|}} | ||
Line 16: | Line 16: | ||
We'll use an insteadOf trigger to solve this problem. | We'll use an insteadOf trigger to solve this problem. | ||
- | In above screenshot, the "New contract" wasn't available in the Contract table, but we did the insert during inserting a new Activity. Here's the whole code: | + | In the above screenshot, the "New contract" wasn't available in the contract table, but we did the insert during inserting a new activity. Here's the whole code: |
<file java TestInsteadOf.java> | <file java TestInsteadOf.java> | ||
Line 230: | Line 230: | ||
</file> | </file> | ||
- | The first method allows inserting new contracts, because the cell editor won't check for existing contracts. The second method implements the insteadOf trigger. | + | The first method allows inserting new contracts because the cell editor won't check for existing contracts. The second method implements the insteadOf trigger. |
The trigger itself checks if the contract ID is empty and creates a new contract in this case. The activity will be inserted with the new contract id. The eventInsteadOfUpdate is missing in our example, but it works the same way. | The trigger itself checks if the contract ID is empty and creates a new contract in this case. The activity will be inserted with the new contract id. The eventInsteadOfUpdate is missing in our example, but it works the same way. |