Gelöst Vaterartikelname aus der SQL über {% capture query -%} holen - Ursprung Kinderartikel ???

Eldra H.

Gut bekanntes Mitglied
11. November 2021
101
8
Ich möchte den Titel Tag und die Metadiscription weiter automatisieren. Die URL habe ich endlich fertig. Läuft wie flüssige Butter. Inkl. einer Kategorie-Übersetzung von DE in EN. Besser gehts nicht.
Allerdings hänge ich an dem {% capture query -%} und finde nicht so wirklich die Schlüsselidee zu den richtigen Tabellen.
Das Grundgerüst ist:

{% if Vorgang.Variationen.IstVariationsKombi == 'true' %}
XXXX HIER die Suche nach dem Vaterartikel mit {{ Vorgang.Allgemein.Stammdaten.ArtNrSku | Split: "-" | First }} starten XXXX
{%- else -%}
{{ Vorgang.Beschreibung.Global.Artikelname.Deutsch }} | FIRMA - unser Claim
{%- endif %}

Die Idee: Damit abfragen, ob es ein Kinderartikel ist. Wenn ja, dann die Artikelnummer stutzen, damit eine Vaterartikelnummer übrig bleibt. Das funzt auch.
Mein Problem: Die Übergabe des Wertes und das matchen zur SQL, sodass statt dem Kinderartikelname, der Artilkname der oben generierten Artikelnummer ausgespielt wird.
Oder ist es sogar möglich, über dotliquid zu sagen, dass er mir den Artikelnamen von Artikelnummer XXXX anzeigen soll?
 

jtldudel

Sehr aktives Mitglied
4. Januar 2018
636
208
Mir ist noch nicht ganz klar was hier benötigt wird. Den Teil unter "Mein Problem: ..." hab ich noch nicht ganz verstanden.

Du kannst den Vaterartikel direkt über die DB abholen, so hast du die tatsächliche Artikelnummer des Vaterartikels.

{% capture Parent -%}
select cartnr from tartikel where kartikel = (select kvaterartikel from tartikel where kartikel = {{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }})
{% endcapture -%}
{% assign VaterArtikel = Parent | DirectQueryScalar -%}

Die Variable {{ VaterArtikel }} gibt die nun die SKU des jeweiligen Vaterartikels wieder, die kannst du dann benutzen wo auch immer du sie brauchst.

Meinst du, dir fehlt wie du an den Namen des Vaterartikels rankommst?
 
  • Gefällt mir
Reaktionen: Eldra H.

Eldra H.

Gut bekanntes Mitglied
11. November 2021
101
8
Meinst du, dir fehlt wie du an den Namen des Vaterartikels rankommst?
Ja genau das ist das Problem. 🙂
Die Vaterartikelnummer habe ich ja über die Split Funktion quasi selbst gebastelt.
Der Workflow greift bei einem Kinderartikel und im Titel Tag möchte ich nicht den vollen Namen der Variationen stehen haben, sondern nur die Hauptbezeichnung vom Vater.
Daher benötige ich ja irgendeine Verknüpfung, die den "Artikelnamen" ausgibt, den ich benötige.
 

jtldudel

Sehr aktives Mitglied
4. Januar 2018
636
208
{% capture ParentName -%}
select cName from tartikel
join tArtikelBeschreibung on tartikel.kArtikel = tArtikelBeschreibung.kArtikel
where kPlattform = 1 and kSprache = 1 and tartikel.kArtikel = (select kVaterArtikel from tartikel where kArtikel = {{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }})
{% endcapture -%}
{% assign VaterArtikelName = ParentName | DirectQueryScalar -%}

########
Variable heißt dann {{ VaterArtikelName }}

Einfach am Anfang den ganzen Block da oben eintragen dann kannst du in deiner If Abfrage die Variable benutzen.
 
  • Gefällt mir
Reaktionen: Eldra H.

Eldra H.

Gut bekanntes Mitglied
11. November 2021
101
8
Mega.

Dann sind ab jetzt alle Artikel die wir neu einstellen automatisiert und bekommen:
Titel Tag
Meta-Description passend zur Warengruppe
und den URL Pfad (immer die Vaterkategorie/Artikel)
Und alles in deutsch und englisch.

@jtldudel Danke, Danke, Danke
 

Eldra H.

Gut bekanntes Mitglied
11. November 2021
101
8
Hallo @jtldudel

Mit meiner Aussage "alles in De und EN" war ich etwas überschnell...

Wir haben einige Artikel, wo die Sprache nicht im englischen definiert ist. Dein Script habe ich mit kSprache = 1 für DE und kSprache = 3 für EN bei uns laufen.
Wenn EN nicht im Artikelnamen gesetzt ist, dann kommt natürlich eine leere Ausgabe, gefolgt von unsrem Claim. Gerne würde ich es so haben: wenn EN nicht vorhanden, dann DE VaterArtName

