Руководство Oracle APEX Dynamic Action
View more Tutorials:
Статья основана на:
-
Oracle APEX 5
Вам нужно добавить столбец BONUS в таблицу EMP если его еще не существует:
-- Add/modify columns alter table EMP add BONUS number;
Создать пустую страницу (blank page) с кодом 300.



Создать Region содержащий параметры.

- !


Ввести информацию для только что созданного Item:
Identification:
List of Values:
- Name: P300_PARAM_EMPNO
- Type: Select List
List of Values:
- Type: SQL Query
- SQL Query: Select Ename, Empno From Emp

Создать другой Region.

Ввести:
Identification:
- Title: Emp Form Region
- Type: Static Content

Создать некоторые Item для данного Region.


Настроить атрибуты для 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 |

Перед тем как возвращаются (rendering) веб страницыданные должны быть прикреплены к Item, вам нужно создать Process в Pre-Rendering/After Header чтобы сделать это.


Ввести:
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 передан в значение из вне, Process "Fetch EMP Row" будет запрашивать таблицу EMP с EMPNO = :P300_EMPNO в момент перед тем, как возвращается странца (rendering), и прикрепить значение в другие Item.
Когда вы запускаете веб страницу, она не имеет данные потому что :P300_EMPNO имеет значение null (Не имеет значение переденное изнаружи).

Изменить отображенные Item.
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

Запустить веб страницу:

Создать новый Dynamic Action для item P300_PARAM_EMPNO, когда вы меняете значение P300_PARAM_EMPNO, этот Dynamic Action выполнит submit веб страницу.

Dynamic Action создан:

Identification
- Name: Change EMPNO Param
- Even: Change
- Selection Type: Item(s)

Когда условия "Dynamic Action" выполняется, пункт в "TRUE" будет выполнен, если напротив то выполняется пункт "FALSE".

Создать Branch (Ветку), чтобы после Submit перенаправился к определенной странице (В данном случае это текущая страница).


После Submit, потребовать перенаправление к странице с кодом 300 (ваша текущая страница), одновременно настроить значение для :P300_EMPNO с помощью :P300_PARAM_EMPNO


Save и перезапустить вашу веб страницу.


Правила работы:

Для сотрудников по продажам, помимо зарплаты они получат комиссию (commission), поэтому когда вы меняете название работы (JOB) сотрудника, если JOB = 'SALESMAN' то item COMM должен разрешать вводить (enable), напротив вам нужно отключить (disable) item COMM.
Создать Dynamic Action для item JOB:
Создать Dynamic Action для item JOB:

Дайте название только что созданному Dynamic Action "Change JOB".
Identification
When
- Name: Change JOB
When
- Even: Change
- Select Type: Item(s)
- Item(s): P300_JOB
- Condition: equal to
- Value: SALES

Обработка при P300_JOB = 'SALESMAN':

Напротив, P300_JOB не равен 'SALESMAN', пункт в FALSE будет выполнен.


Перезапустите вашу веб страницу:


Создать дополнительно 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

Примечание: 2 item P300_LOCATION, и P300_NUM_EMPLOYEES это item не основанные на столбце таблицы, его значение расчитано в момент "Page Load" поэтому вам нужно настроить "Save Session State = NO".
Создать Dynamic Action для P300_DEPTNO, когда вы меняете департамент сотрудника, данный Dynamic Action перерасчитает положение и количество сотрудников нового департамента и прикрепит значения для 2 item P300_LOCATION и P300_NUM_EMPLOYEES.


Это команда SQL запрашивающая местоположение (location) и количество сотрудников в новом департаменте:
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

Перезапустите вашу веб страницу:


В примере симуляции вычисления бонуса сотруднику, бонус (BONUS) вычисляется умножением бонуса на зарплату сотрудника, когда веб страница загружена значение item BONUS вычисляется с помощью PL/SQL.



Создать Dynamic Action работающий во время загрузки страницы (Page load).

- !

Вычислить бонус:
Declare v_Multiplier Number; Begin -- Determine multiplier based on job. 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; -- Return bonus which is calculated by -- Multiplying Salary My Multiplier Return :P300_Sal * v_Multiplier; End;

Перезапустить вашу веб страницу:

В данном примере,вы создаете Dynamic Action для Button. При нажатии на этот button, изменения в form будут сохранены. Одновременно этот Button будет отключен (disabled) когда обновляется страница.

Identification:
- Button Name: APPLY_CHANGE
- Type: Apply change
- Action: Submit Page
- Database Action: SQL UPDATE action

Создать Proccess для обработки update данных.


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