如何获取当前页面所有页面级别APEX_ITEMS的列表?

How to get a list of all page-level APEX_ITEMS in the current page?

我有一个非常大的 Apex 应用程序。需要存储此应用程序的详细使用日志。 APEX_WORKSPACE_ACTIVITY_LOG 上的信息还不够,因为我需要知道每个页面上每个用户 运行 的查询内容。

我的第一个想法是获取实际的 Oracle 查询日志(V$SQL 等),但它们没有提供有关用户的信息(就数据库而言,所有查询都是由APEX_PUBLIC_USER)。我在 V$ACTIVE_SESSION_HISTORY 上有一些关于用户的信息,但那是不完整的,因为它以 1 秒的间隔存储活动会话及其 SQL 查询的样本,所以我错过了太多查询。

所以现在我开始实施应用程序级别的日志记录。 "right" 实现此目的的方法是遍历我的应用程序中的所有页面并创建一个日志记录过程来存储每个页面的相关信息(用户名和一些页面项目)。但我想知道是否有更简单的方法可以解决问题。

如果我理解正确,"application processes" 是应用程序中每个页面的 运行。因此,如果我可以让一个应用程序进程遍历页面项目列表,我就可以将它们全部存储在数据库中并完成它。像

for item in page_items {
   log(username, item_name, item, date)
}

这能做到吗?或者也许我需要的信息已经在数据库中,但我没有看到它?

您可以查询元数据表以获取特定页面的所有项目,然后使用它来获取它们的值。

select item_name, v(item_name) item_value
from apex_application_page_items
where application_id = :APP_ID
and page_id = :APP_PAGE_ID;

这将捕获页面上的所有项目。不要忘记,如果您使用第 0 页(全局页面)上的项目,您可能也想查询该页面。

此外,您可能还想捕获应用程序级别的项目。

select item_name, v(item_name) item_value
from apex_application_items
where application_id = :APP_ID;