Giới Thiệu
Gói Oracle® APP_MULTI cho phép bạn thêm chức năng multi-selection (chọn nhiều) vào form. Tùy chọn này có sẵn trong APPCORE Library.
Bằng cách sử dụng gói APP_MULTI, bạn có thể chọn bản ghi đơn lẻ hoặc nhiều bản ghi và xử lý chúng theo nhu cầu. Hình sau minh họa việc chọn bản ghi ngẫu nhiên:
Nguồn hình ảnh: https://i36.me/images/oracle/ebs/ebs_frm_lnchse_with_app_multi_01.jpg
Chức Năng
Gói APP_MULTI cho phép bạn thực hiện các hành động sau:
- Nhấp vào một bản ghi đơn lẻ để chọn nó.
- Giữ phím Ctrl và nhấp vào nhiều bản ghi để chọn nhiều bản ghi cùng lúc.
- Chọn Select All từ menu ứng dụng để chọn tất cả bản ghi.
- Chọn Deselect All từ menu ứng dụng để bỏ chọn tất cả bản ghi đã chọn.
- Nhấp vào bản ghi đầu tiên, giữ phím shift và nhấp vào bản ghi cuối cùng trong chuỗi để chọn nhiều bản ghi liên tiếp.
Các Sự Kiện Của Gói APP_MULTI
Gói APP_MULTI phản hồi các sự kiện sau trên form:
KEY-CLRFRM: (cấp form) Xác thực bản ghi trước khi xóa form. Ví dụ dùng:
APP_MULTI.EVENT('KEY-CLRFRM');KEY-CLRREC: (cấp block) Kích hoạt khi bạn xóa bản ghi hiện tại. Tương đương lệnh
clear_record.KEY-CREREC: (cấp block) Kích hoạt khi bạn tạo bản ghi mới. Tương đương lệnh
create_record.KEY-DELREC: (cấp block) Kích hoạt khi bạn xóa bản ghi hiện có. Tương đương lệnh
delete_record.PRE-BLOCK: (cấp block) Kích hoạt khi bạn vào block.
POST-BLOCK: (cấp block) Kích hoạt khi bạn thoát khỏi block.
SELECT_ALL: (cấp block) Kích hoạt khi bạn chọn tất cả bản ghi.
DESELECT_ALL: (cấp block) Kích hoạt khi bạn bỏ chọn tất cả bản ghi.
WHEN-CLEAR-BLOCK: (cấp block) Kích hoạt khi bạn xóa block.
WHEN-MOUSE-CLICK: (cấp block) Kích hoạt khi bạn nhấp chuột.
WHEN-NEW-RECORD-INSTANCE: (cấp block) Kích hoạt khi bạn tạo hoặc truy vấn bản ghi trên block.
Tạo Trigger Thủ Công
Bạn cần tạo các trigger cần thiết và gọi rõ ràng thủ tục APP_MULTI.EVENT bằng cách truyền tên sự kiện đang được xử lý, như ví dụ sau:
PROCEDURE event(p_event_name VARCHAR2,p_blockname VARCHAR2 DEFAULT NULL);
Ví dụ, trigger KEY-CLRREC có thể đơn giản như lệnh sau:
APP_MULTI.EVENT('KEY-CLRREC');
Lưu ý: Thủ tục chấp nhận tham số tùy chọn p_blockname. Nếu bạn không truyền p_blockname, thủ tục sử dụng giá trị của SYSTEM.TRIGGER_BLOCK.
Sự Kiện Chọn Và Bỏ Chọn
Khi bạn triển khai trigger tùy chỉnh MULTI_RETURN_ACTION (hoặc trong data block hoặc ở cấp cao nhất của form), hệ thống thông báo cho bạn về việc chọn và bỏ chọn bản ghi. Trigger kích hoạt sau mỗi lần chọn hoặc bỏ chọn bản ghi đơn lẻ hoặc hàng loạt.
Biến Trigger
Bạn có thể sử dụng các biến sau trong trigger:
Global GLOBAL.APPCORE_MULTI_BLOCK: chứa tên data block bị ảnh hưởng bởi việc chọn hoặc bỏ chọn bản ghi.
Global GLOBAL.APPCORE_MULTI_ACTION: chứa một trong các giá trị sau:
- **'RECORD\_SELECTED'**: Khi bản ghi được chọn - **'RECORD\_DESELECTED'**: Khi bản ghi bị bỏ chọn - **'LABEL\_CHANGE'**: Khi menu **Select All** hoặc **Deselect All** được bật hoặc tắtBiến package APP_MULTI.LOOPING: có giá trị TRUE hoặc FALSE, tùy thuộc vào việc bạn có gọi MULTI_RECORD_ACTION trong vòng lặp hay không.
Truy Xuất Dữ Liệu Được Chọn Trên Form
Đối với mỗi data block, gói APP_MULTI có một record group với số bản ghi của các bản ghi hiện đang được chọn.
Bạn có thể thực hiện các tác vụ sau bằng cách cung cấp tên data block:
Sử dụng hàm **APP_MULTI.GET_GROUP_COL** để truy cập cột Only của record group cho một data block cụ thể.
Sử dụng APP_MULTI.GET_GROUP_COUNT để lấy số lượng bản ghi được chọn.
Ví dụ, cho form discrete jobs, block W_JOBS, và trường WIP_ENTITY_ID, bạn có thể in ID của các job được chọn bằng mã PL/SQL sau:
DECLARE
record_number_column groupcolumn;
selected_record_count NUMBER;
BEGIN
record_number_column := app_multi.get_group_col ('W_JOBS');
selected_record_count := app_multi.get_group_count ('W_JOBS');
FOR i IN 1 .. selected_record_count LOOP
DECLARE
record_number NUMBER;
v_wip_entity_id NUMBER;
BEGIN
record_number := GET_GROUP_NUMBER_CELL (record_number_column, i);
GO_RECORD (record_number);
v_wip_entity_id := NAME_IN ('W_JOBS.WIP_ENTITY_ID');
fnd_message.debug ( 'v_wip_entity_id' || v_wip_entity_id);
EXCEPTION WHEN OTHERS THEN Null;
END;
END LOOP;
END;
Kết Luận
Với gói APP_MULTI, bạn có thể xử lý dữ liệu hàng loạt trong Oracle forms tùy chỉnh. Gói này cho phép bạn lấy chi tiết dữ liệu hàng loạt mà người dùng chọn trên các form chuẩn. Bạn có thể dùng nó trong form personalization hoặc mã custom.pll để thêm chức năng tùy chỉnh vào Oracle form chuẩn.