Apex会议状态问题

时间:2016-07-28 21:10:18

标签: oracle oracle-apex

背景资料:

我有一个表格页面和报告页面,链接到两个表格:

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,并按照其说明按“更新”。如果他们保存了他们所做的更改,这很有效。但是,如果他们意识到他们错误地做了这个,他们会按“取消”而不是。如果他们然后从报告返回此条目(或者如果他们进入完全不同的条目),则表单字段显示最后输入的内容而不是数据库条目中的内容。这仅在我保存条目或注销并重新开始时重置。

关于可能导致这种情况的任何想法?

3 个答案:

答案 0 :(得分:1)

您是否已通过本机界面设置级联LOV?你想在RC2的查询刷新时参考RC1的状态吗?在RC2的定义中,将P67_RC1添加到“要提交的页面项目” 这将使顶点获取RC1的当前值,并在RC1更改后刷新RC2的值时在RC2的查询中使用此值。

答案 1 :(得分:0)

<强>解释

如果Page Item的源值(可以采用输入字段,下拉菜单等形式)来自SQL查询,则其输出仅用作显示值(如果有)没有该页面项的会话状态值。

因此,如果用户在会话期间输入或修改该值,则APEX现在引用来自用户的值,而不再是数据库值(来自SQl查询)。

示例

所以,让我们说你有一个名为Annual Salary的页面项,这是一个数字字段。我们假设它的值是基于登录用户的数据库查询:

  1. 在页面加载时,SQL Query运行,并输出与该用户在数据库中的年薪相对应的数字。让我们说它是200,000;
  2. 现在,用户点击数字字段并输入500,000,而不保存输入。
  3. 如果您重新加载页面,Annual Salary中的值仍将显示为500,000。
  4. 那么为什么会这样呢?因为当用户键入500,000时,该数字成为该页面项的会话状态值。即使您向后移动或重新加载页面,用户仍处于同一会话(因此术语&#34;会话状态值&#34;),因此500,000 - 即会话 - 状态值 - 将持续存在。

    现在,当您注销应用程序时会话结束。这就是为什么如果您注销并重新登录,Annual Salary将显示数据库值(200,000),因为页面项的会话值已恢复为NULL。< / p>

    解决问题

    要在APEX中克服此默认设置,请执行以下操作:

    1. 从页面的开发者视图中,单击页面项;

    2. 然后在其属性中,转到Source;

    3. 在&#34;使用&#34;下面有一个下拉列表,其中有两个选项:

      • &#34;仅当会话状态中的当前值为空时&#34 ;;和
      • &#34;始终,替换会话状态中的任何现有值&#34;
    4. 正如我所提到的,APEX默认为第一个选项。

    5. 将此值更改为第二个。

    6. 点击&#34;保存&#34;

    7. 执行此操作后,APEX现在将始终引用源(即SQL查询中的数据库值)作为显示值。它也可以是NULL,0,某些默认文本或您设置页面项源的任何其他值。值的唯一变化是用户是否保存了更改(因为在该场景中,数据库值已更改)。

      希望这有帮助!

答案 2 :(得分:0)

我找到了解决这个问题的方法。我在报告页面上添加了一个进程,以便在加载时清除表单页面的缓存:

APEX_UTIL.CLEAR_PAGE_CACHE (67);

现在,每次选择条目时,条目的数据都会正确显示。