Neu Workflow mit DotLiquid Variable

Bernd_Hofi

Aktives Mitglied
13. Mai 2017
90
21
Hallo, liebe Gemeinde

Ich brauche Hilfe mit einem Workflow.

Ausgangslage:

Wenn Auftrag erstellt wird und er den Artikel xy enthält, soll ein Zusatzartikel hinzugefügt werden.

jetzt gehts um die Menge der Zusatzposition und hier würde ich gerne die Menge errechnen lassen.

Die Anzahl soll bestimmt werden aus der Menge der Bestellpositionen, bei denen im Artikelstamm ein Hacken in einer Checkbox in den Eigenen Feldern gesetzt wurde.

Warum? Wir haben für einen Kunden Flyer eingelagert. Wenn der Kunde jetzt bei uns Bestellt, kann er seine eigenen Flyer mitbestellen. Für jeden Unterschiedlichen Flyer verlangen wir eine Pickpauschale. Und Sinnvollerweise steht nacher auf der Rechnung:

Artikel 1. 2x
Artikel 2. 3x
Artikel 3. 2x
Flyer 1. 10x
Flyer 2 2x
Pickpauschale 2x

Jetzt das Problem:

wie muss die Dotliquid Abfrage lauten, damit der gesetzte Wert für den Hacken erkannt und im Loop durch den Auftrag zusammengezählt wird?

Ich hab absoluten Kopfsalat🤯
 

Bernd_Hofi

Aktives Mitglied
13. Mai 2017
90
21
Ok, scheint schwierig zu sein. Dann die Frage an JTL. Könnt Ihr mir sagen, wie das Datenbankfeld heist für die Eigenen Felder? Dann mach ichs über eine Datenbankabfrage
 

hula1499

Sehr aktives Mitglied
22. Juni 2011
3.465
410
Artikelattribute findest in tAttribut (die angelegten) dann bei tArtikelAttribut die jeweiligen Zuordnungen (kAttribut)
 

Bernd_Hofi

Aktives Mitglied
13. Mai 2017
90
21
Danke.

Ich schreib mal die Abfrage und poste sie dann gerne. Das thema gabs ja schon öfter. Zusatzartikel nur unter bestimmten Kriterien.

