更改 APEX 表单中的字段后更新图表
Update chart after changing a field in an APEX form
如何在更改用作图表 pl/sql 语句中的参数的文本 box/select list/etc 中的值后让 APEX 刷新图表(图形) ?
我希望它看起来尽可能专业,并尽量减少必须刷新的页面部分(即 "ajax-like",这是 2018 年的标准)。
请参阅下面的方法 B 以获得最佳解决方案。
方法 A
最简单的选择(不太专业)是将每个感兴趣的文本 box/select list/etc 修改为 submit the page
当文本 box/select list/etc 变化。例如,对于 select 列表,转到其 settings
->page action on selection
并将设置更改为 submit page
。
这种方法有两个主要缺点:
大部分页面将刷新,这对您的用户来说是不和谐的,
如果您使用的是插件,或者您使用的 item
类型不支持该方法,那么您就不走运了。
方法 B
下面是一个更复杂的解决方案,可以产生更专业的结果。这个解决方案涉及动态操作,我可能不会在这里完全解释。但是,这些信息应该足以让用户理解。
让我们假设您有两件事:(1) select list
其值用作 (2) chart
的 sql 源语句中的参数。
要让 chart
在您每次通过 select list
做出新选择时更新,您需要:
为感兴趣的 select list
创建动态操作。您可以通过单击 select 列表,转到动态操作选项卡(闪电)来执行此操作;右键单击该项目;点击select动态动作;给它一个名字并将 event
设置为 change
并将 selection type
设置为 item
并将 item
设置为 select list
的名称你在看
为 executes pl/sql code
的动态动作创建一个 true action
(您可以通过修改 1 中默认创建的 show
动作来完成此操作。) .将 pl/sql 代码设置为 null;
。然后在 items to submit
下,指定感兴趣的 select list
的名称。
创建第二个 true action
refreshes
region
包含 chart
.
您需要确保分配给 2. 的序列比分配给 3. =]
不适用的方法 C
在 Apex 5.something 中,他们添加了一个名为 Cascading List of Values 的功能。此功能允许您指定一个项目的值取决于另一个项目。例如,如果您有一个 select list
允许用户选择一个部门,然后您有第二个 select list
允许您从所选部门中选择一名员工(大概从涉及第一个 select list
中选择的值的查询),您可以告诉 APEX 在更新第一个 select list
时刷新第二个
您可以通过编辑第二个 select list
来完成此操作。在其设置下转到 list of values
->cascading LOV parent item(s)
。添加第一个 select list
作为 "reverse" 依赖项(又名 "parent")。这将确保任何时候第一个 select list
更新,第二个 select list
也会更新。
无论好坏,图表都没有 cascading LOV parent item(s)
设置。因此,此解决方案不适用于此问题。
- 对随事件 "change"
更改的文本 box/select list/etc 创建动态操作
创建一个真实的动作并selectpl/sql并写入
开始
无效的;
结束;
要提交的页面项目 select 您的项目
- 在第一个和 select 刷新之后创建第二个真实动作。然后 select 区域作为受影响的元素和 select 您的图表。请记住,选项 'Fire on initialization' 必须设置为 NO
如何在更改用作图表 pl/sql 语句中的参数的文本 box/select list/etc 中的值后让 APEX 刷新图表(图形) ?
我希望它看起来尽可能专业,并尽量减少必须刷新的页面部分(即 "ajax-like",这是 2018 年的标准)。
请参阅下面的方法 B 以获得最佳解决方案。
方法 A
最简单的选择(不太专业)是将每个感兴趣的文本 box/select list/etc 修改为 submit the page
当文本 box/select list/etc 变化。例如,对于 select 列表,转到其 settings
->page action on selection
并将设置更改为 submit page
。
这种方法有两个主要缺点:
大部分页面将刷新,这对您的用户来说是不和谐的,
如果您使用的是插件,或者您使用的
item
类型不支持该方法,那么您就不走运了。
方法 B
下面是一个更复杂的解决方案,可以产生更专业的结果。这个解决方案涉及动态操作,我可能不会在这里完全解释。但是,这些信息应该足以让用户理解。
让我们假设您有两件事:(1) select list
其值用作 (2) chart
的 sql 源语句中的参数。
要让 chart
在您每次通过 select list
做出新选择时更新,您需要:
为感兴趣的
select list
创建动态操作。您可以通过单击 select 列表,转到动态操作选项卡(闪电)来执行此操作;右键单击该项目;点击select动态动作;给它一个名字并将event
设置为change
并将selection type
设置为item
并将item
设置为select list
的名称你在看为
executes pl/sql code
的动态动作创建一个true action
(您可以通过修改 1 中默认创建的show
动作来完成此操作。) .将 pl/sql 代码设置为null;
。然后在items to submit
下,指定感兴趣的select list
的名称。创建第二个
true action
refreshes
region
包含chart
.
您需要确保分配给 2. 的序列比分配给 3. =]
不适用的方法 C
在 Apex 5.something 中,他们添加了一个名为 Cascading List of Values 的功能。此功能允许您指定一个项目的值取决于另一个项目。例如,如果您有一个 select list
允许用户选择一个部门,然后您有第二个 select list
允许您从所选部门中选择一名员工(大概从涉及第一个 select list
中选择的值的查询),您可以告诉 APEX 在更新第一个 select list
时刷新第二个
您可以通过编辑第二个 select list
来完成此操作。在其设置下转到 list of values
->cascading LOV parent item(s)
。添加第一个 select list
作为 "reverse" 依赖项(又名 "parent")。这将确保任何时候第一个 select list
更新,第二个 select list
也会更新。
无论好坏,图表都没有 cascading LOV parent item(s)
设置。因此,此解决方案不适用于此问题。
- 对随事件 "change" 更改的文本 box/select list/etc 创建动态操作
创建一个真实的动作并selectpl/sql并写入
开始 无效的; 结束;
要提交的页面项目 select 您的项目
- 在第一个和 select 刷新之后创建第二个真实动作。然后 select 区域作为受影响的元素和 select 您的图表。请记住,选项 'Fire on initialization' 必须设置为 NO