Oracle apex APEX 3.2(Oracle):在项目发生更改时,动态填充页面上其他项目的值

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岁的天才,我没有和它一起工作过。我知道没有动态操

我在APEX 3.2上,在表f中插入字段f1和f2的表单中,我希望有两个文本项,它们将根据f1中键入的数据和表t上的查询自动填充和显示。换句话说,在f1中键入empno,移动到f2框,用户应该会自动看到显示的emp last_name和first_name。通过这种方式,她可以验证键入的empno是否正确,在f2中键入其他数据并提交表单

有没有关于如何达到这个范围的建议

我想我应该使用一些javascript

非常感谢。
加布里埃尔

我不是一个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功能,而不需要额外的纸条