Und nicht böse sein, aber ich seh es nicht ein, den Kollegen für solche Erweiterungen dafür Geld zu geben, wenn`s JTL kann.
 

T4DT.GmbH

Offizieller Servicepartner
SPBanner
6. November 2018
223
51
Hannover
SQL:
SELECT tas.cName, taas.nWertInt FROM dbo.tArtikelAttributSprache taas
JOIN dbo.tArtikelAttribut taa ON taa.kArtikelAttribut = taas.kArtikelAttribut
JOIN dbo.tAttributSprache tas ON tas.kAttribut = taa.kAttribut AND tas.cName = 'Pickpauschale'
WHERE taas.kSprache = 0 AND tas.kSprache = 0  AND taas.nWertInt =1 
AND taa.kArtikel    = 12345
Müsste entsprechend eingepasst werden
 
  • Gefällt mir
Reaktionen: Bernd_Hofi

Bernd_Hofi

Aktives Mitglied
13. Mai 2017
90
21
SQL:
SELECT tas.cName, taas.nWertInt FROM dbo.tArtikelAttributSprache taas
JOIN dbo.tArtikelAttribut taa ON taa.kArtikelAttribut = taas.kArtikelAttribut
JOIN dbo.tAttributSprache tas ON tas.kAttribut = taa.kAttribut AND tas.cName = 'Pickpauschale'
WHERE taas.kSprache = 0 AND tas.kSprache = 0  AND taas.nWertInt =1
AND taa.kArtikel    = 12345
Müsste entsprechend eingepasst werden
Hi.
Wow. Da warst du um einiges schneller wie ich. Ich hab grad noch Tabellen gesucht🤫
 

T4DT.GmbH

Offizieller Servicepartner
SPBanner
6. November 2018
223
51
Hannover
Hi.
Wow. Da warst du um einiges schneller wie ich. Ich hab grad noch Tabellen gesucht🤫
Sorry. Konnte mir das nicht verkneifen, nach dem einem Kommentar mit dem bezahlen :D
Das machen vernünftige Servicepartner in weniger als 240 Sekunden. Würde meinen Kunden hier (240 Sekunden / 3600 Sekunden/Stunde * 90 €/Stunde) = 6 € kosten :D Wieviel ist dir deine Zeit wert? :p
 
  • Gefällt mir
Reaktionen: Bernd_Hofi

Bernd_Hofi

Aktives Mitglied
13. Mai 2017
90
21
Gute Arbeit, darf gute Arbeit kosten. Aber für eine SQL-Profi DARF so eine Anfrage keine Kunst sein. Siehe T4DT.GMBH

Das schätze ich so an diesem Forum. Danke Vielmals.
 
  • Gefällt mir
Reaktionen: T4DT.GmbH

T4DT.GmbH

Offizieller Servicepartner
SPBanner
6. November 2018
223
51
Hannover
Die Abfrage müsste an den jeweiligen Zweck natürlich angepasst werden. Das ist nur die Datengrundlage. Möchtest du das als Bedingung, würde ich SELECT COUNT(*) .. machen und dann gucken, ob Wert größer 0 ist, als Workflowbedingung
 

Bernd_Hofi

Aktives Mitglied
13. Mai 2017
90
21
Nicht als Bedingung. Als Ergebniss. Die Abfrage ist relativ simpel in Worte gefasst.

Wieviele Artikel in diesem Auftrag haben in dem Eigenen Feld„Test“ einen Hacken.

Thats it.

mit Worten einfach. Für leihen im Code unmöglich.
 

T4DT.GmbH

Offizieller Servicepartner
SPBanner
6. November 2018
223
51
Hannover
SQL:
SELECT COUNT(*) FROM dbo.tArtikelAttributSprache taas
JOIN dbo.tArtikelAttribut taa ON taa.kArtikelAttribut = taas.kArtikelAttribut
JOIN dbo.tAttributSprache tas ON tas.kAttribut = taa.kAttribut AND tas.cName = 'Test'
JOIN dbo.tbestellpos bp ON bp.tArtikel_kArtikel = taa.kArtikel
WHERE taas.kSprache = 0 AND tas.kSprache = 0 AND taas.nWertInt =1
AND bp.tBestellung_kBestellung = {{interne BestellNr}}
 

Bernd_Hofi

Aktives Mitglied
13. Mai 2017
90
21
Kurzes Update:

Hab den Code jetzt mal in DotLiquid versucht zu Übersetzten.
Sieht jetzt so aus:

{% capture query -%}
SELECT COUNT(*) FROM dbo.tArtikelAttributSprache taas
JOIN dbo.tArtikelAttribut taa ON taa.kArtikelAttribut = taas.kArtikelAttribut
JOIN dbo.tAttributSprache tas ON tas.kAttribut = taa.kAttribut AND tas.cName = 'Test'
JOIN dbo.tbestellpos bp ON bp.tArtikel_kArtikel = taa.kArtikel
WHERE taas.kSprache = 0 AND tas.kSprache = 0 AND taas.nWertInt =1
AND bp.tBestellung_kBestellung = '{{interne BestellNr}}'
{% endcapture -%}
{% assign result = query | DirectQueryScalar %}\
{{ result }}


Der Wert, der nun zurückgegeben wird ist 0. Erwarteter Wert wären 2 gewesen.

Was ist falsch?

Wahrscheinlich die Übersetzung nach DotLiquid.

Schande über mir.:rolleyes:
 

T4DT.GmbH

Offizieller Servicepartner
SPBanner
6. November 2018
223
51
Hannover
Wenn du es als erweiterte Eigenschaft in den Workflows zu einem Auftrag anlegen willst:
Code:
{% capture query -%}
SELECT COUNT(*) FROM dbo.tArtikelAttributSprache taas
JOIN dbo.tArtikelAttribut taa ON taa.kArtikelAttribut = taas.kArtikelAttribut
JOIN dbo.tAttributSprache tas ON tas.kAttribut = taa.kAttribut AND tas.cName = 'Test'
JOIN dbo.tbestellpos bp ON bp.tArtikel_kArtikel = taa.kArtikel
WHERE taas.kSprache = 0 AND tas.kSprache = 0 AND taas.nWertInt =1
AND bp.tBestellung_kBestellung = {{ Vorgang.Stammdaten.InterneAuftragsnummer }}
{% endcapture -%}
{% assign result = query | DirectQueryScalar %}\
{{ result }}
Rückgabetyp ist hier "Zahl"
 

Bernd_Hofi

Aktives Mitglied
13. Mai 2017
90
21
Abschließender Beitrag:

Danke an T4DT.GmbH
Sie hatten die Lösung

Zusammengefasst:

Ihr wollt einem Auftrag einen Zusatzartikel für bestimmte Artikel per Workflow anhängen.

Die Artikel wurden per Checkbox in den Artikeldaten unter EigeneFelder selektiert.

Nun die Bedingung:

Wenn auftrag erstellt -> und Kunde ist aus dem Onlineshop (als Beispiel)

Bedingung: Füge Zusatzartikel für jeden Artikel hinzu, der einen Hacken in der Checkbox hat.

Also:

Positzion Hinzufügen

Modus -> Artikel
Aktikel wählen

Menge: Da kommt jetzt keine Zahl sonder der Code rein.

Öffnet die Erweiterten Eigenschaften und fügt Folgenden Code ein:

{% capture query -%}
SELECT COUNT(*) FROM dbo.tArtikelAttributSprache taas
JOIN dbo.tArtikelAttribut taa ON taa.kArtikelAttribut = taas.kArtikelAttribut
JOIN dbo.tAttributSprache tas ON tas.kAttribut = taa.kAttribut AND tas.cName = 'Test'
JOIN dbo.tbestellpos bp ON bp.tArtikel_kArtikel = taa.kArtikel
WHERE taas.kSprache = 0 AND tas.kSprache = 0 AND taas.nWertInt =1
AND bp.tBestellung_kBestellung = {{ Vorgang.Stammdaten.InterneAuftragsnummer }}
{% endcapture -%}
{% assign result = query | DirectQueryScalar %}\
{{ result }}


Das rote Test ersetzt Ihr durch den Namen der Checkbox.

Was macht der Code:

Er sucht in der Datenbank innerhalb des Auftrags nach allen Artikeln, wo Ihr den Hacken gesetzt habt.
Dann zählt er alles zusammen und gibt euch das Ergebniss als Zahl aus.


Viel Vergnügen mit dem Workflow

(Hinweis): Prüft nach jedem JTL-Update die Datenbankabfrage. Die Tabellen können sich ändern.