Hướng dẫn và ví dụ Oracle APEX Dynamic Action
2. Chuẩn bị ví dụ
Bạn cần thêm cột BONUS vào bảng EMP nếu nó chưa tồn tại:
-- Add/modify columns
alter table EMP add BONUS number;
Tạo một trang trắng (blank page) với mã số 300.
Tạo một Region chứa các tham số.
- !
Nhập vào thông tin cho Item mới tạo:
Identification:
List of Values:
- Name: P300_PARAM_EMPNO
- Type: Select List
List of Values:
- Type: SQL Query
- SQL Query: Select Ename, Empno From Emp
Tạo tiếp một Region khác.
Nhập vào:
Identification:
- Title: Emp Form Region
- Type: Static Content
Tạo một vài Item cho Region này.
Sét đặt các thuộc tính cho Item:
No | Item | Label | Source (Type= Database Column) |
1 | P300_EMPNO | Empno | EMPNO |
2 | P300_ENAME | Ename | ENAME |
3 | P300_JOB | Job | JOB |
4 | P300_MGR | Manager | MGR |
5 | P300_HIREDATE | Hiredate | HIREDATE |
6 | P300_SAL | Salary | SAL |
7 | P300_COMM | Commission | COMM |
8 | P300_BONUS | Bonus | BONUS |
9 | P300_DEPTNO | Deptno | DEPTNO |
Trước khi trang web được trả lại (rendering) dữ liệu cần được gán vào các Item, bạn cần tạo một Process trong Pre-Rendering/After Header để làm việc này.
Nhập vào:
Identification:
Setting:
- Name: Fetch EMP Row
- Type: Automatic Row Fetch
Setting:
- Table Name: EMP
- Primary Key Column: EMPNO
- Primary Key Item: P300_EMPNO
P300_EMPNO được truyền vào giá trị từ bên ngoài, Process "Fetch EMP Row" sẽ truy vấn bảng EMP với EMPNO = :P300_EMPNO tại thời điểm trước khi trang được trả về (rendering), và gán giá trị vào các Item khác.
Khi bạn chạy trang web, nó chưa có dữ liệu nguyên nhân là :P300_EMPNO có giá trị null (Không có giá trị truyền vào cho nó từ bên ngoài).
Sửa lại các Item hiển thị.
P300_JOB
Identification:
- Name: P300_JOB
- Type: Select List
- Type: Static Values
- Static values: STATIC:CLERK;CLERK,SALESMAN;SALESMAN,PRESIDENT;PRESIDENT,MANAGER;MANAGER,ANALYST;ANALYST
P300_MGR:
Identification
List of Values
- Name: P300_MGR
- Type: Select List
List of Values
- Type: SQL Query
- SQL Query: Select ename d, empno r from emp where job in ('MANAGER', 'PRESIDENT')
P300_HIREDATE
Identification
- Name: P300_HIREDATE
- Type: Date Picker
P300_DEPTNO
Identification
- Name: P300_DEPTNO
- Type: Select List
- Type: SQL Query
- SQL Query: Select Dname,Deptno From Dept
Chạy trang web:
3. Ví dụ với Dynamic Action - Change
Tạo mới một Dynamic Action cho item P300_PARAM_EMPNO, khi bạn thay đổi giá trị của P300_PARAM_EMPNO, Dynamic Action này sẽ submit trang web.
Dynamic Action đã được tạo ra:
Identification
- Name: Change EMPNO Param
- Even: Change
- Selection Type: Item(s)
Khi các điều kiện của "Dynamic Action" được đáp ứng mệnh đề trong "TRUE" của nó sẽ được thực thi, ngược lại mệnh để "FALSE" sẽ được thực thi.
Tạo một Branch (Nhánh rẽ), để sau khi Submit sẽ chuyển tới một trang nào đó (Trong trường hợp này là trang hiện tại).
Sau khi Submit, yêu cầu sẽ chuyển tới trang mã số 300 (trang hiện tại của bạn), đồng thời sét đặt giá trị cho :P300_EMPNO bởi :P300_PARAM_EMPNO
Save và chạy lại trang web của bạn.
Nguyên tắc hoạt động:
4. Ví dụ với Dynamic Action - Enable/Disable
Với các nhân viên kinh doanh, ngoài lương họ sẽ nhận được hoa hồng (commission), như vậy khi bạn thay đổi tên công việc (JOB) của một nhân viên, nếu JOB = 'SALESMAN' thì item COMM phải cho phép nhập (enable), ngược lại bạn cần vô hiệu hóa (disable) item COMM.
Tạo một Dynamic Action cho item JOB:
Tạo một Dynamic Action cho item JOB:
Đặt tên cho Dynamic Action mới tạo là "Change JOB".
Identification
When
- Name: Change JOB
When
- Even: Change
- Select Type: Item(s)
- Item(s): P300_JOB
- Condition: equal to
- Value: SALES
Xử lý khi P300_JOB = 'SALESMAN':
Ngược lại, P300_JOB không bằng 'SALESMAN', mệnh đề trong FALSE sẽ được thực thi.
Chạy lại trang web của bạn:
5. Ví dụ với Dynamic Action - Set Values sử dụng SQL Statement
Tạo thêm 2 item:
Identification:
- Name: P300_LOCATION
- Type: Display Only
- Label: Location
- Save Sesion State: NO
- Type: Null
Identification:
- Name: P300_NUM_EMPLOYEES
- Type: Display Only
- Label: Location
- Save Sesion State: NO
- Type: Null
Chú ý: 2 item P300_LOCATION, và P300_NUM_EMPLOYEES là các item không dựa trên cột của bảng, giá trị của nó được tính toán tại thời điểm "Page Load" vì vậy bạn cần đặt "Save Session State = NO".
Tạo Dynamic Action cho P300_DEPTNO, khi bạn thay đổi phòng ban của nhân viên, Dynamic Action này sẽ tính toán lại ví trí và số lượng nhân viên của phòng ban mới và gán giá trị vào cho 2 item P300_LOCATION và P300_NUM_EMPLOYEES.
Đây là câu lệnh SQL truy vấn vị trí (location) và số nhân viên có trong phòng ban mới:
Select d.Loc Location
,Count(e.Empno) Num_Employees
From Dept d
,Emp e
Where d.Deptno = e.Deptno(+)
And d.Deptno = :P300_Deptno
Group By d.Loc
Identification
- Action: Set Value
- Set type: SQL Statement
- SQL Statement: .....
- Page Items to Submit: P300_DEPTNO
- Selection Type: Item(s)
- Item(s): P300_LOCATION, P300_NUM_EMPLOYEES
Chạy lại trang web của bạn:
6. Ví dụ với Dynamic Action - Set Values sử dụng PL/SQL
Trong ví dụ mô phỏng việc tính thưởng cho một nhân viên, tiền thưởng (BONUS) được tính bằng hệ số thưởng nhân với lương của nhân viên, khi trang web được tải lên giá trị của item BONUS sẽ được tính toán bởi PL/SQL.
Tạo một Dynamic Action chạy tại thời điểm trang được tải lên (Page load).
- !
Tính thưởng:
Declare
v_Multiplier Number;
Begin
-- Xác định hệ số thưởng dựa trên công việc.
Case :P300_Job
When 'CLERK' Then
v_Multiplier := 0.1;
When 'ANALYST' Then
v_Multiplier := 0.2;
When 'SALESMAN' Then
v_Multiplier := 0.3;
When 'MANAGER' Then
v_Multiplier := 0.4;
When 'PRESIDENT' Then
v_Multiplier := 0.5;
Else
v_Multiplier := 0;
End Case;
-- Trả về tiền thưởng được tính bởi hệ số thưởng
-- nhân với tiền lương.
Return :P300_Sal * v_Multiplier;
End;
Chạy lại trang web của bạn:
7. Ví dụ với Dynamic Action - Button
Trong ví dụ này, bạn sẽ tạo một Dynamic Action cho Button. Khi button này bị nhấn, các thay đổi trên form sẽ được lưu lại. Đồng thời Button này sẽ bị vô hiệu hóa (disabled) trong khi trang đang được refresh.
Identification:
- Button Name: APPLY_CHANGE
- Type: Apply change
- Action: Submit Page
- Database Action: SQL UPDATE action
Tạo Proccess để xử lý việc update dữ liệu.
Identification:
- Name: Process ROW of EMP
- Type: Automatic ROW Processing (DML)
- Table Name: EMP
- Primary Key Column: EMPNO
- Primary Key Item: P300_EMPNO
- Supported Operation: Update
TODO
Các hướng dẫn Oracle APEX
- Oracle Application Express là gì?
- Cài đặt Oracle APEX 5.0
- Cài đặt Oracle REST Data Services (ORDS) cho Oracle APEX
- Hướng dẫn lập trình Oracle APEX cho người mới bắt đầu (APEX 5.0)
- Hướng dẫn sử dụng Tabular Form trong Oracle APEX
- Hướng dẫn sử dụng Master Details trong Oracle APEX
- Tùy chỉnh xác thực trong Oracle APEX
- Hướng dẫn và ví dụ Oracle APEX Dynamic Action
- Tạo nội dung động trong Oracle APEX (PL/SQL Dynamic Content)
- Business Intelligence là gì?
- Cài đặt Oracle BI 11g
Show More