In Diskussion Syntax für For-Schleife? For-Schleife im Workflow gibt Syntaxfehler aus ...

OliausderSchweiz

Aktives Mitglied
3. März 2013
38
0
In einem Workflow möchte ich eine For-Schleife über Array-Werte ausführen ... da sieht wie folgt aus:

{% assign KIDs = '1,2,5,6' | Split: ',' -%}
{% for KID in KIDs -%}
{% capture sqlquery -%}
SQLQUERY ...
{% endcapture -%}
{% assign Value{{$KID}} = sqlquery | DirectQueryScalar -%}
{% endfor -%}

Beim Ausführen erhalte ich dann die Fehlermeldung "Syntax Error in 'assign'tag - Valid syntax: assign [var] = [source]"
Was mache ich falsch? Der Assign-Tag sieht doch genauso aus wie er soll, oder?

Vielen Dank an die Cracks die mir da helfen können!
 

John

Sehr aktives Mitglied
3. März 2012
4.129
1.053
Berlin
Zerleg das mal alles in einzelne Schritte. DotLquid mag keine zwei Operationen auf einmal, also String zuweisen und direkt splitten...
 

OliausderSchweiz

Aktives Mitglied
3. März 2013
38
0
Zerleg das mal alles in einzelne Schritte. DotLquid mag keine zwei Operationen auf einmal, also String zuweisen und direkt splitten...
Wie meinst Du das?
Die Syntax "{% assign KIDs = '1,2,5,6' | Split: ',' -%}" habe ich hier in einem thread im Forum gefunden und sollte gemäss dort funzen ...
Ich brauch ja einfach einen arry mit den Werten 1,2,5 und 6 ... gibts andere Varianten?
 

John

Sehr aktives Mitglied
3. März 2012
4.129
1.053
Berlin
Also so was funktioniert z.B.

Code:
{% assign KIDs = '7,8,9,10' | Split: ',' -%}
{% for KID in KIDs -%}
{% capture itemquery %}SELECT cName FROM vStandardArtikel WHERE kArtikel = {{ KID }}{% endcapture -%}\
{% assign result = itemquery | DirectQueryScalar -%}\
{{ result }}
{% endfor -%}
 
  • Gefällt mir
Reaktionen: OliausderSchweiz

frankell

Sehr aktives Mitglied
9. September 2019
2.676
840
Flensburg
Wie meinst Du das?
Die Syntax "{% assign KIDs = '1,2,5,6' | Split: ',' -%}" habe ich hier in einem thread im Forum gefunden und sollte gemäss dort funzen ...
Ich brauch ja einfach einen arry mit den Werten 1,2,5 und 6 ... gibts andere Varianten?
Die Zeile {% assign Value{{$KID}} = sqlquery | DirectQueryScalar -%} ist das Problem. Hier solltest Du erst, wie von John gezeigt, result zuweisen und danach damit machen, was Du möchtest. :)
 
  • Gefällt mir
Reaktionen: OliausderSchweiz

OliausderSchweiz

Aktives Mitglied
3. März 2013
38
0
Die Zeile {% assign Value{{$KID}} = sqlquery | DirectQueryScalar -%} ist das Problem. Hier solltest Du erst, wie von John gezeigt, result zuweisen und danach damit machen, was Du möchtest. :)
Vielen Dank Euch beiden ...

Das obengenannte hab ich so mal umgesetzt, erhalte jetzt aber denselben Fehler in der Zeile danach, also direkt vor dem {% endfor -%} ...
Dort möchte ich ja jeweils eine Variable assignen, deren Name aus dem Variablennamen und anschliessend die KID aus dem Array enthält (VarName1, Varname2, ...) und ihr den Wert der SQL-Abfrage zuweisen.

{% assign VarName{{KID}} = result -%} funzt nicht,
{% assign VarName$KID = result -%} funzt auch nicht ...

Wie setz ich jetzt diesen Variablennamen mit dem String "VarName" und der Variable "KID" zusammen?
 

frankell

Sehr aktives Mitglied
9. September 2019
2.676
840
Flensburg
Bevor man da falsch denkt: Gibt die Query nur einen Wert bzw. eine Spalte zurück oder mehr als eine Spalte?

Denn "(VarName1, Varname2, ...)" könnte auf Mehrspaltigkeit hindeuten.

Und leider verstehe ich immer noch nicht, was Du genau möchtest. Ich befürchte, dass hier auch Begrifflichkeiten durcheinandergewürfelt sind.

Also noch mal: Was möchtest Du ausgegeben haben und wo kommt das bzw. dessen Teile her?
 

OliausderSchweiz

Aktives Mitglied
3. März 2013
38
0
Bevor man da falsch denkt: Gibt die Query nur einen Wert bzw. eine Spalte zurück oder mehr als eine Spalte?

Denn "(VarName1, Varname2, ...)" könnte auf Mehrspaltigkeit hindeuten.

Und leider verstehe ich immer noch nicht, was Du genau möchtest. Ich befürchte, dass hier auch Begrifflichkeiten durcheinandergewürfelt sind.

Also noch mal: Was möchtest Du ausgegeben haben und wo kommt das bzw. dessen Teile her?
Die Query gibt pro Durchlauf einen Wert (Spalte) zurück.
Was ich möchte:
Das Ziel ist das Schreiben eines CSV-files, in der die Werte der 4 Variablen geschrieben werden.
Der Variablenname soll in der For-Schleife aus dem fixen String (Bsp. "KID") und der Ziffer aus dem Array "KIDs" zusammengesetzt werden um dann in der CSV-Ausgabe verwendet werden zu können ...
(Bsp:
CSV-Header: "KEY";"VARNAME1";"VARNAME2";"VARNAME3";"VARNAME4"
CSV-DATA: "{{KEY}}";"KID1";"KID2";"KID5";"KID6"
)
Danke schon mal, nochmal
 

frankell

Sehr aktives Mitglied
9. September 2019
2.676
840
Flensburg
Es wird irgendwie nicht besser. :D

Aber ich mach es mal ganz allgemein, nachdem Du das Ergebnis der SQL-Query in die Variable result geschrieben hast, also nach {% assign result = sqlquery | DirectQueryScalar -%}

Wenn Du dem Ergebnis der SQL-Query etwas hinzufügen möchtest, dann ginge das bspw. per Append:

{{ result | Append: "xyz" }} oder {% assign result = result | Append: "xyz" -%}

Dabei kann "xyz" auch durch eine Variable ersetzt werden, also innerhalb der Schleife bspw. durch KID (das Element des Arrays, das gerade in der Schleife verwendet wird).

Oder umgekehrt das Ergebnis der SQL-Query wird einem String oder einer Variablen hinzugefügt:

{{ "xyz" | Append: result }} oder {% assign result = "xyz" | Append: result -%}

Auch hier kann "xyz" durch eine Variable ersetzt werden, also innerhalb der Schleife bspw. durch KID (das Element des Arrays, das gerade in der Schleife verwendet wird).

Vielleicht kommen wir so ja einer Lösung näher.
 

OliausderSchweiz

Aktives Mitglied
3. März 2013
38
0
Es wird irgendwie nicht besser. :D

Aber ich mach es mal ganz allgemein, nachdem Du das Ergebnis der SQL-Query in die Variable result geschrieben hast, also nach {% assign result = sqlquery | DirectQueryScalar -%}

Wenn Du dem Ergebnis der SQL-Query etwas hinzufügen möchtest, dann ginge das bspw. per Append:

{{ result | Append: "xyz" }} oder {% assign result = result | Append: "xyz" -%}

Dabei kann "xyz" auch durch eine Variable ersetzt werden, also innerhalb der Schleife bspw. durch KID (das Element des Arrays, das gerade in der Schleife verwendet wird).

Oder umgekehrt das Ergebnis der SQL-Query wird einem String oder einer Variablen hinzugefügt:

{{ "xyz" | Append: result }} oder {% assign result = "xyz" | Append: result -%}

Auch hier kann "xyz" durch eine Variable ersetzt werden, also innerhalb der Schleife bspw. durch KID (das Element des Arrays, das gerade in der Schleife verwendet wird).

