JTL-Wawi Workflows Ein Workshop mit Dirk Lehmeier & Georg Jennessen JTL-Wawi Workflows –Workshop 1. Einfacher Workflow: Auftrag erstellt -> Benachrichtigung senden - Unter dem Ereignis Auftrag -> Erstellt, fügen wir einen neuen Workflow über den Button „Hinzufügen“ ein. Wir definieren keine Bedinungen Über den Link „Neue Aktion“ wird die Aktion Email-senden hinzugefügt. Über den Button „…“ können DotLiquid Variablen hinzugefügt werden. o Bitte beachten: Fügt man DotLiquid Variablen direkt in das Textfeld ein, werden diese nicht geparst! 1 JTL-Wawi Workflows –Workshop 2. Versandart bei internationalen Aufträgen ändern - Unter dem Ereignis „Auftrag erstellt“ erstellen wir einen neuen Workflow „Versandart_Ändern_International“ Es werden 3 Bedingungen angelegt, die alle erfüllt sein müssen Sind alle 3 Bedingungen erfüllt, wird durch die Aktion „Versandart ändern“ die Versandart des Auftrags geändert. 2 JTL-Wawi Workflows –Workshop 3. Komplexe Bedingungen mit Regulären Ausdrücken • Match Deutschland: Deutschland oder ^Deutschland$ • Nicht Deutschland: ^((?!(Deutschland)).) (negative lookahead) • Nicht Deutschland,Österreich oder Niederlande: ^((?!(Deutschland|Österreich|Niederlande)).) Weitere Informationen zu regulären Ausdrücken in der MSDN: https://msdn.microsoft.com/de-de/library/hs600312(v=vs.110).aspx 3 JTL-Wawi Workflows –Workshop 4. Beispiele für „Erweiterte Eigenschaften“ mit DotLiquid Aufträge älter als 5 Tage {% assign erstellt = Vorgang.Stammdaten.Erstelldatum | AddDays: 5 -%} {% if Datum.Jetzt > erstellt -%} ja{% endif -%} Auftrag zu 25% bezahlt {% assign gesamtSummeAnzahlungen = 0.0 %} {% for Zahlungen in Vorgang.Zahlungen.Zahlungen -%} {%if Zahlungen.IstAnzahlung %} {%assign betragAnzahlung = Zahlungen.Betrag | FormatNumber: 'N2', 'de-DE' | ToDouble %} {% assign gesamtSummeAnzahlungen = gesamtSummeAnzahlungen | Plus: betragAnzahlung %} {%endif%} {% endfor -%} {% assign auftragGesamtBrutto = Vorgang.Zahlungen.Gesamtbruttopreis | FormatNumber: 'N2', 'de-DE' | ToDouble %} {% assign pw = 100.0 | DividedBy: auftragGesamtBrutto %} {% assign prozentBezahlt = gesamtSummeAnzahlungen | Times: {% if prozentBezahlt >= 25.0 %} ja {% endif %} 4 pw %} JTL-Wawi Workflows –Workshop 5. SQL in „Erweiterten Eigenschaften“ Scalar Query {% assign kArtikel = Vorgang.Allgemein.Stammdaten.InterneArtikelnummer %}\ {% capture query -%} SELECT cArtNr FROM tArtikel WHERE tArtikel.kArtikel = kArtikel {% endcapture -%} {% assign result = query | DirectQueryScalar %} {{result}} Query mit Resultset: {% assign artNr = Vorgang.Allgemein.Stammdaten.Artikelnummer %}\ {% capture query -%} SELECT * FROM tArtikel WHERE tArtikel.cArtNr LIKE '%{{artNr}}%' {% endcapture -%} {% assign Result = query | DirectQuery %} {% for data in Result.Daten %} {{data.cArtNr}}\ {% endfor %}\ 5 JTL-Wawi Workflows –Workshop Lager plus Zulauf kleiner Mindestbestand (für einen Auftrag) {% assign warenlagerName = 'Außenlager' %}\ {% assign bestandunterschritten = '' %}\ {% for Artikelbeschreibungen in Vorgang.AuftragsPositionen.Positionen -%}\ {% assign artikel = Artikelbeschreibungen.Artikel %}\ {% assign auflager = 0.0 %}\ {% assign zulauf = artikel.BestandBestellt %}\ {% assign mindestbestand = artikel.Mindestbestand %}\ {% capture query -%}\ SELECT SUM(fBestand) as Menge FROM vLagerbestandproLager JOIN tWarenlager on twarenlager.kWarenLager = vlagerbestandproLager.kwarenlager WHERE twarenlager.cName = '{{ warenlagerName }}' AND vLagerbestandproLager.kArtikel = {{ artikel.InterneArtikelnummer }} {% endcapture -%}\ {% assign Anzahl = query | DirectQuery %}\ {% for anz in Anzahl.Daten %}\ {% assign auflager = auflager |Plus: anz.Menge %}\ {% endfor %}\ {% assign lagerPlusZulauf = auflager | Plus: zulauf %}\ {%if lagerPlusZulauf < mindestbestand %}\ Ja {% endif %}\ {% endfor -%} 6 JTL-Wawi Workflows –Workshop Lager plus Zulauf kleiner Mindestbestand (für einen Artikel) {% assign warenlagerName = 'Standardlager' %}\ {% assign bestandunterschritten = '' %}\ {% assign auflager = 0.0 %}\ {% assign zulauf = Vorgang.Bestandsübersicht.Zulauf %}\ {% assign mindestbestand = Vorgang.Allgemein.Lager.Mindestbestand %}\ {% capture query -%} SELECT SUM(fBestand) as Menge FROM vLagerbestandproLager JOIN tWarenlager on twarenlager.kWarenLager = vlagerbestandproLager.kwarenlager WHERE twarenlager.cName = '{{ warenlagerName }}' AND vLagerbestandproLager.kArtikel = {{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer }} {% endcapture -%} {% assign Anzahl = query | DirectQuery %} {% for anz in Anzahl.Daten %} {% assign auflager = auflager |Plus: anz.Menge %} {% endfor %} {% assign lagerPlusZulauf = auflager | Plus: zulauf %} {% comment DEBUG -%} auflager: {{auflager}} artikelid:{{ Vorgang.Allgemein.Stammdaten.InterneArtikelnummer}} zulauf:{{ zulauf }} lagerpluszulauf:{{ lagerPlusZulauf }} mindestbestand: {{ mindestbestand }} {% endcomment -%} {%if lagerPlusZulauf < mindestbestand %} {% assign bestandunterschritten = 'Ja' %} {% endif %} {{bestandunterschritten}} 7 JTL-Wawi Workflows –Workshop 6. Ameise und JTL-Workflows Zum Exportieren von Daten kann man sehr gut die Aktion „Ausgabe verwenden“ Wenn man danach direkt wieder Daten mit der Ameise importieren will, ist darauf zu achten, das „Auf Aktion warten“ angehakt ist Aufruf der Ameise über die Aktion „Ausführen“ Parameter: -s SQL-Server Instanz -d Datenbankname -u Benutzername -p Passwort -t ID der Importvorlage -i Dateiname der zu importierenden Datei -o Dateiname für eine exportierende Datei Beispiel: -s PCName\SQLSERVERINSTANZ –d datenbankname –u sa –p sa04jT14 –t IMP3 –i C:\Temp\data.csv 8 JTL-Wawi Workflows –Workshop 7. Beispiel: Ftp-Upload Auftrag wurde erstellt Ist komplett Dropshipping Lieferbar Ausliefern Lieferantenerstellung wurde erstellt Export der Lieferantenbestellung Upload per Ftp 9 JTL-Wawi Workflows –Workshop Beispiel Ftp-Upload Batch Datei (upload.bat) c: cd "c:\temp\connect\ftp\Dropshipper" REM Set vars set server=ftpserver.de set user=username set password=password :TRYAGAIN set csvCount=0 for %%f in (*.csv) do set csvCount=%csvCount%+1 echo %csvCount% IF %csvCount%==0 GOTO NOTHINTODO REM login echo open %server%>> "c:\temp\connect\ftp\Dropshipper\temp.tmp" echo %user%>> "c:\temp\connect\ftp\Dropshipper\temp.tmp" echo %password%>> "c:\temp\connect\ftp\Dropshipper\temp.tmp" del c:\temp\connect\ftp\Dropshipper\ausgabe.txt REM execute stuff echo cd Dropshipper>> "c:\temp\connect\ftp\Dropshipper\temp.tmp" for %%f in (*.csv) do echo put "c:\temp\connect\ftp\Dropshipper\%%f">> "c:\temp\connect\ftp\Dropshipper\temp.tmp" echo dir>>"c:\temp\connect\ftp\Dropshipper\temp.tmp" echo bye>>"c:\temp\connect\ftp\Dropshipper\temp.tmp" REM run the ftp script ftp -s:"c:\temp\connect\ftp\Dropshipper\temp.tmp" >> "c:\temp\connect\ftp\Dropshipper\ausgabe.txt" REM delete temp file del "c:\temp\connect\ftp\Dropshipper\temp.tmp" move "c:\temp\connect\ftp\Dropshipper\*.csv" "c:\temp\connect\ftp\Gesendet" GOTO DONE :NOTHINTODO ping 192.0.0.0 -n 1 -w 1000 GOTO TRYAGAIN :DONE 10 JTL-Wawi Workflows –Workshop 8. Nachdem Artikel geändert wurde, anderen Artikel aktualisieren Erstellen eines Eigenen Feldes „Export“ Neuer Workflow unter „Artikel geändert“ Aktion Wert setzen -> Export = 1 Erstellen einer Exportvorlage in der Ameise mit einem Filter auf das Eigene Feld „Export = 1“ Aktion Ausführen mit dem Ameisen Export hinzufügen Aktion Ausführen mit einem Powershell Command um die Artikelnummer der Exportdatei anzupassen Erstellen einer entsprechenden Importvorlage für die Ameise Aktion Ausführen mit einem Ameisen Import Aktion Wert setzen -> Export = 100 Beispielhaftes DotLiquid für einen Powershell Aufruf {% capture query -%} SELECT cArtNr FROM tArtikel WHERE cArtNr LIKE 'Dest%' {% endcapture -%}\ {% assign result = query | DirectQueryScalar %}\ {% assign artnr=result | trim %}\ -Command "(gc c:\temp\artikel\artikel.csv) -replace '{{Vorgang.Allgemein.Stammdaten.ArtNrSku}}', '{{artnr}}' | Out-File c:\temp\artikel\replaced.csv" 11