Bonjour,
Je n'ai encore jamais utilisé les transactions en Windev, mais je pense que je devrais le faire dans le cas suivant de génération automatique de facture, c.a.d. :
1. création d'un enregistrement dans le fichier FACTURE, avec attribution d'un numéro
2. création d'un ou plusieurs enregistrements dans le fichier FACTURE_LIGNE à partir de lignes sélectionnées dans un fichier COUTS
3. modification d'enregistrements dans le fichier COUTS pour annoter ceux qui sont facturés
Après avoir étudié l'aide, je me pose cependant des questions relatives à l'emplacement des commandes "HTransactionDébut" et "HTransactionFin".
Citation :
Aucune interface utilisateur (fenêtre, état, ...) ne doit être utilisée entre le début et la fin d'une transaction.
Toutes les opérations de transaction doivent être réalisées dans un même traitement : la fonction HTransactionDébut()et la fonction HTransactionAnnule() doivent être appelées depuis le même traitement : code de clic d'un bouton, ....
J'ai programmé l'enchainement de toutes ces opérations dans plusieurs procédures d'une même fenêtre (qui s'appellent les unes les autres) et je fais également appel à une deuxième fenêtre (
SANS contexte indépendant) pour faire valider plusieurs montants à l'utilisateur.
Ce que je souhaite, c'est ne rien valider du tout si l'une ou l'autre de ces procédures relativement complexes devait planter.
Comment faut-il comprendre dans le texte de l'aide "appelées […ou…] réalisées […par ou depuis…] le même traitement" ?
A partir du moment où l'utilisateur clique sur "OUI" à une question pour valider et que toutes les autres procédures appelées s'enchaînent, est-ce "un même traitement" ?
Quant à ma deuxième fenêtre dans laquelle je veux faire confirmer plusieurs valeurs à l'utilisateur, puis-je garder les valeurs saisies dans cette fenêtre (valeurs qui appartiendront à mon fichier LIGNES_FACTURE), si je referme cette fenêtre alors qu'elles ne sont pas encore enregistrées, et que je démarre la transaction seulement après, dans le style :
bOK est un booléen
HTransactionDebut()
// ... traitement
HAjoute(FACTURE)
// ... traitement + test sur HAjoute => bOK = vrai ou faux
HAjoute(FACTURE_LIGNES)
// ... traitement + test sur HAjoute => bOK = vrai ou faux
Hmodifie(COUTS)
// ... traitement + test sur Hmodifie => bOK = vrai ou faux
Si bOK = vrai
HtransactionFin()
SINON
HtransactionAnnule()
FIN
Si quelqu'un peut me faire bénéficier de son expérience, je le remercie vivement d'avance de ses conseils éclairés.