유사한 문제에 직면 한 다른 사람들을 돕기 위해 내 솔루션을 게시하고 싶습니다. 내 연구 과정에서 발견 한 내 구현은 느슨하게 this tutorial입니다.
은 내가 WHEN_NEW_FORM_INSTANCE 트리거에서 RecordGroup을 만들어 내가 저장하는 데 필요한 모든 열을 추가 :
declare
rg_name varchar2(40) := 'SELECTED';
rg_id recordgroup;
gc_id groupcolumn;
begin
/* Make sure the record group does not already exist. */
rg_id := find_group(rg_name);
/* If it does not exist, create it and add the
** necessary columns to it. */
if id_null(rg_id) then
rg_id := create_group(rg_name);
/* Add columns to the record group */
gc_id := add_group_column(rg_id, 'Barcode', number_column);
gc_id := add_group_column(..);
end if;
가 그럼 난 내 WHEN_CHECKBOX_CHANGED 추가하거나 체크 박스의 값에 따라 RecordGroup에서 행을 제거로 변경되었습니다.
declare
row_no number;
rg_id recordgroup := find_group('SELECTED');
gc_id groupcolumn;
total_rows number;
barcode number;
begin
total_rows := get_group_row_count(rg_id);
if :block.checkbox = 1 then
/* Add selected row to the RecordGroup */
add_group_row(rg_id, end_of_group);
set_group_number_cell('SELECTED.BARCODE',
total_rows + 1,
:block.number_item);
else
/* Find selected row in RecordGroup and remove it */
for i in 1 .. total_rows loop
barcode := get_group_number_cell('SELECTED.BARCODE', i);
if :block.number_item = barcode then
row_no := i;
exit;
end if;
end loop;
delete_group_row('SELECTED', row_no);
end if;
end;
그리고 내 WHEN_BUTTON_PRESSED 트리거에 만 RecordGroup
declare
selected number;
row_no number;
begin
..
selected := get_group_row_count('SELECTED');
for j in 1 .. selected loop
begin
barcode := get_group_number_cell('SELECTED.BARCODE', j);
..
insert into (..);
commit;
exception
when others then
error_logging(..);
end;
end if;
delete_group_row('SELECTED', all_rows);
..
end;
에 저장되어있는 선택된 행을 통해 루프