Vielleicht kommen wir so ja einer Lösung näher.
Shit, wirds nicht besser? ... Ja, ich glaube ich bin gard nicht so auf der SOll-Höhe :( ... hab ich oben doch tatsächlich etwas Mist geschrieben, sorry

Nochmals anders erklärt:
Ich habe pro For-Schleife drei Dinge als Ausgangslage:
1. Die KID, die aus dem Array kommt, also 1,2,5, oder 6
2. Den Wert der durch die Query geliefert wird in der Variable "result"
3. Den String "VALUE", an den die KID pro Schleifen-Durchlauf angehängt werden soll. Die beiden ergeben dann jeweils einen Variablennamen, also bsp. "VALUE1","VALUE2", "VALUE5";"VALUE6" und deren Inhalte ist jeweils das Ergebnis "result" der SQL-Query.

Die zwei Zeilen für die CSV-Ausgabe wären dann:
"KEY";"VARNAME1";"VARNAME2";"VARNAME3";"VARNAME4"
"{{KEY}}";"{{VALUE1}}";"{{VALUE2}}";"{{VALUE5}}";"{{VALUE6}}"

mit anderen Worten:
Pro Durchlauf erstelle ich eine Variable mit Namen (fixer String) und hänge dann die KID aus dem Array dran. Als Wert wird das Query-Ergebnis zugewiesen.

Ich hoffe das ist jetzt klarer ... ?
 

frankell

Sehr aktives Mitglied
9. September 2019
2.676
840
Flensburg
Ich glaube ich hab's jetzt verstanden.

Bei jedem Durchlauf erzeugst Du eine Variable mit der Bezeichnung VALUE{{ KID }}, und dieser Variablen weist Du den Wert {{ result }} zu.

Wenn das ginge, würde das so aussehen: {% assign Value{{ KID }} = result -%}

Aber das geht nicht. Du kannst Variablennamen in DotLiquid nicht dynamisieren.

Aber da stellt sich mir natürlich die Frage, warum ein dynamisierter Variablennamen überhaupt notwendig ist, wo er doch eh nicht in die Ausgabe gelangt, und/oder ob Du nicht auch anders zum Ziel gelangst. Dazu sind jedoch zu wenig Informationen vorhanden.
 

OliausderSchweiz

Aktives Mitglied
3. März 2013
38
0
Ich glaube ich hab's jetzt verstanden.

Bei jedem Durchlauf erzeugst Du eine Variable mit der Bezeichnung VALUE{{ KID }}, und dieser Variablen weist Du den Wert {{ result }} zu.

Wenn das ginge, würde das so aussehen: {% assign Value{{ KID }} = result -%}

Aber das geht nicht. Du kannst Variablennamen in DotLiquid nicht dynamisieren.

Aber da stellt sich mir natürlich die Frage, warum ein dynamisierter Variablennamen überhaupt notwendig ist, wo er doch eh nicht in die Ausgabe gelangt, und/oder ob Du nicht auch anders zum Ziel gelangst. Dazu sind jedoch zu wenig Informationen vorhanden.
Echt? Das geht nicht? hmmm ... und ja, Du hast's jetzt begriffen ;)

Dann beginn ich mal von Vorne:

EndZiel: Bei Vaterartikeln soll pro Kundengruppe (IDs 1,2,5,6) der niedrigste Kind-Preis aller Kinder inkl. deren Staffelpreisen + Sonderpreisen als Verkaufspreis gespeichert werden.
Bisheriger Ansatz: Mit Workflow CSV schreiben und mit Ameise importieren.
CSV-Struktur-Idee bisher:
"VATER-ID";"MINPREIS-KG1";"MINPREIS-KG2";"MINPREIS-KG5";"MINPREIS-KG6"
"{{ArtNo}}";"{{MinPreisKGruppe1}}";"{{MinPreisKGruppe2}}";"{{MinPreisKGruppe5}}";"{{MinPreisKGruppe6}}"

Weil ich eine for-Schleife benutze, müsste ich darin die Variable erzeugen. Hast du eine andere Idee?
 

OliausderSchweiz

Aktives Mitglied
3. März 2013
38
0
Echt? Das geht nicht? hmmm ... und ja, Du hast's jetzt begriffen ;)

Dann beginn ich mal von Vorne:

EndZiel: Bei Vaterartikeln soll pro Kundengruppe (IDs 1,2,5,6) der niedrigste Kind-Preis aller Kinder inkl. deren Staffelpreisen + Sonderpreisen als Verkaufspreis gespeichert werden.
Bisheriger Ansatz: Mit Workflow CSV schreiben und mit Ameise importieren.
CSV-Struktur-Idee bisher:
"VATER-ID";"MINPREIS-KG1";"MINPREIS-KG2";"MINPREIS-KG5";"MINPREIS-KG6"
"{{ArtNo}}";"{{MinPreisKGruppe1}}";"{{MinPreisKGruppe2}}";"{{MinPreisKGruppe5}}";"{{MinPreisKGruppe6}}"

Weil ich eine for-Schleife benutze, müsste ich darin die Variable erzeugen. Hast du eine andere Idee?
Habs gelöst ... mach die Query halt einfach 4x ... danke dir!
 

frankell

Sehr aktives Mitglied
9. September 2019
2.676
840
Flensburg
Alles klar.

Das ginge auch in einer einzigen Query, die man per Ameise exportieren (Eigener Export) und dann wieder importieren kann.

Aber auch in DotLiquid ginge das Ganze weiterhin mit einer For-Schleife, wenn Du die zweite Zeile in eine einzige Variable (bspw. "zeile2") schreibst und diese vor der Schleife bereits den Wert {{ ArtNo }} besitzt. Auf die Anführungszeichen in der CSV kannst Du verzichten, da dort ja nirgendwo ein Semikolon auftaucht. Ich gehe zumindest davon aus, dass Deine Artikelnummer kein Semikolon enthalten. :)

