IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Forms Oracle Discussion :

[Forms] Trigger lorsque la valeur d'un text item change


Sujet :

Forms Oracle

  1. #1
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 153
    Points : 100
    Points
    100
    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.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    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 : 409
    Points
    409
    Par défaut
    WHEN-VALIDATE-ITEM
    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.

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    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

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    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 : 409
    Points
    409
    Par défaut
    OK . Autant pour moi ...

    Une solution : rajouter un text_item (pos 0,0,0,0) juste aprés le composant
    text item est modifiée par l'utilisateur
    et dans le trigger
    WHEN-NEW-ITEM-INSTANCE
    de ce nouveau text_item, placer le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    go_block('block1');
    execute_query;
    ce qui pemet entre autres de placer une clause sur le block de données :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_block_property ('block1',DEFAULT_WHERE,strText);
    CDLT.

  5. #5
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 153
    Points : 100
    Points
    100
    Par défaut
    J'avoue que je n'ai pas très bien compris !!
    Rien ne sert de courir, il faut partir à point.

  6. #6
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    begin :parameter.p_changed := 'O'; end;
    BLOCK.WHEN-NEW-ITEM-INSTANCE (lors de chaque arrivée sur un item du block) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    begin IF :parameter.p_changed = 'O' 
    THEN :parameter.p_changed :='N';  GO_BLOCk'BLOC2');
    end;
    Le souci du
    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
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  7. #7
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 153
    Points : 100
    Points
    100
    Par défaut
    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.

  8. #8
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 153
    Points : 100
    Points
    100
    Par défaut
    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.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    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 : 409
    Points
    409
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set_block_property ('block2',DEFAULT_WHERE,strText);
    go_block('block2');
    execute_query;
    CDLT.

  10. #10
    Membre régulier
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2005
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 153
    Points : 100
    Points
    100
    Par défaut
    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):
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 19/07/2011, 12h39
  2. Calcul Stock Actuel mm lorsqu'une valeur est null
    Par priest69 dans le forum Access
    Réponses: 3
    Dernier message: 12/09/2005, 18h58
  3. Mise en forme monétaire d'une valeur
    Par RobertDeNiroZ dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 19/08/2005, 09h55
  4. [debutant] incrementer valeur champ input text
    Par ilood dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/07/2005, 13h21
  5. [Forms] Comment restreindre les valeurs d'une LOV
    Par popressay dans le forum Forms
    Réponses: 9
    Dernier message: 25/08/2004, 10h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo