2

顶点全局变量的范围是什么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_X01,X02等...不会受到处理当前请求范围内的其他请求的影响。

非常感谢!

4

1 回答 1

1

每个请求(或页面提交)。快速测试可以证实这一点:
On Demand Process:"bogus"

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## 数组和 x## 项目将保存提交的值,直到处理结束。
此外,另一个用户(会话)不会影响这些值。您可能会说这些项目的缓存在每次提交/请求后被清除。

于 2013-02-15T10:01:01.557 回答