Page 1 sur 1

Problème sur un trigger AFTER INSERT

MessagePosté: Mer 8 Juin 2016 18:02
de gremlins13
Bonjour à tous,

J'ai créé un champ d'information libre QteInitiale de type Valeur dans les lignes de document.
Pour simplifier, je veux simplement que ce champ prenne automatiquement la valeur du champ 'dl_qte' lors de l'enregistrement d'une ligne dans un bon de commande.

J'ai donc créé un trigger sur F_DOCLIGNE :

Code: Tout sélectionner
USE [ATAI7_Copie]
GO
/****** Object:  Trigger [dbo].[UpdateQteInit]    Script Date: 06/08/2016 13:53:14 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER [dbo].UpdateQteInit
   ON  [dbo].[F_DOCLIGNE]
   AFTER INSERT
AS
BEGIN
   declare @dl_no      as integer
   declare @do_type   as integer
   declare @dlqte      as integer   
   declare @dopiece   as varchar(20)
   declare @txterreur  as varchar(255)

   select        
      @dl_no      = DL_No,   
      @dopiece   = do_piece,
      @dlqte      = dl_qte,
      @do_type   = do_type
   from inserted

   if (@do_type = 1)  begin    
      begin try
         update F_DOCLIGNE  set QteInitiale = @dlqte where DL_No=@dl_no
         -- Affichage de la requête
        select @txterreur = 'update F_DOCLIGNE set QteInitiale = '+cast(@dlqte as varchar)+' where DL_No='+cast(@dl_no as varchar)
        EXEC dbo.CB_SendMessage @@SPID, @txterreur          
      end try
      begin catch
        EXEC dbo.CB_SendMessage @@SPID, ERROR_MESSAGE
      end catch;       
   end;
end


Seulement l'update ne fonctionne pas, pourtant la requete que j'affiche grace à SendMessage est bonne ... Je pense que c'est du à un 'document en cours d'utilisation', même si je n'ai aucun message qui apparait

Quelqu'un peut il me renseigner ?

SQLSERVER 2008

Re: Problème sur un trigger AFTER INSERT

MessagePosté: Jeu 9 Juin 2016 11:51
de IMPERIAL
Bonjour,

Tu fais une requete AFTER INSERT sur une info libre ....

Petit problème : sur une info libre les AFTER INSERT, etc ... ne fonctionnent pas.

SAGE écrit une première fois sa ligne dans la base ... INSERT mais SANS les infos libres.
Ensuite SAGE fait des UPDATE sur la ligne ... Pour toucher une info libre il faut faire des AFTER UPDATE ...et en plus utiliser des NEXTLEVEL sinon ça plante ...

Cdlt

Re: Problème sur un trigger AFTER INSERT

MessagePosté: Jeu 9 Juin 2016 13:58
de gremlins13
Merci,

Effectivement cela correspond au fonctionnement des Objets Metiers , pour lesquels il faut d'abord créer la ligne, puis la modifier avec les infos libres

Je vais tenter quelques essais.... Merci

Re: Problème sur un trigger AFTER INSERT

MessagePosté: Jeu 12 Jan 2017 11:42
de romulus001
Bonjour,
Petite information qui m'a été par SAGE en personne : les triggers en INSERT sur la table F_DOCLIGNE ne font pas leur job correctement, pour renseigner n'importe quel champ, y compris DL_DESIGN, il faut faire un trigger en UPDATE.
Par contre, pas de soucis quand on se crée des triggers en INSERT sur la table F_DOCENTETE.

Re: Problème sur un trigger AFTER INSERT

MessagePosté: Sam 4 Fév 2017 13:13
de asr31
@ROMULUS,

Ce n'est pas que les triggers SAGE ne fassent pas leur boulot, mais plutôt que c'est un choix de fonctionnement :
L'insert crée les données minimales et des updates sont fait ensuite (en particulier sur les informations libres).

Ne pas oublier que ce n'est pas de la programmation 'native' SQL et que c'est l'application cliente qui fait, selon ses propres algorithmes, les INSERT et UPDATE, d'où l'utilité de passer par les Objets Métiers qui s'appuient sur les Dll de l'application cliente.

Même si un trigger vient modifier une information libre sur une ligne de document, par exemple, ce n'est pas pour autant que la partie cliente de l'application le 'visualise', et, si dans son interface ou son cache, l'information libre est vide (alors que ton trigger l'a alimenté ), quand la ligne va être validée, sa valeur est celle de la partie cliente.

Bref, on ne fait pas ce qu'on veut.

Cordialement,