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 26/07/2006, 16h41   #1
Yoh
Candidat au titre de Membre du Club
 
Inscription : juillet 2002
Messages : 56
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 56
Points : 14
Points : 14
Par défaut [FORMS 6] Evènement clavier

Bonjour,

Dans un écran Forms, une de mes zones de saisie peut être modifiée par :
  • l'utilisateur lorsque le focus est dans la zone
  • l'écran lui même qui suite à un calcul modifie la zone

J'ai besoin de savoir si c'est l'utilisateur qui a modifié la zone, ou si c'est l'écran.
Il se trouve que lorsque le focus est sur cette zone, l'écran peut également modifier la valeur de cette zone (donc pas question de stocker la valeur de la zone sur le KEY-PREV-ITEM et de la comparer sur le KEY-NEXT-ITEM).

Comment faire ?
Je ne connais aucun trigger qui se déclenche sur la modification par le clavier d'une zone.

Merci beaucoup pour vos réponses.
Yoh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 16h46   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
il n'y a pas une variable qui permet de récupérer le nom de l'item qu'on vient de quitter ? Si le focus n'est pas dans ton item ou ne vient pas d'un autre item alors c'est la fenêtre qui a modifié la valeur... Et sinon, c'est pas plus simple de mettre un flag dans le code exécuté par la fenêtre ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 16h58   #3
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
que voulez-vous dire par "l'écran peut également modifier cette zone " ?
qui est l'écran ?
__________________
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
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 17h04   #4
Yoh
Candidat au titre de Membre du Club
 
Inscription : juillet 2002
Messages : 56
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 56
Points : 14
Points : 14
Merci de l'intérêt que vous portez à mon problème.

FRED_D :
Je travaille dans un écran très complexe (le fmb a une taille > 8Mo), beaucoup de triggers et de proc/fonct. peuvent modifier cette zone, positionner des flags partout où l'écran la modifie pour savoir que ce n'est pas l'utilisateur qui a changé la valeur ne ferait que l'alourdir au niveau maintenance.

SheikYerbouti :
Ce que j'entend par "l'écran peut également modifier cette zone" : des triggers ainsi que des unités de programme recalculent cette zone.

L'équivalent d'un évènement "KEY-PRESSED" n'existe vraiment pas sous Forms ?
Yoh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 17h17   #5
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Je crains qu'il n'existe aucun moyen de différencier la provenance de la modification.
KeyPressed n'est effectivement pris en compte.
Par contre, le trigger When-New-Item-Instance est activé lorsque le curseur arrive dans la zone, mais pas lorsqu'une fonction en modifie le contenu...
__________________
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
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 17h22   #6
Yoh
Candidat au titre de Membre du Club
 
Inscription : juillet 2002
Messages : 56
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 56
Points : 14
Points : 14
Citation:
Envoyé par SheikYerbouti
Je crains qu'il n'existe aucun moyen de différencier la provenance de la modification.
KeyPressed n'est effectivement pris en compte.
Par contre, le trigger When-New-Item-Instance est activé lorsque le curseur arrive dans la zone, mais pas lorsqu'une fonction en modifie le contenu...
C'est bien ce qu'il me semble aussi.
J'ai vu qu'on peut utiliser les API Windows via Forms : ils en parlent vaguement dans l'aide et dans certains forums, mais j'ai l'impression que ça ne me mènera nulle part.

Je vais devoir encore une fois "bidouiller" une astuce
Yoh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 17h26   #7
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Sinon utiliser un petit PJC ou Java Bean en lui collant un écouteur clavier.
__________________
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
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 17h33   #8
Yoh
Candidat au titre de Membre du Club
 
Inscription : juillet 2002
Messages : 56
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 56
Points : 14
Points : 14
Citation:
Envoyé par SheikYerbouti
Sinon utiliser un petit PJC ou Java Bean en lui collant un écouteur clavier.
Avec des outils externes je peux bien sur y arriver.
Mais ça serait trop facile ! Vis-à-vis de nos clients et de notre fonctionnement, on ne peut pas faire ça.

En tout cas, merci pour votre aide.
Yoh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 17h38   #9
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Ce qui me chiffone dans tout ça, c'est à quel moment vous voulez savoir qui a modifié.
En effet, la zone peut être modifiée à tout moment par le code.
L'info est-elle simplement de savoir, à l'enregistrement, que l'utilisateur a modifé à un moment ou un autre ?
__________________
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
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 17h57   #10
Yoh
Candidat au titre de Membre du Club
 
Inscription : juillet 2002
Messages : 56
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 56
Points : 14
Points : 14
Citation:
Envoyé par SheikYerbouti
Ce qui me chiffone dans tout ça, c'est à quel moment vous voulez savoir qui a modifié.
En effet, la zone peut être modifiée à tout moment par le code.
L'info est-elle simplement de savoir, à l'enregistrement, que l'utilisateur a modifé à un moment ou un autre ?
Ce n'est pas lors de l'enregistrement, c'est lors de la saisie des données dans l'écran.

La zone en question est à la fois une zone saisissable ET calculée.

Si la valeur de la zone est une valeur saisie au clavier => alors j'applique le calcul pour mettre à jour ma zone (une nouvelle valeur va alors être affectée à ma zone).
Si la valeur de la zone a été calculée => alors il ne faut rien faire.

Hors, je ne peux pas faire la différence entre une saisie clavier et une modification par l'écran => donc le calcul se ré-itère stupidement à chaque WHEN-VALIDATE-ITEM de la zone.

C'est résolvable : mais ça sera un jeu de flags positionnés ici et là... au final, c'est null et compliqué à maintenir.
Yoh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 17h57   #11
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Voici un truc interessant à mettre sur l'item en question

When-New-Item-Instance:

Code :
:global.var1 := :messages.texte ;
When-Validate-Item:

Code :
1
2
3
IF :global.var1 <> :messages.texte then
	message('modif !!!');
end IF ;
A creuser...
__________________
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
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 18h09   #12
Rédacteur

 
Avatar de SheikYerbouti
 
Inscription : mai 2003
Messages : 6 533
Détails du profil
Informations forums :
Inscription : mai 2003
Messages : 6 533
Points : 6 469
Points : 6 469
Encore mieux:

trigger de niveau form : When-Timer-Expired:

Code :
1
2
3
IF :texte <> :global.var Then
	message('*** modif user ***');
end IF ;
trigger When-New-Item-Instance sur l'item:

Code :
1
2
3
4
5
6
DECLARE 
    timer_id Timer; 
BEGIN 
    :global.var := :texte ;
    timer_id := CREATE_TIMER('timer', 800, REPEAT); 
END;
trigger Post-Text-Item sur l'item:

de cette façon, seul le changement par l'utilisateur déclenche le message dans le trigger When-Timer-Expired
__________________
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
SheikYerbouti est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2006, 18h29   #13
Yoh
Candidat au titre de Membre du Club
 
Inscription : juillet 2002
Messages : 56
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 56
Points : 14
Points : 14
Citation:
Envoyé par SheikYerbouti
Voici un truc interessant à mettre sur l'item en question

When-New-Item-Instance:

Code :
:global.var1 := :messages.texte ;
When-Validate-Item:

Code :
1
2
3
IF :global.var1 <> :messages.texte then
	message('modif !!!');
end IF ;
A creuser...
Effectivement, j'ai l'impression que je vais solutionner mon problème avec le WHEN-NEW-ITEM-INSTANCE.
Yoh est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h04.


 
 
 
 
Partenaires

Hébergement Web