Bonjour,
Je travaille sur une application de suivi de fiches, plus ou moins équivalentes à des bug reports. L'application permet de créer des fiches et de les transmettre aux différents groupes d'intervenants chargés d'y répondre.
Au niveau base de données, chaque transfert de la fiche est représenté par un tuple dans une table Transmission dont voici le script de création :
Mon travail actuel consiste à créer une table qui va stocker certaines informations sur les fiches (date de création, utilisateurs ayant créé la fiche, groupe d'utilisateur ayant répondu à la fiche...) utilisés dans un but statistique. Ces champs étaient auparavant calculés à chaque affichage ou export des statistiques mais le nombre de fiches a rendu ce calcul bien trop lourd.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE TABLE [dbo].[TTransmission]( [FicheId] [int] NOT NULL, [NumTransmission] [int] NOT NULL, [Expediteur] [int] NULL, [Destinataire] [int] NULL, [DateTransmission] [datetime] NULL, [Texte] [ntext] NULL, [DateValidation] [datetime] NULL, [DateVerification] [datetime] NULL, [Approbateur] [int] NULL, [Verificateur] [int] NULL, [Mode] [nvarchar](50) NULL
J'ai donc créé une table Statistiques où seront stockées ces informations, et un trigger pour enregistrer ces informations à chaque étape du cheminement de la fiche.
Script de création de la table statistiques (INFOS_FA) :
Par exemple, lorsque la création de la fiche est approuvé, le tuple de la table Transmission qui correspond à la création de la fiche est mis à jour (champs DateTransmission & Approbateur). Dans la table Statistiques, le tuple correspondant à cette fiche est mis à jour afin d'enregistrer la date, l'utilisateur ayant approuvé et son groupe.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 CREATE TABLE [dbo].[INFOS_FA]( [ID_FA] [int] NOT NULL, [AGT_CREA] [int] NULL, [DATE_CREA] [datetime] NULL, [GRP_CREA] [int] NULL, [AGT_APPROB_CREA] [int] NULL, [DATE_APPROB_CREA] [datetime] NULL, [GRP_APPROB_CREA] [int] NULL, [AGT_ETUDE] [int] NULL, [DATE_ETUDE] [datetime] NULL, [GRP_ETUDE] [int] NULL, [AGT_VERIF_ETUDE] [int] NULL, [DATE_VERIF_ETUDE] [datetime] NULL, [AGT_APPROB_ETUDE] [int] NULL, [DATE_APPROB_ETUDE] [datetime] NULL, [GRP_APPROB_ETUDE] [int] NULL, [AGT_APPROB_AMORT] [int] NULL, [DATE_APPROB_AMORT] [datetime] NULL, [GRP_APPROB_AMORT] [int] NULL, [GRP_EN_ATTENTE] [int] NULL, [DATE_MODIF] [datetime] NULL, [STATUT] [int] NULL,
Ce qui donne dans le trigger :
Tout ceci marche plutôt bien sauf dans le cas où l'on supprime cette étape d'approbation, càd en mettant les DateApprobation et Approbateur à NULL. Dans ce cas, les champs DATE_APPROB_CREA, AGT_APPROB_CREA et GRP_APPROB_CREA ne sont pas mis à jour. Est-ce normal que la requête UPDATE ne mette pas à jour ces champs dans ce cas là?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 UPDATE INFOS_FA SET AGT_APPROB_CREA = INSERTED.Approbateur, GRP_APPROB_CREA = TAgent.GroupeId, DATE_APPROB_CREA = INSERTED.DateTransmission FROM INFOS_FA INNER JOIN INSERTED ON INFOS_FA.FA_ID = INSERTED.FicheId INNER JOIN TAgent ON INSERTED.Approbateur = TAgent.NumAgent WHERE NumTransmission = 1 AND (UPDATE(DateTransmission) OR UPDATE(Approbateur))
Merci d'avance pour vos réponse
PS : j'ai bien conscience que les triggers posent certains problèmes mais après avoir fait les tours des solutions possibles c'est ce qui me paraissait le plus adapté
Partager