2013-02-15 2 views
2

Какова область глобальных переменных вершины APEX_APPLICATION.G_X01...G_X10? Являются ли они действительно «глобальными», охваченными сеансом или областями охвата запросов?область действия глобальных переменных apex_application

Я сделал несколько тестов, и мои результаты, похоже, состоят в том, что эти глобальные переменные являются областями с запросами (то есть: другие запросы в одном сеансе и другие запросы в разных сеансах получают свои собственные копии глобальных переменных) Я хотел бы подтвердить, что мои результаты верны.

Подробная информация о нашей установке:

клиентский код 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

По запросу (или подчинение страницы). Быстрый тест может подтвердить это:
On Demand процесса: "фиктивный"

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 ## и массивы х ## элементы будут держать поданную значение до конца обработки.
Кроме того, другой пользователь (сеанс) не будет влиять на значения. Вероятно, вы можете сказать, что кеш этого элемента очищается после каждого запроса/запроса.

+0

Спасибо, это определенно подтверждает это. – lostdorje