|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
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 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...) ?
__________________
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
|
|
|
#2 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
un POST dans le pre-update pourrait vous aider.
POST permet de synchoniser l'écran et la base sans faire le COMMIT |
|
|
00
|
|
|
#3 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Sauf que le post n'est pas autorisé dans le pre-update, la phase de commit ayant déjà débuté...
__________________
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
|
|
|
#4 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
ha oui mince
|
|
|
00
|
|
|
#5 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
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
|
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
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...
__________________
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 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 530 ![]() |
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.
__________________
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
|
|
|
#8 | |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Citation:
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
__________________
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
|
|
|
#9 | |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Citation:
Ta solution me semble bien complexe pour un soucis aussi simple |
|
|
|
00
|
|
|
#10 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 530 ![]() |
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 ?
__________________
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
|
|
|
#11 | |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
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:
__________________
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
|
|
|
#12 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
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 ? |
|
|
00
|
|
|
#13 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 530 ![]() |
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.
__________________
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
|
|
|
#14 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
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
__________________
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
|
|
|
#15 | |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
Citation:
Que penses-tu de gérer cela sur le When-Validate-Record (à condition de tester le :system.record_status)?
__________________
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
|
|
|
#16 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 530 ![]() |
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.
__________________
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
|
|
|
#17 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
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
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
__________________
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
|
|
|
#18 |
![]() ![]() ![]() Inscription : mai 2003 Messages : 6 530 ![]() |
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...
__________________
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
|
|
|
#19 |
|
Expert Confirmé
![]() Chef de projet en SSII Inscription : janvier 2004 Messages : 2 866 ![]() |
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...
__________________
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
|
|
|
#20 |
![]() ![]() Inscription : janvier 2004 Messages : 15 861 ![]() |
Bah pourquoi ne pas changer le bloc1 sur WHEN_VALIDATE_RECORD de bloc2 ?
Edit : comme l'a proposé plainer |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com