Oracle apex 如何获取当前页面中所有页面级APEX_项的列表?

Oracle apex 如何获取当前页面中所有页面级APEX_项的列表?,oracle-apex,Oracle Apex,我有一个相当大的Apex应用程序。现在需要存储此应用程序的详细使用日志。APEX_WORKSPACE_ACTIVITY_LOG上的信息还不够,因为我需要知道每个用户在每个页面上运行什么查询 我的第一个想法是获取实际的Oracle查询日志(V$SQL等),但它们不提供有关用户的信息(就数据库而言,所有查询都是由APEX_PUBLIC_user进行的)。我在V$ACTIVE_SESSION_HISTORY上有一些关于用户的信息,但这是不完整的,因为它以1秒的间隔存储活动会话及其SQL查询的示例,所以

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

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

现在我开始实现应用程序级日志记录。实现这一点的“正确”方法是遍历应用程序中的所有页面,并创建一个日志过程来存储每个页面的相关信息(用户名和一些页面项)。但我想知道是否有更简单的方法可以做到这一点

如果我理解正确,“应用程序进程”由应用程序中的每个页面运行。因此,如果我可以获得一个应用程序进程来迭代页面项列表,我就可以将它们全部存储在数据库中,并完成处理。差不多

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;

您确实知道所有的项目名称,对吗?如果不知道,您应该花时间将所有页面项目名称存储在一个表中,然后使用它循环会话状态。您本质上想为每个页面视图捕获页面上所有项目的会话状态吗?我真的不明白这如何与捕获正在运行的每个查询有关。所有SQL都存储在应用程序或包中,对吗?为什么需要再次捕获这些内容?@Tom Yes,我相信“为每个页面视图记录页面上所有项目的会话状态”会起作用。有没有一个简单的方法可以做到这一点?@Typo,谢谢,我知道这将如何解决这个问题,但我仍然在寻找一些更快实现的解决方案。我有太多的页面,时间太少。嗯…比工作快的是付钱给别人帮你做。。。