You are on page 1of 31

PERP-xxx.

CHUẨN LẬP TRÌNH


ORACLE FORM

Hà Nội, 06-2011
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

MỤC LỤC

MỤC LỤC..............................................................................................................................................2
1 PHIÊN BẢN VÀ MÃ HIỆU TÀI LIỆU..................................................................................4
1.1 MÃ HIỆU..................................................................................................................................................4

1.2 CÁC THAY ĐỔI......................................................................................................................................4

1.3 NGƯỜI DUYỆT.......................................................................................................................................4

1.4 PHÂN PHỐI.............................................................................................................................................5

2 GIỚI THIỆU.............................................................................................................................6
2.1 MỤC ĐÍCH CHUẨN HOÁ.....................................................................................................................6

2.2 ƯU ĐIỂM..................................................................................................................................................6

2.3 NHƯỢC ĐIỂM........................................................................................................................................6

3 QUY ƯỚC ĐẶT TÊN...............................................................................................................8


3.1 TÊN CHỨC NĂNG.................................................................................................................................8

3.2 TÊN STORED PROCEDURE...............................................................................................................8

3.3 TÊN BIẾN................................................................................................................................................9

3.3.1 Dạng hằng số.............................................................................................................................................................10

3.3.2 Dạng tham số............................................................................................................................................................10

3.3.3 Dạng con trỏ(CURSOR)..........................................................................................................................................10

3.3.4 Dạng bản ghi (RECORD)........................................................................................................................................10

3.3.5 Dạng chỉ số (INDEX) trong vòng lặp FOR............................................................................................................11

3.3.6 Dạng PL/SQL TABLE TYPE.................................................................................................................................11

3.3.7 Tên các đối tượng trên Form...................................................................................................................................11

4 MỘT SỐ QUY ĐỊNH LẬP TRÌNH FORM.........................................................................15


4.1 QUY ĐỊNH THIẾT KẾ GIAO DIỆN..................................................................................................15

4.1.1 Windows....................................................................................................................................................................15

4.1.2 Canvas....................................................................................................................................................................... 15

4.1.3 Prompt....................................................................................................................................................................... 15

4.1.4 Frame......................................................................................................................................................................... 16

4.1.5 Visual Attribute........................................................................................................................................................16

4.1.6 List Of Values (LOV)...............................................................................................................................................16

4.1.7 Item............................................................................................................................................................................ 17

4.2 QUY ĐỊNH HIỂN THỊ THÔNG BÁO LỖI........................................................................................18

cmnd-chuan-lap-trinh-oracle-form Trang 2 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

4.3 QUY ĐỊNH KHÁC................................................................................................................................19

5 QUY ƯỚC HIỂN THỊ............................................................................................................22


5.1 QUY ƯỚC CHUNG...............................................................................................................................22

6 GHI CHÚ.................................................................................................................................25

7 KINH NGHIỆM......................................................................................................................26
7.1 LUÔN LUÔN BẪY LỖI........................................................................................................................26

7.2 SỬ DỤNG KIỂU DỮ LIỆU PHÙ HỢP...............................................................................................26

7.3 %TYPE và %ROWTYPE....................................................................................................................26

7.4 SUBTYPE...............................................................................................................................................27

7.5 CONSTANT...........................................................................................................................................27

7.6 ĐƠN GIẢN HOÁ BIỂU THỨC LOGIC PHỨC TẠP BẰNG BIẾN HOẶC HÀM BOOLEAN...27

7.7 XOÁ BỎ NHỮNG BIẾN VÀ ĐOẠN CODE KHÔNG SỦ DỤNG...................................................27

7.8 MỘT SỐ CHÚ Ý KHI THIẾT KẾ / LẬP TRÌNH TRÊN ORACLE FORM BUILDER...............28

7.8.1 Giá trị của check item..............................................................................................................................................28

7.8.2 EXECUTE_QUERY trong TRIGGER..................................................................................................................28

7.8.3 Thuộc tính của DATA BLOCK..............................................................................................................................28

7.8.4 Thuộc tính của item..................................................................................................................................................28

7.8.5 TRIGGER Mức BLOCK.........................................................................................................................................29

7.8.6 TRIGGER mức item................................................................................................................................................31

7.8.7 List of values (LOV).................................................................................................................................................31

7.8.8 Truy cập Item của Form A từ Form B được gọi từ Form A.......................................................................................32

cmnd-chuan-lap-trinh-oracle-form Trang 3 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

cmnd-chuan-lap-trinh-oracle-form Trang 4 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

1 KIỂM SOÁT TÀI LIỆU

1.1 MÃ HIỆU

Mã hiệu tài liệu và phiên bản PERP

Bộ phận/người lập

Ngày lập

Đường dẫn SVN

Người duyệt

Ngày duyệt
Ngày hiệu lực

1.2 CÁC THAY ĐỔI

Ngày Phiên Tác giả Mô tả thay đổi


bản
23-06-2011 0.1 Nguyễn Văn Biên

1.3 NGƯỜI DUYỆT

Tên Vị trí Chữ ký

cmnd-chuan-lap-trinh-oracle-form Trang 5 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

2 GIỚI THIỆU

2.1 MỤC ĐÍCH CHUẨN HOÁ


 Để việc lập trình cũng như một trò chơi để mọi người cùng chơi được trò chơi, trò
chơi đó phải có một ngôn ngữ và nguyên tắc chung bắt buộc mọi người phải tuân
thủ theo chúng. Mặc dù có thể gây khó chịu cho những người quen chơi các trò chơi
khác, nhưng để có thể cùng tham gia bắt buộc phải học ngôn ngữ và tuân thủ các
nguyên tắc đề ra.
 Việc chuẩn hoá là điều cần thiết và vô cùng quan trong cho các dự án lớn, việc này
được rút ra từ nhiều dự án, từ nhiều công ty và đã được đưa ra tranh luận khá nhiều.
Việc chuẩn hoá không phải là cách thiết kế của bất kỳ một cá nhân nào, mà nó phải
mang tính mở để tất cả mọi người cùng đóng góp ý kiến, sửa đổi để xây dựng nó
hoàn thiện hơn, để nó trở thành sân chơi phù hợp với tất cả mọi người.

2.2 ƯU ĐIỂM
 Bất kỳ người lập trình nào xem mã nguồn của mình hoặc của người khác đều có thể
