Neu SQL Trigger Problem

  • Das FBA-Reparatur Tool zur Korrektur der doppelten FBA Aufträge vom 06.06. und folgend steht nun endlich zum Download bereit! HIER gehts zum Download

Usiu

Aktives Mitglied
20. Mai 2021
19
2
Hallo Zusammen,

ich habe folgendes Problem mit einem Trigger:
SQL:
USE [Mandant_1]
GO
/****** Object:  Trigger [dbo].[tr_newOrder]    Script Date: 09.03.2023 08:38:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[tr_newOrder] ON [dbo].[tBestellung]
AFTER INSERT
AS
BEGIN
    DECLARE @cBestellNr VARCHAR(20)
    DECLARE @KBestellung INT

    SELECT @cBestellNr = inserted.cBestellNr, @kBestellung = inserted.kBestellung FROM  inserted

    -- Set up the request URL
    DECLARE @url VARCHAR(MAX) ='http://x.x.x.x/?mode=BWAuftragsdaten&orderNo=' + CAST(@cBestellNr AS VARCHAR(MAX)) + '&modus=new'

    -- Get all the items associated with the order and add them to the request URL
    SELECT @url = @url + '&artno' + CAST(ROW_NUMBER() OVER (ORDER BY tbestellpos.kBestellPos ASC) AS VARCHAR(20)) + '=' + tbestellpos.cArtNr
                  + '&artamount' + CAST(ROW_NUMBER() OVER (ORDER BY tbestellpos.kBestellPos ASC) AS VARCHAR(20)) + '=' + CAST(CAST(tbestellpos.nAnzahl AS DECIMAL(7,2)) AS VARCHAR(20))
    FROM tBestellung
    INNER JOIN tbestellpos
        ON tBestellung.kBestellung = tbestellpos.tBestellung_kBestellung
    WHERE tbestellpos.tBestellung_kBestellung = @KBestellung
        AND tbestellpos.cArtNr != ''
        AND fVKNetto != '0.00000000000000'

    INSERT INTO SOA_Schnittstelle (url,status,erfassungsdatum)VALUES(@url,0,GETDATE());
END

Wenn ich es manuell ausführe bekomme ich ein richtiges Ergebnis: x.x.x.x /?mode=BWAuftragsdaten&orderNo=170368&modus=new&artno1=75083000/VE&artamount1=4.00&artno2=79361400/VE&artamount2=4.00
Wenn der Trigger es selber macht bekomme ich nur das: x.x.x.x /?mode=BWAuftragsdaten&orderNo=2023-03-1263337-AU&modus=new da fehlt leider ein gutes Stück.

Es Sieht so us als würde dieser Part nciht funktionieren:
SQL:
  -- Get all the items associated with the order and add them to the request URL
    SELECT @url = @url + '&artno' + CAST(ROW_NUMBER() OVER (ORDER BY tbestellpos.kBestellPos ASC) AS VARCHAR(20)) + '=' + tbestellpos.cArtNr
                  + '&artamount' + CAST(ROW_NUMBER() OVER (ORDER BY tbestellpos.kBestellPos ASC) AS VARCHAR(20)) + '=' + CAST(CAST(tbestellpos.nAnzahl AS DECIMAL(7,2)) AS VARCHAR(20))
    FROM tBestellung
    INNER JOIN tbestellpos
        ON tBestellung.kBestellung = tbestellpos.tBestellung_kBestellung
    WHERE tbestellpos.tBestellung_kBestellung = @KBestellung
        AND tbestellpos.cArtNr != ''
        AND fVKNetto != '0.00000000000000'

Bin schon am verzweifeln, vllt. hat jemand hier eine Idee.
 

Karobube

Sehr aktives Mitglied
23. September 2020
153
79
on the road
Hallo Usiu,

in 1.5 oder 1.6/1.7 ?

ab 1.6 sind tBestellung und tBestellpos nur noch Views und die eigentlichen dbo.tBestellungstabellen sind jetzt Verkauf.tAuftragstabellen. Vielleicht scheitert es irgendwo daran.

VG KB
 

John

Sehr aktives Mitglied
3. März 2012
2.375
418
Berlin
Naja, was löst denn den Trigger aus? Und in welcher Reihenfolge macht dieser Prozess seine Inserts/updates auf die einzelnen Tabellen?

Eine Erklärung wäre, daß tBestellung den Insert erfährt, BEVOR die Positionen dieser Bestellung in tbestellpos eingefügt werden. Damit läuft deine Abfrage ins leere.

Rufst Du dagegen manuelle auf, ist tbestellpos längst geschrieben.
 
  • Gefällt mir
Reaktionen: wawi-dl

mh1

Sehr aktives Mitglied
4. Oktober 2020
987
275
Wenn ich es manuell ausführe bekomme ich ein richtiges Ergebnis
was meinst du denn mit diesem Satz?
Meinst du, dass du einfach nur den SQL-Code, der dir die URL zusammenbastelt manuell mit Daten aus der Datenbank ausführst?
Oder hast du wirklich den Trigger getestet (z.b. mit dem Profiler Schritt für Schritt...)

Ohne das Setting genauer untersuchen zu können, würd ich als Schuss ins Blaue einfach mal sagen, dass zu dem Zeitpunkt wo dein Trigger läuft tBestellpos noch gar nicht befüllt ist.
SELECT @url = @url + '&artno' + CAST(ROW_NUMBER() OVER (ORDER BY tbestellpos.kBestellPos ASC) AS VARCHAR(20)) + '=' + tbestellpos.cArtNr
+ '&artamount' + CAST(ROW_NUMBER() OVER (ORDER BY tbestellpos.kBestellPos ASC) AS VARCHAR(20)) + '=' + CAST(CAST(tbestellpos.nAnzahl AS DECIMAL(7,2)) AS VARCHAR(20))
Dann wäre ein oder mehrere Felder in dieser langen Verkettung NULL (kannst ja die Werte mal mit isnull() prüfen.)

Zumindest in meiner Version (1.5) steht ja auch, dass eine Bestellung nur mit der spBestellungAnlegen angelegt werden kann und nicht über einen Insert in tBestellung.
Deshalb solltest du falls du auch die 1.5 benutzt die entsprechenden StoredProcedures anschauen, wo beim Bestellungseingang wann was wie eingetragen wird.

Evtl müsste dein Trigger in die tBestellpos (aber ich habs mir wie gesagt nicht genau angeschaut) 🤔
 
Zuletzt bearbeitet:

SebastianB

Moderator
Mitarbeiter
6. November 2012
2.084
335
Also die Reihenfolge ist wie folgt:

1. INSERT auf tBestellung
2. INSERT der tbestellpos
3. ggf. UPDATE der tbestellpos bei Kindartikeln (um den Bezug zur Id des Vaters hinzukriegen)
4. Viele andere Dinge (Bestelleigenschaften usw.)
5. EXEC spAuftragEckdatenAktualisieren

Sprich: erst wenn spAuftragEckdatenAktualisieren aufgerufen wird, ist die Bestellung vollständig. Aus dem Bauch raus: Leg einen WOrkflow an mit einer Custom-SP die ausgeführt wird wenn ein Auftrag angelegt wird (irgendwo hier im Forum gibt es ein Video dazu ("Werte in die DB schreiben bei WOrkflow" oder so)

Da die tBestellung eine Identity-Spalte hat können ja bei der Anlage der tBestellung noch keine Positionen vorhanden sein.
 
  • Gefällt mir
Reaktionen: Marvin D.

wawi-dl

Sehr aktives Mitglied
29. April 2008
5.668
499
Manuel hatte mal einen kleinen Exkurs gezeigt, sollte für Anregung/Tipps reichen, Kenntnisse sind ja vorhanden.

Wie schon erwähnt wurde, sind die Daten zu deinem Zeitpunkt noch nicht komplett vorhanden.


Eigenen Workflow erstellen, dann kannst deinen Task antriggern, wenn Auftrag erstellt wurde.
 
  • Ich liebe es
Reaktionen: Karobube

mh1

Sehr aktives Mitglied
4. Oktober 2020
987
275
Irgendwie klingt das alles nach einem XY-Problem ;)

Vielleicht wäre es besser, du beschreibst was du erreichen willst, anstatt konkret nach dem Trigger zu fragen.
Ich persönlich denke ja, dass es der falsche Weg ist, ein neues Datenbankobjekt in einer Datenbank anzulegen, deren Funktionsweise und Zustand du garnicht genau kennst. Der vorgegebene Weg, Daten zu exportieren ist ja über die Ameise bzw. über die von ihr aufgerufenen Funktionen.
Es wäre sicherlich auch eine Herausforderung einen solchen eigenen Trigger dann updatesicher zu machen.

Ich würde dir also vorschlagen, einen Schritt zurückzugehen und nochmals das Endprodukt zu beschreiben. Vielleicht gibts eine ganz andere Möglichkeit das Ziel zu erreichen... 🤔
 
Zuletzt bearbeitet:

Usiu

Aktives Mitglied
20. Mai 2021
19
2
Also erreichen will ich folgendes: Wir haben 2 Warenwirtschaftsprogramme, einemal die WAWI und Programm x. Programm x soll alle Aufträge importiert bekommen, dafür gibt es eine API für Programm x. Die API übernimmt die Information eines Auftrages anhand einer URL. Diese URL soll in der Datenbank durch ein trigger in einer zusätzlichen Tabelle gespeichert werden, dafür brauche ich die Tabelle dbo.tbestellung(hier ist auch der Trigger hinterlegt) und ich brauche dann auch die Info aus dbo.tbestellpos, aus diesen beiden Tabellen wird url generiert. Nun funktioniert das nicht ganz, da beim Auslösen des Triggers die Tabelle tbestellpos noch nicht beschrieben wurde.
Diese Url wird dann von ein Phyton Programm abgefragt und sendet die URL und somit hat Programm X diesen Auftrag.

PS. es handelt sich um die Version 1.5.55.6
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
987
275
Aber wieso willst du einen Trigger in der Datenbank?

Wann sollte der denn ausgelöst werden? -> Sinnvollerweise doch erst dann, wenn der Auftrag komplett in der Datenbank abgelegt ist, oder? Und oben hat doch @SebastianB beschrieben, wann die Bestellung komplett in der Datenbank angekommen ist (hast du den Beitrag gelesen?)

Du könntest also jetzt nach dem in #5 beschriebenen Zeitpunkt deine URL erzeugen ODER
was mir viel sinnvoller erscheint: dir den Auftrag per Ameise aus der Datenbank exportieren und diesen Export dann an Programm X übergeben. Warum denke ich dass das sinnvoller ist? Wenn du ein Update der Wawi machst und JTL verändert irgendwas in den Abläufen wie, wann und wo ein Bestellung geschrieben wird, erzeugst du ein falsche URL. Im schlimmsten Fall überträgst du unvollständige Bestelldaten an die API und merkst das gar nicht zeitnah.

Also ich würde es so machen:
Regelmäßig die Bestellung, die noch nicht in ProgrammX sind von der Ameise exportieren lassen und an Programm X übergeben. Wenn die Bestellung dann komplett in Programm X gespeichert ist, erfolgt eine Rückmeldung an die Wawi (somit weiß die Wawi, welche Bestellungen exportiert werden müssen)
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
987
275
Wieso nicht die Url per Workflow im Bereich Auftrag > angelegt aufrufen?
Falls der Workflow auf alle benötigten Daten Zugriff hat, wäre das sicherlich auch eine einfache und schnelle Lösung. Abhängig von der Wichtigkeit der Bestelldaten in ProgrammX würde ich aber eine Lösung basteln, die auf Fehler prüft bzw. einen Rückgabewert der API auswertet.
 

Usiu

Aktives Mitglied
20. Mai 2021
19
2
Wenn du bei der Aktion im Workflow "Ausfühen" wählst, kannst du das Programm bzw. Script angeben und in einem zweiten Auswahlfeld einen Parameter angeben, der dann dem Script übergeben wird.
Stimmt, dazu schreibe ich eine kleine Batchdatei, die den Ordner überwacht und die Datei ausführt.
Die Datei wird dann verschoben und mein Phyton Programm sendet die URL.
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Fehler bei der WAWI SQL Server Installation Gelöste Themen in diesem Bereich 10
Neu Workflow - ändern der Auftragsfarbe auf Default in der Datenbank mittels SQL Gelöste Themen in diesem Bereich 10
Neu Nach Update auf 1.8.6 kein laden der Tickets mehr. Datenbank abbruch auch auf lokalen SQL Server. Servicedesk (Beta) 2
Neu SQL Server von PC auf externe SSD verschieben Installation von JTL-Wawi 8
Neu SQL Server 2022 Express - Filestream User helfen Usern - Fragen zu JTL-Wawi 19
Neu SQL - Pürfung - Ist ein Artikel in einer kKategorie oder deren Oberkategorien? Eigene Übersichten in der JTL-Wawi 2
Neu SQL Server auf externer Festplatte "Pfad" Installation von JTL-Wawi 8
Neu SQL für tArtikel, der mir auch cArtNr für Väter anzeigt Eigene Übersichten in der JTL-Wawi 1
Neu Testsystem zurücksetzen ? SQL User helfen Usern - Fragen zu JTL-Wawi 3
SQL Abfrage JTL-Wawi 1.7 4
Neu #1118 - Zeilenlänge zu groß bei sql - update Gelöste Themen in diesem Bereich 1
Neu Suchen SQL Profi für unterschiedliche SQL Arbeiten Dienstleistung, Jobs und Ähnliches 10
Neu Brauche Hilfe bei SQL Abfrage Name Zahlung User helfen Usern - Fragen zu JTL-Wawi 0
Neu SQL Abfrage. Eigene Übersichten - externe Rechnungen User helfen Usern - Fragen zu JTL-Wawi 0
Neu SQL Anfrage für Bilder von Merkmale JTL-Shop - Ideen, Lob und Kritik 0
Neu Benötige Hilfe: Eigene Übersichten - Kunden: Eigene Felder in der Auftragsübersicht - SQL Abfrage User helfen Usern - Fragen zu JTL-Wawi 11
Neu SQL Frage zu Wiederherstellungsmodell, Full/Diff Backup und wachsender eazybusiness_log.ldf Datei User helfen Usern - Fragen zu JTL-Wawi 8
Neu Kampagnen Statistik mit weit verbreitetem Float Problem Allgemeine Fragen zu JTL-Shop 0
Neu Dot liquid Problem. Artikel pro Zeile ausgeben bei Menge größer als 1 Gelöste Themen in diesem Bereich 2
Neu Problem: Mitarbeiter wissen nicht, was sie tun sollen. Smalltalk 16
Neu Connector Problem? Brauche dringend Hilfe Shopware-Connector 5
Neu Email Problem mit dem neuen JTL Shop 5.2.3 Gelöste Themen in diesem Bereich 1
Funktioniert es bei 1.6 besser? Problem mit Variationen die wiederum sind Stücklistenartikel sind und im Versand nicht reduziert werden können. JTL-Wawi 1.6 0
Neu Problem mit Retouren über WMS JTL-WMS / JTL-Packtisch+ - Fehler und Bugs 0
Neu Problem mit EVO Design im Browser eBay-Designvorlagen - Ideen, Lob und Kritik 2
Neu Problem mit Paypal un dem JTL Shop 4.06 (Build: 15) Allgemeine Fragen zu JTL-Shop 0
Neu Abnahmeintervall Problem / "Bug" JTL-Shop - Fehler und Bugs 0
Neu XML-Auftragsimport Encoding UTF-8 / ISO-8859-1 - Problem mit Umlauten und Zeilenumbrüchen Arbeitsabläufe in JTL-Wawi 0
Neu Problem mit dem Druck von Versandlabel DHL JTL-ShippingLabels - Ideen, Lob und Kritik 3
Neu DPD internes Problem mit Anmeldung. JTL-Wawi - Fehler und Bugs 1
Problem bei Suche im JTL Shop: Mehrzahl wird nicht erkannt Allgemeine Fragen zu JTL-Shop 3
Neu Problem bei Gewichtsabhängigen Versandkosten Allgemeine Fragen zu JTL-Shop 1
Neu Retoure + Umtausch Problem Arbeitsabläufe in JTL-Wawi 0
JTL Shop 5.2.2 Problem Installation All-Inkl Einrichtung JTL-Shop5 16

Ähnliche Themen