1

description, previous_value, unit_price私の Oracle Apex アプリには、フィールドを含む表形式のフォームがあります。

フィールドの値にprevious_valueフィールドのデータを入力する必要がありdescriptionます。previous_valueデータベースからフィールドの値を取得するクエリがあります。onChangeフィールドにイベントを追加する必要がありdescriptionます。フィールドの変更により、descriptionフィールドの値previous_valueはクエリを使用して入力する必要があります。

どうすればこれを行うことができますか?

4

1 に答える 1

2

変更イベントをフィールドにバインドするには、いくつかの方法があります。td ヘッダーを介してターゲットを設定するか、列を編集し、「要素属性」フィールドにクラス (「fireAjax」など) を追加できます。その後、JavaScript コードを使用してイベントにバインドするか、動的アクションを介してこれを行うことができます。

次の 2 つの形式のいずれかで ajax 呼び出しを実行できます: htmldb_Get または jquery.post を使用:

$('td[headers="ENAME"] input').change(function(){   
   var ajaxRequest = new htmldb_Get( null , $v('pFlowId') , 'APPLICATION_PROCESS=get_job' , $v('pFlowStepId'));
   ajaxRequest.addParam('x01', $(this).val());
   ajaxResult = ajaxRequest.get();
   $(this).closest("tr").find("td[headers='JOB'] input").val(ajaxResult);
});

また

$('td[headers="ENAME"] input').change(function(){
var that = this;
$.post('wwv_flow.show', 
       {"p_request"      : "APPLICATION_PROCESS=get_job",
        "p_flow_id"      : $v('pFlowId'),
        "p_flow_step_id" : $v('pFlowStepId'),
        "p_instance"     : $v('pInstance'),
        "x01"            : $(this).val()
        },
        function(data){ 
           var eJob = $(that).closest("tr").find("td[headers='JOB'] input");
           eJob.val(data);
        },
        "text"
      );
});

このアプリケーション プロセスでは、実行ポイント「AJAX コールバック」を含むページで定義されています。
名前: get_job

DECLARE
   l_job emp.job%TYPE;
BEGIN
   SELECT job
   INTO l_job
   FROM emp
   WHERE ename = apex_application.g_x01;

   htp.p(l_job);
EXCEPTION WHEN no_data_found THEN
   htp.p('');
END;

このプロセスでのエラーと返品の処理はあなた次第です。no_data_foundやなどの一般的なエラーを必ずキャッチしてくださいtoo_many_rows。それらが発生してトラップされない場合、javascript コールバック コードがエラーを処理できないため、javascript エラーが発生する可能性が高くなります (apex では、エラー メッセージを含むフル ページの html になります)。
また、ご覧のとおりx01、apex の 10 個のグローバル一時変数の 1 つである変数を使用しています。この方法では、ページ アイテムを使用してその値をセッション状態に送信する必要はありません。

このコードを動的アクションに入れたい場合は可能です。動的アクションを選択する場合は、イベントおよび jQuery セレクターとして「変更」を選択し、真のアクションとして JavaScript コードを実行します。その後、関数コードをそこに配置できます。$(this)する必要がある例外を除いて$(this.triggeringElement)

于 2013-01-22T11:36:35.017 に答える