Gelöst Variationswerte aus Bestellposition auslesen

MaxWe

Sehr aktives Mitglied
6. August 2018
315
42
Hamburg
Moin Moin,

wie macht ihr das mit den Variationswerten aus den Bestellpositionen einer JTL-Shop Bestellung?
Ich meine die Werte aus der Spalte "Variation" innerhalb des Auftrags => Genauer die Werte aus den Freitext und Pflichtfreitext Feldern eines Artikels.
Innerhalb vom Workflow Objekt "Auftrag" findet man diese innerhalb von dotliquid unter: {{Vorgang.AuftragsPositionen.ArtikelPositionen.ErstesObjekt.Variation}}

Ich frage mich wie man die Werte so vernünftig auswerten soll, da die Felder, Feldnamen und Feldwerte jeweils lediglich mit einem Leerzeichen getrennt sind.
Folgendes wäre eine normale Auswertung, aber was ist, wenn ein Feldwert ebenfalls ein Leerzeichen enthält...
{% assign varsplit = Vorgang.AuftragsPositionen.ArtikelPositionen.ErstesObjekt.Variation | Split:" " -%}
{% for var in varsplit -%}
{{var}}
{% endfor -%}

Habt ihr da einen besseren Weg gefunden? Ansonsten muss ich wohl oder übel direkt über eine SQL Query gehen...

Beste Grüße
 

MaxWe

Sehr aktives Mitglied
6. August 2018
315
42
Hamburg
EDIT2: Ich bin doof 😀
Die JTL Interne Lösung ohne Query:
Code:
{% for variation in Auftragspositionen.Artikelpositionen.Variationen -%}
{% assign variationString = variationString | Append: variation.Bezeichnung | Append: '=' | Append: variation.Wert -%}
{% if forloop.last == false -%}
{% assign variationString = variationString | Append: ';' -%}
{% endif -%}
{% endfor -%}
{{variationString}}
Lediglich die Variable "Variation" (Variationen als Text) ist ziemlich sinnlos, da hier keinerlei Trennung via |Split möglich ist. Warum weiß ich nicht.. Bei den Attributen/Funktionsattributen wurde es ja auch so gebaut, dass es nutzbar ist.


Eigene Lösung nun via DirectQuery
Code:
{% capture query -%}   
SELECT c.cName,(CASE WHEN c.cWert IS NULL THEN '' ELSE c.cWert END) as cWert
FROM tBestellung as a
LEFT JOIN
tbestellpos as b ON a.kBestellung = b.tBestellung_kBestellung
LEFT JOIN
tbestelleigenschaft as c ON b.kBestellPos = c.kBestellPos
WHERE b.tArtikel_kArtikel != 0
AND a.cBestellNr = '{{ Vorgang.Stammdaten.ExterneAuftragsnummer }}'
{% endcapture -%}
{% assign result = query | DirectQuery %}\
{% assign variationString = '' -%}
{% for variation in result.Daten -%}
{% assign variationString = variationString | Append: variation.cName | Append: '=' | Append: variation.cWert -%}
{% if forloop.last == false -%}
{% assign variationString = variationString | Append: ';' -%}
{% endif -%}
{% endfor -%}
{{variationString}}
Code:
Ausgabe: Name=Max & Muster;Freitext=;Datum=15.02.2021;Name2=max
Das lässt sich nun einfach weiterverarbeiten. Beispielsweise via |Split .

EDIT: Möchte man innerhalb von Dotliquid für jede BestellPos einzeln die Variationen abrufen, so muss die Query lediglich vereinfacht werden:
Code:
{% capture query -%}   
SELECT c.cName,(CASE WHEN c.cWert IS NULL THEN '' ELSE c.cWert END) as cWert
FROM tbestelleigenschaft as c
WHERE c.kBestellPos = '{{ Vorgang.Auftragspositionen.Artikelpositionen.ErstesObjekt.InterneAuftragsnummer}}'
{% endcapture -%}
{% assign result = query | DirectQuery %}\
{% assign variationString = '' -%}
{% for variation in result.Daten -%}
{% assign variationString = variationString | Append: variation.cName | Append: '=' | Append: variation.cWert -%}
{% if forloop.last == false -%}
{% assign variationString = variationString | Append: ';' -%}
{% endif -%}
{% endfor -%}
{{variationString}}
 
Zuletzt bearbeitet:

Ähnliche Themen