hiểu được đoạn mã đó sẽ thực hiện công việc gì.
 Người mới tham gia dự án, hoặc người maintain dự án sẽ nhanh chóng tiếp thu được
mã nguồn của người thực hiện trước đó.
 Lập trình viên sẽ làm nảy sinh ít lỗi hơn và dễ kiểm soát hơn, tránh được các lỗi lặp
đi lặp lại.
 Tránh được rủi do cho dự án khi một thành viên không thể tham gia tiếp phần việc
của mình.
 Tạo bước chuẩn bị mọi thứ cần thiết để thực hiện một cách chuyên nghiệp cho
những người bắt đầu làm quen với công cụ Oracle.
 Chuẩn hoá giúp cho dự án thực hiện một cách trôi chảy hơn.

2.3 NHƯỢC ĐIỂM


 Chỉ áp dụng trên một ngôn ngữ lập trình nào đó. Việc chuẩn hoá sẽ trở thành ngớ
ngẩn trên một ngôn ngữ khác hoặc nó được tạo lên bởi người không thông thạo ngôn
ngữ mà dự án đang sử dụng.
 Việc chuẩn hoá có thể làm giảm bớt tính sáng tạo.
 Việc chuẩn hoá ép buộc quá nhiều cấu trúc.

cmnd-chuan-lap-trinh-oracle-form Trang 6 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

 Các chuẩn có thể coi như là nguyên nhân gây khó chịu bởi nó là cách code mới hoặc
cách code gây buồn chán đối những ngưòi thường xuyên viết trên nhiều ngôn ngữ
khác nhau, và không muốn tuân theo chuẩn.

cmnd-chuan-lap-trinh-oracle-form Trang 7 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

3 QUY ƯỚC ĐẶT TÊN


 Đặt tên phải ngắn gọn và thể hiện được ý định của module, đoạn mã cần thể hiện.
 Mọi người trong đội dự án phải hiểu được tên do người khác đặt ra mang ý nghĩa gì.
 Chỉ những người lập trình, người thực sự hiểu hệ thống mới đặt được cái tên phù
hợp với hệ thống. Tên phải thể hiện được mối quan hệ rõ ràng sáng sủa và gần với
ngôn ngữ tự nhiên.
 Trong quy ước đặt tên không quy định viết hoa, thường (trừ tên module). Việc định
dạng này quy định ở mục Quy ước hiển thị

3.1 TÊN CHỨC NĂNG


 Chức năng là tên file library, MENU, FORM BUILDER, REPORT BUILDER.
 Tên chức năng có phần tên là chữ hoa và phần mở rộng là chữ thường
Ví dụ FIN11.fmb, MENU.mmb

3.2 TÊN STORED PROCEDURE


 Stored Procedure bao gồm các PROCEDURE, FUNCTION, PACKAGE,
TRIGGER lưu trữ trong database.
 Đối với những Object này tên gọi được quy định theo mẫu có sau:
Object_name = phan1_phan2_phan3_phan4_phan5_phan6
o Phần1 - (Bắt buộc)
- Phần này nhằm phân biệt object này nằm tại DATABASE, FORM
BUILDER hay REPORT BUILDER. Quy ước phần này là 1 chữ và bắt
buộc (trừ trường hợp các hàm, thủ tục nằm trong 1 PACKAGE nào đó).
+ F: Thủ tục mức form.
+ R: Thủ tục trong report.
+ D: Thủ tục trong Database
+ L: Thủ tục trong Library
o Phần 2 - (Bắt buộc)
- Loại phân hệ gồm viết tắt:
+ FIN: Phân hệ kế toán
+ INV: Phân hệ vật tư
+ SAL: Phân hệ bán hàng
+ PO: phân hệ mua hàng
+ HR: phân hệ nhân sự tiền lương
+ DOC: phân hệ quản lý tài liệu
+ CAT: phân hệ sản xuất

cmnd-chuan-lap-trinh-oracle-form Trang 8 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

+ PRO: phân hệ Quản lý dự án


+ SEC: phân hệ quản trị hệ thống
o Phần 3 (bắt buộc)
- Loại Module gồm 3 từ viết tắt:
+ TRI: Triggers
+ PKG : Package
+ FUN: Function
+ PRO : Procedure
+ TYP: Type
o Phần 4 (bắt buộc)
- Phần này thể hiện ngắn gọn mục đích của object.
- Nếu object là PACKAGE thì tên sẽ là một danh từ. Bởi FUNCTION
thường trả lại giá trị - Ý nghĩa của giá trị này được lấy làm tên gọi,
PROCEDURE thường thực hiện một hoặc nhiều hành động – Hành động
chính trong thủ tục sẽ được lấy làm tên gọi PROCEDURE.
- Các tiền tố hay thường sử dụng cho thủ tục:
+ ins_Thủ tục thực hiện insert dữ liệu
+ get_Thủ tục thực hiện lấy dữ liệu từ …
+ del_Thủ tục DELETE dữ liệu
+ upd_Thủ tục UPDATE dữ liệu
+ chk_Thủ tục kiểm tra dữ liệu
o Phần 5 (Chỉ áp dụng bắt buộc đối với TRIGGER database)
- Phần này là tên viết tắt của TABLE được kích hoạt.
o Phần 6 (Chỉ áp dụng bắt buộc đối với TRIGGER database)
- Phần này là ghép 3 ký tự viết tắt của sự kiện kích hoạt
+ B: Trước khi (Before)
+ A: Sau khi (After)
+ I : Insert
+ U : Update
+ D : Delete
+ R: đối với for each row
- Ví dụ:
+ BI – Before insert.
+ BIR – Before insert for each row

3.3 TÊN BIẾN


 Tên biến rõ ràng, sáng sủa, nhìn vào biến ta có thể hiểu được phần nào ý nghĩa của
biến. Việc đặt tên biến theo quy ước không những làm giảm bớt việc bổ sung thêm
các chú thích (comments) mà còn làm tăng hiệu quả code bởi vì các dạng của biến
đã gợi ý các quy luật sử dụng nó.

cmnd-chuan-lap-trinh-oracle-form Trang 9 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

o Quy ước đặt tên biến như sau: Phần1_Phần2.