Dann kannst Du einfach in Deinem Ursprungscode die letzte Zeile vor dem Schleifenende durch Folgendes ersetzen:

{% capture result -%}{{ sqlquery | DirectQueryScalar }}{% endcapture -%}
{% assign zeile2 = zeile2 | Append: ';' | Append: result -%}

Deine Ausgabe am Ende ist dann:
VATER-ID;MINPREIS-KG1;MINPREIS-KG2;MINPREIS-KG5;MINPREIS-KG6
{{ zeile2 }}

Die andere Art der Speicherung der Query in eine Variable per capture hat den Hintergrund sicherzustellen, dass result ein String ist und keine Zahl, denn mit einer Zahl funzt Append nicht.
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Wir suchen Mitstreiter für ein gemeinsames Konfigurator-Projekt Dienstleistung, Jobs und Ähnliches 0
Neu Wir suchen Mitstreiter für ein gemeinsames Konfigurator-Projekt User helfen Usern - Fragen zu JTL-Wawi 5
In Diskussion Workflow für Erinnerungen an bevorstehende Lieferungen JTL-Workflows - Ideen, Lob und Kritik 0
Neu Wie stelle ich Retouren in JTL für DPD ein? JTL-ShippingLabels - Ideen, Lob und Kritik 1
Neu JTL Shop Plugin - BD Automatisierter Widerruf (Von Händler für Händler - Schluss mit Mail-Chaos & Spam-Sorgen!) Plugins für JTL-Shop 0
Wroker macht keinen abgleich für Kaufland JTL-Wawi 2.0 8
Neu Beta-Tester gesucht: Produktdaten aus Artikelfotos schneller für JTL/CSV vorbereiten Dienstleistung, Jobs und Ähnliches 0
Neu Kundengruppeneinstellungen für Mindestabnahme und Abnahmeintervall löschen User helfen Usern - Fragen zu JTL-Wawi 0
Neu Installationsdatei für JTL‑Wawi 1.9.6.5 Installation von JTL-Wawi 2
Wie lange braucht ihr aktuell für die Anlage eines neuen Artikels? JTL-Wawi App 3
Neu kostenlos: DHL Sendungsverfolgung für JTL-Wawi – Web-Dashboard mit Frühwarnsystem Schnittstellen Import / Export 0
In Diskussion Tool für Abrechnung von Fulfillment Dienstleistungen Arbeitsabläufe im Fulfillment Network 0
Neu Widerrufsbutton für JTL-Shop 4 Allgemeine Fragen zu JTL-Shop 17
Neu Keine Labels für Warenpost international über Packtisch JTL-ShippingLabels - Fehler und Bugs 8
Neu Laut Backend Shop Update für Shop 5.71 - Download nicht zu finden? Betrieb / Pflege von JTL-Shop 3
Neu Meta Shop seit September 2025: JTL-Lösung für neue Checkout-URL gesucht Allgemeine Fragen zu JTL-Shop 0
Angebliche externe Aufträge "für Rechnungserstellung freigeben" und Rechnungen erstellen. Gibt es dazu eine akzeptable Erklärung von JTL? JTL-Wawi 1.11 1
Neu Artikelname & Beschreibung angepasst für jeweiligen Marktplatz Arbeitsabläufe in JTL-Wawi 1
Neu OnFinds: KI-Suche für JTL-Shop mit fairer Abrechnung nach Artikelanzahl. 30 Tage kostenlos testen Plugins für JTL-Shop 0
API 2.1 für OnPrem? JTL-Wawi 2.0 6
Neu Dummy-ID oder Freiposition für Angebot mit mehrzeiliger Beschreibung JTL-Wawi - Ideen, Lob und Kritik 7
Neu Neue Kennzeichnungspflicht für Elektrogeräte (Altgeräterücknahme) Betrieb / Pflege von JTL-Shop 4
Neu Freelancer für JTL-Wawi, Shop & Prozessautomatisierung Dienstleistung, Jobs und Ähnliches 2
Neu Exportgenehmigung / Ausfuhrgenehmigung automatisch für Auslandskunden als Aufpreis Allgemeine Fragen zu JTL-Shop 2
Für Ihren SQL-Server wurde ein Service Pack zur Verfügung gestellt - nö, gelogen, wie kriege ich die Meldung weg? JTL-Wawi 1.11 15
Neu Ab welcher JTL Wawi Version ist der OnPremise REST API Endpoint POST /v2/returns oder POST /v1/returns für Create Return verfügbar? Schnittstellen Import / Export 0
Neu Seller2Go – Mobile App & JTL-Plugin für Bestellungen, Support und Produktmanagement Plugins für JTL-Shop 0
Neu Neues Plugin: Erweiterter Widerrufsbutton für JTL-Shop Plugins für JTL-Shop 9
JTL-Worker 2.0 - Einrichtung als Dienst - Auffälligkeiten und Problemlösungen für manche JTL-Wawi 2.0 3
Neu Muss man für DHL Versenden 4.0 einen neuen Benutzer bei DHL anlegen? JTL-ShippingLabels - Ideen, Lob und Kritik 2
Neu Retourenetikett für Briefe kann unter Internetmarke 2.0 nicht erstellt werden JTL-ShippingLabels - Fehler und Bugs 5
Neu Neue Tracking-URL für DPD JTL-ShippingLabels - Fehler und Bugs 4
AboutYou keine Felder für GPSR Daten SCX-(Ninepoint)-Anbindungen 0
globale Angebotsvorlage anpassen für eBay Angebote "Artikelspezifisch" JTL-Wawi 1.11 0
Neu Connectorupdates für Shopware 6.7.7 bzw 6.7.8? Shopware-Connector 39
Neu Streichpreise oder Rabatte für Staffelpreise von einem Artikel einrichten? Wie am Besten? JTL-Wawi 1.6 0
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 Stornobeleg für Verkauf ohne Rechnung User helfen Usern - Fragen zu JTL-Wawi 9
Neu Neuentwicklung - Helpdesk für JTL Wawi - Eure Ideen und Wünsche? User helfen Usern - Fragen zu JTL-Wawi 4
Kein changelog für 1.11.8 JTL-Wawi 1.11 29
Text Vorbereitung für WAWI import JTL-Wawi 1.11 3
gelöst: Für diesen User wurde zum angegebenen Mandanten keine Firma gefunden!! JTL-Wawi 1.10 13
Neu Internetmarke: Partner has no access permission for this service. JTL-ShippingLabels - Ideen, Lob und Kritik 9
Using short screen recordings for JTL-Wawi workflow documentation – anyone doing this? JTL-Wawi 2.0 3

Ähnliche Themen