如何在动态操作更改另一个项目时刷新 select 列表?

How to refresh a select list when another item is changed by a dynamic action?

我正在使用 Apex 4.2 和 Oracle XE 11G。

我有一个相当复杂的页面,但已经创建了一个简化版本并将其导入 apex.oracle.com,希望有人能提出问题。

请注意,由于我删除了部分,设计可能看起来有点奇怪,但我认为这应该是可能的。

该设计使用移动主题,因为它将在桌面或移动设备上执行,我希望只需要构建一个。在桌面上使用时,移动主题似乎存在一些问题,因此以后可能仍需要构建另一个 GUI,但目前,我只是在桌面和移动设备上使用移动主题。

我在页面上有两个元素,一个实例类型和一个版本。这些最终将被隐藏,但它们是用于查看发生了什么的文本字段。 我还有一个针对每个实例类型的区域,其中包含一个带有该实例版本的下拉列表。

如果实例定义为主版本,其他版本可以使用有一定的限制。这些关系在名为 VERSION_LINKS 的 table 中定义。 另一个 table 包含客户端可以访问的版本。

我创建了一个动态操作,这样对主版本的更改将导致更新 P1_PRIMARY_VERSION。该字段在实际应用中用于实例组合的条件显示。 此更新工作正常。

问题是,该字段在第二个 SELECT LIST (P1_RESTRICTED) 的 SQL 中使用,因此应该更新以反映来自 VERSION_LINKS 但是,当 P1_VERSION select 列表更改时,该字段只是空白。

我已经创建了三种方法来解决这个问题,apex.oracle.com 上的应用程序反映了所有这三种方法。

None 导致刷新列表 P1_RESTRICTED

P1_RESTRICTED的SQL是这样的

select vc.version name, vc.version id
   from version_client vc, version_links vl
  where vl.name=:P1_PRIMARY_INSTANCE
    and vl.version=:P1_PRIMARY_VERSION
    and vl.certified_version= vc.version
    and vl.certified_with=vc.name
    and vc.client_id='DMO'
    and vc.name='TWO'
  order by vc.version desc;

和运行这与下面的值给出了正确的答案

select vc.version name, vc.version id
   from version_client vc, version_links vl
  where vl.name='ONE'
    and vl.version='1.0'
    and vl.certified_version= vc.version
    and vl.certified_with=vc.name
    and vc.client_id='DMO'
    and vc.name='TWO'
  order by vc.version desc;

显示 1.1.6 而

select vc.version name, vc.version id
   from version_client vc, version_links vl
  where vl.name='ONE'
    and vl.version='1.1'
    and vl.certified_version= vc.version
    and vl.certified_with=vc.name
    and vc.client_id='DMO'
    and vc.name='TWO'
  order by vc.version desc;

显示 1.1.7

我猜这与会话状态有关,即即使屏幕版本显示 P1_PRIMARY_VERSION 发生变化,但不知何故它正在丢失导致第二个 select 列表空白的值.

任何有关如何解决此问题的建议都表示赞赏。提前致谢 特雷弗

工作区:TESTA
用户名:测试员
密码:tester
应用程序 URL:https://apex.oracle.com/pls/apex/f?p=35690:LOGIN_JQM_SMARTPHONE::::::
开发者 URL:https://apex.oracle.com/pls/apex

这与使用 ajax 从另一个顶点列表刷新一个顶点列表不是同一个问题。在那种情况下,用户正在触发更改并且工作正常。

我试图让用户在列表中进行更改,然后使用 ajax 更新文本字段,此文本字段上的另一个 ajax 事件应该触发第二个列表的刷新。这样做的原因与在页面上显示多个区域之一有关,但使用相同的单个文本字段刷新所有区域,因此仅从一个列表直接刷新另一个列表并不能解决这种情况下的问题。 apex.oracle.com 上的示例可能不清楚,因为我已尝试将其减少到最低限度以显示问题。 TIA.

您需要将 P1_PRIMARY_INSTANCEP1_PRIMARY_VERSION 添加到级联 lov 选项下要提交的项目列表中。这些会驱动您的列表,并且只会在页面本身上进行更改。仅提交 P1_PRIMARY_INSTANCE 将意味着执行查询时 P1_PRIMARY_VERSION 仍然是 NULL,从而返回一个空列表。
我更改了您的第 1 页示例以反映这一点。