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] pre-update


Sujet :

Forms Oracle

  1. #1
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut [forms] pre-update
    Environnement : form6i (patch9), oracle 8i

    J'ai deux blocs : bloc1 et bloc2 (placé dans cet ordre dans le navigateur de forms).

    Dans le pre-update de bloc2, je mets à jour un champ de bloc1.

    Je modifie bloc2, je commit : le pre-update de bloc2 se déclenche.
    Je retourne sur bloc1, à l'affichage mon champ de bloc1 a été modifié, mais à l'affichage seulement . Si je fais un query, je retrouve la valeur précédent de ce champ...

    Maintenant, je modifie l'ordre de mes blocs dans le navigateur de forms (bloc2 passe avant bloc 1). Je refais la manipulation précédente. Et là miracle, la modification a été prise en compte à l'affichage et dans la base !

    1. Avez-vous une explication à cela (j'ai bien une petite idée...) ?

    2. Avez-vous une solution pour contourner ce problème SANS CHANGER l'ordre des blocs (cela me semble trop risqué, quelqu'un peut passer derrière moi et modifier l'ordre...) ?

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    un POST dans le pre-update pourrait vous aider.

    POST permet de synchoniser l'écran et la base sans faire le COMMIT

  3. #3
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Sauf que le post n'est pas autorisé dans le pre-update, la phase de commit ayant déjà débuté...

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    ha oui mince

  5. #5
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    ceci étant, c'est le fonctionnement normal de forms... si tu fais un query tu recharges les données de la base, il faut sauvegarder avant le query pour voir la modif

  6. #6
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut Re: [forms] pre-update
    Justement je commit !!!!

    Le problème c'est que les modifications concernant mon bloc1 apportées dans le pre-update de mon bloc2 ne sont pas prise en compte au niveau de la base...

  7. #7
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Cela me parait normal. Les triggers se déclenchent dans l'ordre des blocs.
    Le pre-update du bloc 1 s'exécute, puis celui du bloc2 qui modifie bloc1, mais trop tard !
    ou alors il faudrait un deuxième commit.

  8. #8
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par SheikYerbouti
    Cela me parait normal. Les triggers se déclenchent dans l'ordre des blocs.
    Le pre-update du bloc 1 s'exécute, puis celui du bloc2 qui modifie bloc1, mais trop tard !
    ou alors il faudrait un deuxième commit.
    C'est ce que je pensais... La solution que j'ai choisi d'adopter :
    1. dans le pre-update de mon bloc2, je renseigne un flag à 1
    2. dans le key-commit :
    - je commit une première fois
    - si mon flag = 1 :
    - j'attribue la valeur à mon bloc1
    - je re-commit
    - je repasse la valeur du flag à 0
    C'est un peu lourd , mais cela à l'avantage de fonctionner quelque soit l'ordre du bloc. Qu'en pensez-vous ?

  9. #9
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut Re: [forms] pre-update
    Citation Envoyé par PlaineR
    Justement je commit !!!!

    Le problème c'est que les modifications concernant mon bloc1 apportées dans le pre-update de mon bloc2 ne sont pas prise en compte au niveau de la base...
    ha OK... bon bah là mais souvenir de Forms sont trop vague pour que je te sois très utile

    Ta solution me semble bien complexe pour un soucis aussi simple

  10. #10
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    N'existe t-il pas d'autre solution que celle passant par le trigger PRE-UDPDATE

    Voir si le trigger POST-UPDATE ne se déclanche pas après tous les triggers PRE-UPDATE ?

  11. #11
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Le résultat est le même en passant par le post-update

    Car à mon avis une fois qu'il a traité un bloc, il ne revient plus dessus. Ce qui est bizarre c'est que le statut de mon block1 passe à CHANGED dans le pre-update, puis repasse à QUERY après le commit_form, alors que dans la base la valeur n'a pas été changé.

    De plus, quand je reviens sur mon block1 que je veux faire une modification dessus, j'ai un message "L'enregistrement a été modifié par un autre utilisateur".

    Citation Envoyé par orafrance
    Ta solution me semble bien complexe pour un soucis aussi simple
    Oui, c'est ce que je trouve aussi... Une autre solution (plus simple) serait de changer la valeur de mon champ du block1 dans le when-validate-record, mais n'y a-t-il pas un risque dans ce cas que la valeur du bloc1 se trouve changée sans avoir modifié le bloc2 (ou vice-versa) ?

  12. #12
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    mais t'es sûr que c'est bien un champ basé dans le bloc 1 ?

    Il y a une relation maitre/détail entre les blocs ?

  13. #13
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Le commit_form remet tous les status a QUERY, vu que tous les changements ont été enregistrés en base.
    Le problème est que tu modifie une donnée d'un bloc après que Forms ait passé les triggers d'update.

  14. #14
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Oui c'est un champs basé. Oui il y a une relation maitre-détail entre le bloc1 (maitre) et le bloc2 (détail).

    Fonctionnellement ce que je veux faire (en simplifiant):
    - mon bloc2 a un statut qui peut-être : Valide, en erreur ou à contrôler
    - mon bloc1 a un statut qui peut-être : Valide (si tous les enregistrements
    de mon bloc2 ont le statut valide) ou à contrôler (sinon)

    => Si je modifie une information d'un enregistrement du bloc2, le statut de cet enregistrement devient à controler. L'enregistrement du bloc1 doit donc lui aussi avoir le statut à contrôler

  15. #15
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par SheikYerbouti
    Le commit_form remet tous les status a QUERY, vu que tous les changements ont été enregistrés en base.
    Le problème est que tu modifie une donnée d'un bloc après que Forms ait passé les triggers d'update.
    Oui c'est ce que je pense.

    Que penses-tu de gérer cela sur le When-Validate-Record (à condition de tester le :system.record_status)?

  16. #16
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Qu'est-ce qui t'empêche de modifier le champs du bloc1 lorsque tu modifie celui du bloc2 ?

    sinon tu remplace les triggers PRE-UPDATE par ON-UPDATE et tu gère à la main l'ordre de mise à jour.

  17. #17
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Qu'entends tu par "à la main" ? Passer une commande update ? Je peux également le faire sur le pre-update, mais après se pose le problème du raffraichissement de l'affichage (perf...)

    Ensuite je ne modifie pas qu'un champs dans mon bloc2, mais il faut que lorsque le bloc2 a été modifié, mes 2 statuts (bloc1 et bloc2) passent à controler.

    Le problème est que si je fais ça sur le when-validate-item (ou le when-validate-record, je viens de m'en rendre compte), lorsque je retourne sur mon premier écran sans avoir committer mes changements sur le deuxième, le statut du bloc1 a changé, alors qu'il ne devrait pas puisque je n'ai finalement pas committer les modifications apportées au bloc2...

    Je ne vois pas finalement pas d'autres solutions qu'un double commit (cf. la première solution que j'avais proposée). C'est la seule qui revient à faire ce que je voulais faire initialement. Mais cela sent un peu l'usine à gaz

  18. #18
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Ou alors faire un traitement appelé dans le trigger KEY-COMMIT, pour mettre à jour tous tes champs dans les blocks avant d'appeler le commit_form...

  19. #19
    Membre expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Points : 3 609
    Points
    3 609
    Par défaut
    Merci à vous deux pour vos réponses, je clos le sujet puisqu'elles m'ont permis d'avancer.

    Pour information, après reflexion, comme suggéré par SheikYerbouti, je pense opter pour une commande update qui met à jour la table associée au bloc1 dans le pre-update du bloc2, et lorsque je reviens au premier écran (bloc1) je raffraichis l'affichage via un execute_query...

    Je vais faire des tests sur la base de prod, si cela s'avère trop gourmand en perf, j'opterai sans doute pour mon système de flag, plus bancal certes, mais moins gourmand en perf, puisque ne se pose pas le problème du raffraichissement de l'affichage...

  20. #20
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Bah pourquoi ne pas changer le bloc1 sur WHEN_VALIDATE_RECORD de bloc2 ?

    Edit : comme l'a proposé plainer

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. variable form père vers form fils
    Par dragonfly80 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 28/02/2010, 17h48
  2. [AJAX] Mise en forme : periodical updater
    Par geoffreybulle dans le forum AJAX
    Réponses: 5
    Dernier message: 03/07/2009, 17h19
  3. [forms 6i]UPDATE IMPOSSIBLE
    Par pjcejbpojo dans le forum Forms
    Réponses: 5
    Dernier message: 06/05/2006, 14h09
  4. [8i][forms 6i] trigger PRE-UPDATE
    Par Magnus dans le forum Oracle
    Réponses: 6
    Dernier message: 21/02/2006, 11h57
  5. [Forms 6i] Update -> Pas de sortie en Exception
    Par macben dans le forum Oracle
    Réponses: 14
    Dernier message: 27/12/2005, 12h17

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