Руководство Oracle APEX Dynamic Action
2. Приготовить пример
Вам нужно добавить столбец 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

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

3. Пример с Dynamic Action - Change
Создать новый 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 и перезапустить вашу веб страницу.


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

4. Пример с Dynamic Action - Enable/Disable
Для сотрудников по продажам, помимо зарплаты они получат комиссию (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 будет выполнен.


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


5. Пример с Dynamic Action - Set Values используя SQL Statement
Создать дополнительно 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

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


6. Пример с Dynamic Action - Set Values используя PL/SQL
В примере симуляции вычисления бонуса сотруднику, бонус (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;

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

7. Пример с Dynamic Action - Button
В данном примере,вы создаете 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
Руководства Oracle APEX
- Что такое Oracle Application Express?
- Установите Oracle Apex 5.0
- Установите Oracle REST Data Services (ORDS) для Oracle APEX
- Руководство Oracle APEX для начинающих (APEX 5.0)
- Руководство Oracle APEX Tabular Form
- Руководство Oracle APEX Master Details
- Пользовательская аутентификация в Oracle APEX
- Руководство Oracle APEX Dynamic Action
- Создание области динамического содержимого в Oracle APEX (PL/SQL Dynamic Content)
- Что такое Business Intelligence?
- Установить Oracle BI 11g
Show More