Using table.super() in hooks
When using the table.super()
function within hooks, developers should be aware that recursive calls may occur if the standard logic subsequently updates the same table.
To prevent this, it is recommended to declare the mode
argument as optional and retrieve it dynamically using the get.long.arg()
function. This pattern ensures compatibility with both DAL_NEW
and DAL_UPDATE
modes, while avoiding recursion or fatal errors during standard background updates.
Example:
function extern long after.save.object([long mode])
{
mode = 0
if get.argc() >= 1 then
mode = get.long.arg(1)
endif
table.super()
on case mode
case DAL_NEW:
break
case DAL_UPDATE:
with.old.object.values.do(get.old.values)
if tcmcs004.cdf_city <> old.city then
ret = txcomdll0001.log.city.change(old.city, tcmcs004.cdf_city)
if ret < 0 then
dal.set.error.message("@Error during logging city change")
return(DALHOOKERROR)
endif
endif
endcase
return(0)
}
This approach helps maintain stable behavior when the standard Data Access Layer logic re-triggers table updates internally.