OVH Cloud OVH Cloud

Trigger avant

7 réponses
Avatar
Benjamin Cabé
Bonjour/Bonsoir

Pourquoi un "trigger avant" qui intercepte une erreur et positionne donc
h.afaire à "A" ne fait pas retourner "Faux" aux fonctions HF le déclenchant
(HAjoute & co..)
Quelle est la solution ?
Je veux pouvoir utiliser mon trigger pour simplifier les controles de
saisie et assurer la coherence de mes donnees, et empecher la fermeture de
ma fiche si erreur avec un truc du style
si hajoute alors
ferme
sinon
reprisesaisie
fin

Merci d'avance de votre aide,
Benjamin

7 réponses

Avatar
farplus
Bonjour,
en Wd7.5 la fonction HdecritTrigger renvoi un booleen pour savoir si elle
c'est bien ou mal déroulée; de plus dans le cas d'un trigger Avant on peut
positionner l'h.afaire à A pour empecher l'exécution du trigger après.
donc tu peux coder:
res est un booleen
res=hdecrittrigger(fichier,hajoute,proc,triggerAvant)

hajoute(fichier)
si res alors
ferme
sinon
rs()
fin

à part ça je vois qu'actuellement PcSoft a (enfin) étendu les fonctions des
triggers aux tables, chose demandée depuis plus de 2 ans.
Etonnamment il a fait ça très discrètement - pas vu d'annonce !

A+
Avatar
Benjamin Cabé
Bonjour,

Heu je suis pas d'accord... HDecritTrigger retourne un booleen qui indique
si la *pose* du trigger s'est bien déroulée. Je ne teste ce booleen que
lors de la pose, ds le code d'init du projet.
Cependant, la solution temporaire que j'ai trouvée est un booleen global au
projet que je mets à Faux si le trigger avant intercepte une erreur (tout
en mattant h.afaire="A"). C'est pas trop mal comme solution sauf qu'on perd
une partie de la simplification apportée par les triggers !!

Merci de ta réponse en tout cas,
Benjamin

Bonjour,
en Wd7.5 la fonction HdecritTrigger renvoi un booleen pour savoir si elle
c'est bien ou mal déroulée; de plus dans le cas d'un trigger Avant on peut
positionner l'h.afaire à A pour empecher l'exécution du trigger après.
donc tu peux coder:
res est un booleen
res=hdecrittrigger(fichier,hajoute,proc,triggerAvant)

hajoute(fichier)
si res alors
ferme
sinon
rs()
fin

à part ça je vois qu'actuellement PcSoft a (enfin) étendu les fonctions des
triggers aux tables, chose demandée depuis plus de 2 ans.
Etonnamment il a fait ça très discrètement - pas vu d'annonce !

A+


Avatar
Benjamin Cabé
Bonjour,

Heu je suis pas d'accord... HDecritTrigger retourne un booleen qui indique
si la *pose* du trigger s'est bien déroulée. Je ne teste ce booleen que
lors de la pose, ds le code d'init du projet.
Cependant, la solution temporaire que j'ai trouvée est un booleen global au
projet que je mets à Faux si le trigger avant intercepte une erreur (tout
en mattant h.afaire="A"). C'est pas trop mal comme solution sauf qu'on perd
une partie de la simplification apportée par les triggers !!

Merci de ta réponse en tout cas,
Benjamin

Bonjour,
en Wd7.5 la fonction HdecritTrigger renvoi un booleen pour savoir si elle
c'est bien ou mal déroulée; de plus dans le cas d'un trigger Avant on peut
positionner l'h.afaire à A pour empecher l'exécution du trigger après.
donc tu peux coder:
res est un booleen
res=hdecrittrigger(fichier,hajoute,proc,triggerAvant)

hajoute(fichier)
si res alors
ferme
sinon
rs()
fin

à part ça je vois qu'actuellement PcSoft a (enfin) étendu les fonctions des
triggers aux tables, chose demandée depuis plus de 2 ans.
Etonnamment il a fait ça très discrètement - pas vu d'annonce !

A+


Avatar
Benjamin Cabé
Bonjour,

