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