- Phần1: Là ký tự đầu tiên của kiểu dữ liệu
+ c : char+varchar2
+ n: number
+ d: date
+ b: boolean
+ f: Float
+ Db: Double
+ Rid: Rowid
+ i: Integer
+ v: đối với khai báo kiểu Table.Column%Type
ví dụ: v_User_Name Danh_Sach_User.User_Name%Type;
- Phần2: Là tên của biến, nếu khai báo kiểu Table.Column%Type thì phần 2
nên là column

3.3.1 Dạng hằng số


Hằng số được quy ước giống như tên biến và có thêm hậu tố _co
 Ví dụ: d_last_date_co CONSTANT DATE := SYSDATE;

3.3.2 Dạng tham số


Ứng với mỗi dạng tham số IN, OUT và IO ta bổ sung vào tên biến hậu tố in, out
và io
 Ví dụ:
PROCEDURE pro_calc_sales (n_company_id_in IN NUMBER,
c_call_type_out OUT VARCHAR2,
c_company_io IN OUT VARCHAR2)

BEGIN

END;

3.3.3 Dạng con trỏ (CURSOR)


Tên của CURSOR bao gồm 2 thành phần: Tiền tố cur_ và Tên viết tắt của bảng
chính trong câu lệnh SELECT (nếu có nhiều bảng – Tên viết tắt này đúng theo
quy định thiết kế)
 Ví dụ: CURSOR cur_cus IS
SELECT …
FROM customers cus, …

cmnd-chuan-lap-trinh-oracle-form Trang 10 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

3.3.4 Dạng bản ghi (RECORD)


Các bản ghi được định nghĩa trên một TABLE hoặc một CURSOR, ngoại trừ
trường hợp dạng của biến này mang ý nghĩa khác hẳn và sự biến dạng là cần
thiết (mang ý nghĩa nghiệp vụ khác hẳn) còn không thì quy ước đặt tên là tên
TABLE hoặc tên CURSOR cộng thêm tiền tố r_.
 Ví dụ: CURSOR có tên là cur_company thì tên bản ghi dựa trên CURSOR đó được
đặt là r_company.

3.3.5 Dạng chỉ số (INDEX) trong vòng lặp FOR


Đối với vòng lặp con trỏ (CURSOR) tên của tham số được là sự kết hợp của
tiền tố r_ và tên biến con trỏ (CURSOR).
 Ví dụ:
FOR r_emp IN cur_emp LOOP
….
END LOOP;

3.3.6 Dạng PL/SQL TABLE TYPE


Dạng PL/SQL TABLE TYPE được quy ước có hậu tố _tabtype.
 Ví dụ:
TYPE emp_names_tabtype IS TABLE OF …, TYPE dates_tabtype IS TABLE
OF ..

3.3.6.1 Dạng PL/SQL TABLE


 Một PL/SQL TABLE được khai báo dựa trên lệnh khai báo dạng PL/SQL TABLE
TYPE trên, không có gì đặc biệt ta sử dụng tên dạng này giống như tên PL/SQL
TABLE TYPE nhưng thay thế hậu tố _tabtype bằng _tab.
 Ví dụ:
emp_names_tab emp_names_tabtype; dates_tab dates_tabtype;

3.3.6.2 Dạng SUBTYPE


Những biến có kiểu SUBTYPE tên quy ước có hậu tố subtype
Ví dụ: SUBTYPE primary_key_subtype IS BINARY_INTEGER; SUBTYPE
large_string_subtype IS VARCHAR2

3.3.7 Tên các đối tượng trên Form

3.3.7.1 Tên ALERT


 Tên Alert có dạng: ALT_<Tên> trong đó:

cmnd-chuan-lap-trinh-oracle-form Trang 11 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

o ALT_ là bắt buộc


o Tên tùy ý
- Ví dụ: ALT_ERROR

3.3.7.2 Tên BLOCK


 Tên Block base giữ nguyên tên bảng mà nó base
 Ví dụ: EMPLOYEES
 Tên block unbound:
o Tất cả các item trên block nếu hiển thị thì phải cùng hiển thị trên 1 màn hình để
sau này dùng phím tab không bị chuyển sang màn hình khác
o Tên có dạng: BLK_CVStt1Stt2_<Tên> trong đó
- BLK _CV là bắt buộc
- Stt1 là số thứ tự của CANVAS content mà các item trong nó hiển thị
- Stt2 là số thứ tự của block nếu trên 1 CANVAS content bố trí nhiều Block
Unbound
- Ví dụ: BLK_CV24_IN

3.3.7.3 Tên ITEM


 Tên Item base được giữ nguyên như tên column mà nó base
 Cách đặt tên item Unblound:
Stt Đối tượng Cách viết tắt

1 Text Item txt_<Tên>

2 Display Item dis_<Tên>

3 Check Box chk_<Tên>

4 Radio Group rdg_<Tên>

5 Image Item img_<Tên>

6 List Item lst_<Tên>

7 Chart Item cht_<Tên>

8 OLE Item ole_<Tên>

9 VBX Item vbx_<Tên>

10 Push Button Pb_< Tên >

3.3.7.4 Tên CANVAS


 Content Canvas thì tên có dạng: CV_CT_Stt_<Tên> trong đó

cmnd-chuan-lap-trinh-oracle-form Trang 12 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

o CV_CT_ là bắt buộc


o Stt là thứ tự các content canvas trong form
 Các loại Canvas khác thì tên có dạng: CV_LoạiCanvas_Stt1Stt2_<Tên> trong đó:
o CV_ là bắt buộc buộc
o LoạiCanvas là các từ viết tắt dưới đây:
- ST: ứng với Stack canvas
- VT: Vertical Toolbar
- HT: Horizontal Toolbar
- TB: Tab
o Stt1: là số thứ tự của content canvas mà nó gắn với (hiển thị cùng), nếu không
gắn với content canvas nào thì Stt1 là 0.
o Stt2: là số thứ tự của các loại canvas khác content gắn với cùng 1 content
 Ví dụ: có 2 Stacked canvas và 1 Tab canvas gắn với content canvas CV_CT_2 thì
tên của chúng như sau: CV_ST_11_Hồ_sơ, CV_ST_12_Danh_mục,
CV_TB_13_Nghề_nghiệp.

3.3.7.5 Tên LOV


 Tên LOV có dạng: LOV_Tên1_Tên2 trong đó:
o LOV_ là bắt buộc
o Tên1 là Alias của block
o Tên2 là tên Item gắn với LOV hoặc Alias của bảng dữ liệu chính
 Ví dụ: LOV_EMP

3.3.7.6 Tên RECORD GROUP


 Tên Record Group có dạng: RG_Tên trong đó:
o RG_ là bắt buộc
o Tên là Alias của bảng dữ liệu chính
 Ví dụ: RG_EMP

3.3.7.7 Tên Window


 Tên Window có dạng: WND_Tên trong đó:
o WND_ là bắt buộc
o Tên tùy ý, sao cho có ý nghĩa một chút
 Ví dụ: WND_MAIN

3.3.7.8 Tên Parameters


 Tên Parameters có dạng: P<Kiểu dữ liệu>_<Tên> trong đó:
o P là bắt buộc

cmnd-chuan-lap-trinh-oracle-form Trang 13 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

o Kiểu dữ liệu là các ký tự viết tắt sau:


- c: Char
- d: Date
- n: Number
o Tên tùy ý, nên đặt gắn với nghiệp vụ
 Ví dụ: pc_Emp_Id

3.3.7.9 Tên Program Units


 Theo quy định Tên Stored Procedure ở trên

3.3.7.10 Tên VISUAL ATTRIBUTES


 Tên Visual Attributes có dạng: VA_Tên, trong đó
o VA_ là bắt buộc
o Tên tùy ý và nêu được ý nghĩa của nó
 Ví dụ: VA_CANVAS

cmnd-chuan-lap-trinh-oracle-form Trang 14 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

4 MỘT SỐ QUY ĐỊNH LẬP TRÌNH FORM

4.1 QUY ĐỊNH THIẾT KẾ GIAO DIỆN


Đơn vị tính của form là inch

4.1.1 Windows
Name: WND_MAIN
Maximize Allowed: No
Minimize Allowed: No
Width: 10.24
Height: 6
Title: TÊN CHỨC NĂNG – user truy cập <tên user truy cập>, đưa vào thư viện

4.1.2 Canvas
Name: theo quy định đặt tên trên
Width: 10.24
Height: 6
Background color: GRAY12
Foreground color: DARKBLUE
Lable của Tab Pages canvas: Viết hoa chữ cái đầu tiên còn lại viết thường

4.1.3 Prompt
Background color: GRAY12
Foreground color: DARKBLUE
Font Name: Arial
Font Size: 10
Font Weight: Medium
Font Style: Plain
Font Spacing: Normal
Prompt Attachment Edge:
 Start: Nếu hiển thị 1 record
 Top: Nếu hiển thị nhiều record
Prompt Alignment: Center
Prompt Alignment Offset: 0.05

cmnd-chuan-lap-trinh-oracle-form Trang 15 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

Chú ý: Trong trường hợp các Prompt chồng lấn lên nhau trong Layout Spread
table thì có thể tùy biến để hiển thị rõ Prompt

4.1.4 Frame
Join Type: Bevel
Bevel: Inset
Frame Title Alignment: Left
Frame Title Offset: 0.15
Frame Title Spacing: 0.02
Frame Title Foreground Color: darkblue
Frame Title Font Name: Arial (Chữ in – caps lock)
Frame Title Font Size: 8
Frame Title Font Weight: Bold
Frame Title Font Style: Plain
Frame Title Font Spacing: Normal
Fill Patern: None

4.1.5 Visual Attribute


 Current Record Visual Attribute Group (Màu Highlight của Current Record):
o Foregroud color : white
o Background color : r25g50b75
o Fill Pattern : transparent
o Font name : Arial
o Font Size :9
o Font Weight : Bold
o Font Style : Plain
o Font Spacing : Normal
 Chú ý:
o Áp dụng cho Các item nằm trên layout Kiểu Spread Table (hiển thị nhiều
record)
o Không áp dụng cho CHECK BOX, RADIO BUTTON, Push Button

4.1.6 List Of Values (LOV)


Background color: gray12
Foreground color: darkblue
Fill pattern: transparent
Font Name: Arial
Font Size: 10

cmnd-chuan-lap-trinh-oracle-form Trang 16 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

Font Weight: Medium


Font Style: Plain
Font Spacing: Normal
Width: 5
Height: 5
X position: 0
Y position: 0
Automation Position: No

4.1.7 Item

4.1.7.1 Text Item, Display item, List Item


 Name: theo quy định đặt tên trên.
 Justification:
o Right nếu kiểu dữ liệu là NUMBER
o Start nếu kiểu dữ liệu là VARCHAR, DATE
 Height: 0.25
 Bevel: Lowered
 Background color : White
 Foreground color : Black
 Fill pattern: transparent
 Font Name : Arial
 Font Size : 10
 Font Weight : Medium
 Font Style : Plain
 Font Spacing : Normal

4.1.7.2 Check Box, Radio button, Push Button


 Name: theo quy định đặt tên trên.
 Height: 0.25
 Background color : GRAY12
 Foreground color : DARKBLUE
 Fill pattern: transparent
 Prompt Font Name : Arial
 Prompt Font Size : 10
 Prompt Font Weight : Medium
 Prompt Font Style : Plain
 Prompt Font Spacing : Normal

cmnd-chuan-lap-trinh-oracle-form Trang 17 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

Chú ý:
 Đối với Push button xử lý:
o Width: Trên cùng màn hình các Push Button nên có cùng Width
o Label: Cần có ký tự để thực hiện phím Shortcut. Ký tự làm shortcut là : 1. , 2. ,
… và ở vị trí đầu tiên của Label, kế tiếp là dấu chấm (.) , tiếp theo nội dung
label
o Mouse Navigate: Yes
o Keyboard Navigable: Yes
 Đối với Push button LOV:
o Mouse Navigate: No
o Keyboard Navigable: No
o Iconic: Yes
o Icon Filename: AFLIST

4.2 QUY ĐỊNH HIỂN THỊ THÔNG BÁO LỖI


 Font chữ:
o Font Name : Arial
o Font Size : 10
o Font Weight : Medium
o Font Style : Plain
o Font Spacing : Normal
o Background color : GRAY12
 Thông báo lỗi sử dụng thư viện perp.pll chi tiết:
