EMP表的示例:
select
apex_item.checkbox2(p_idx => 1, p_value => empno, p_attributes => 'class="check_select"') empselection,
apex_item.text(2, ename) empname,
empno,
ename
from emp
给复选框项目添加一个类。这使得它可以很容易地被jQuery选中。
创建一个新的动态行为,例如"复选框单击"。
事件: 点击
选择类型: jQuery 选择器
jQuery 选择器: .check_select
(这是我们在sql中添加到复选框中的类)
条件: JavaScript 表达式
值: $(this.triggeringElement).prop('checked')
该条件是对复选框元素进行检查,以查看它是否被选中或取消选中。prop()测试元素的一个属性,并在此情况下返回true或false。当为true时,将触发一个true动作,否则会触发一个false动作。
True 动作:
动作: 执行JavaScript代码
代码: $(this.triggeringElement).closest("tr").find("td[headers='EMPNAME'] input").val('test');
False 动作:
动作: 执行JavaScript代码
代码: $(this.triggeringElement).closest("tr").find("td[headers='EMPNAME'] input").val('');
两者都没有选择类型,因为我们需要针对与点击复选框所在行相同的项目。在apex选择可能性中没有真正的方法来做到这一点。通过标题定位列,并不要忘记针对td内部的输入框(或:textarea
!)
创建完动态行为后,返回编辑。在高级下更改事件范围为实时
。这对于考虑分页是必要的。如果您不更改此项,将无法将任何操作绑定到分页后的元素。
然后编辑true和false操作,并取消选中页面加载时触发
。
现在考虑到日期:
由于您希望sysdate作为默认值,因此我建议在您的页面上添加一个隐藏字段,例如P9_DEF_DATE。作为源,使用一个PLSQL表达式,并使用SYSDATE
。
然后,您可以使用该字段的值作为默认值,例如:
$(this.triggeringElement).closest("tr").find("td[headers='EMPNAME'] input").val($v('P9_DEF_DATE'));
最后提示:通过 val('')
和单引号将值清空!在我的经验中不能使用双引号。
一些关于动态操作的文档链接:
一个 ajax 进程的例子:
假设我想更新所选员工的 COMM 列。
在报表页面上创建一个新进程,给它一个足够简单的名称,不要留空格。例如,我用“update_emp”来运行。
update emp
set comm = apex_application.g_x02
where empno = apex_application.g_x01;
在动态操作中添加另一个真实操作,类型为“执行JavaScript代码”。
$.post('wwv_flow.show',
{"p_request" : 'APPLICATION_PROCESS=update_emp',
"p_flow_id" : $v('pFlowId'),
"p_flow_step_id" : $v('pFlowStepId'),
"p_instance" : $v('pInstance'),
"x01" : $(this.triggeringElement).val(),
"x02" : '88',
},
function(data){
}
);
这段JavaScript将发布到页面,目标是“update_emp”进程。 “x01”和“x02”是一种“临时”变量。它们存在的原因是为了不必一直提交页面项目以便将值发布到会话状态中。它们是apex_application包的一部分。
在这里,我使用“x01”存储empno(复选框的值,因此是“this.triggeringElement”),并使用“x02”传递commision的值。我在此处硬编码了它,但是您当然可以获得任何值。
“$.post”是一个jQuery方法,用于发布到页面。
当您学习动态操作或搜索论坛时,您可能会遇到另一种发布到页面的方法,即“htmldb_Get”,这是内置在apex javascript文件中的。我不使用它,因为它不是真正的Ajax(异步),而是Sjax(同步),并且在我的看法中不够透明。我相信其中有一些“GetAsync”部分,这很好,但是您几乎永远不会在任何示例中看到它被使用。现在,“get.get()”可能看起来很简单,您可以用3行代码实现相同的结果,而不是我的js片段,请考虑将实现真正的ajax调用作为一种良好的实践。有时您可能会等待过程结束太长时间,并意识到您应用程序中的所有“htmldb_Get”调用并不像您想象的那样有趣...
这个报告设置也更加复杂。使用页面项目,您可以采取另一种路线:而不是执行javascript块,您可以执行plsql代码块。在那里,您可以指定要提交到会话状态的项目(因此它们可以在plsql块中使用)和要由此plsql块设置其值的项目。(sql块在服务器端运行,这意味着引用项目需要在会话状态中具有其值)。我建议您也玩弄一下。
也就是说,拥有像firebug这样的浏览器检查工具。它允许您检查页面上进行的ajax调用,并提供了一个很好的查看此内容的方法。