|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre Expert
![]() Inscription : avril 2005 Messages : 1 672 ![]() |
Bonjour.
Je développe sous forms 9i un écran dans lequel l'utilisateur peut modifier des items qui peuvent aussi être chargés (via le code) par d'autres items. Pour un quelconque item, je voudrais pouvoir détecter - i.e. positionner un booléen TRA_UPDATED_USER := 'TRUE' - quand l'utilisateur a modifié une valeur et SEULEMENT quand c'est l'utilisateur qui a effectué cette modification. Autrement dit, quand c'est le programme qui a déterminé cette valeur alors la valeur du booléen doit être 'FALSE'. Actuellement, je procède de cette manière : 1/ je créée un trigger WHEN-NEW-ITEM-INSTANCE sur cet item : 2/ je créée un trigger WHEN-VALIDE-ITEM sur cet item : Code :
Le fait d'utiliser une SEULE variable globale et un SEUL item (i.e. le booléen) pour détecter que l'utilisateur a modifié une valeur m'expose t'il à des effets de bord ou autres ? Merci d'avance de vos réponses. PS : je procède de cette manière pour factoriser mon code étant donné le nombre d'items que je dois "surveiller" |
||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 533 ![]() |
A priori, cela devrait marcher si le nom de l'item changé manuellement n'a pas d'importance.
__________________
Rédacteur Oracle (Oracle ACE) Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche Je ne réponds pas aux questions techniques par MP Blogs: Forms-PL/SQL-J2EE - Forms Java Beans |
|
|
00
|
|
|
#3 | |
|
Membre Expert
![]() Inscription : avril 2005 Messages : 1 672 ![]() |
Citation:
Donc tu confirmes le fonctionnement de mon procédé. Je te remercie. |
|
|
|
00
|
|
|
#4 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 533 ![]() |
J'ajoute que si l'item par lui-même n'a aucune importance, il suffit d'un seul trigger de niveau module pour gérer tous les items de la forme.
__________________
Rédacteur Oracle (Oracle ACE) Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche Je ne réponds pas aux questions techniques par MP Blogs: Forms-PL/SQL-J2EE - Forms Java Beans |
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() Inscription : avril 2005 Messages : 1 672 ![]() |
Mais je ne veux déclenchez ce code que pour 20 des 30 items (environ) du bloc.
Il faut donc que j'écrive alors un IF colossal où je teste l'item validé, non ? |
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Salut Magnus,
Moi je trouve cela un peu lourd à mettre en place comme méthode. Il suffit de faire quand c'est le programme qui charge la valeur : Code :
set_item_property ('monItem', item_is_valid, property_true); Autre idée : quand c'est le programme qui indique les valeurs, remettre le block status à query (ou à new). Après tu n'as qu'à tester ton record status, s'il est à INSERT ou CHANGED, c'est que l'utilisateur a modifié une valeur .
__________________
Un problème sans solution est un problème mal posé Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP. |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Inscription : avril 2005 Messages : 1 672 ![]() |
Hello plaineR,
Je pense avoir compris tes 2 idées mais elles ne sont pas adéquates à mon contexte que j'ai simplifié ici. En effet, il est possible que je me trompe mais modifier la propriété ITEM_VALID va inhiber complètement le code du trigger WVR de l'item concerné alors que je veux continuer à déclencher certaines instructions de ce trigger. Concernant la 2ème solution, elle doit effectivement être adaptée mais elle me semble "risquée" dans la mesure où si le status du bloc change entre temps alors je ne serai pas dans le contexte que je teste. Si ça peut te rassurer, la proposition de Sheikyerbouti d'utiliser un trigger niveau module (et d'utiliser la variable :SYSTEM.TRIGGER_ITEM) n'est pas adaptée non plus. En fait, le seul souci réside dans l'utilisation d'un trigger WNII niveau bloc car je ne sais pas stocker dans ma variable globale la valeur de l'item courant. Et donc je ne peux pas tester dans le WVI niveau bloc si la valeur de l'item courant a changé par rapport au contenu de la variable globale. Ceci dit, c'est un problème général que j'ai avec forms et qui m'oblige à dupliquer des fois un grand nombre de fois des appels de procédures, des tests car je ne sais pas faire référence au contenu. Ex : jusqu'à maintenant je n'arrive pas à retrouver la valeur d'un item à partir du moment où je dispose de son nom stocké dans une chaîne de caractères i.e. quelle est la valeur de l'item 'B1.TRA_PA_12' ? Merci encore de votre participation les gars, mais la solution que j'ai retenue (et je ne vois pas comment la simplifier) consiste à mettre en place 2 triggers pour chaque item à surveiller : WNII et WVI |
|
|
00
|
|
|
#8 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 533 ![]() |
La valeur de l'item courrant peut être connue facilement avec:
__________________
Rédacteur Oracle (Oracle ACE) Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche Je ne réponds pas aux questions techniques par MP Blogs: Forms-PL/SQL-J2EE - Forms Java Beans |
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : avril 2005 Messages : 1 672 ![]() |
OUAISSSSSSSSSSSSS !
J'avais complètement oublié les procédures internes NAME_IN et COPY qui font exactement ce que je veux. Merci mille fois. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com