o Bảng Qms_Message (QME) để việt hóa thông báo lỗi của oracle và lưu trữ các
thông báo lỗi của hệ thống.
Stt Tên cột Diễn giải

1 MSG_CODE Mã thông báo

2 MSG_TEXT Thông báo

3 ALERT_IND

4 SUPPR_WRNG_IND Bỏ qua Warning

5 WRNG_ONLY_IND Chỉ cảnh báo mà không dừng chương trình

6 HELP_TEXT

7 LANG_CODE Mã ngôn ngữ hiển thị thông báo

8 CREATED_BY Người tạo

cmnd-chuan-lap-trinh-oracle-form Trang 18 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

9 MODIFIED_BY Người sửa

10 MODIFY_DATE Ngày sửa

11 CREATE_DATE Ngày tạo


o Các thông báo trên module phải đưa hết xuống bảng QME, trên form chỉ gọi
đến mã
- Mục đích của việc này là dễ dàng sửa đổi thông báo bằng cách update dưới
DB mà không cần sửa form
- Đặt mã theo quy tắc sau: mã chức năng-Stt, trong đó Stt gồm 2 chứ số tăng
dần trong module 01-99
o Sử dụng thủ tục l_pkg_mess trong thư viện perp.pll:
Procedure Pro_Push
(
c_Msg_In In Varchar2
,c_Msg_Type_In In Varchar2 Default 'I'
,c_Loc_In In Varchar2 Default ''
,c_P1_In In Varchar2 Default Null
,c_P2_In In Varchar2 Default Null
,c_P3_In In Varchar2 Default Null
,c_P4_In In Varchar2 Default Null
)
- c_Msg_In là Mã thông báo hoặc thông báo
- c_Msg_Type_In là kiểu thông báo:
+ ‘I’ Thông báo thông thường
+ ‘W’ cảnh báo người dùng
+ ‘D’ hộp thoại giao tiếp với người dùng dạng có/không? Trả về dùng
biến global.dialog_answer
+ ‘E’ Thông báo lỗi, khi hiển thị thông báo này thì dừng chương trình
luôn (dùng lệnh raise form_trigger_failure)
- c_Loc_In: là mã ngôn ngữ thông báo lỗi, hiện tại chưa dùng
- c_p1_In đến c_p4_In là giá trị tương ứng cho các đối số <p1> đến <p4>
trong thông báo

4.3 QUY ĐỊNH KHÁC


 Không nên sử dụng các biến Global
 Mọi xử lý canvas, window phải code trong thủ tục f_pro_manage_canvas (trừ một
số trường hợp phức tạp, không thể xử lý)
 Không cho phép phóng to, thu nhỏ window, cụ thể thuộc tính Maximize Allowed là
No và Minimize Allowed là No

cmnd-chuan-lap-trinh-oracle-form Trang 19 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

 Các button List Of Values (LOV) không cho phép điều hướng đến, cụ thể thuộc tính
Keyboard Navigate là No và Mouse Navigate là No
 Các button xử lý phải cho phép điều hướng đến, cụ thể thuộc tính Keyboard
Navigate là Yes và Mouse Navigate là Yes
 Các item được điều hướng đến trong 1 block chỉ được phép nằm trên 1 màn hình (để
tránh di chuyển bằng phím tab đang từ màn hình này lại nhảy sang màn hình khác)
 Các Block Base phải cho phép query trên các Item Unbound
 Cần lưu lại được thông tin cập nhật bản ghi  yêu cầu:
o Đối với các block base cho phép insert, update dữ liệu thì cần thêm vào trigger
pre-insert, pre-update đoạn code sau:
- Pre-insert
:TEN_BLOCK.Created_By := :Global.User_Name;
:TEN_BLOCK.Create_Date := Sysdate;
- Pre-update
:TEN_BLOCK.Modified_By := :Global.User_Name;
:TEN_BLOCK.Modify_Date := Sysdate;
o Kiểu dữ liệu của 2 item Ngay_Tao và Ngay_Sua_Cuoi là Datetime
 Phải xử lý trigger pre-query và post-query của block base như sau:
o Ví dụ có block base EMPLOYEES, cách xử lý pre-query và post-query:
- Thêm 1 biến vào Package Spec f_pkg_ local như sau:

Hình 1 Cách thêm một biến vào Package Spec f_pkg_local

Mỗi block base phải sử dụng 1 biến riêng


- Code pre-query:
Declare
v_Block_Id Block := Find_Block('EMPLOYEES');
c_Sub_Where Varchar2(32767) := Null;
c_Def_Where Varchar2(32767) :=
Get_Block_Property(v_Block_Id, Default_Where);
c_String Varchar2(2000) := Null;
Begin
If (f_Pkg_Local.c_Emp_Def_Where = 'first_time') Then
f_Pkg_Local.c_Emp_Def_Where :=
Get_Block_Property(v_Block_Id, Default_Where);
Else

cmnd-chuan-lap-trinh-oracle-form Trang 20 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

c_Def_Where := f_Pkg_Local.c_Emp_Def_Where;
End If;
-- Truy van Unbound Item
-- UB Gro_Group_Number
c_Sub_Where := Null;
c_String := Name_In('EMPLOYEES.GRO_GROUP_NUMBER');
If (c_String Is Not Null) Then
If Substr(c_String, 1, 1) In ('<', '>', '=') Then
c_Sub_Where := l_Fun_Add_And(c_Sub_Where) ||
'(GROUP_NUMBER ' || c_String || ')';
Elsif Substr(c_String, 1, 1) = '#' Then
c_Sub_Where := l_Fun_Add_And(c_Sub_Where) ||
'(GROUP_NUMBER ' || Substr(c_String, 2) || ')';
Elsif Instr(c_String, '%') <> 0 Then
c_Sub_Where := l_Fun_Add_And(c_Sub_Where) ||
'(GROUP_NUMBER LIKE ''' || Replace(c_String, '''', '''''') ||
''')';
Else
c_Sub_Where := l_Fun_Add_And(c_Sub_Where) ||
'(GROUP_NUMBER =''' || Replace(c_String, '''', '''''') || ''')';
End If;
End If;
If (c_Sub_Where Is Not Null) Then
c_Def_Where := l_Fun_Add_And(c_Def_Where) || '(GRO_ID
IN (SELECT Gro_Id FROM GROUPS WHERE ' || c_Sub_Where || '))';
End If;
-- Cac Item UB khac
--
Set_Block_Property(v_Block_Id, Default_Where, c_Def_Where);
Exception
When Value_Error Then
l_Pkg_Mess.Pro_Push('Lỗi: ' || Sqlerrm, 'E');
End;
Code Post-query:
-- Truy van du lieu cho cac truong Unbound
-- Resets block Where clause
Begin
Set_Record_Property(:System.Trigger_Record, 'EMPLOYEES',
Status, Query_Status);
If (f_Pkg_Local.c_Emp_Def_Where <> 'first_time') Then
Set_Block_Property('EMPLOYEES', Default_Where,
f_Pkg_Local.c_Emp_Def_Where);
f_Pkg_Local.c_Emp_Def_Where := 'first_time';
End If;
End;

cmnd-chuan-lap-trinh-oracle-form Trang 21 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

5 QUY ƯỚC HIỂN THỊ

5.1 QUY ƯỚC CHUNG


Nên dùng chung 1 công cụ hỗ trợ format tự động là PL/SQL Developer và sử
dụng file format chuẩn PLSQL_Rule.br được thiết lập như sau:

Hình 2 File chuẩn PLSQL_Rule.br

Hình 3Chọn Control Structures

cmnd-chuan-lap-trinh-oracle-form Trang 22 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

Hình 4 DML

Hình 5 Paramete Declaration

Hình 6 Record Type Declaration

cmnd-chuan-lap-trinh-oracle-form Trang 23 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

6 GHI CHÚ
 Chú thích mã lệnh là việc rất quan trọng đối với từng thành viên trong nhóm nhưng
tiếc rằng ý thức về việc ghi comments này lại thường bị lãng quên. Về mặt quan
trong của comment tài liệu này không muốn nhắc lại nữa.
 Khi bắt đầu một PROCEDURE, một FUNCTION, TRIGGER, khối lệnh … bắt
buộc yêu cầu người lập trình cần comments ngay sau phần tên của module trước các
lệnh khai báo và trước từ khoá BEGIN
 ví dụ:
FUNCTION fun_name(...)
RETURN NUMBER IS
/*-------------------------------------------------------------
---Mục đích:
---Tham số: (nếu có)
---Người tạo:
---Ngày tạo:
---Người sửa đổi cuồi cùng:
---Ngày sửa đổi cuối cùng:
-------------------------------------------------------------*/
...
BEGIN
....
END;

Mỗi đoạn lệnh cần comment giải thích rõ nghĩa của đoạn lệnh.

cmnd-chuan-lap-trinh-oracle-form Trang 24 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

7 KINH NGHIỆM
Phần này ghi lại các kinh nghiệm thu được trong quá trình lập trình và maintain
chương trình, hỗ trợ người sử dụng.

7.1 LUÔN LUÔN BẪY LỖI


Yêu cầu luôn luôn bắt EXCEPTION cho các trường hợp ngoại lệ, đặc biệt là
cho tất cả các trường câu lệnh SELECT, INSERT, UPDATE, DELETE dữ liệu.
Trong khoảng thời gian lập trình và test chương trình, người lập trình và tester
thường tao tác trên tập dữ liệu ít, chuẩn khả năng tìm ra lỗi là không nhiều. Vì
thế có gắng dự tính các ngoại lệ và đưa ra các xử lý tương ứng:
BEGIN
---
EXCEPTION
WHEN exception_name THEN
statements;
END;
Các ngoại lệ thường gặp khi thao tác với câu lệnh DML
BEGIN
---
EXCEPTION
WHEN no_data_foundTHEN
Statements1;
WHEN no_data_foundTHEN
Statements2;

END;
Ta đề phòng thêm các trường hợp ngoại lệ khác
EXCEPTION
WHEN others THEN
Statements2;

7.2 SỬ DỤNG KIỂU DỮ LIỆU PHÙ HỢP


Sử dụng kiểu dữ liệu phù hợp sẽ tiết kiệm bộ nhớ.

7.3 %TYPE và %ROWTYPE


 Sử dụng %Type và % Rowtype để gán kết kiểu dữ liệu của biến.
 Khi khai báo một biến sử dụng %TYPE hay %ROWTYPE, là bạn đã “néo chặt”
kiểu dữ liệu của biến với một kiểu dữ liệu được định nghĩa trước.

cmnd-chuan-lap-trinh-oracle-form Trang 25 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

7.4 SUBTYPE
 Sử dụng SUBTYPE để chuẩn hóa kiểu dữ liệu thường xuyên sử dụng

7.5 CONSTANT
 Sử dụng CONSTANT lưu trữ những giá trị không thay đổi
 Nếu giá trị của biến không bị thay đổi, thì khai báo nó như một hằng số
CONSTANT.

7.6 ĐƠN GIẢN HOÁ BIỂU THỨC LOGIC PHỨC TẠP BẰNG BIẾN
HOẶC HÀM BOOLEAN
 Giá trị của một biểu thức logic là một trong ba giá trị: TRUE, FALSE, hoặc NULL.
Ta nên sử dụng biến hoặc hàm logic thay thế những biểu thức logic trong trường
hợp biểu thức đó phức tạp; Mục đích là code trông dễ đọc, dễ hiểu.
 Ví dụ:
IF total_sal BETWEEN 10000 AND 50000 AND
emp_status(emp_rec.empno) = 'N' AND
(months_between(emp_rec.hiredate, SYSDATE) > 10) THEN
give_raise(emp_rec.empno);
END IF;

Sẽ được thay thế bằng đoạn lệnh sau:

IF eligible_for_raise(totsal, emp_rec) THEN


give_raise(emp_rec.empno);
END IF;
Hay

DECLARE
eligible_for_raise BOOLEAN := total_sal BETWEEN 10000 AND 50000
AND
emp_status(emp_rec.empno) = 'N'
AND
(months_between(emp_rec.hiredate,
SYSDATE) > 10);
BEGIN
IF eligible_for_raise THEN
give_raise(emp_rec.empno);
END IF;
END;

cmnd-chuan-lap-trinh-oracle-form Trang 26 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

7.7 XOÁ BỎ NHỮNG BIẾN VÀ ĐOẠN CODE KHÔNG SỦ DỤNG

7.8 MỘT SỐ CHÚ Ý KHI THIẾT KẾ / LẬP TRÌNH TRÊN ORACLE


