1

私はAPEX3.2を使用しており、テーブルfにフィールドf1とf2を挿入するために使用されるフォームで、f1に入力されたデータとテーブルtのクエリに基づいて自動的に入力され、表示されるテキストアイテムをいくつか用意したいと思います。 。つまり、f1にempnoと入力すると、f2ボックスに移動すると、ユーザーはemplast_nameとfirst_nameが自動的に表示されます。このようにして、入力したempnoが正しいことを確認し、f2に他のデータを入力して、フォームを送信できます。

この範囲に到達する方法について何か提案はありますか?

私はいくつかのjavascriptを使用する必要があると思います。

どうもありがとう。ガブリエル

4

3 に答える 3

1

私はあなたがすでにjavascriptの道を進んでいるのを見ることができます...私は過去に同様の問題でAPEX3.2を使用しましたが、プラットフォームからこの種の動的機能を引き出すのに十分なjavascriptを知りませんでした。別の方法を試したい場合は、ユーザーインターフェースを調整して目的の機能を提供できますが、ユーザーがこのスタイルのアプローチに適応できるかどうかをユーザーに確認する必要があります。既存の3.2機能と追加のスクリプトなし:

要件:

フィールド1とフィールド2のフィールド入力に基づいて、既存のテーブルのデータを頂点ページに自動入力し、ユーザーがフィールド1とフィールド2に入力されたデータが正しいかどうかを確認できるようにします。検索結果のデータを、新しいプロセスまたはフォームに入力するためのパラメーターとして使用します。

提案されたデザイン:

ページ1:空白のページから始めて、field1、field2、および「送信」ボタンの3つの項目を追加します。ページ1フォームの値からページ2設定項目P2_field1およびP2_field2にリダイレクトするページプロセスを追加します(送信後、送信ボタン項目を条件とします)。

ページ2:レポートページ。従業員テーブルに対して部分的または完全な文字列検索で検索する既存の従業員のテーブルを検索するクエリを設定します。APEX 3.2は、部分的および大文字と小文字を区別するマッチングの問題を回避するために、次の規則を使用していました。

SELECT field1, field2, field3, field4, ...
FROM table1
WHERE instr(upper(field1), upper(:P2_field1), 1, 1) > 0
  AND instr(upper(field2), upper(:P2_field2), 1, 1) > 0

検索作業用のレポート出力「テーブル」を作成すると、「Smith」や「John」などの一般名など、同じ検索クエリに対して複数の回答がある場合に役立ちます。

レポート出力に列を追加するか、名前列(field1またはfield2)をリンク列にして、従業員テーブルから照会されたデータをフィードする3ページに移動します。

レポートエディタの列の値にプロパティを追加します。「ページ3」にリダイレクトし、P3_key =#KEY#を設定します。ここで、ページ3は最終的なターゲットフォームまたはプロセスであり、「key」は現在のテーブルのインデックスまたは主キーです。から検索...または、ルックアップテーブルからすでにクエリされている必要なn個の値をフィードして、ページ2レポートに入力できます。

重要な持ち帰りは、Apexの古いバージョンの制限と、高度なWebスクリプト言語の知識による制限の可能性を理解することだと思います。Apexバージョンの基本と少しのSQLだけに精通している場合でも、要件は引き続き達成可能です。

注:ルックアップテーブルが巨大な場合(数十万レコード)、SQL検索クエリを処理するためのテーブルの最適化についてDBAに相談する必要がある場合があります。WHERE基準にUPPER関数とINSTR関数を追加することは、最適化の追加の支援なしに大規模なデータセットをクエリするための実際に最も効率的な方法ではありません。

于 2012-12-03T21:26:05.090 に答える
0

私は3.2ウィズではありません、私はそれを使ったことがありません。動的なアクションやページのオンデマンドプロセスポイントがないことを私は知っているので、それを念頭に置いて作業しました。

アプリケーションプロセス:'get_emp_details'
(3.2で選択できる/選択する必要のある処理ポイントがわかりません。オンデマンドで選択できる場合は、それを選択してください。)コード:

DECLARE
   lEmp emp%rowtype;
BEGIN
   SELECT *
     INTO lEmp
     FROM emp
    WHERE empno = :P7_EMPNO;

   htp.p('{"result":"ok", "emp":{"ename":"'||lEmp.ename||'","job":"'||lEmp.job||'"}}');
EXCEPTION 
WHEN no_data_found THEN
   htp.p('{"result":"nok", "emp":{}}');
END;

あなたのページで(私の場合はページ7を使用しましたが、ページ番号をページ番号に変更してください!)これをhtmlヘッダーセクションに配置します(または、そこにjavascriptセクションがある場合は、スクリプトタグなしでそこにjavascriptコードを配置します) :
編集:行に追加console.log。開発者ツール(F12)が開かれていない場合、これらはIEでjavascriptエラーを生成することに注意してください!

<script type="text/javascript">
$(document).ready(function(){
   console.log('document is ready');
   $("#P7_EMPNO").change(function(){
      var oDBGet = new htmldb_Get(null, $('pFlowId').val(), "APPLICATION_PROCESS=get_emp_details", '0');
      oDBGet.add('P7_EMPNO', $("#P7_EMPNO").val());
      var oResult = oDBGet.get();
      var lReturn = $.parseJSON(oResult);
      if(lReturn.result=='ok'){
         var lEmp = lReturn.emp;
         $("#P7_ENAME").val(lEmp.ename);
      } else {
         alert('ename could not be found for this empno!');
      };
   });
});
</script>

これにより、EMPNOが変更されたときにajaxコールバックが実行され、従業員のenameが変更されます。使用できる一時的なアプリケーションアイテムがないため(apex_application.g_x##)、必要なページアイテムをセッション状態に送信しています。この場合P7_EMPNO、p_arg_names配列に追加され、その値はp_arg_values配列の対応する位置にあります。これが必要なのは、P7_EMPNOのセッション状態がアプリケーションプロセスで使用されるためです。

Firebugのコンソールタブを検査する場合:
ajax呼び出しの値を投稿する:ajax呼び出し
AJAX呼び出しのPOST値 の応答値: AJAXコールRESPONSE値

于 2012-12-03T08:40:46.423 に答える
0

トム、これが私のシステムで動作するように変更されたコードです。

-オンデマンドアプリケーションプロセスget_emp_details:

DECLARE
   lEmp emp%rowtype;
BEGIN
   SELECT *
     INTO lEmp
     FROM emp
    WHERE badge = :P2_BADGE;

   htp.p('{"result":"ok", "emp":{"lastname":"'||lEmp.last_name||'","firstname":"'||lEmp.first_name||'"}}');
EXCEPTION 
WHEN no_data_found THEN
   htp.p('{"result":"nok", "emp":{}}');
END;

-ページヘッダーのJavascript:

<script type="text/javascript">
$(document).ready(function(){
   $("#P2_BADGE").change(function(){
      $.post('wwv_flow.show', 
             {"p_request"      : "APPLICATION_PROCESS=get_emp_details",
              "p_flow_id"      : $v('pFlowId'),
              "p_flow_step_id" : '0',
              "p_instance"     : $v('pInstance'),
              "p_arg_names"    : ['P2_BADGE'],
              "p_arg_values"   : [$('#P2_BADGE').val()]},
              function(data){
                 if(data){
                    var lReturn = $.parseJSON(data);
                    if(lReturn.result=='ok'){
                       var lEmp = lReturn.emp;
                       $("#P2_LAST_NAME").val(lEmp.last_name);
                    } else {
                       alert('ename could not be found for this empno!');
                    };
                 };
              }
      );        
   });
});
</script>

P2_BADGEにバッジ番号を入力すると、何かが足りない可能性があり、P2_LAST_NAMEにlast_nameが表示されません。

ありがとう、ガブリエレ

トム、これが関数(データ)ステップのfirebugのウォッチライトウィンドウにあるものです:

this
  function()

arguments
[
"wwv_flow.show"
, Object { p_request=
"APPLICATION_PROCESS=get_emp_details"
,  p_flow_id=
"120"
,  p_flow_step_id=
"0"
,  more...}, function()]

0

"wwv_flow.show"

1
  Object { p_request=
"APPLICATION_PROCESS=get_emp_details"
, p_flow_id=
"120"
, p_flow_step_id=
"0"
, more...}

p_arg_names
[
"P2_BADGE"
]

p_arg_values
[
"155752"
]

p_flow_id
"120"

p_flow_step_id
"0"

p_instance
"2189517750670012"

p_request
"APPLICATION_PROCESS=get_emp_details"
2
  function()
e
"wwv_flow.show"
r
Object { p_request=
"APPLICATION_PROCESS=get_emp_details"
, p_flow_id=
"120"
, p_flow_step_id=
"0"
, more...}
p_arg_names
[
"P2_BADGE"
]
p_arg_values
[
"155752"
]

p_flow_id
"120"
p_flow_step_id
"0"
p_instance
"2189517750670012"
p_request
"APPLICATION_PROCESS=get_emp_details"
s
undefined
i
function()
toString
  function()

Closure Scope
  Closure Scope { toString=function()}
Closure Scope
  Closure Scope { toString=function()}
Window
  Window f?p=120:2:2189517750670012::NO:::

私のfirebug1.10.6コンソールから:

ドキュメントの準備ができました

f?p = 12 ... :: NO :: :( 29行目)

empnoが変更されました

f?p = 12 ... :: NO :: :( 31行目)

empno値で投稿を実行する:undefined

f?p = 12 ... :: NO :: :( 32行目)

役職

400不正なリクエスト48mswwv_fl
.... min.js(2行目)HeadersPostResponseHTMLCookies

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<HTML><HEAD>
<TITLE>400 Bad Request</TITLE>
</HEAD><BODY><H1>Bad Request</H1>
The HTTP client sent a request that this server could not understand.</BODY></HTML>

-そして投稿タブ:

Parametersapplication/x-www-form-urlencoded
p_arg_names[]   P2_BADGE
p_arg_values[]  155751
p_flow_id   120
p_flow_step_id  0
p_instance  4466366911674565
p_request   APPLICATION_PROCESS=get_emp_details
Source
p_request=APPLICATION_PROCESS%3Dget_emp_details&p_flow_id=120&p_flow_step_id=0&p_instance=4466366911674565&p_arg_names%5B%5D=P2_BADGE&p_arg_values%5B%5D=155751
于 2012-12-03T14:08:08.893 に答える