EMPテーブルの例:
select
apex_item.checkbox2(p_idx => 1, p_value => empno, p_attributes => 'class="check_select"') empselection,
apex_item.text(2, ename) empname,
empno,
ename
from emp
チェックボックス項目にクラスを追加します。これにより、jQueryでのターゲティングが簡単になります。
「チェックボックスクリック」などの新しい動的アクションを作成します。
イベント:クリック
選択タイプ:jQueryセレクター
jQueryセレクター:(.check_select
これはSQLのチェックボックスに追加したクラスです)
条件:JavaScript式
値:$(this.triggeringElement).prop('checked')
条件は、チェックボックス要素をチェックして、チェックされているかどうかを確認することです。prop()は要素のプロパティをテストし、この場合はtrueまたはfalseを返します。trueの場合、trueアクションが発生し、それ以外の場合はfalseアクションが発生します。
真のアクション:
アクション:JavaScriptコード
コードを実行します:$(this.triggeringElement).closest("tr").find("td[headers='EMPNAME'] input").val('test');
誤ったアクション:
アクション:JavaScriptコード
コードを実行します:$(this.triggeringElement).closest("tr").find("td[headers='EMPNAME'] input").val('');
クリックしたチェックボックスと同じ行のアイテムをターゲットにする必要があるため、どちらにも選択タイプはありません。頂点の選択の可能性を通してこれを行う方法は実際にはありません。textarea
ヘッダーを介して列をターゲットにし、td(または: !)内の入力をターゲットにすることを忘れないでください
動的アクションが作成されたら、に戻ります。 [詳細設定]で、[イベントスコープ]をに変更しLive
ます。これは、ページネーションを説明するために必要です。これを変更しない場合、ページネーション後にアクションが要素にバインドされることはありません。
次に、trueとfalseのアクションを編集し、チェック Fire on Page Load
を外します。
ここで日付を説明します。
デフォルト値としてsysdateが必要なので、ページに非表示のアイテム(P9_DEF_DATEなど)を追加することをお勧めします。ソースとして、PLSQL式を使用し、を使用しますSYSDATE
。
次に、そのフィールドの値をデフォルト値として使用できます。例:
$(this.triggeringElement).closest("tr").find("td[headers='EMPNAME'] input").val($v('P9_DEF_DATE'));
最後の注意:valで値を空白にする:単一引用符で使用しval('')
てください!私の経験ではdoubleで動作しません。
動的アクションドキュメントのいくつかのリンク:
ajaxプロセスの例:
チェックした従業員のCOMM列を更新するとします。
レポートのページに新しいプロセスを作成し、簡単な名前を付け、スペースを入れないでください。たとえば、「update_emp」で実行しています。
update emp
set comm = apex_application.g_x02
where empno = apex_application.g_x01;
動的アクションに別の真のアクションを追加し、「JavaScriptコードの実行」と入力します。
$.post('wwv_flow.show',
{"p_request" : 'APPLICATION_PROCESS=update_emp',
"p_flow_id" : $v('pFlowId'), //app id
"p_flow_step_id" : $v('pFlowStepId'), //page id
"p_instance" : $v('pInstance'), //session id
"x01" : $(this.triggeringElement).val(),
"x02" : '88', //just a bogus value to demonstrate
},
function(data){
/*normally you'd handle the returned value here
an example would be a JSON return with which to set item values*/
}
);
このJavaScriptは、update_emp
プロセスを対象としてページに投稿されます。x01
とx02
は一種の「一時」変数です。それらは存在するため、セッション状態に値を送信するために常にページアイテムを送信する必要はありません。これらはapex_applicationパッケージの一部です。
したがって、ここではx01
、empno(チェックボックスの値、したがってthis.triggeringElement
)を格納し、コミッションx02
の値を渡すために使用しています。ここでハードコーディングしましたが、もちろん、任意の値を取得できます。
$.post
ページに投稿するjQueryメソッドです。
動的なアクションやトロールフォーラムを学習しているときに、ページに投稿する別の方法、つまり、に出くわす可能性がありhtmldb_Get
ます。これは、apexjavascriptファイルに組み込まれています。本当のAjax(非同期)ではなく、Sjax(同期)であり、私の意見では十分に透明ではないため、私はそれを使用しません。私はそれにいくつかのGetAsync
部分を信じています、それは良いことですが、どんな例でもそれが使われているのを見ることはほとんどありません。これで簡単に見えるかもしれませんが、私get.get();
のjsの代わりに3行のコードで同じ結果を得ることができます。実際のajax呼び出しを実装することをお勧めします。時々プロセスを終了するのを待ちすぎてhtmldb_Get
、アプリケーションでのこれらすべての呼び出しが思ったほど楽しくないことに気付くかもしれません...
このレポートの設定では、状況もさらに複雑になります。ページアイテムを使用すると、別のルートを取ることができます。javascriptブロックを実行する代わりに、plsqlコードブロックを実行できます。ここで、セッション状態に送信する項目(plsqlブロックで使用できるようにする)と、このplsqlブロックで値を設定する項目を指定できます。(SQLブロックはサーバー側で実行されます。つまり、参照されるアイテムはセッション状態で値を持っている必要があります)。それも試してみることをお勧めします。
そうは言っても、レポートアクションでもこれを行うことができますが、セッション状態に送信できる値を一時的に保持するために、いくつかの偽のアイテムを設定する必要があります。繰り返しますが、私はそのファンではないので、私はそれを使いませんでした(したがって別の「imo」)。
基本的に、firebugなどのブラウザ検査ツールを開いてください。これにより、ページで行われたajax呼び出しを検査でき、これを調べるための優れた方法が提供されます。