Руководство Oracle APEX Dynamic Action

1- Введение

Статья основана на:
  • Oracle APEX 5

2- Приготовить пример

Вам нужно добавить столбец  BONUS в таблицу  EMP если его еще не существует:
-- Add/modify columns
alter table EMP add BONUS number;
Создать пустую страницу (blank page) с кодом 300.
Создать  Region содержащий параметры.
  • !
Ввести информацию для только что созданного  Item:
Identification:
  • 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:
  • 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
List of Values:
  • Type: Static Values
  • Static values: STATIC:CLERK;CLERK,SALESMAN;SALESMAN,PRESIDENT;PRESIDENT,MANAGER;MANAGER,ANALYST;ANALYST

P300_MGR:

Identification
  • 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
List of Values
  • 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
When
  • 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  "Change JOB".
Identification
  • 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
  • Label: Location
Settings:
  • Save Sesion State: NO
Source
  • Type: Null
Identification:
  • Name: P300_NUM_EMPLOYEES
  • Type: Display Only
Label
  • Label: Location
Settings:
  • Save Sesion State: NO
Source
  • 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
Settings
  • Set type: SQL Statement
  • SQL Statement:  .....
  • Page Items to Submit: P300_DEPTNO
Affected Elements
  • 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
Behavior:
  • Action: Submit Page
  • Database Action: SQL UPDATE action
Создать  Proccess для обработки  update данных.
Identification:
  • Name: Process ROW of EMP
  • Type: Automatic ROW Processing (DML)
Settings
  • Table Name: EMP
  • Primary Key Column: EMPNO
  • Primary Key Item: P300_EMPNO
  • Supported Operation: Update
  • TODO

View more categories: