Le guide Oracle Forms 9i/10g


précédentsommairesuivant

XXVII. Les items calculés

XXVII-A. Définition

Il s'agit d'item de contrôle (non basé) affichant le résultat d'un calcul.

Ils sont de type Elément affiché (non modifiables) ou Elément texte (dont les propriétés Insertion autorisée, Mise à jour autorisée et Interrogation autorisée doivent être positionnées à NON) et ne peuvent pas être basés.

XXVII-B. Concept

Le résultat enregistré dans ce type d'item peut être obtenu avec l'un des deux types suivants :

  • Une fonction native de récapitulation :

Une fonction de récapitulation n'opère que sur un seul item du bloc
Elle ne prend en compte également que les enregistrements ramenés par l'interrogation (dépendant de la clause WHERE appliquée au bloc ou du filtre inséré dans le mode interrogation (ENTER-QUERY)).
Vous ne pouvez pas déclarer dans un bloc un item calculé si la propriété du bloc : Interroger tous les enregistrements n'est pas positionnée à Oui.

  • Une formule (fonction PL/SQL créée par le développeur) qui peut prendre en charge la valeurs de plusieurs items du bloc

- Si vous choisissez de baser votre item calcul sur une formule, entrez le code PL/SQL (ou l'appel d'une fonction PL/SQL existante) dans la propriété : Formule de la palette de propriétés de l'item

- Si vous choisissez une fonction native, sélectionner la fonction désirée dans la propriété : Fonction de récapitulation et indiquez sur quel bloc et quel item la fonction effectuera le calcul.

Types d'item supportant la fonctionnalité:
Un item calculé doit pouvoir stocker une valeur et peut être l'un des types suivants:

  • Case à cocher
  • Item affiché
  • Item texte
  • Item liste
  • Groupe de boutons option

XXVII-C. Mise en œuvre

Exemple

Prenons un bloc basé (BLOC_QTE) sur une table contenant une colonne stockant des quantités (QUANTITE).
Nous affichons deux champs calculés de type fonction de récapitulation (Somme et Moyenne) et un champ de type formule (Quantité + 20%)

item_calcul


Fixer la propriété suivante sur le bloc:
Interroger tous les enregistrements à Oui.


Créer dans le bloc un item de type Elément affiché (Datatype : NUMBER) Dans la palette de propriétés de cet item, saisissez les valeurs suivantes :

  • Nombre d'éléments affichés : 1
  • Mode de calcul : Récapitulatif
  • Fonction de récapitulation : Somme
  • Block récapitulatif : BLOC_QTE
  • Elément récapitulatif : QUANTITE
  • Invite : Somme

Créer dans le bloc un item de type Elément affiché (Datatype : NUMBER)
Dans la palette de propriétés de cet item, saisissez les valeurs suivantes:

  • Nombre d'éléments affichés : 1
  • Mode de calcul : Récapitulatif
  • Fonction de récapitulation : Moy
  • Block récapitulatif : BLOC_QTE
  • Elément récapitulatif : QUANTITE
  • Invite : Moyenne

Créer dans le bloc un item de type Elément affiché (Datatype : NUMBER)
Dans la palette de propriétés de cet item, saisissez les valeurs suivantes:

  • Nombre d'éléments affichés : 1
  • Mode de calcul : Formule
  • Formule : : BLOC_QTE.QUANTITE * 1.2
  • Block récapitulatif : null
  • Elément récapitulatif : null
  • Invite : Quantité + 20%


Principes de recalculation

l'item est recalculé lorsqu'au moins une de ses opérandes a été modifiée.
Dans le cas d'une fonction de récapitulation, il s'agit de l'item sur lequel est appliqué la focntion de totalisation.
Dans le cas d'une formule, les opérandes peuvent provenir de plusieurs sources:

  • Item
  • Variable globale
  • Paramètre

Cela ne pose aucun problème lorsque ces variables sont directement référencées.
Par contre, en cas de référencement indirect (utilisation des instruction COPY, NAME_IN(), DO_KEY(), EXECUTE_TRIGGER()), Forms n'a plus de moyen de savoir que la référence a été modifiée.
Il faut donc le lui indiquer à l'aide de la fonction : DUMMY_REFERENCE()
Dans l'exemple suivant, la valeur de retour de la formule est : temp_sal qui référence indirectement l'item EMP.SAL.
On indique à Forms que l'item dont il faut vérifier la modification est EMP.SAL.

 
Sélectionnez

temp_sal := NAME_IN('emp.sal');
DUMMY_REFERENCE(:emp.sal);


Si votre formule utilise une variable système ou une fonction native, vous pouvez forcer la recalculation avec la fonction : RECALCULATE()


Restrictions sur les items calculés:

  • la valeur d'un item calculé ne peut être assignée directement avec du code PL/SQL
  • l'utilisateur ne peut insérer ni modifier un item de ce type
  • un item calculé ne peut être spécifié comme item de retour d'une LOV
  • une formule ne peut pas exécuter un ordre du DML
  • impossible de créer une référence circulaire entre deux items calculés
  • un déclencheur de type WHEN-VALIDATE-ITEM ne peut pas être déclaré sur un item calculé

précédentsommairesuivant

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2005 SheikYerbouti. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.