Gelöst Suche Hilfe zum Thema Dotliquid / SQL / For-Schleife / Stückliste

MirkoWK

Sehr aktives Mitglied
14. März 2022
826
303
Hallo zusammen,

wir werden bald auf JTL umsteigen und sind noch in der Vorbereitungsphase. Bei dem folgenden Thema komme ich nicht zum Abschluss und verzweifle dabei gerade etwas.. 😅

Wir verkaufen Möbel, welche oft aus mehreren Teilen bestehen (Packstücke / Stückliste). Die Information zu den Packstücken (Anzahl, Maße, Gewicht) werden aktuell in einem String an unser Shopware gesendet, welches diese Informationen dann dem Kunden im Frontend anzeigt.

Nun versuche ich diesen String per JTL Workflow mit Dotliquid und SQL-Query zu reproduzieren:

Hier meine erweiterte Eigenschaft:
Code:
{% capture query -%}
SELECT
    tArtikelBeschreibung.cName AS 'name',
    CAST(tStueckliste.fAnzahl AS decimal(18,2)) AS 'quantity',
    CAST(aname.fHoehe AS decimal(18,2)) AS 'height',
    CAST(aname.fBreite AS decimal(18,2)) AS 'width',
    CAST(aname.fLaenge AS decimal(18,2)) AS 'length',
    CAST(aname.fArtGewicht AS decimal(18,2)) AS 'weight'
FROM
    dbo.tArtikel
    INNER JOIN dbo.tStueckliste ON tStueckliste.kVaterArtikel = tArtikel.kArtikel
    INNER JOIN dbo.tArtikel AS aname ON tStueckliste.kArtikel = aname.kArtikel
    INNER JOIN dbo.tArtikelBeschreibung ON tArtikelBeschreibung.kArtikel = tStueckliste.kArtikel
WHERE
    tArtikel.cArtNr = '{{ Vorgang.Allgemein.Stammdaten.ArtNrSku | SqlEscape }}'
{% endcapture -%}
[{% assign ausgabe = query | DirectQuery -%}
    {%- for item in ausgabe.Daten -%}{"name":"{{ item.name }}","quantity":{{ item.quantity }},"measurements":[{"type":"height","value":{{ item.height }},"unit":"cm"},{"type":"width","value":{{ item.width }},"unit":"cm"},{"type":"depth","value":{{ item.length }},"unit":"cm"},{"type":"weight","value":{{ item.weight }},"unit":"kg"}]},{% endfor -%}
]{{ ausgabe }}

2 Probleme habe noch:
  • Die Zahlen sollen ein "." als Dezimaltrennzeichen haben (alternativ müsste es shopwareseitig angepasst werden)
  • das letzte "," vor dem schließenden "]" muss weg
    • mit replace hatte ich keinen Erfolg
    • auch habe ich versucht irgendwie zu schauen, was der letzte Schleifendurchlauf ist, um dann das "," nicht zu setzen .. leider ebenso erfolglos

Das Ergebnis sieht aktuell so aus:
[{"name":"Packstücke-Name-1","quantity":2,00,"measurements":[{"type":"height","value":90,00,"unit":"cm"},{"type":"width","value":182,00,"unit":"cm"},{"type":"depth","value":45,00,"unit":"cm"},{"type":"weight","value":90,00,"unit":"kg"}]},{"name":"Packstücke-Name-2","quantity":1,00,"measurements":[{"type":"height","value":78,00,"unit":"cm"},{"type":"width","value":68,00,"unit":"cm"},{"type":"depth","value":13,00,"unit":"cm"},{"type":"weight","value":9,00,"unit":"kg"}]},{"name":"Packstücke-Name-3","quantity":1,00,"measurements":[{"type":"height","value":80,00,"unit":"cm"},{"type":"width","value":42,00,"unit":"cm"},{"type":"depth","value":30,00,"unit":"cm"},{"type":"weight","value":21,00,"unit":"kg"}]},{"name":"Packstücke-Name-4","quantity":1,00,"measurements":[{"type":"height","value":185,00,"unit":"cm"},{"type":"width","value":45,00,"unit":"cm"},{"type":"depth","value":35,00,"unit":"cm"},{"type":"weight","value":44,00,"unit":"kg"}]},]

Hat hierzu vielleicht jemand eine Idee, oder schon ähnliche Erfahrungen gemacht?

Ich hoffe, ich konnte mein Problem transportieren ^^.

Viele Grüße
Mirko
 

MirkoWK

Sehr aktives Mitglied
14. März 2022
826
303
Falls jemand ein ähnliches/ gleiches Problem hat - ich konnte beide offenen Punkte nun doch selbst lösen, indem ich die Zusammenstellung der Daten bereits in der SQL-Abfrage vornehme.
Um den letzten oder ersten Eintrag anders zu behandeln, habe ich eine Variable mit der Anzahl der Ergebnisse deklariert und vergleiche diesen Wert dann mit der Ergebniszeile:

Code:
{% capture query -%}
DECLARE @ZEILENCOUNTER INT
SET @ZEILENCOUNTER =
(
    SELECT
        COUNT(tStueckliste.fAnzahl)
    FROM
        dbo.tArtikel
        INNER JOIN dbo.tStueckliste ON tStueckliste.kVaterArtikel = tArtikel.kArtikel
        INNER JOIN dbo.tArtikel AS aname ON tStueckliste.kArtikel = aname.kArtikel
        INNER JOIN dbo.tArtikelBeschreibung ON tArtikelBeschreibung.kArtikel = tStueckliste.kArtikel
    WHERE
        tArtikel.cArtNr = '{{ Vorgang.Allgemein.Stammdaten.ArtNrSku | SqlEscape }}'
)
SELECT
    ROW_NUMBER() OVER(ORDER BY tStueckliste.fAnzahl DESC) AS 'Zeile',
    CASE
         WHEN ROW_NUMBER() OVER(ORDER BY tStueckliste.fAnzahl DESC) = 1 THEN CONCAT('{"name":"',tArtikelBeschreibung.cName, '","quantity":',CAST(tStueckliste.fAnzahl AS decimal(18,2)), ',"measurements":[{"type":"height","value":', CAST(aname.fHoehe AS decimal(18,2)), ',"unit":"cm"},{"type":"width","value":', CAST(aname.fBreite AS decimal(18,2)), ',"unit":"cm"},{"type":"depth","value":', CAST(aname.fLaenge AS decimal(18,2)), ',"unit":"cm"},{"type":"weight","value":', CAST(aname.fArtGewicht AS decimal(18,2)),'"unit":"kg"}]}' )
         WHEN @ZEILENCOUNTER = ROW_NUMBER() OVER(ORDER BY tStueckliste.fAnzahl DESC) THEN CONCAT('"name":"',tArtikelBeschreibung.cName, '","quantity":',CAST(tStueckliste.fAnzahl AS decimal(18,2)), ',"measurements":[{"type":"height","value":', CAST(aname.fHoehe AS decimal(18,2)), ',"unit":"cm"},{"type":"width","value":', CAST(aname.fBreite AS decimal(18,2)), ',"unit":"cm"},{"type":"depth","value":', CAST(aname.fLaenge AS decimal(18,2)), ',"unit":"cm"},{"type":"weight","value":', CAST(aname.fArtGewicht AS decimal(18,2)),'"unit":"kg"}]}' )
         ELSE CONCAT('"name":"',tArtikelBeschreibung.cName, '","quantity":',CAST(tStueckliste.fAnzahl AS decimal(18,2)), ',"measurements":[{"type":"height","value":', CAST(aname.fHoehe AS decimal(18,2)), ',"unit":"cm"},{"type":"width","value":', CAST(aname.fBreite AS decimal(18,2)), ',"unit":"cm"},{"type":"depth","value":', CAST(aname.fLaenge AS decimal(18,2)), ',"unit":"cm"},{"type":"weight","value":', CAST(aname.fArtGewicht AS decimal(18,2)),'"unit":"kg"}]},' )
    END AS name    
FROM
    dbo.tArtikel
    INNER JOIN dbo.tStueckliste ON tStueckliste.kVaterArtikel = tArtikel.kArtikel
    INNER JOIN dbo.tArtikel AS aname ON tStueckliste.kArtikel = aname.kArtikel
    INNER JOIN dbo.tArtikelBeschreibung ON tArtikelBeschreibung.kArtikel = tStueckliste.kArtikel
WHERE
    tArtikel.cArtNr = '{{ Vorgang.Allgemein.Stammdaten.ArtNrSku | SqlEscape }}'
{% endcapture -%}
[{% assign ausgabe = query | DirectQuery -%}
    {%- for item in ausgabe.Daten -%}{{ item.name }}{% endfor -%}
]{{ ausgabe }}

Ich hoffe, dass kann auch jemanden anderen helfen.

Viele Grüße
Mirko
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Leere Suche endet im fatal Error Betrieb / Pflege von JTL-Shop 0
Neu (Suche) Webdesigner & Shopumsetzung Business Jungle 5
Neu Suche DirectQuery für Kundenkommentar (Rechnung) & Hinweis (Lieferschein) Druck-/ E-Mail-/ Exportvorlagen in JTL-Wawi 2
Neu DRIGEND HILFE!!! Ebay Abgleich endet mit Arithmetischer Überlauffehler für tinyint-Datentyp, Wert = -1. Die Anweisung wurde beendet. eBay-Anbindung - Fehler und Bugs 4
Neu Hilfe bei der Entwicklung gesucht: Werde Tester für meine JTL-Shop Plugins Plugins für JTL-Shop 0
JTL POS an WaWi anbinden Hilfe benötigt JTL-Wawi 1.11 4
Rechnungen ohne Nummer beim Drucken/Mailen (Vorschau korrekt) - Hilfe benötigt JTL-Wawi 1.11 0
Neu Gini Scan & Pay wird zum 1. Juni 2026 eingestellt. Gibt es Alternativen? Plugins für JTL-Shop 8
Lieferschein löschen führt zum Absturz JTL-Wawi 2.0 2
Neu Wichtige Info: Abkündigung der DHL-Schnittstelle zum 31.05.2026 News, Events und Umfragen 0
Neu Verständnisfrage zum Mahnlauf Workflow User helfen Usern - Fragen zu JTL-Wawi 0
gelöst: Für diesen User wurde zum angegebenen Mandanten keine Firma gefunden!! JTL-Wawi 1.10 13
PDF zum Herunterladen in Pickliste JTL-Wawi 1.10 0
Neu Installation von Plugin PayPal Check-Out fehlgeschlagen, keine Verbindung zum Webshop Plugins für JTL-Shop 6

Ähnliche Themen