8

Oracle apex_application.gfnn がどのように機能するか、また Oracle ApEx の標準 SQL レポートでのみ機能するのか、SQL (更新可能なレポート、つまり表形式) でのみ機能するのかについて、私はかなり混乱しています。

基本的に、このサンプル SQL を使用して次のことを達成しようとしています。これは単なる標準 SQL レポートですが、このタイプまたはレポートで達成しようとしていることが可能かどうかはわかりません。

select id,
       name,
       telephone,
       apex_item.checkbox2(10,id) as "Tick when Contacted",
       apex_item.text(20,my_date) as "Date Contacted",
       apex_item.textarea(30,my_comment,5,80) as "Comment"
from   my_table

上記の SQL に基づいて、この SQL クエリが 10 行を返すと仮定します。チェックボックスを運転 ID として使用して、すべての奇数レコード/行、つまり行 1、3、5、7、9 のチェックボックスをオンにし、これらの行のそれぞれについて、コメントと共に日付値 (f20) も入力します。 (f30)

これを念頭に置いて、ユーザーが「保存」ボタンを押したときに呼び出されるページ プロセスを作成します。このボタンは、これらのチェックされた行を反復処理し、各レコード、日付、コメントを保存しますが、その行のみを保存します。選択しました。

したがって、上記に基づいて、テーブルには次の列を持つ 5 つのニュース行があると予想されます。

ID      MY_DATE      MY_COMMENT
1       26/08/2012   Comment A
3       27/08/2012   Comment B
5       28/08/2012   Comment C
7       29/08/2012   Comment D
9       30/08/2012   Comment E

残念ながら、を使用してこれを達成する方法がわかりませんapex_application.G_F10.COUNT

チェックボックスにチェックを入れた行ごとに、これらの配列要素 (f20) と f(f30) のそれぞれの内容にアクセスできるようにしたいと考えています。

これは可能ですか、それとも apex_application.G_Fnn の仕組みを誤解していますか? これが不可能な場合、どうすればこれを達成できますか? 表形式のレポートが必要ですか?

4

1 に答える 1

11

あなたはとても近くにいます。

select apex_item.checkbox2(10, empno) select_me,
apex_item.text(20, empno) empno,
apex_item.text(30, ename)||apex_item.hidden(50, empno) ename
from emp

非表示のアイテムを独自の列にしたくないので、連結しています。レイアウトをいじります。
また、チェックボックスがどのように機能するかにより、非表示のアイテムがあります。チェックボックスは、チェックされたアイテムの値のみを送信します。これは、配列 10 に 3 つの値があることを意味します。他の配列には、すべての行の値が含まれています。
これが、非表示の empno を再度追加した理由です。そのため、チェックした値を他の行と一致させることができます。

送信プロセス:

DECLARE
   v_empno emp.empno%TYPE; 
   v_ename emp.ename%TYPE;
BEGIN
   --f10: checkbox
   --f20: empno
   --f30: ename
   --f50: empno again
   for i in 1..apex_application.g_f10.count
   loop
      for j in 1..apex_application.g_f50.count loop
         if apex_application.g_f10(i) = apex_application.g_f50(j) 
         then         
            -- access values for the selected rows in the other arrays
            v_empno := apex_application.g_f20(j);
            v_ename := apex_application.g_f30(j);

            apex_debug_message.log_message('Employee: '||v_empno||' - '||v_ename);
         end if;
      end loop;
   end loop;
END;

ページを実行し、デバッグを有効にし、レコード 2、4、および 6 を選択し、送信します。

レコードの選択とクエリの出力

デバッグ出力:

デバッグ出力: BLAKE、JONES、FORD

あとは、そのループに処理を入れるだけです。

于 2012-08-27T13:10:08.487 に答える