3

次のクエリを使用して、次の表形式のレポートがあります。

select id,
       name,
       telephone,
       apex_item.checkbox2(1,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

このレポートには、駆動キーがF01に割り当てられたチェックボックスである10個のレコードが表示されます。

私の問題は、これは表形式のレポートであるため、Oracle APEX_APPLICATION.G_F01.COUNTを使用することです。textareaフィールドの値にアクセスするにはどうすればよいですか。「my_comment」は、データベースの列/テーブルからではなく、レポートでユーザーが入力できる値です。 ?

私が見ることができることから、それはシーケンスの問題であるように思われ、入力したレコードが正しい順序でない場合、値が失われます。

行1、3、および5のチェックボックスをオンにしているだけなので、これらの選択された行のみに関連するtextareaフィールドの値を返すことを期待しています。

4

1 に答える 1

6

はい、表形式のフォームにチェックボックスが含まれていると注意が必要です。この例では、g_f01には値1、3、5の3つの要素のみが含まれますが、配列g_f30には10の要素が含まれます。

通常、apex_itemを使用して表形式のフォームを作成する場合は、APEXコレクションも使用するのが最適です。

  1. ページへのエントリ時にAPEXコレクションにmy_tableからの関連データを入力します。非表示のアイテム(apex_item.hidden(2、id)など)のmytable行のIDを保持します。
  2. my_tableではなくコレクションから機能し、チェックボックス項目でIDではなくseq_idを使用するようにレポートを作成します。apex_item.checkbox2(1,seq_id)
  3. 送信時に、g_fxx配列を使用してコレクションを更新します。多くの場合、複数のパスを使用します。
  4. 最後に、コレクションを使用してmy_tablを更新します

したがって、この例では、最初にAPEXコレクションを更新して、c050を「Y」に設定することでどの行がチェックされているかを示します。

for i in 1..apex_application.g_f01.count loop
    apex_collection.update_member_attribute('MYCOLL', apex_application.g_f01(i), 
      50, 'Y');
end loop;

次に、他の変更で更新します。

for i in 1..apex_application.g_f02.count loop
    apex_collection.update_member_attribute('MYCOLL', apex_application.g_f02(i), 
      20, apex_application.g_f20(i));
    apex_collection.update_member_attribute('MYCOLL', apex_application.g_f02(i), 
      30, apex_application.g_f30(i));
end loop;

最後に、関連する変更をmy_tableに適用します。

for r in (select c002, c020, c030 
          from apex_collection
          where collection_name = 'MYCOLL'
          and c001 = 'Y' -- Checked rows only
         )
loop
    update my_table
    set my_date = r.c020
    ,   my_comment = r.c030
    where id = r.c002;
end loop;

そのような単純な...?!

于 2012-08-28T17:08:48.053 に答える