FORM BUILDER

7.8.1 Giá trị của check item


 Cần xác định rõ đối với cả 3 trường hợp check, uncheck và others. Việc này rất cần
thiết, vì khi truy vấn trên form trong trường hợp column tương ứng với check item
có giá trị NULL, nếu check item đó không khai báo trường hợp ngoại lệ này, dữ liệu
sẽ không thể hiện trên form, và sẽ mất rất nhiều thời gian để tìm lỗi.

7.8.2 EXECUTE_QUERY trong TRIGGER


 Không nên để lệnh EXECUTE_QUERY trong trigger WHEN-NEW-BLOCK-
INSTANCE của một BLOCK. Khi đó, mỗi khi vào lại BLOCK dữ liệu lại truy vấn
lại (vị trí con trỏ sẽ ở vị trí bản ghi đầu tiên) – không dữ được con trỏ tại bản ghi
trước. Muốn truy vấn, cần xử lý trước khi vào BLOCK.

7.8.3 Thuộc tính của DATA BLOCK


 Điều hướng (navigation): Cần xác định Navigation Type là 1. Same Record; 2.
Change Record; hoặc 3. Change Data Block. Không nên chỉ định PREVIOUS và
NEXT NAVIGATION DATA BLOCK mà nên đặt các data block theo đúng thứ tự
hiện thị của chúng.
 Ràng buộc DATABASE: Cần xác định dữ liệu của DATA BLOCK được lấy từ
TABLE nào không? Mệnh đề WHERE, mệnh để ORDER BY, INSERT/UPDATE,
DELETE allowed?
 Cần đặt tên DATA BLOCK trùng với tên của TABLE nếu nó base trên 1 table nào
đó.
 Không SET thuộc tính CURRENT RECORD VISUAL GROUP cho BLOCK. Nếu
đặt giá trị thuộc tính này nó sẽ ảnh hưởng đến toàn bộ các item, các button của
BLOCK này. Ta nên SET thuộc tính này ở mức item.

7.8.4 Thuộc tính của item


 Điều hướng (navigation): Cần đặt PREVIOUS/ NEXT NAVIGATION ITEM =
NULL và đặt các item theo đúng thứ tự hiển thị của chúng trên CANVAS. Mỗi một

cmnd-chuan-lap-trinh-oracle-form Trang 27 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

màn hình nên có 1 block control riêng và các button xử lý trong màn hình đó sẽ
được đặt trên block control đó, tránh lỗi điều hướng
 Cần xác định DATA TYPE, MAXIMUM LENGTH, DATABASE ITEM,
COLUMN NAME, INSERT/UPDATE/DELETE.
 Không nên sử dụng biến :GLOBAL làm initial value trong thuộc tính của một item,
như thế rất khó kiểm soát. Thay vào đó ta có thể thiết lập initial value thông qua
trigger WHEN-NEW-RECORD-INSTANCE
 Ví dụ:
o Các item có DOMAIN cần hiển thị dưới dạng check box (domain YESNO) hay
poplist (domain khác) cần xác định DOMAIN của item đó trong
CG_REF_CODES

7.8.5 TRIGGER Mức BLOCK


 PRE_QUERY: Cần coding cho phép truy vấn tất cả các un-bound item có hiển thị
trên form.
 POST-QUERY: Chỉ query các un-bound item nào có hiển thị trên form hoặc dùng
cho việc tính toán. Người lập trình cần xem lại phần này trong khâu lập trình vì code
sinh ra thường query cả các dữ liệu không dùng đến. Hoặc trong quá trình fix
module, un-bound item nào không dùng thì không cần query.
 Trigger POST-QUERY chỉ nên dùng để query các un-bound item, không coding
phần kiểm soát nào trong trigger này (xem trigger WHEN-NEW-RECORD-
INSTANCE).
 PRE-INSERT/PRE-UPDATE: Bản chất 2 trigger này giống nhau, cùng kiểm tra tính
hợp lệ của 1 record. Tối thiểu, 2 trigger này phải kiểm tra unique key liên quan đến
table và cập nhật giá trị 2 column CREATE_DATE, CREATED_BY, sinh ra
primary key mới từ sequence (PRE-INSERT) hay MODIFY_DATE,
MODIFIED_BY (PRE-UPDATE). Dĩ nhiên, là còn phải kiểm tra các dữ liệu khác.
 PRE-DELETE: Trước khi xoá, cần có bước hỏi user có muốn xoá không. Sau đó,
cần kiểm tra các foreign key đến nó. Hiện tại, các foreign key đến nó thay đổi nhiều
trong quá trình phát triển ứng dụng. Ban đầu thiết kế bảng PROJECT có 5 table
tham khảo đến PROJECTS.PROJ_ID nhưng sau những lần thay đổi dabatase, số
tham khảo đã tăng lên 10 chẳng hạn. Khi đó, khó mà tìm đúng module nào có thể
xoá PROJECTS mà re-coding.
 WHEN-NEW-BLOCK_INSTANCE: ít nhất phải có lệnh gọi
CGLY$CANVAS_MANAGEMENT; để xác định chính xác các canvas,
spread_table hiển thị. Tuyệt đối không dùng HIDE_VIEW và SHOW_VIEW. Tất cả
các kiểm soát liên quan đến canvas đều phải coding trong thủ tục
CGLY$CANVAS_MANAGEMENT

cmnd-chuan-lap-trinh-oracle-form Trang 28 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

 WHEN-NEW-RECORD-INSTANCE: Cần thực hiện việc kiểm soát các item


(ẩn/hiện, enable/disable, hay ứng với giá trị item A, item B cần thay đổi giá trị tương
ứng…) trong trigger này. Tuyệt đối không dùng kiểm soát này trong trigger POST-
QUERY. Các kiểm soát này thay đổi theo từng record, ứng với mỗi record thì thuộc
tính các item sẽ khác nhau. POST-QUERY chỉ ảnh hưởng đến kiểm soát cho record
đầu tiên. Khi di chuyển đến record thứ 2, phần kiểm soát này không được thực hiện
lại. Khi thực hiện kiểm soát 1 item nào đó. Cần xem lại xem đã có đoạn code nào có
kiểm tra item này và tính toán gộp lại phần kiểm tra.
 Ví Dụ:
