betacode

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

  1. Введение
  2. Приготовить пример
  3. Пример с Dynamic Action - Change
  4. Пример с Dynamic Action - Enable/Disable
  5. Пример с Dynamic Action - Set Values используя SQL Statement
  6. Пример с Dynamic Action - Set Values используя PL/SQL
  7. Пример с Dynamic Action - Button

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