全选框实现方法多种多样,这里只介绍两种

方法一:触发器式,优点程序简单,缺点颜色单调不突出

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;

方法二:选中与未选中颜色不同,显示多样

  1. 在需要进行批量操作的数据块中,对于item——current_record_indicator将其项类型改为‘“复选框”。
  2. 包app_multi在库appcore中,确保有该库
  3. 根据以下列表创建trigger

S. No

Trigger Level

Trigger Name

Standard Library Call

Form

KEY-CLRFRM

App_multi.event(‘KEY-CLRFRM’)

Block

WHEN-MOUSE-CLICK

App_multi.event(‘WHEN-MOUSE-CLICK’)

Block

WHEN-NEW-RECORD-INSTANCE

App_multi.event(‘WHEN-NEW-RECORD-INSTANCE’)

Block

KEY-CREREC

App_multi.event(‘KEY-CREREC’)

Block

WHEN-CLEAR-BLOCK

App_multi.event(‘WHEN-CLEAR-BLOCK’)

Block

PRE-BLOCK

App_multi.event(‘PRE-BLOCK’)

Block

POST-BLOCK

App_multi.event(‘POST-BLOCK’)

Block

KEY-DELREC

App_multi.event(‘KEY-DELREC’)

Block

KEY-CLRREC

App_multi.event(‘KEY-CLRREC’)

Block

DESELECT_ALL*

App_multi.event(‘DESELECT_ALL’)

Block

SELECT_ALL*

App_multi.event(‘SELECT_ALL’)

*Note – The triggers are user defined triggers

  1. 在form级别下添加MULTI_RETURN_ACTION自定义trigger
DECLARE
action VARCHAR2(64);
blockname VARCHAR2(30);
rec_count VARCHAR2(3);
BEGIN
blockname := :GLOBAL.APPCORE_MULTI_BLOCK;
action := :GLOBAL.APPCORE_MULTI_ACTION; IF blockname = 'FORM-LEVEL' THEN
IF action = 'KEY-CLRFRM' THEN
NULL;
END IF; ELSIF blockname = 'TRN_ORD_HEADERS_V_SUM' THEN
IF action = 'LABEL_CHANGE' THEN
NULL;
ELSIF action = 'PRE-KEY-DELREC' THEN
fnd_message.set_name('FND', 'MULTI_DELETE_RECORD');
rec_count := TO_CHAR( app_multi.
get_group_count('TRN_ORD_HEADERS_V_SUM'));
fnd_message.set_token('NUM_OF_RECS', rec_count);
IF (not fnd_message.warn) THEN
RAISE form_trigger_failure;
END IF;
ELSIF action = 'KEY-DELREC' THEN
delete_record;
IF NOT(FORM_SUCCESS) THEN
RAISE form_trigger_failure;
END IF;
ELSIF action = 'KEY-CLRREC' THEN
clear_record;
IF NOT(FORM_SUCCESS) THEN
RAISE form_trigger_failure;
END IF;
ELSIF action = 'RECORD_DESELECTED' then
--fnd_message.debug('deselected');
null;
ELSIF action = 'RECORD_SELECTED' then
--fnd_message.debug('selected');
null;
END IF;
ELSE
fnd_message.debug('There is no multi-select block '
|| blockname ||'. Action: '||action);
END IF;
END;

5.    创建过程event

