Neu SQL Trigger Problem

  • Hinweis: Am 25.02.2025 zwischen 21:30 u. 22:30 Uhr - Einschränkungen beim Login und Erreichen folgender Dienste: FFN, Kundencenter, Admin, JTL-Shop, JTL-Wawi, Lizenzserver, ISI Gateway, Vouchers, Kassensysteme, Plan&Produce, Versand. Grund dafür ist ein Major Upgrade des OAuth-Dienstes. Vielen Dank für euer Verständnis!

Usiu

Aktives Mitglied
20. Mai 2021
26
3
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
182
150
Remote via AnyDesk
Firma
contact@karobube.com
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
3.352
758
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
1.707
514
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
339
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
6.275
688
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
1.707
514
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
26
3
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
1.707
514
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
1.707
514
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
26
3
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 Suche SQL Abfrage für Hersteller die keinem Artikel mehr zugeordnet sind. User helfen Usern - Fragen zu JTL-Wawi 6
MS SQL von JTL an N8N anbinden JTL-Wawi 1.9 5
Neu SQL Abfrage für offene Aufträge über Ameise User helfen Usern - Fragen zu JTL-Wawi 5
Neu Suche Kenner der MS SQL Datenbanken und JTL-WaWi vorzugsweise Raum Aachen Dienstleistung, Jobs und Ähnliches 1
Mehrere SQL Server JTL-Wawi 1.9 6
Neu Shop Komplettabgleich nicht möglich, Globale Daten verstopft SQL Tabelle tGlobalsQueue komplett JTL-Wawi - Fehler und Bugs 0
Neu Was passiert wenn ich Amazon Aufträge, Lieferscheine und Rechnungen per SQL aus der WAWI-Datenbank lösche? User helfen Usern - Fragen zu JTL-Wawi 0
Neu Installation MS SQL 2022 Express: Fehler beim Warten auf das Wiederherstellungshandle des Datenbankmoduls Installation von JTL-Wawi 9
SQL Abfrage bei Workflow Datei Schreibn JTL-Wawi 1.9 1
Neu SQL-Abfrage von im Onlineshop aktiven Artikeln JTL Ameise - Eigene Exporte 2
Neu Biete: Windows Server optimiert für JTL und MS SQL Standard Lizenz (8 Monate alt, 42% unter Neupreis) Dienstleistung, Jobs und Ähnliches 1
Gespeicherte Filter (Lagerbewertung) nach SQL Umzug nicht mehr abrufbar JTL-Wawi 1.9 0
Neu Umzug von SQL 2016 Express auf SQL 2019 Standard mit Wawi 1.8.12.2 Installation von JTL-Wawi 10
Neu Update für Shopvote 1.1.0 führt zu SQL-Fehler Plugins für JTL-Shop 5
Neu SQL: Positionen eines Auftrags sind auf welchem Lieferschein gelandet? Eigene Übersichten in der JTL-Wawi 7
Neu Backup einrichten, habe die SQL Anmeldedaten verlegt Installation von JTL-Wawi 1
Neu JTL-WAWI API] - Trigger Sales Order Workflow Event - X-RunAs wird ignoriert JTL-Wawi - Fehler und Bugs 0
Problem: Falsche Ausgabe von SalesOrderPosition.Quantity bei großen Mengen JTL-Wawi 1.8 2
Problem mit Rückbuchung im Zahlungsmodul JTL-Wawi 1.9 1
Neu Problem mit der Verbindung von JTL-Wawi (1.5.48.2) und WooCommerce (Version 9.5.2) User helfen Usern - Fragen zu JTL-Wawi 0
Neu Transportversicherung B2B bei Ausliefern/Rechnung Problem User helfen Usern - Fragen zu JTL-Wawi 1
Neu Cloudflare und JTL Shop - Problem oder zu empfehlen? Allgemeine Fragen zu JTL-Shop 9
Problem beim Anlegen neuer Warengruppen JTL-Wawi 1.9 2
Neu [NOVA TEMPLATE] Menü Darstellungs Problem Dropwon Templates für JTL-Shop 4
Problem beim Import von Artikelbeständen wenn Artikel auf Pickliste User helfen Usern - Fragen zu JTL-Wawi 3
Amazon Lister Problem bei der Erstellung von Varianten-Produkten JTL-Wawi 1.9 0
Neu [PROBLEM] PHP-Log on akkuplus.de is CRITICAL! Allgemeine Fragen zu JTL-Shop 1
Neu GPSR Angaben - Problem mit Lösung von Dreizack Medien Technische Fragen zu Plugins und Templates 2
Neu Problem bei der Anzeige von Hinweistexten für Produkte einer bestimmten Kategorie im NOVA Template Allgemeine Fragen zu JTL-Shop 1
Beantwortet Plugin Dev: Setting-Links Spacer Problem (info.xml) JTL-Shop - Fehler und Bugs 1
Neu Attribut Import Problem JTL-Ameise - Fehler und Bugs 10
Neu WooCommerce Connector Problem mit nachträglich abgebrochenen Bestellungen Onlineshop-Anbindung 0
Neu Problem mit Variationen-Artikeln JTL-Shop - Fehler und Bugs 2

Ähnliche Themen