Heu je suis pas d'accord... HDecritTrigger retourne un booleen qui indique
si la *pose* du trigger s'est bien déroulée. Je ne teste ce booleen que
lors de la pose, ds le code d'init du projet.
Cependant, la solution temporaire que j'ai trouvée est un booleen global au
projet que je mets à Faux si le trigger avant intercepte une erreur (tout
en mattant h.afaire="A"). C'est pas trop mal comme solution sauf qu'on perd
une partie de la simplification apportée par les triggers !!

Merci de ta réponse en tout cas,
Benjamin

Bonjour,
en Wd7.5 la fonction HdecritTrigger renvoi un booleen pour savoir si elle
c'est bien ou mal déroulée; de plus dans le cas d'un trigger Avant on peut
positionner l'h.afaire à A pour empecher l'exécution du trigger après.
donc tu peux coder:
res est un booleen
res=hdecrittrigger(fichier,hajoute,proc,triggerAvant)

hajoute(fichier)
si res alors
ferme
sinon
rs()
fin

à part ça je vois qu'actuellement PcSoft a (enfin) étendu les fonctions des
triggers aux tables, chose demandée depuis plus de 2 ans.
Etonnamment il a fait ça très discrètement - pas vu d'annonce !

A+


Avatar
R&B
Benjamin Cabé wrote:
Bonjour/Bonsoir

Pourquoi un "trigger avant" qui intercepte une erreur et positionne donc
h.afaire à "A" ne fait pas retourner "Faux" aux fonctions HF le déclenchant
(HAjoute & co..)
Quelle est la solution ?
Je veux pouvoir utiliser mon trigger pour simplifier les controles de
saisie et assurer la coherence de mes donnees, et empecher la fermeture de
ma fiche si erreur avec un truc du style
si hajoute alors
ferme
sinon
reprisesaisie
fin

Merci d'avance de votre aide,
Benjamin




lala

http://rbesset.net/modules/tutorials/viewtutorial.php?tid=3#concont

Avec ce code je rècupère les valeur des rubriques Avant le hmodifie.
Au passage profiter d'y être pou voir un peu plus ce que peut donner
l'utilisation des sources de données.

Si cela a plus, merci de passer nous soutenir régulièrement.
(Oui, C'est bien de la Pub !)

@+ R&B
Avatar
Benjamin Cabé
Salut !
http://rbesset.net/modules/tutorials/viewtutorial.php?tid=3#concont

Avec ce code je rècupère les valeur des rubriques Avant le hmodifie.
Au passage profiter d'y être pou voir un peu plus ce que peut donner
l'utilisation des sources de données.

Si cela a plus, merci de passer nous soutenir régulièrement.
(Oui, C'est bien de la Pub !)



Je te remercie de ta réponse, je connaissais déjà ton _excellent_ site.
Malheureusement, le chouette article ne répond en rien à mon problème.
Ainsi je vais continuer par passer par une variable globale au projet pour
indiquer, dans le trigger avant, qu'une fonction H* a été shuntée.

Merci quand même,
Benj
Avatar
R&B
Benjamin Cabé wrote:
Bonjour/Bonsoir

Pourquoi un "trigger avant" qui intercepte une erreur et positionne donc
h.afaire à "A" ne fait pas retourner "Faux" aux fonctions HF le déclenchant
(HAjoute & co..)
Quelle est la solution ?
Je veux pouvoir utiliser mon trigger pour simplifier les controles de
saisie et assurer la coherence de mes donnees, et empecher la fermeture de
ma fiche si erreur avec un truc du style
si hajoute alors
ferme
sinon
reprisesaisie
fin

Merci d'avance de votre aide,
Benjamin



Ok, pardon pour le poste précédent...

pourquoi vouloir passer pas un trigger ?
en effet dans da fiche ("empecher la fermeture de
ma fiche si erreur") vois plustot du coté de RADEnregistre()
qui est executée avant les hajoute() et hModifie() du boution de validation

avec le rad par défaut, si radenregistre() retourne faux tu devrais
revenir en saisie

en tout cas tu peux modifier ce comportement sans problème (en
surchargeant la classe RAD (ou, comme nous en copiant le tout et
utilisant nos classes en lieu et place des classes originales)

ainsi, tes contrôles sont simplement à envoyer dans la proc locale
RADEnregistre et non plus dans un trigger ou même dans une classe (qui
n'est pas faite pour cela).

Nous, on a même monté un mécanisme qui permet d'utiliser une locale
RADEnregistreAprès() pour déclacher des traitement lors des enregistrements.

@+ R&B