Thanks to all the suggestions.
I think my issue might relate to PFC framework platform, which required the SQLCA maintain living status all the time (which is pretty fine for client/server accessing).
Take below sales order screen for example, when clicking on 1 line, system will count the timing started from search result(previous DB access), and if in-between there is no database access, higher chance to hit DB transaction timeout.
Go for per transaction ProcedureInTransaction = 0/1 would not be applicable which will involve revamping of the whole application functionalities.
Right now I have set transaction timeout to be 3600 per Logan suggested and seems much better already.
At the same time, I am working on the timer approach to trigger DB access if hitting idle timeout - the way per Chris suggested - I was doing so by setting/logging the session time - currently the application is lunching both from Client/Server(with RDS publishing) and Cloud deployment, Client/Server session information has to be handled by using a dedicated session table.
Regards, JX