Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Outils > Forms
Forms Forum d'entraide sur Oracle Forms
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/01/2007, 19h17   #1
Membre du Club
 
Inscription : janvier 2005
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 146
Points : 66
Points : 66
Envoyer un message via MSN à Samanta
Par défaut [Forms] Trigger lorsque la valeur d'un text item change

Bonsoir,

Je cherche le trigger qui me permettrait de déclencher un événement lorsque la valeur d'un text item est modifiée par l'utilisateur. L'événement que je souhaite déclencher est:
go_block('block1');
execute_query;

J'ai regardé la liste des triggers sur un tutoriel et rien ne correspond, je suis perdue, aidez-moi svp !!!!!!!

Merci d'avance.
__________________
Rien ne sert de courir, il faut partir à point.
Samanta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 08h36   #2
Membre éclairé
 
Inscription : décembre 2004
Messages : 349
Détails du profil
Informations personnelles :
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2004
Messages : 349
Points : 367
Points : 367
WHEN-VALIDATE-ITEM
Citation:
Fires during the Validate the Item process. Specifically, it fires as the last part of item validation for items with the New or Changed validation status. Definition Level form, block, or item
CDLT.
taska est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 08h44   #3
Membre Expert
 
Inscription : avril 2005
Messages : 1 672
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 1 672
Points : 1 337
Points : 1 337
Citation:
Envoyé par taska
WHEN-VALIDATE-ITEM
Pas en voulant faire un GO_BLOCK qui est une procédure restreinte donc interdite dans ce genre de triggers.
Personnellement, je m'en sors souvent avec les triggers :
- WHEN-NEW-ITEM-INSTANCE
- WHEN-TIMER-EXPIRED (et création d'un timer bien sûr)
- WHEN-BUTTON-PRESSED (en déplaçant le traitement dans un bouton)
__________________
Modérateur des forums Oracle et Langage SQL
Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum
Magnus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 09h26   #4
Membre éclairé
 
Inscription : décembre 2004
Messages : 349
Détails du profil
Informations personnelles :
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2004
Messages : 349
Points : 367
Points : 367
OK . Autant pour moi ...

Une solution : rajouter un text_item (pos 0,0,0,0) juste aprés le composant
Citation:
text item est modifiée par l'utilisateur
et dans le trigger
Citation:
WHEN-NEW-ITEM-INSTANCE
de ce nouveau text_item, placer le code
Code :
1
2
go_block('block1');
execute_query;
ce qui pemet entre autres de placer une clause sur le block de données :
Code :
set_block_property ('block1',DEFAULT_WHERE,strText);
CDLT.
taska est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 09h40   #5
Membre du Club
 
Inscription : janvier 2005
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 146
Points : 66
Points : 66
Envoyer un message via MSN à Samanta
J'avoue que je n'ai pas très bien compris !!
__________________
Rien ne sert de courir, il faut partir à point.
Samanta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 09h50   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Le GO_BLOCK est une procedure restreinte : Tu ne peux pas l'exécuter lorts d'une validation (WHEN-VALIDATE-XXXX)
Les seuls moyens : les WHEN-NEW- (et les timers, mais les timers en 3/3... )

Solution la plus blindée pour moi : Un trigger WHEN-NEW_ITEM_INSTANCE au niveau bloc qui ne fait le GO_BLOCK que si un paramètre forms est initialisé à 'O'

Ce paramètre, tu l'initialises à 'O' lorsque tu modifies ton champ dans le WHEN-VALIDATE-ITEM

Créer le PARAMETER.P_CHANGED VARCHAR2(1)

BLOCK.Champ.when-validate-item (lors de la validation d'une modif du champ):
Code :
begin :parameter.p_changed := 'O'; end;
BLOCK.WHEN-NEW-ITEM-INSTANCE (lors de chaque arrivée sur un item du block) :
Code :
1
2
3
begin IF :parameter.p_changed = 'O' 
THEN :parameter.p_changed :='N';  GO_BLOCk'BLOC2');
end;
Le souci du
Citation:
rajouter un text_item (pos 0,0,0,0) juste aprés le composant
c'est dansle cas du Block Liste (multiligne), tu peux valider un item en changeant de record. Et là, rien ne se fait.
De cette façon, si tu veux savoir sur quel record tu étais, il faut le sauvegarder dans des paramètres dans le WVI de ton champ
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 10h10   #7
Membre du Club
 
Inscription : janvier 2005
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 146
Points : 66
Points : 66
Envoyer un message via MSN à Samanta
Pour la procédure restreinte, j'avais compris, c'est pour cela que je vous ai précisé dès le début que je voulais faire un go_block, par contre c'est la solution de "rajouter un text_item (pos 0,0,0,0) juste aprés le composant" que je n'avais pas comprise !

Ok je vais suivre vos explications McM et vous tiens au courant.

Merci!
__________________
Rien ne sert de courir, il faut partir à point.
Samanta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 10h41   #8
Membre du Club
 
Inscription : janvier 2005
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 146
Points : 66
Points : 66
Envoyer un message via MSN à Samanta
J'ai ajouté le trigger WHEN-VALIDATE-ITEM à mon champ texte et j'ai eu l'erreur suivante à l'affichage de la forme:
FRM-40202: Le champ doit être renseigné

NB: Mon champ texte est alimenté par une liste de valeurs et c'est un champ obligatoire.
__________________
Rien ne sert de courir, il faut partir à point.
Samanta est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 12h53   #9
Membre éclairé
 
Inscription : décembre 2004
Messages : 349
Détails du profil
Informations personnelles :
Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2004
Messages : 349
Points : 367
Points : 367
Citation:
c'est la solution de "rajouter un text_item (pos 0,0,0,0) juste aprés le composant" que je n'avais pas comprise !
Par exemple :
J'utilise cette méthode lorsque je veux créer un filtre utilisateur pour renseigner la clause where d'un block2.

block1 : une ligne
- un text_item 'code_depot'
- un text_item 'code_ste'
- un text_item 'dummy' ( x=0,y=0,width=0,height=0) .

block2 :bloc basé multi-ligne

L'utilisateur saisit le code_depot, se déplace avec la touche TAB sur le code_ste puis se déplace toujours avec TAB sur l'item dummy.

Sur le WHEN-NEW-ITEM-INSTANCE de l'item dummy, je construis alors la clause WHERE qui tient compte des valeurs code_depot et code_ste puis je lance l'interrogation du block2

Code :
1
2
3
set_block_property ('block2',DEFAULT_WHERE,strText);
go_block('block2');
execute_query;
CDLT.
taska est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2007, 14h32   #10
Membre du Club
 
Inscription : janvier 2005
Messages : 146
Détails du profil
Informations forums :
Inscription : janvier 2005
Messages : 146
Points : 66
Points : 66
Envoyer un message via MSN à Samanta
Finalement, la solution retenue est comme suit:
Définir le déclencheur KEY-LISTVAL à mon text-item (car le text-item est rattaché à une LOV):
Citation:
APP_STANDARD.EVENT('KEY-LISTVAL');
if :block1.mon_text is not null then
GO_BLOCK(block2);
EXECUTE_QUERY;
end if;
Dès que l'utilisateur remplit le champ à l'aide de la liste de valeurs, ce trigger se déclenchera. De plus, c'est un trigger qui peut exécuter la procédure go_block.
__________________
Rien ne sert de courir, il faut partir à point.
Samanta est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h06.


 
 
 
 
Partenaires

Hébergement Web