3

現在、ポップアップLOVを使用してサプライヤーのリストを表示していますが、フィールドをテキストフィールドのオートコンプリートに変更しようとしています。サプライヤー名を表示しますが、サプライヤーIDを保存します。フィールドを変更しようとすると、APEXはLOVクエリで間違った数の列が選択されていると言います。

テキストフィールドのオートコンプリートに2つの値を保持する方法はありますか?私が現在ポップアップLOVに使用している次のクエリ:

 SELECT SUPPLIER_NAME KEY, SUPPLIER_ID VALUE
 FROM SUPPLIERS
 WHERE ENABLED_FLAG = 'Y'
 order by SUPPLIER_NAME
4

4 に答える 4

3

オートコンプリートテキストアイテムには、個別の表示値と戻り値がなく、値が1つしかないため、関連付けられたLOVの値は1つだけです。

于 2012-09-14T09:44:41.793 に答える
2

まず、[ページの編集]をクリックして、次のCSSを追加します。

<style>ac_key{display:none}</style>

次に、オートコンプリートリストのクエリを次のように変更します。

SELECT SUPPLIER_NAME||'<ac_key>'||SUPPLIER_ID||'</ac_key>'
FROM SUPPLIERS
WHERE ENABLED_FLAG = 'Y'
order by SUPPLIER_NAME

これで、リストの各行に非表示のKEY値が含まれresult、フォームフィールドのイベントを処理し、非表示のキーを抽出し、送信時に送信される非表示のフィールドに入力できます。

フォームをもう一度編集し、次のようにページにJavascriptを追加します。

$("#P99_AC_FIELD").result(function(event,data,formatted){
  if(data){
    if(ac_key = data.toString().match("<ac_key>(.*)</ac_key>")){
      //console.log(ac_key[1]);
      $("#P99_AC_FIELD_KEY").val(ac_key[1]);
    }
  }
});
  • P99_AC_FIELD-リスト内の値を検索するためのテキストフィールド
  • P99_AC_FIELD_KEY-選択したキーを渡すための非表示フィールド

UPD:また、いくつかの値を個別のリストとして入れることができます。JSONやタグは関係ありません。OnResultイベントでは、それらを解析して、一度に複数の(非表示または通常の)フィールドに入力できます。

于 2017-09-13T06:27:33.853 に答える
1

標準オプションがそれをカットしないとき、あなたはいつでもあなた自身を転がすことができます

基本的なjqueryオートコンプリートアイテム(例:http: //apex.oracle.com/pls/apex/f?p = 54687:26 )
(これはかなり初歩的なものですが、基本を示しています)

  1. HTMLヘッダー

    <script src="#IMAGE_PREFIX#libraries/jquery-ui/1.8.14/ui/minified/jquery.ui.autocomplete.min.js" type="text/javascript"></script>
    <link rel="stylesheet" href="#IMAGE_PREFIX#libraries/jquery-ui/1.8.14/themes/base/jquery.ui.autocomplete.css" type="text/css" />
    
  2. 2アイテム

    • P26_EMPNO:値を保持します
    • P26_ENAME:LABELを保持します
  3. 動的アクション、ページの読み込み、真のアクション:javascriptを実行します

    $("#P26_ENAME").autocomplete({
       source: function(req, add){
          //call the page process get_contact_data and put its return in greturn
          //this process returns markup for a JSON object so this can easily be parsed in jquery
          //x01: a temporary variable simply used for passing on a value
          $.post('wwv_flow.show', 
                 {"p_request"      : "APPLICATION_PROCESS=GET_EMPLOYEES",
                  "p_flow_id"      : $v('pFlowId'),
                  "p_flow_step_id" : $v('pFlowStepId'),
                  "p_instance"     : $v('pInstance'),
                  "x01"            : req.term
                 },
                  function(data){
                     if(data){
                        add($.parseJSON(data));
                     };
                 }
                );               
       },
       select: function(event, ui){
          $("#P26_ENAME").val(ui.item.label);
          $("#P26_EMPNO").val(ui.item.value);
          event.preventDefault();
       },
       delay: 500,
       minLength: 1,
       autoFocus: true
    });
    
  4. AJAXコールバックプロセス

    DECLARE
       v_json CLOB;
    BEGIN
       FOR rec IN (SELECT '{' || '"value":"' ||e.EMPNO ||'",'||
                                 '"label":"' ||e.ENAME ||'"' -- last entry
                              || '}' obj
                     FROM EMP e
                    WHERE UPPER(e.ENAME) like UPPER(apex_application.g_x01)||'%'
       ) LOOP
          v_json := v_json ||','|| rec.obj;
       END LOOP;
    
       v_json := '[' || LTRIM(v_json, ',') || ']';
       htp.p(v_json);
    END;
    

-> jQuery UIドキュメント:http://jqueryui.com/demos/autocomplete/#remote-jsonp

または、プラグインの使用を検討してください。たとえば、これは次のとおりです。http: //apex-plugin.com/oracle-apex-plugins/odtug-competition/combobox_208.html

于 2012-09-14T12:05:12.780 に答える
0

カスタムコーディングが少なくて済むソリューション。

2つのフィールドを作成します。1つはオートコンプリート名用で、もう1つはID用です。IDは、データベースに保存されているものです。

IDフィールド

  • 名前:FIELD_1
  • タイプ:非表示
  • 設定; 保護された価値:いいえ
  • ソース; タイプ:データベース列
  • ソース; データベース列:SELECTION_ID

名前フィールド

  • 名前:FIELD_2
  • タイプ:オートコンプリートのあるテキストフィールド
  • 設定:[必要なものを選択してください]
  • 値のリスト; タイプ:SQLクエリ
  • 値のリスト; SQLクエリ:SELECT [NAME] FROM [LIST_TABLE]
    • クエリが一意の値を提供することを確認してください。重複はありません
  • ソース; タイプ:SQLクエリ(単一値を返す)
  • ソース; SQLクエリ:SELECT [NAME] FROM [LIST_TABLE] WHERE ID = :FIELD_1フォームの場合
  • ソース; SQLクエリ:(SELECT [NAME] FROM [LIST_TABLE] WHERE ID = Q.SELECTION_ID)データグリッド用

ダイナミックアクション

  • 名前:IDフィールドの更新
  • いつ; イベント:カスタム
  • いつ; カスタムイベント:result
  • いつ; 選択:アイテム
  • いつ; アイテム:FIELD_2
  • Trueの場合のアクション
    • 処置:値を設定してください
    • 設定; セットタイプ:SQLステートメント
    • 設定; SQLステートメント:SELECT [ID] FROM [LIST_TABLE] WHERE [NAME] = FIELD_2
    • 影響を受ける要素; 選択タイプ:アイテム
    • 影響を受ける要素;FIELD_1

ノート

データグリッドの場合、ID列を直接非表示にすることはできません。[アクション]->[列]メニューで列の選択を解除する必要があります。名前データが一意であることを確認する必要があります。重複すると、IDからNAMEを取得して複数の値で応答し、エラーが発生します。

于 2019-02-11T22:02:07.313 に答える