Neu SQL Trigger Problem

Usiu

Aktives Mitglied
20. Mai 2021
25
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
147
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.101
684
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.590
482
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.168
656
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.590
482
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
25
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.590
482
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.590
482
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
25
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
Sql Abfrage VK Preise pro Kundengruppe für Grafana JTL-Wawi 1.8 4
Neu SQL Query zum Bilder löschen Arbeitsabläufe in JTL-Wawi 3
Neu List & Label - Eigene SQL-Abfrage als Grundlage für Tabelle im Berichtscontainer? User helfen Usern - Fragen zu JTL-Wawi 10
Neu SQL Server kein Mandant auswählbar und Dienst lässt sich nicht starten Installation von JTL-Wawi 2
Neu Ameise-Vorlage per SQL abrufen und Daten als Ergebnis erhalten JTL Ameise - Eigene Exporte 1
Neu SQL DB läuft mit Fehler voll und crasht Server JTL-Shop - Fehler und Bugs 1
Neu SQL Vartable für Reservierte Artikel gesucht User helfen Usern - Fragen zu JTL-Wawi 2
Neu Innerhalb einer Variable -SQL Abfrage- das Wort "fett" schreiben Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Neu SQL Eigener Export - Eigene Felder im Auftrag User helfen Usern - Fragen zu JTL-Wawi 7
Neu Wie finde ich per SQL heraus welche Aufträge auf Teillieferbar stehen? JTL Ameise - Eigene Exporte 1
Neu Microsoft SQL unter MS365 Installation von JTL-Wawi 2
Neu SQL Abfrage, 3. Mahnstufe User helfen Usern - Fragen zu JTL-Wawi 1
Neu Variable oder SQL zum Feld "Gewinn netto" (im Auftrag) Eigene Übersichten in der JTL-Wawi 9
Neu SQL Code zur Ausgabe des Verkaufspreis je Kundengruppe User helfen Usern 1
Neu MS SQL Server auf Windows vs Linux Starten mit JTL: Projektabwicklung & Migration 9
Beantwortet Hilfe bei SQL Abfrage erbeten User helfen Usern - Fragen zu JTL-Wawi 3
Neu SQL Abfrage - Sendungsnummern als Liste nach Datum Schnittstellen Import / Export 2
Neu DB: kPlattform eines Auftrages ändern (SQL) - Zwecks Lagerplatzreservierung User helfen Usern - Fragen zu JTL-Wawi 0
Neu SQL prozeduren mit #temp Tabellen Eigene Übersichten in der JTL-Wawi 28
Neu Ameise Export in SQL Abfrage umwandeln User helfen Usern - Fragen zu JTL-Wawi 11
Neu Ware direkt in ein Standardlager einbuchen per SQL StoreProcedure dbo.spWarenlagerEingangSchreiben Schnittstellen Import / Export 9
Neu List & Label Vorlagen: SQL Injection Warnung umgehen um Datenquelle zu ergänzen User helfen Usern - Fragen zu JTL-Wawi 12
Neu Attribut Import Problem JTL-Ameise - Fehler und Bugs 2
Neu WooCommerce Connector Problem mit nachträglich abgebrochenen Bestellungen Onlineshop-Anbindung 0
Neu Problem mit Variationen-Artikeln JTL-Shop - Fehler und Bugs 2
Neu Wawi Auftrag in JTL POS öffnen (problem mit Kartenzahlung) Allgemeine Fragen zu JTL-POS 0
HILFEEE!!!! Paypal Problem JTL-Wawi 1.9 12
Neu Problem mit Internetmarke JTL-ShippingLabels - Fehler und Bugs 5
[GELÖST] Wawi startet nicht mehr. Dringendes Problem! JTL-Wawi 1.9 2
Neu Problem mit Scroll-Link nach Update auf Shop-Version 5.3.3 Technische Fragen zu Plugins und Templates 5
Neu Problem mit Shopify abgleich Shopify-Connector 2
Neu Ersatzlieferung - Paket steckt fest (klassisches Problem) User helfen Usern - Fragen zu JTL-Wawi 2
Problem bei Upgratevon Shop 4 auf shop 5 (SQLSTATE[42000]) Upgrade JTL-Shop4 auf JTL-Shop5 2
Neu Produktbewertungen email - problem und fragen Betrieb / Pflege von JTL-Shop 0
In Diskussion Problem mit Steuerberechnung bei Freieretoure auf Tagesbericht und in Statistiken JTL-POS - Fehler und Bugs 4
Neu Falsche Steuersätze bei Amazon FBA Rechnungen | Problem: Versandland?! JTL-Wawi - Fehler und Bugs 1

Ähnliche Themen