Problème sur un trigger AFTER INSERT

Cette section est consacrée aux développements d'applications interfacées avec les logiciels Sage.

Modérateurs: Super-Apogea, Super Modérateur

Problème sur un trigger AFTER INSERT

de gremlins13 » Mer 8 Juin 2016 18:02

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
Avatar de l’utilisateur
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Mar 26 Fév 2013 12:06

Re: Problème sur un trigger AFTER INSERT

de IMPERIAL » Jeu 9 Juin 2016 11:51

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
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 4661
Inscription: Jeu 6 Aoû 2009 12:39
Localisation: ROSNY SOUS BOIS

Re: Problème sur un trigger AFTER INSERT

de gremlins13 » Jeu 9 Juin 2016 13:58

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
Avatar de l’utilisateur
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Mar 26 Fév 2013 12:06

Re: Problème sur un trigger AFTER INSERT

de romulus001 » Jeu 12 Jan 2017 11:42

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.
Super Contributeur
Super Contributeur
 
Messages: 176
Inscription: Sam 28 Juin 2014 20:48

Re: Problème sur un trigger AFTER INSERT

de asr31 » Sam 4 Fév 2017 13:13

@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,
ASR31

En recherche de missions.
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 2975
Inscription: Mer 13 Fév 2008 15:31
Localisation: TOULOUSE


Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
cron