全选框实现方法多种多样,这里只介绍两种
方法一:触发器式,优点程序简单,缺点颜色单调不突出
1. 在数据块和控制块上分别创建check box
2. 设置check box选中与为选中的值 Y/N和初始值
3.
在数据块check box下触发器WHEN-CHECKBOX-CHANGED中调用程序
PROCEDURE check_box IS
BEGIN
IF :HEADER.check_box = 'Y' THEN
--:HEADER.count := 1;
NULL;--特殊用途,可选
ELSE
--:HEADER.count := 0;
NULL;
END IF;
END check_box;
4. 在数据块下建立BLOCK级触发器CHECK_ALL_RECORDS调用程序
PROCEDURE check_all_records IS
BEGIN
--fnd_message.debug('PACKAGE BODY headers IS PROCEDURE check_all_records IS');
IF :control.check_header_all = 'Y' THEN
IF :header.check_box = 'N' OR :header.check_box IS NULL THEN
:header.check_box := 'Y';
-- :line.count := 1;
END IF;
ELSE
IF :header.check_box = 'Y' THEN
:header.check_box := 'N';
-- :line.count := 0;
END IF;
END IF;
--fnd_message.debug('PACKAGE BODY headers IS PROCEDURE check_all_records IS');
END check_all_records;
5. 在控制块下的check box CHECK_HEADER_ALL下建立触发器WHEN-CHECKBOX-CHANGED调用程序
PROCEDURE check_header_all IS
BEGIN
app_record.for_all_records('HEADER', 'CHECK_ALL_RECORDS');
END check_header_all;
6. 在需要处理的地方循环判断处理
PROCEDURE apply IS
v_count number;
v_line_num number;
BEGIN
go_block('HEADER'); --跳到目的数据
first_record; --从第一条记录开始循环
LOOP
IF :header.check_box = 'Y' THEN
v_count := v_count + 1;
--fnd_message.debug('循环处理次数');
AP_INVOICE_LINES_ALL_PRIVATE.INSERT_ROW (X_LINE_NUM =>v_line_num,
P_FLAG =>'APPLY',
P_AMOUNT =>:header.AMOUNT);
AP_DISTRIBUTIONS_PRIVATE.INSERT_ROW (P_LINE_NUM =>v_line_num,
P_FLAG =>'APPLY',
P_AMOUNT =>:header.AMOUNT,
P_INVOICE_ID => :parameter.G_INVOICE_ID);
LINE_PRIVATE.insert_row (P_LINE_NUM =>v_line_num,P_FLAG =>'APPLY');
-- :line.CURRENT_RECORD_INDICATOR := 'Y'; --将指定行的复选框设置为选中
-- BATCH_PROCESSING. EVENT('WHEN-MOUSE-CLICK', 'LINE');
DOCOMMIT;
END IF;
EXIT WHEN :system.last_record = 'TRUE';
next_record;
END LOOP;
--fnd_message.debug('循环处理次数-----');
--commit;
DOCOMMIT;
first_record;
go_block('HEADER');
:parameter.g_query_find := 'TRUE';
app_find.find('HEADER');
:parameter.g_query_find := 'FALSE';
END apply;
方法二:选中与未