If X= ‘A’ then Hiện item B
else ẩn item B
end if;
.....
If Y= ‘A’ then Hiện item B
else ẩn item B
end if;
.....
Rõ ràng đoạn code trên cần gộp lại
If X= ‘A’ and Y = ‘A’ then Hiện item B
else ẩn item B
end if;
Nếu không gộp lại, nếu X <> ‘A’ --> Đoạn đầu tiên ẩn B đi. Sau đó
nếu Y = ‘A’ , item B lại cho hiện --> không đúng với ý đồ ban đầu
nữa.
 POST-INERT/ POST-UPDATE. 2 trigger này cũng cần được chú ý trong kiểm soát
các item như trigger WHEN-NEW-RECORD-INSTANCE. Tình huống: Khi 1
record có giá trị item AAA= ‘A’ thì sẽ cho hiện button BBB. Ban đầu khi chưa có
record nào hoặc AAA <> ‘A’ thi button BBB bị ẩn hoặc disable. Tuy nhiên, trong
các tình huống sau, button BBB phải được “active”:
 Nhập mới record có item AAA = ‘A’. Nhấn save  cần active button BBB  xử lý
trong trigger POST-INSERT. Update item AAA = ‘A’. Nhấn save  cần active
button BBB  xử lý trong trigger POST-UPDATE.
 Trong 1 số trường hợp, trigger POST-DELETE cũng cần có kiểm soát dạng này.
o Cần tận dụng tính năng commit tự động trong các trigger: Tình huống: Sau khi
xoá record hiện tại, ta cần delete/update… thêm 1 số dữ liệu trong database.
Vậy trong trigger PRE-DELETE, sau khi kiểm tra xong các ràng buộc và có thể
xoá được record này, ta chèn thêm đoạn code xử lý phần delete/update trên.
Sau khi xoá xong record trên sẽ có tính năng commit tự động, khi có thay đổi
delete/update cũng sẽ được commit theo.
o Để tạo short-cut cho button (radio button, push button). Dùng ký tự “&” trước
ký tự làm short-cut. Ví dụ, với label “&1. Xem hoá đơn”, khi nhấn ALT-1 sẽ
tương đương với nhấn button này.

cmnd-chuan-lap-trinh-oracle-form Trang 29 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

o Trigger này ít được quan tâm trong khâu lập trình. Cần tìm ra cơ chế tự động để
thích nghi với những thay đổi database.

7.8.6 TRIGGER mức item


 Với unbound text-item, Cần có trigger WHEN-VALIDATE-ITEM để reset các giá
trị được chọn từ LOV khi user xoá giá trị này bằng tay. Cần xem nội dung LOV trả
về giá trị gì để reset tương ứng và mỗi khi thay đổi nội dung LOV cần xem lai
trigger này. Ví dụ, chọn APE_NAME từ LOV, trả về START_DATE, END_DATE,
APE_ID. Vậy trigger WHEN-VALIDATE-ITEM cho item này tối thiểu phải xử lý
như sau:
IF :XXX.ape_name is null THEN
:XXX.start_date:=null;
:XXX.end_date:=null;
:XXX.ape_id:=null;
END IF;
 Với các poplist item, nên dùng trigger WHEN-LIST-CHANGED thay cho trigger
WHEN-VALIDATE-ITEM
 Với các check-box item, nên dùng trigger WHEN-CHECKBOX-CHANGED thay
cho trigger WHEN-VALIDATE-ITEM
 Với các RADIO BUTTON, nên dùng trigger WHEN-RADIO-CHANGED thay cho
trigger WHEN-VALIDATE-ITEM
 Với các item được chọn từ LOV, cần thêm trigger KEY-LISTVAL, có nội dung
giống với nội dung khi nhấn button chọn LOV để cho phép chọn LOV bằng phím tắt
(CTRL-L).
 Hạn chế dùng các trigger khó kiểm soát như: WHEN-NEW-ITEM-INSTANCE,
POST/PRE-TEXT-ITEM…

7.8.7 List of values (LOV)


 Tên LOV nên theo nguyên tắc <Alias Block_name>_<item_name>. Ví dụ,
INV_APE_NAME, TAS_PROJECT_NAME.
o Nội dung LOV cần bảo đảm 2 thông tin
- Cột chứa giá trị trả về, và đặt trong column đầu tiên trong LOV.
- Hiện thêm cả cột primary key, prompt “Mã PK”, để giúp tester kiểm tra dữ
liệu tốt hơn, không phải select dữ liệu trong database trong quá trình test.
- Cần ORDER BY dữ liệu trong LOV theo 1 trật tự nào đó, ít nhất là order
theo cột hiển thị đầu tiên.
- Tên RECORD GROUP ứng với LOV này phải cùng tên với tên LOV.

cmnd-chuan-lap-trinh-oracle-form Trang 30 / 31
Tài liệu chuẩn lập trình Oracle form
Công ty Khoa học Công nghệ Phần mềm - CSE
CMND-SD030

- Dữ liệu sinh ra từ Designer có nhiều LOV không dùng, nên bỏ LOV và


RECORD GROUP không dùng.

7.8.8 Truy cập Item của Form A từ Form B được gọi từ Form A
 Dùng Open_Form
o Tạo một thư viện dùng chung cho cả form A và B
o Từ form A gọi Form B theo hình thức chia sẻ thư viện dùng chung (cả 2 cùng
tác động được tới cùng thư viện để sử dụng chung kết quả của nhau).
o Ví dụ:
- Open_Form(‘Form_B’, Activate, No_Session,
SHARE_LIBRARY_DATA);
- Trên Form A tạo trigger When-Form-Navigation để xử lý khi thoát form B
 Dùng Call_Form
o Khi dùng Call_Form thì form gọi sẽ dừng lại tại vị trị gọi, rồi đợi đến khi form
được gọi thoát sẽ tiếp tục xử lý các lệnh tiếp theo sau vị trí gọi form.  do đó
sẽ có nhiều cách xử lý ở đây để lấy giá trị trả về từ form được gọi: Có thể dùng
biến Global hoặc có thể sử dụng thư viện dùng chung như cách trên.
 Lưu ý khi dùng call_form thì form gọi phải được save (tức là trạng thái khác
changed

cmnd-chuan-lap-trinh-oracle-form Trang 31 / 31

You might also like