devstory

Le Tutoriel de Oracle APEX Dynamic Action

  1. Introduction
  2. Préparation pour l'exemple
  3. Exemple avec Dynamic Action - Change
  4. Exemple avec Dynamic Action - Enable/Disable
  5. Exemple de Dynamic Action - Set Values utilisant l'instruction de requête SQL
  6. Exemple de Dynamic Action - Set Values utilisant PL/SQL
  7. Exemple de Dynamic Action - Button

1. Introduction

Ce document est basé sur :
  • Oracle APEX 5

2. Préparation pour l'exemple

Vous devez ajouter la colonne BONUS au tableau EMP si elle n'existe pas encore :
-- Add/modify columns
alter table EMP add BONUS number;
Créez une page vierge (blank page) avec le numéro de page est 300.
Créez une Region qui comprend les paramètres.
  • !
Saisissez des propriétés pour Item qui vient d'être créé:
Identification:
  • Name: P300_PARAM_EMPNO
  • Type: Select List

List of Values:
  • Type: SQL Query
  • SQL Query: Select Ename, Empno From Emp
Ensuite, créez une autre Region.
Saisissez :
Identification:
  • Title: Emp Form Region
  • Type: Static Content
Créez quelques Item pour cette Region.
Définissez les propriétés pour 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
Avant que le site ne soit rendu (rendering) les données doivent être affectées à l'élément, vous devez créer un Process dans Pre-Rendering/After Header pour cela.
Saisissez :
Identification:
  • Name: Fetch EMP Row
  • Type: Automatic Row Fetch

Setting:
  • Table Name: EMP
  • Primary Key Column: EMPNO
  • Primary Key Item: P300_EMPNO

La valeur de P300_EMPNO est passée de l'extérieur, Process "Fetch EMP Row" requêtera le tableau EMP avec EMPNO = :P300_EMPNO à la fois avant que la page soit rendue et affecte des valeurs aux autres éléments.

Lorsque vous exécutez cette page, elle n'a pas de données, les causes sont :P300_EMPNO dont la valeur est null (aucune valeur transmise de l'extérieur).
Changez les propriétés de Item qui sont affichés.
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
Exécution de la page web:

3. Exemple avec Dynamic Action - Change

Créez une nouvelle Dynamic Action du item P300_PARAM_EMPNO, lorsque vous changez la valeur de P300_PARAM_EMPNO, cette Dynamic Action va submit la page web.
Dynamic Action est créée :
Identification
  • Name: Change EMPNO Param
When
  • Even: Change
  • Selection Type: Item(s)
Quand les conditions de "Dynamic Action" sont vraie dont la clause "TRUE" sera exécutée, sinon, la clause "FALSE" sera exécutée.
Créez une Branch (une branche), de sorte que la demande de Submit sera transmise à une page spécifique (dans ce cas est la page en cours).
Après Submit, la demande sera redirigée vers la page numéro 300 (votre page actuelle), et définira les valeurs pour :P300_EMPNO par :P300_PARAM_EMPNO
Save et reexécutez votre page web.
La principe d'opération:

4. Exemple avec Dynamic Action - Enable/Disable

Avec le personnel de vente, en plus du salaire, ils recevront une commission (commission), donc quand vous changez de nom d'emploi (JOB) d'un employé, si JOB = 'SALESMAN', l'élément COMM permet d'entrer (Activer), sinon vous avez besoin pour désactiver l'élément COMM.

Création d'une Dynamic Action pour l'élément JOB:
Nommez la nouvelle Dynamic Action que vous venez créer est "Change JOB".
Identification
  • Name: Change JOB

When
  • Even: Change
  • Select Type: Item(s)
  • Item(s): P300_JOB
  • Condition: equal to
  • Value: SALES
Gérez lorsque P300_JOB = 'SALESMAN':
Sinon, P300_JOB n'est pas égal à 'SALESMAN', la clause dans FALSE sera exécutée.
Réexécutez votre page web:

5. Exemple de Dynamic Action - Set Values utilisant l'instruction de requête SQL

Créez 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

Remarque: 2 item P300_LOCATION, et P300_NUM_EMPLOYEES sont des éléments qui ne se base pas sur le tableau, ses valeurs sont calculées au moment "Page Load" donc vous devez installer "Save Session State = NO".

Créez Dynamic Action pour P300_DEPTNO, lorsque vous changez le département de l'employé, cette Dynamic Action va recalculer la position et le nombre des employés de ce nouveau département et attribuer des valeurs aux 2 éléments P300_LOCATION et P300_NUM_EMPLOYEES.
Celle-ci est l'instruction de requête SQL qui requête la position (location) et le nombre des employés dans le nouveau département :
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
Réexécutez votre page web :

6. Exemple de Dynamic Action - Set Values utilisant PL/SQL

Dans cet exemple, en simulant le calcul du bonus pour un salarié, le bonus (BONUS) est calculé en multipliant le salaire par le coefficient de bonus des employés, lorsque "page load", la valeur de BONUS sera calculée par le PL/SQL.
La création d'une Dynamic Action s'exécute à l'heure du chargement de la page (Page load).
  • !
Calculer le bonus :
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;
Réexécutez votre page :

7. Exemple de Dynamic Action - Button

Dans cet exemple, vous créerez une Dynamic Action pour le Button. Lorsque vous cliquez sur ce bouton, toutes les modifications apportées au formulaire sont enregistrées. Ce bouton est également désactivé (disabled) pendant l'actualisation (refresh) de la page.
Identification:
  • Button Name: APPLY_CHANGE
  • Type: Apply change
Behavior:
  • Action: Submit Page
  • Database Action: SQL UPDATE action
Créez Proccess pour update des données.
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