Jetzt habe ich folgendes probiert: Das SQL dupliziert und mit kSprache in 1 und 3 untereinander angegeben: Ergebnis = Wird erfolgreich ausgeführt und ich sehe nur DE oder DE und EN. Also vom Grund her gehts im einen Rutsch.

Mein Versuch, das per if xxxxx == 'emty' dann k1 setzen und mit else das duplizierte SQL Script mit k3 auszuführen schlägt allerdings fehl.
Auch habe ich versucht den if Befehl an verschiedenen Stellen zu setzten. Leider ohne Erfolg.

Liquid error: Der Wert darf nicht NULL sein. Parametername: input gibt es als Meldung oder aber er ignoriert die else Bedingung. und bleibt bei der ersten Bedingung.

Hast du einen Tipp, wie ich eine if else Bedingung unterbekomme, dass die Abfrage auch läuft?

Das if emty habe ich versucht mit: VaterArtikelName (da was das Script oberhalb der if Abfrage) und mit Vorgang.Beschreibung.Global.Artikelname.Englisch (da kam zuerst das if und in der Bedingung das Script.
 

jtldudel

Sehr aktives Mitglied
4. Januar 2018
636
208
Versuch mal bei der If abfrage einfach zu sagen [if xxxx == ''] (zwei Hochkommas, nicht anführungszeichen). Alternativ kannst du die Abfrage ergänzen:

{% capture ParentName -%}
select isnull(cName,'DE') from tartikel
join tArtikelBeschreibung on tartikel.kArtikel = tArtikelBeschreibung.kArtikel
where kPlattform = 1 and kSprache = 3 and tartikel.kArtikel = (select kVaterArtikel from tartikel where kArtikel = {{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }})
{% endcapture -%}
{% assign VaterArtikelName = ParentName | DirectQueryScalar -%}

Dann sagst du das cName, wenn es Null ist (also kein englischer Name vorhanden), stattdessen den Text "EN" ausgibt. Dadurch könntest du deine If-Abfrage vielleicht besser machen.
 

Eldra H.

Gut bekanntes Mitglied
11. November 2021
101
8
Danke. Mit den zwei Hochkommas, statt dem emty scheint es "etwas" zu gehen.
Was mich verwirrt ist, dass nicht alle Artikel das gleiche tun.
Ich hab einige Workflow-Testartikel, die extra für sowas herhalten.
Da habe ich zB das Phänomen, dass dieser mit EN = leer ausgespielt wird. (DE und EN Text ist aber global hinterlegt).
Ein anderer Artikel, der identische Werte hat, nur anders heißt, wird mit Artikeltext EN ausgespielt. Also alles korrekt.
Wieder ein anderer Artikel, der kein EN angegeben hat, wird anstandslos in die DE geschoben. Auch korrekt,
Nochmals ein Artikel wo kein EN angegeben ist, der wird auf DE geschoben, aber ohne Artikename, also leer.


Bei den, wo es nicht klappt ist es auch völlig wurscht welche kSprache ich setze. Die bleiben einfach in der if oder else Bedingung.

Du hast geschrieben: cName, wenn es Null ist (also kein englischer Name vorhanden), stattdessen den Text "EN"

Meinst du ich soll den Wert Null im if reinschreiben oder wo? Das habe ich noch nicht probiert
Meine Abfrage die Ansatzweise am besten läuft ist:

{%- if Vorgang.Beschreibung.Global.Artikelname.Englisch == '' -%}
{%- capture ParentName -%}
select cName from tartikel
join tArtikelBeschreibung on tartikel.kArtikel = tArtikelBeschreibung.kArtikel
where kPlattform = 1 and kSprache = 1 and tartikel.kArtikel = (select kVaterArtikel from tartikel where kArtikel = {{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }})
{%- endcapture -%}
{%- assign VaterArtikelName = ParentName | DirectQueryScalar -%}
{{ VaterArtikelName }} Hier DE | FIRMA - unser Claim
{%- else -%}
{%- capture ParentName -%}
select cName from tartikel
join tArtikelBeschreibung on tartikel.kArtikel = tArtikelBeschreibung.kArtikel
where kPlattform = 1 and kSprache = 3 and tartikel.kArtikel = (select kVaterArtikel from tartikel where kArtikel = {{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }})
{%- endcapture -%}
{%- assign VaterArtikelName = ParentName | DirectQueryScalar -%}
{{ VaterArtikelName }} Hier EN | FIRMA - unser Claim
{%- endif -%}
 

Ähnliche Themen