PROCEDURE event(event_name VARCHAR2 DEFAULT 'WHEN-MOUSE-CLICK',
blockname VARCHAR2 DEFAULT NULL) IS
cursor_blk VARCHAR2(30);
cursor_blk_id BLOCK;
groupname VARCHAR2(40);
records_id RECORDGROUP;
rec_num_col_id GROUPCOLUMN;
anchors_id RECORDGROUP;
block_col_id GROUPCOLUMN;
anchor_col_id GROUPCOLUMN;
added_rec_col_id GROUPCOLUMN;
prev_wnri_col_id GROUPCOLUMN;
wnri_col_id GROUPCOLUMN;
anchors_row INTEGER;
new_rec INTEGER;
new_item VARCHAR2(60);
rec_count INTEGER;
modifier VARCHAR2(30);
rec_num INTEGER;
anchor INTEGER;
i INTEGER;
added_rec INTEGER;
trig_block VARCHAR2(30);
q_hits INTEGER;
multi_block VARCHAR2(30);
begin
COPY('Entering app_multi.event. Event is '||event_name||'.','global.frd_debug');
anchors_id := find_group('anchors');
if event_name in ('KEY-CLRFRM') then
--
-- This is the only form-level event
--
if not(id_null(anchors_id)) then
rec_count := get_group_row_count(anchors_id);
for anchors_row in 1..rec_count LOOP
groupname := get_group_char_cell('anchors.groupname', anchors_row);
delete_group_row(groupname, ALL_ROWS);
set_group_number_cell('anchors.anchor', anchors_row, 1);
set_group_number_cell('anchors.added_rec', anchors_row, null);
set_group_number_cell('anchors.previous_wnri_anchor', anchors_row, null);
set_group_number_cell('anchors.wnri_anchor', anchors_row, null);
end LOOP;
app_multi_private.menu_refresh;
--
-- Developer must call app_standard.event('KEY-CLRFRM')
--
copy('FORM-LEVEL', 'GLOBAL.APPCORE_MULTI_BLOCK');
copy('KEY-CLRFRM', 'GLOBAL.APPCORE_MULTI_ACTION');
execute_trigger('MULTI_RETURN_ACTION');
else
app_standard.event('KEY-CLRFRM');
end if;
else
--
-- Initialize or find group and column id's
--
trig_block := name_in('SYSTEM.TRIGGER_BLOCK');
multi_block := nvl(upper(blockname), trig_block);
copy(multi_block, 'GLOBAL.APPCORE_MULTI_BLOCK');
groupname := multi_block||'_MULTI'; records_id := find_group(groupname);
if id_null(records_id) then
records_id := create_group(groupname);
rec_num_col_id := add_group_column(records_id, 'rec_num', NUMBER_COLUMN);
else
rec_num_col_id := find_column(groupname||'.rec_num');
end if;
--
-- Store the select anchor in another group (use a record
-- group to make the group specific to the form)
--
if id_null(anchors_id) then
anchors_id := create_group('anchors');
block_col_id := add_group_column(anchors_id, 'groupname', CHAR_COLUMN, 30);
anchor_col_id := add_group_column(anchors_id, 'anchor', NUMBER_COLUMN);
added_rec_col_id := add_group_column(anchors_id, 'added_rec', NUMBER_COLUMN);
prev_wnri_col_id := add_group_column(anchors_id, 'previous_wnri_anchor', NUMBER_COLUMN);
wnri_col_id := add_group_column(anchors_id, 'wnri_anchor', NUMBER_COLUMN);
add_group_row(anchors_id, 1);
anchors_row := 1;
set_group_char_cell(block_col_id, anchors_row, groupname);
set_group_number_cell(anchor_col_id, anchors_row, 1);
set_group_number_cell(prev_wnri_col_id, anchors_row, null);
set_group_number_cell(wnri_col_id, anchors_row, null);
else
block_col_id := find_column('anchors.groupname');
anchor_col_id := find_column('anchors.anchor');
prev_wnri_col_id := find_column('anchors.previous_wnri_anchor');
wnri_col_id := find_column('anchors.wnri_anchor');
anchors_row := get_group_record_number(block_col_id, groupname);
if anchors_row = 0 then
anchors_row := get_group_row_count(anchors_id) + 1;
add_group_row(anchors_id, anchors_row);
set_group_char_cell(block_col_id, anchors_row, groupname);
set_group_number_cell(anchor_col_id, anchors_row, 1);
set_group_number_cell(prev_wnri_col_id, anchors_row, null);
set_group_number_cell(wnri_col_id, anchors_row, null);
end if;
end if; cursor_blk := upper(nvl(blockname,name_in('SYSTEM.CURSOR_BLOCK')));
cursor_blk_id := find_block(cursor_blk);
if not id_null(cursor_blk_id) then
new_rec := get_block_property(cursor_blk_id, CURRENT_RECORD);
else
new_rec := name_in('SYSTEM.CURSOR_RECORD');
cursor_blk := name_in('SYSTEM.CURSOR_BLOCK');
end if; if event_name like 'WHEN-MOUSE-CLICK%' then
if get_item_property(name_in('SYSTEM.TRIGGER_ITEM'), ITEM_TYPE) = 'BUTTON' then
COPY('Completed app_multi.event. Event is '||event_name||
'. Return from procedure, item type is button','global.frd_debug');
RETURN;
end if;
--
-- System.mouse_button_modifiers will contain a string like
-- 'Shift+Control+' - should be platform/language-independent.
--
modifier := name_in('SYSTEM.MOUSE_BUTTON_MODIFIERS');
--
-- In the case of Shift+Control+ we act like it's just Shift-
--
if ( instr(modifier, 'Shift') <> 0 ) then
null;
elsif 1=1 then
if get_record_property(new_rec, cursor_blk, status) <> 'NEW' then
-- Determine the state of the current rec
rec_num := get_group_record_number(rec_num_col_id, new_rec);
if rec_num = 0 then
app_multi_private.select_records(records_id, rec_num_col_id, new_rec);
else
app_record.highlight('');
delete_group_row(records_id, rec_num);
copy('RECORD_DESELECTED', 'GLOBAL.APPCORE_MULTI_ACTION');
execute_trigger('MULTI_RETURN_ACTION');
app_multi_private.menu_refresh;
copy('LABEL_CHANGE', 'GLOBAL.APPCORE_MULTI_ACTION');
execute_trigger('MULTI_RETURN_ACTION');
set_group_number_cell(anchor_col_id, anchors_row,new_rec);
end if;
end if; else -- No modifier key
if get_group_number_cell(anchor_col_id, anchors_row) <> new_rec then
app_multi_private.deselect_all(records_id, rec_num_col_id);
end if;
end if;
set_group_number_cell(anchor_col_id, anchors_row, new_rec);
set_group_number_cell(prev_wnri_col_id, anchors_row, null); elsif event_name = 'WHEN-NEW-RECORD-INSTANCE' then
set_group_number_cell(prev_wnri_col_id, anchors_row,
get_group_number_cell(wnri_col_id, anchors_row));
set_group_number_cell(wnri_col_id, anchors_row, new_rec);
elsif event_name = 'KEY-CREREC' then
app_multi_private.deselect_all(records_id, rec_num_col_id);
-- Developer must call create_record;
elsif event_name = 'WHEN-CLEAR-BLOCK' then
app_multi.clear_group(multi_block);
--elsif event_name = 'KEY-F2' then
-- app_multi.event('WHEN-MOUSE-CLICK.Shift+',blockname);
--elsif event_name = 'KEY-F3' then
-- app_multi.event('WHEN-MOUSE-CLICK.Control+',blockname);
elsif event_name = 'DESELECT_ALL' then
app_multi_private.deselect_all(records_id, rec_num_col_id);
elsif event_name = 'SELECT_ALL' then
app_multi_private.select_all(records_id, rec_num_col_id);
elsif event_name in ('POST-BLOCK', 'PRE-BLOCK') then
app_multi_private.menu_refresh(event_name);
elsif event_name in ('KEY-DELREC', 'KEY-CLRREC') then
app_multi_private.action(records_id, event_name, multi_block);
app_multi.clear_group(multi_block);
else
app_multi_private.action(records_id, event_name,
nvl(blockname, cursor_blk));
end if;
end if;
COPY('Completed app_multi.event. Event is '||event_name||'.','global.frd_debug');
EXCEPTION
WHEN OTHERS THEN
set_application_property(CURSOR_STYLE, 'DEFAULT');
END event;

