【问题标题】:How to refresh a select list when another item is changed by a dynamic action?当另一个项目被动态操作更改时,如何刷新选择列表?
【发布时间】:2015-08-18 01:35:36
【问题描述】:

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

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

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

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

我在页面上有两个元素,一个实例类型和一个版本。这些最终将被隐藏,但是是文本字段,可以查看正在发生的事情。 我还为每个实例类型设置了一个区域,其中包含一个包含该实例版本的下拉列表。

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

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

问题是,该字段在第二个 SELECT LIST (P1_RESTRICTED) 的 SQL 中使用,因此应该更新以反映来自 VERSION_LINKS 的有效版本,但相反,当 @ 987654327@选择列表已更改。

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

  • a) 对P1_PRIMARY_VERSION 的更改使用刷新动态操作来刷新P1_RESTRICTED
  • b) 在P1_RESTRICTED 上使用级联LOV,父项设置为P1_PRIMARY_VERSION
  • c) 对P1_PRIMARY_VERSION 的更改使用设置值动态操作将P1_RESTRICTED 的值设置为它已有的SQL。

这些都不会导致刷新列表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 发生变化,但它以某种方式丢失了导致第二个选择列表空白的值。

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

工作区:TESTA
用户名:tester
密码:tester
申请网址:https://apex.oracle.com/pls/apex/f?p=35690:LOGIN_JQM_SMARTPHONE::::::
开发者网址:https://apex.oracle.com/pls/apex

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

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

【问题讨论】:

    标签: ajax plsql oracle-apex


    【解决方案1】:

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

    【讨论】:

    • @TrevorNorth 您确实不能将 apex 5 应用程序导入 4.2 环境。在 apex 5 环境中导入后,应用程序被“升级”(实际上,它被插入到更改的元数据表中,并且导出仅适用于当前状态)。是的,我已将要在 P1_RESTRICTED 上提交的项目设置为这 2 个项目。真正有帮助的是查看开发工具中的网络流量,看看会发生什么或是否发生错误。使用移动界面的一个缺点是确实不容易访问开发人员工具栏。只是为了练习,您可能也想在桌面 ui 中尝试。
    • @TrevorNorth 如果您想以任何一种方式进行移动开发,升级到 apex 5 可能会对您有很大帮助。 jqm 版本有一个显着的飞跃,希望这意味着与 apex 4.2 的两年前的 1.2.1 版本相比,这意味着更少的错误。顺便说一句,您解决了您的问题吗?
    • @TrevorNorth 如果您有准备在 4.2 环境中导入的示例,您可以将其发送给我或将其作为静态文件上传到 apex.oracle.com 上的示例应用程序中。我可以访问 4.2 环境,我不介意快速浏览一下。
    • @TrevorNorth 我明白 - 不是在问这个:) 我从导出存储库下载了导入的应用程序并将其导入到我的 4.2.6 实例中。事实上,这行不通。特别是,primary_version 中触发刷新的更改事件会导致 javascript 错误。仔细检查发现这是 jquery-mobile-1.2.1 某处的错误。我无法完全追踪到这一点,但它确实看起来像一个错误。试试这个:通过在 url 中将其设置为 yes 来启用调试,这将加载完整的源代码。然后在控制台运行:$("#P1_RESTRICTED").trigger('apexrefresh')。检查堆栈。
    • 我不确定这里是否有解决方案。刷新在选择列表上崩溃。您可能需要寻找解决方法,尝试添加更新的 jquery 移动版本,或者找到一些手动解决方法。不过丑死了奇怪的是它仍然存在,看起来很常见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多