Oracle apex APEX 3.2(Oracle):在项目发生更改时,动态填充页面上其他项目的值
我在APEX 3.2上,在表f中插入字段f1和f2的表单中,我希望有两个文本项,它们将根据f1中键入的数据和表t上的查询自动填充和显示。换句话说,在f1中键入empno,移动到f2框,用户应该会自动看到显示的emp last_name和first_name。通过这种方式,她可以验证键入的empno是否正确,在f2中键入其他数据并提交表单 有没有关于如何达到这个范围的建议 我想我应该使用一些javascript 非常感谢。Oracle apex APEX 3.2(Oracle):在项目发生更改时,动态填充页面上其他项目的值,oracle-apex,Oracle Apex,我在APEX 3.2上,在表f中插入字段f1和f2的表单中,我希望有两个文本项,它们将根据f1中键入的数据和表t上的查询自动填充和显示。换句话说,在f1中键入empno,移动到f2框,用户应该会自动看到显示的emp last_name和first_name。通过这种方式,她可以验证键入的empno是否正确,在f2中键入其他数据并提交表单 有没有关于如何达到这个范围的建议 我想我应该使用一些javascript 非常感谢。 加布里埃尔我不是一个3.2岁的天才,我没有和它一起工作过。我知道没有动态操
加布里埃尔我不是一个3.2岁的天才,我没有和它一起工作过。我知道没有动态操作,也没有按需页面处理点,所以我一直在考虑这一点 申请流程:“获取emp详细信息”
(我不知道您可以/需要在3.2中选择哪个处理点。如果您可以按需选择,请选择。) 代码: 在您的页面上(在我的例子中,我使用了第7页,将页码更改为您的页码!)将其放在html标题部分(或者如果您有javascript部分,则将javascript代码放在那里而不带脚本标记):
编辑:添加到
控制台.log
行中。请注意,当开发人员工具(F12)未打开时,这些将在IE中产生javascript错误强>
<script type="text/javascript">
$(document).ready(function(){
console.log('document is ready');
$("#P7_EMPNO").change(function(){
var oDBGet = new htmldb_Get(null, $('pFlowId').val(), "APPLICATION_PROCESS=get_emp_details", '0');
oDBGet.add('P7_EMPNO', $("#P7_EMPNO").val());
var oResult = oDBGet.get();
var lReturn = $.parseJSON(oResult);
if(lReturn.result=='ok'){
var lEmp = lReturn.emp;
$("#P7_ENAME").val(lEmp.ename);
} else {
alert('ename could not be found for this empno!');
};
});
});
</script>
$(文档).ready(函数(){
console.log(“文档已准备就绪”);
$(“#P7_EMPNO”).更改(函数(){
var oDBGet=new-htmldb_-Get(null,$('pFlowId').val(),“APPLICATION_-PROCESS=Get_-emp_-details”,“0”);
oDBGet.add('P7_EMPNO',$('P7_EMPNO').val();
var oResult=oDBGet.get();
var lReturn=$.parseJSON(oResult);
如果(lReturn.result=='ok'){
var lEmp=lReturn.emp;
$(“#P7_ENAME”).val(lEmp.ENAME);
}否则{
警报('无法找到此empno的ename!');
};
});
});
这将在EMPNO更改时执行ajax回调,并更改员工的ename。由于没有可以使用的临时应用程序项(apex_application.g_x##
),我正在将所需的页面项提交到会话状态。在这种情况下,P7_EMPNO
被添加到p_arg_names数组中,其值位于p_arg_values数组中的相应位置。这是必要的,因为在应用程序过程中使用了P7_EMPNO的会话状态
在Firebug中检查控制台选项卡时:ajax调用的Post值:
ajax调用的响应值:
我不是3.2天才,我没有用过它。我知道没有动态操作,也没有按需页面处理点,所以我一直在考虑这一点 申请流程:“获取emp详细信息”
(我不知道您可以/需要在3.2中选择哪个处理点。如果您可以按需选择,请选择。) 代码: 在您的页面上(在我的例子中,我使用了第7页,将页码更改为您的页码!)将其放在html标题部分(或者如果您有javascript部分,则将javascript代码放在那里而不带脚本标记):
编辑:添加到
控制台.log
行中。请注意,当开发人员工具(F12)未打开时,这些将在IE中产生javascript错误强>
<script type="text/javascript">
$(document).ready(function(){
console.log('document is ready');
$("#P7_EMPNO").change(function(){
var oDBGet = new htmldb_Get(null, $('pFlowId').val(), "APPLICATION_PROCESS=get_emp_details", '0');
oDBGet.add('P7_EMPNO', $("#P7_EMPNO").val());
var oResult = oDBGet.get();
var lReturn = $.parseJSON(oResult);
if(lReturn.result=='ok'){
var lEmp = lReturn.emp;
$("#P7_ENAME").val(lEmp.ename);
} else {
alert('ename could not be found for this empno!');
};
});
});
</script>
$(文档).ready(函数(){
console.log(“文档已准备就绪”);
$(“#P7_EMPNO”).更改(函数(){
var oDBGet=new-htmldb_-Get(null,$('pFlowId').val(),“APPLICATION_-PROCESS=Get_-emp_-details”,“0”);
oDBGet.add('P7_EMPNO',$('P7_EMPNO').val();
var oResult=oDBGet.get();
var lReturn=$.parseJSON(oResult);
如果(lReturn.result=='ok'){
var lEmp=lReturn.emp;
$(“#P7_ENAME”).val(lEmp.ENAME);
}否则{
警报('无法找到此empno的ename!');
};
});
});
这将在EMPNO更改时执行ajax回调,并更改员工的ename。由于没有可以使用的临时应用程序项(apex_application.g_x##
),我正在将所需的页面项提交到会话状态。在这种情况下,P7_EMPNO
被添加到p_arg_names数组中,其值位于p_arg_values数组中的相应位置。这是必要的,因为在应用程序过程中使用了P7_EMPNO的会话状态
在Firebug中检查控制台选项卡时:ajax调用的Post值:
ajax调用的响应值: 汤姆, 以下是修改后的代码,可在我的系统中使用: --按需申请流程获取emp详细信息:
DECLARE
lEmp emp%rowtype;
BEGIN
SELECT *
INTO lEmp
FROM emp
WHERE badge = :P2_BADGE;
htp.p('{"result":"ok", "emp":{"lastname":"'||lEmp.last_name||'","firstname":"'||lEmp.first_name||'"}}');
EXCEPTION
WHEN no_data_found THEN
htp.p('{"result":"nok", "emp":{}}');
END;
--页面标题中的Javascript:
<script type="text/javascript">
$(document).ready(function(){
$("#P2_BADGE").change(function(){
$.post('wwv_flow.show',
{"p_request" : "APPLICATION_PROCESS=get_emp_details",
"p_flow_id" : $v('pFlowId'),
"p_flow_step_id" : '0',
"p_instance" : $v('pInstance'),
"p_arg_names" : ['P2_BADGE'],
"p_arg_values" : [$('#P2_BADGE').val()]},
function(data){
if(data){
var lReturn = $.parseJSON(data);
if(lReturn.result=='ok'){
var lEmp = lReturn.emp;
$("#P2_LAST_NAME").val(lEmp.last_name);
} else {
alert('ename could not be found for this empno!');
};
};
}
);
});
});
</script>
从我的firebug 1.10.6控制台: 文件准备好了 f?p=12…::否::(第29行) 恩普诺已经改变了 f?p=12…::否::(第31行) 使用empno值执行post:未定义 f?p=12…::否::(第32行) 职位 400错误请求 48ms
wwv_fl….min.js(第2行) 校长负责人
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>400 Bad Request</TITLE>
</HEAD><BODY><H1>Bad Request</H1>
The HTTP client sent a request that this server could not understand.</BODY></HTML>
汤姆,
以下是修改后的代码,可在我的系统中使用:
--按需申请流程获取emp详细信息:
DECLARE
lEmp emp%rowtype;
BEGIN
SELECT *
INTO lEmp
FROM emp
WHERE badge = :P2_BADGE;
htp.p('{"result":"ok", "emp":{"lastname":"'||lEmp.last_name||'","firstname":"'||lEmp.first_name||'"}}');
EXCEPTION
WHEN no_data_found THEN
htp.p('{"result":"nok", "emp":{}}');
END;
--页面标题中的Javascript:
<script type="text/javascript">
$(document).ready(function(){
$("#P2_BADGE").change(function(){
$.post('wwv_flow.show',
{"p_request" : "APPLICATION_PROCESS=get_emp_details",
"p_flow_id" : $v('pFlowId'),
"p_flow_step_id" : '0',
"p_instance" : $v('pInstance'),
"p_arg_names" : ['P2_BADGE'],
"p_arg_values" : [$('#P2_BADGE').val()]},
function(data){
if(data){
var lReturn = $.parseJSON(data);
if(lReturn.result=='ok'){
var lEmp = lReturn.emp;
$("#P2_LAST_NAME").val(lEmp.last_name);
} else {
alert('ename could not be found for this empno!');
};
};
}
);
});
});
</script>
从我的firebug 1.10.6控制台: 文件准备好了 f?p=12…::否::(第29行) 恩普诺已经改变了 f?p=12…::否::(第31行) 使用empno值执行post:未定义 f?p=12…::否::(第32行) 职位 400错误请求 48ms
wwv_fl….min.js(第2行) 校长负责人
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>400 Bad Request</TITLE>
</HEAD><BODY><H1>Bad Request</H1>
The HTTP client sent a request that this server could not understand.</BODY></HTML>
我可以看出你可能已经走上了javascript的道路。。。我曾经在APEX 3.2上处理过一个类似的问题,但我不了解足够的javascript,无法从平台中获得这种动态功能。如果你想尝试另一种方法,你可以调整你的用户界面来提供你想要的功能,但是你必须与用户核实他们是否能够适应这种方式,你应该能够使用现有的3.2功能,而不需要额外的纸条