6.创建函数get_group_count

FUNCTION get_group_count(blockname VARCHAR2)
RETURN NUMBER IS
groupid RECORDGROUP;
rec_count INTEGER;
BEGIN
COPY('Entering app_multi.get_group_count.','global.frd_debug');
groupid := find_group(blockname||'_MULTI');
if id_null(groupid) then
fnd_message.debug('DEVELOPER ERROR: Invalid blockname '||blockname
||' in app_multi.get_group_count');
end if;
rec_count := get_group_row_count(groupid);
if rec_count = 0 then
--COPY('Completed app_multi.get_group_count. RETURN 1.','global.frd_debug');
return 0;
else
COPY('Completed app_multi.get_group_count.RETURN rec_count.','global.frd_debug');
return rec_count;
end if;
END get_group_count;

7.在要进行批量操作的数据块下的current_record_indicator添加when-checkbox-changed

调用过程event

8.创建按钮,添加按钮的when-button-pressed

DECLARE
l_num_group_count NUMBER;
l_grp_group_col_id GROUPCOLUMN;
l_num_rec_num NUMBER;
l_chr_current_block VARCHAR2(80); --l_num_hike_percent NUMBER;
BEGIN
l_chr_Current_Block := :GLOBAL.APPCORE_MULTI_BLOCK;
GO_BLOCK(l_chr_Current_Block);
l_num_group_count := Get_Group_Count(l_chr_Current_Block);
-- fnd_message.debug('count=' || l_num_group_count);
if l_num_group_count > 0 then
l_grp_Group_Col_Id := App_Multi.Get_Group_Col(l_chr_Current_Block); For i IN 1..l_num_group_count
LOOP
l_num_Rec_Num := Get_Group_Number_Cell(l_grp_Group_Col_Id,i);
GO_RECORD(l_num_Rec_Num);
fnd_message.debug('--' || name_in(l_chr_Current_Block||'.order_number'));
--在这里循环选中的record,对其进行自己的逻辑
-- Copy (TO_CHAR(TO_NUMBER(name_in(l_chr_Current_Block || ‘.SALARY’) * (1 + l_num_hike_percent ))), l_chr_Current_Block || ‘.SALARY’);
END LOOP;
end if;
EXCEPTION
WHEN invalid_number THEN
Fnd_message.debug ('Invalid Number format exception: Please Check the name of the button. The format is HIKE_PERCENT_<percentage>');
END;

