背景资料:
我有一个表格页面和报告页面,链接到两个表格:
REASON_CODES
ID|NAME|PARENT_ID
这是问题条目的可用原因代码列表。 PARENT_ID字段允许用户在代码之间分配父/子关系。
ENTRIES
ID|RC1|RC2|DESCRIPTION|DATE
此表包含问题条目的所有信息(这是表单和报告的主表)。 “RC”列分别指代父和子原因代码ID。
在Apex表单上,RC字段都是具有自动完成功能的文本字段。由于这些字段没有本机级联能力,我们不得不在LOV定义中强制建立这样的关系:
RC1:
SELECT ID
FROM REASON_CODES
WHERE PARENT_ID = 0
RC2:
SELECT ID
FROM REASON_CODES
WHERE PARENT_ID = :p67_RC1
在获取RC2 LOV时存在一个问题,因为它取决于RC1中的值。为了解决这个问题,RC1旁边添加了一个“更新”按钮,用于提交页面而不在其表格上记录条目。单击“更新”后,RC2的LOV会正确显示。
问题:
用户从报告页面中选择现有条目以编辑和更改RC1,并按照其说明按“更新”。如果他们保存了他们所做的更改,这很有效。但是,如果他们意识到他们错误地做了这个,他们会按“取消”而不是。如果他们然后从报告返回此条目(或者如果他们进入完全不同的条目),则表单字段显示最后输入的内容而不是数据库条目中的内容。这仅在我保存条目或注销并重新开始时重置。
关于可能导致这种情况的任何想法?
答案 0 :(得分:1)
您是否已通过本机界面设置级联LOV?你想在RC2的查询刷新时参考RC1的状态吗?在RC2的定义中,将P67_RC1
添加到“要提交的页面项目”
这将使顶点获取RC1的当前值,并在RC1更改后刷新RC2的值时在RC2的查询中使用此值。
答案 1 :(得分:0)
<强>解释强>
如果Page Item
的源值(可以采用输入字段,下拉菜单等形式)来自SQL查询,则其输出仅用作显示值(如果有)没有该页面项的会话状态值。
因此,如果用户在会话期间输入或修改该值,则APEX现在引用来自用户的值,而不再是数据库值(来自SQl查询)。
示例强>
所以,让我们说你有一个名为Annual Salary
的页面项,这是一个数字字段。我们假设它的值是基于登录用户的数据库查询:
Annual Salary
中的值仍将显示为500,000。那么为什么会这样呢?因为当用户键入500,000时,该数字成为该页面项的会话状态值。即使您向后移动或重新加载页面,用户仍处于同一会话(因此术语&#34;会话状态值&#34;),因此500,000 - 即会话 - 状态值 - 将持续存在。
现在,当您注销应用程序时会话结束。这就是为什么如果您注销并重新登录,Annual Salary
将显示数据库值(200,000),因为页面项的会话值已恢复为NULL
。< / p>
解决问题
要在APEX中克服此默认设置,请执行以下操作:
从页面的开发者视图中,单击页面项;
然后在其属性中,转到Source
;
在&#34;使用&#34;下面有一个下拉列表,其中有两个选项:
正如我所提到的,APEX默认为第一个选项。
将此值更改为第二个。
点击&#34;保存&#34;
执行此操作后,APEX现在将始终引用源(即SQL查询中的数据库值)作为显示值。它也可以是NULL,0,某些默认文本或您设置页面项源的任何其他值。值的唯一变化是用户是否保存了更改(因为在该场景中,数据库值已更改)。
希望这有帮助!
答案 2 :(得分:0)
我找到了解决这个问题的方法。我在报告页面上添加了一个进程,以便在加载时清除表单页面的缓存:
APEX_UTIL.CLEAR_PAGE_CACHE (67);
现在,每次选择条目时,条目的数据都会正确显示。