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.