FORM界面批量处理-全选框实现的更多相关文章

  1. js——全选框 checkbox

    一直会碰见input 全选框的问题,先整理一种情况: 1. <input id="selectAll" type="checkbox" />全选 2 ...

  2. checkebox 全选 ,子复选框单个全部选择后,全选框也会被选择

    <script> //点击全选,子复选框被选中 function demo(){ var allcheck=document.getElementById("allcheck&q ...

  3. 2017 年 9 月 27 日 js(1.两个select 内容互换 2.单选按钮 同意可点击下一步 3. 全选框)

    1.两个select 内容互换 <!DOCTYPE html><html>    <head>        <meta charset="UTF- ...

  4. easyui-datagrid单选模式下隐藏表头的全选框

    easyui-datagrid可以不使用复选框来进行单选,直接使用onSelect和 singleSelect:true就可以实现单选,但是有一些用户会比较习惯使用勾选框,这时会加一列checkbox ...

  5. vue实现全选框效果

    vue实现全选框效果 一.总结 一句话总结: 全选的checkbox点击的时候判断这个checkbox的状态,如果没选中,说明下一个操作是选中所有 下面的每个checkbox判断一下是否所有的chec ...

  6. ElementUi 表格取消全选框,用文字表示

    Echarts ElementUi 表格取消全选框,用文字表示 1.先看看实现的图 一. 添加添加复选框列 <el-table v-loading="zongShipLoading&q ...

  7. python练习题之全选框全不选反选

    功能 实现分为两大部分: 第一body 部分,1,通过<li>无序列表标签实现选项的基本样式,通过input的checkbox标签实现里面的复选框功能.用到了标签的嵌套.然后选项的js方法 ...

  8. 表格取消全选框,用文字表示--Echarts ElementUi

    1.先看看实现的图 一. 添加添加复选框列 <el-table v-loading="zongShipLoading" tooltip-effect="dark&q ...

  9. JS实现复选框全选全不选以及子复选框带动全选框的选中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

随机推荐

  1. [LeetCode] IPO 上市

    Suppose LeetCode will start its IPO soon. In order to sell a good price of its shares to Venture Cap ...

  2. MySQL InnoDB 索引原理

    本文由  网易云发布. 作者:范鹏程,网易考拉海购 InnoDB是 MySQL最常用的存储引擎,了解InnoDB存储引擎的索引对于日常工作有很大的益处,索引的存在便是为了加速数据库行记录的检索.以下是 ...

  3. [SPOJ 4155]OTOCI

    Description 题库链接 给你 \(n\) 个节点,让你兹磁以下操作,维护一棵树: 动态加边: 修改点权: 询问路径上点权和. \(1\leq n\leq 30000\) Solution 好 ...

  4. bzoj 5285: [Hnoi2018]寻宝游戏

    Description Solution 把输入的 \(n\) 个二进制数看作一个大小为 \(n*m\) 的矩阵 把每一列压成一个二进制数,其中最高位是最下面的元素 然后就有了 \(m\) 个二进制数 ...

  5. [ HOJ 2713]Matrix1[网络流] 最大点权独立集问题

    题目大意: 一个 N*M 的网格,每个单元都有一块价值 Cij 的宝石.问最多能取多少价值的宝石且任意两块宝石不相邻.(1 <= N, M <= 50, 0 <= Cij <= ...

  6. ●BZOJ 4516 [Sdoi2016]生成魔咒

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4516 题解: 把串反过来后,问题变为求每个后缀的互不相同的子串个数.首先用倍增算法求出 sa ...

  7. 例10-6 uva1635(唯一分解定理)

    题意:给定n个数a1,a2····an,依次求出相邻两个数值和,将得到一个新数列,重复上述操作,最后结果将变为一个数,问这个数除以m的余数与那些数无关? 思路:最后观察期规律符合杨辉三角,那么,问题就 ...

  8. hihocoder #1142 : 三分·三分求极值

    时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 这一次我们就简单一点了,题目在此: 在直角坐标系中有一条抛物线y=ax^2+bx+c和一个点P(x,y),求点P到抛物线的 ...

  9. Python使用wmi获取Windows相关信息

    在使用Python获取Windows系统上的相关的信息可以使用WMI接口来获取, 什么是wmi? WMI是一项核心的Windows管理技术,WMI作为一种规范和基础结构,通过它可以访问.配置.管理和监 ...

  10. 将 Hexo 个人博客同时部署到 GitHub 和 Coding 上

    一.将个人博客托管到 GitHub 上 关于如何快速搭建自己的个人博客,如何完善自己的个人博客,什么是 GitHub ,如何将自己的博客代码托管到 GitHub 上面等等问题,我之前写过三篇文章已经做 ...