apex_application全局变量的范围

时间:2013-02-15 06:26:41

标签: oracle-apex

apex全局变量APEX_APPLICATION.G_X01...G_X10的范围是什么?它们真的是“全局的”,会话范围的还是请求范围的?

我做了一些测试,我的调查结果似乎是这些全局变量是请求范围的(即:同一会话中的其他请求和不同会话中的其他请求获取自己的全局变量副本),但我会想证实我的发现是正确的。

我们的设置详情:

客户端JS代码如下所示:

data = {'first_name':$('#P25_FIRST_NAME').val()};
data = JSON.stringify(data);

$.ajax({
   type: "POST",
   url: "wwv_flow.show",
   data: {
     p_flow_id:$('#pFlowId').val(), 
     p_flow_step_id:$('#pFlowStepId').val(), 
     p_instance:$('#pInstance').val(), 
     x01:data,
     p_request:"APPLICATION_PROCESS=AJAX_TEST"
   },
   dataType: "json",
   success: function(data) {
     alert('success:\n' + data);
   },
   error: function(data) {
     alert('error:\n' + data);
   },
});

服务器端PL / SQL代码如下所示:

CREATE OR REPLACE PROCEDURE
AJAX_TEST IS

JSON_REQUEST JSON;
JSON_RESPONSE JSON;

BEGIN

  JSON_REQUEST := JSON(APEX_APPLICATION.G_X01);
  JSON_RESPONSE := JSON();

  JSON_RESPONSE.PUT('first_name', JSON_REQUEST.GET('first_name').GET_STRING());
  JSON_RESPONSE.PUT('last_name', 'smith');

  HTP.P(JSON_RESPONSE.to_char());

END AJAX_TEST;

我想确保变量APEX_APPLICATION.G_X01X02等...不会受到处理当前请求范围内的其他请求的影响。

非常感谢!

1 个答案:

答案 0 :(得分:1)

每个请求(或页面提交)。 快速测试可以证实这一点:
按需流程:“虚假”

htp.p("X01: '||apex_application.g_x01);

然后从控制台运行:

var ajaxRequest = new htmldb_Get(null, $v("pFlowId"), "APPLICATION_PROCESS=bogus", $v("pFlowStepId"));
ajaxRequest.addParam("x01","xxxx");
var ajaxReturn = ajaxRequest.get();

响应:

X01: xxxx

然后运行:

var ajaxRequest = new htmldb_Get(null, $v("pFlowId"), "APPLICATION_PROCESS=bogus", $v("pFlowStepId"));
var ajaxReturn = ajaxRequest.get();

响应:

X01: 

当然,在页面提交期间,f ## arrays和x ##项目将保留提交的值,直到处理结束。
此外,另一个用户(会话)不会影响值。您可能会说在每次提交/请求后都会清除这些项目的缓存。