Ok to shed some light on change detection:
Note: change detection applies only to the serverside CRUD operations. It does not apply to detecting changes locally in the browser.
The Form Plugin
When using a FOEX Form and you perform a database action of Update/Delete within your button definition the form will automatically check the MD5 value of for the current record and match it against the database record contents which means that it checks database columns only. If it detects a difference it will raise an exception to advise that the data has been updated by someone else between the time that your record was loaded and when you issued the request.
Otherwise if the MD5 check is Ok then the operation will continue and after the DML is issued the database record will be requeried after the DML operation to pick up any changes that may occur from triggers etc. It will also sync back changes for externally managed multiselects, file browse items, and grid/tree combo's which set other values. It will recompute all item read only conditions, conditions and authorizations which may change when data values have changed. It will also recompute the conditions/authorizations on buttons.
If you choose to use your own procedure in the "Processing Procedure Override" to manage the form data yourself then your only responsibility is performing the DML which includes the checking of which items have changed and need updating. The "p_crud_request" parameter will have the OLD and NEW records for you to check the values. The plugin will still perform the MD5 check and will re-query the database record after the DML and perform the other operations.
For the inbuilt processing we do not perform change detection on items that are not mapped to a database column since there is no data source to save them to, they are simply derived columns. However we do provide the values of these items in the FX_CRUD_REQUEST_T request object type that is passed into your pre/override/post procedures so you have the option of using them and checking them yourself.
If you do not use the processing procedure override parameter and perform your own PLSQL in an Dynamic Action "Execute PLSQL Code" block then this is completely outside of the plugin and none of the above will occur. It will be your responsibility to do everything. We strongly recommend that you DO NOT use this method of external PLSQL in a dynamic action, and use the "Processing Procedure Override" plugin attribute in combination with the provided Form Dynamic Actions to perform the saving of data. This is the supported way.
The Grid Plugin
The "Change Detection" attribute controls change detection within the grid.
MD5 Check - for DELETE/UPDATE statements an MD5 checksum will be generated per row and used to check for data collisions. i.e. if changes have been made by another user after the data was fetched from the server. An exception will be raised if it detects a difference and the DML operation (for all grid rows in the transaction) will be rolled back i.e. not saved. There is some additional performance overhead when using this value as each record needs to be re-queried before update/delete.
Before DML - for UPDATE statements each will be queried before the UPDATE operation and compared for change detection, only those values that differ will be updated. If you do not use this setting then all values will be updated.
After DML - for CREATE/UPDATE statements each row will be queried after the UPDATE operation and compared for change detection by any additional changes incurred by triggers. These changes will be sent back to the client (browser) and the associated grid row updated to reflect the new values.
None - the row will not be checked, all columns will be updated and the row will not be requeried to check for changes by triggers.
If you do not use the inbuilt processing of the Grid plugin but provide your own processing procedure override within the plugin settings you will need to manually perform the (optional) step of checking which data values are different and only updating the columns that have changed. The plugin will still perform the MD5 Check and After DML step for you if you have defined these within the change detection setting.