2013-02-15 109 views
2

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

我做了一些测试,我的发现似乎是这些全局变量是请求范围的(即:同一会话中的其他请求和不同会话中的其他请求都获得了它们自己的全局变量副本) d想确认我的发现是否正确。我们设置的

详情:

客户端的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等不受处理当前请求范围内的其他请求的影响。

非常感谢!

回答

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(); 

RESPONSE:

X01: 

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

+0

谢谢,这绝对证实了它。 – lostdorje 2013-02-18 12:52:42