Author: Edison Hotmail:edisonlsj@hotmail.com
根据 Oracle ERP 的机制来创建序号
本文假设 Form 中存在二个 Master-Detail 关系的 block, 名称分别为 Headers 和 Lines ,
1. 创建参数
名 称: query_mast_det_lines_flag
类 型: 字符
长 度: 1
初始值: N
说 明: 为了避免 lines 在查询期间执行 W-C-R , 设置一个标记, 重新设置适当的标记在 lines 的
W-C-R 触发器结束之后
名 称: max_line_num
类 型: 数字
长 度: 30
初始值: 0
说 明: 用来保存当前最大的序号
名 称: clearing_block
类 型: 字符
长 度: 1
初始值: N
说 明: 为 lines 行号的编号方式设置必须的参数
2. 实现步骤
a. 修改程序单元中的 Query_Master_Details 过程, 在 IF reldef = 'FALSE' THEN 后面增加以下代
码:
IF detail = 'LINES' THEN
COPY('Y', 'PARAMETER.query_mast_det_lines_flag');
ELSIF detail = 'DISTRIBUTIONS' THEN
COPY('Y', 'PARAMETER.query_mast_det_dist_flag');
END IF;
b. 修改 form-level 层的 ON-CLEAR-DETAIL 触发器, 修改如下:
BEGIN
:parameter.clearing_block := 'Y';
Clear_All_Master_Details;
:parameter.clearing_block := 'N';
END;
c. 在数据库中增加一下 package , 包含以下二个过程, 主要用途是检查序号的有效性以及取当
前最大的序号
Procedure check_unique(x_header_id number, x_line_id number);
Procedure get_max_line_num(x_header_id);
具体的代码如下: