4

処理のために送信されたすべてのリクエストを表示する表形式のフォームがあります。送信者はいつでもリクエストをキャンセルできます。キャンセルする必要がある行の行セレクター チェックボックスをオンにして [送信] をクリックするだけで、これを実現したいと考えています。

わかりました...作成しようとしているのは、[行セレクター] チェックボックスをオンにしてフォームを送信すると、行の「ステータス」列の値が「キャンセル済み」に設定される表形式のフォームです。

[行セレクター] チェックボックスが存在するため、選択した行を識別し、選択した行に対してアクションを実行する何らかの組み込みプロセスがおそらくあると思います。

この機能を利用して、行の「ステータス」列の値を「キャンセル」に設定するための追加の手順を実行する方法はありますか?

4

2 に答える 2

3

トムの答えに関する私のコメントを読んでください。プロセスのコード例:

declare 
  l_map apex_application_global.vc_map;
  l_region_id number;
begin
  if :APEX$ROW_SELECTOR = 'X' then
    select t.region_id
     into l_region_id
     from APEX_040100.APEX_APPLICATION_PAGE_RPT t
     where t.application_id = :APP_ID
       and t.page_id = :APP_PAGE_ID
       and t.source_type = 'Tabular Form';

    l_map := apex_040100.wwv_flow_tabular_form.get_row_values(
      p_tabular_form_region_id => l_region_id,
      p_row_num => :APEX$ROW_NUM
    );

    update my_table
     set status = 'Cancelled'
     where id = l_map('ID');
  end if;
end;
于 2013-06-08T11:08:53.680 に答える
1

通常、追加された行セレクターは配列に格納されますapex_application.g_f01(これらの配列の詳細については、apex api doc を参照してください)。ページの html 出力を見て、これを確認します。表形式の html の後、配列マッピングへの入力を見つけることができます (テーブルに基づいて表形式を使用しましたEMP)。

<input type="hidden" name="fhdr" value="Select Row" id="fhdr_001" />
<input type="hidden" name="fmap" value="EMPNO" id="fmap_002" />
<input type="hidden" name="fhdr" value="Empno" id="fhdr_002" />
<input type="hidden" name="fmap" value="ENAME" id="fmap_003" />
<input type="hidden" name="fhdr" value="Ename" id="fhdr_003" />
<input type="hidden" name="fmap" value="JOB" id="fmap_004" />
<input type="hidden" name="fhdr" value="Job" id="fhdr_004" />
<input type="hidden" name="fmap" value="MGR" id="fmap_005" />
<input type="hidden" name="fhdr" value="Mgr" id="fhdr_005" />
<input type="hidden" name="fmap" value="HIREDATE" id="fmap_006" />
<input type="hidden" name="fhdr" value="Hiredate" id="fhdr_006" />
<input type="hidden" name="fmap" value="DEPTNO" id="fmap_007" />
<input type="hidden" name="fhdr" value="Deptno" id="fhdr_007" />

行セレクター (配列 f01) と、必要と思われるその他の値が必要になります。たとえば、配列 3: を使用しENAMEました。

DECLARE
   v_rowno NUMBER;
BEGIN
   for i in 1..apex_application.g_f01.count
   loop
      v_rowno := apex_application.g_f01(i);
      apex_debug_message.log_message('row# selected: '||v_rowno);
      apex_debug_message.log_message('Employee: '||apex_application.g_f03(v_rowno));
   end loop;
END;

表形式のフォームで、2 ページに移動し、2 人の従業員を選択しました。 選ばれた従業員

これは、デバッグで次のように出力されます。

row# selected: 2
Employee: ADAMS
row# selected: 3
Employee: JAMES

行セレクターの値は、レポートの現在のページの行番号であることに注意してください。

ステータスを更新する必要がある場合は、レコードの ID を保持する配列を参照する必要があります。UPDATEこのようにして、それらのレコードに対して実行できるようになります。

于 2012-02-21T08:48:57.830 に答える