Le Tutoriel de Oracle APEX Dynamic Action

View more categories:

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

View more categories: