2

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_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 に答える