# Erweiterung von Workflows mit groovy Prozessen

**URL:** <https://forum.metasfresh.org/t/erweiterung-von-workflows-mit-groovy-prozessen/614>\
**Category:** Developers\
**Created:** [August 30, 2017, 11:40am UTC](https://forum.metasfresh.org/t/erweiterung-von-workflows-mit-groovy-prozessen/614 "2017-08-30T11:40:21Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![homebeaver](https://forum.metasfresh.org/user_avatar/forum.metasfresh.org/homebeaver/32/545_2.png) [@homebeaver](https://forum.metasfresh.org/u/homebeaver)\
**Post date:** [August 30, 2017, 11:40am UTC](https://forum.metasfresh.org/t/erweiterung-von-workflows-mit-groovy-prozessen/614/1 "2017-08-30T11:40:21Z")

</div>

letzte Woche habe ich das Thema angesprochen. @metasnw meinte, es wäre für andere im Forum auch von Interesse. Es geht um Geschäftsprozesse (BP) allgemein und die Workflow engine im package `org.compiere.wf` im Besonderen.  
Wer sich zum Thema Workflow (wf) einlesen will, den verweise ich auf den [Wikipedia](https://de.wikipedia.org/wiki/Business_Process_Model_and_Notation#Flow_Objects)-Artikel, und zum Vertiefen das [activiti-Handbuch](https://www.activiti.org/userguide/index.html#bpmnTask). Eine Übesicht der BPM-Notation ist [hier](https://camunda.org/bpmn/reference/).

Stichworte ohne Vertiefung:

- **Activities/Aktionen** werden im BP grafisch als Rechtecke dargestellt, sie werden auch **Knoten** oder wf- **Schritte** genannt
- **Tasks** sind elementare Aktionen, die durch Personen “User Task” ausgeführt werden (Rechner einschalten), oder automatisch ablaufen (“Auftrag fertigstellen” in metasfresh)
- der typische Dokumenten-wf in mf/ADempiere beinhaltet die **Belegaktionen** `Prepare` und `Complete`

[Hier](http://wiki.idempiere.org/de/Workflow_(Fenster_ID-113)#Knotenaktion) ist eine mögliche Erweiterung des typischen Dokumenten-Workflows [beschrieben](http://wiki.idempiere.org/de/Workflow_(Fenster_ID-113)#Knotenaktion). Zwischen Prepare und Complete wurde ein Prozeßschritt `p` definiert, der unter bestimmten Bedingungen ausgeführt wird:

![](https://forum.metasfresh.org/uploads/default/original/1X/ecd521816ccab4fc192119619417e2da2d0fd01a.png)

`p` ist als AD\_Prozess definiert und muss als Klasse implementiert werden. Das bedeutet, dass die wf-Anpassung eine Erweiterung von metasfresh nach sich zieht, da compiliert werden muss. Geht es auch anders?

- Knoten in Workflow, typischerweise kennt man “vorbereiten” und “fertigstellen”, können auch ganz normale AD\_Prozesse sein, wie oben gezeigt
- AD\_Prozesse (die mit dem Rädchen) können in java oder in einer script Sprache, etwa groovy, implementiert werden, siehe [hier](https://forum.metasfresh.org/t/schnittstelle-zu-ms-com-excel-outlook-via-groovy/98)
- die übliche Aussagelogik sagt: dann können goovy scripte auch als Knoten im Workflows definiert werden
- der grosse Vorteil einer script-Implementierung ist, dass für die wf-Änderung die metasfresh Applikation nicht neu kompiliert werden müßte. Die scripte werden in die DB kopiert und zur Laufzeit übersetzt und ausgeführt. Wow!

Die Logik gilt für mf leider nicht, denn der Start eines AD\_Prozesses (mit Rädchen ![](https://forum.metasfresh.org/uploads/default/original/1X/cc3ee6bc21acbbfb81cf0e03912ba523bba85ea0.png)) ist anders implementiert als der Start eines AD\_Prozesses als `AppsProcess`. Das ist schade, denn die Vorteile sind nicht zu übersehen.  
Daher mein Vorschlag, die Stelle in `MWFActivity` und die Abhängigen anzupassen:

```java
public class MWFActivity extends X_AD_WF_Activity implements Runnable {
...
	private boolean performWork (Trx trx) throws Exception {
           ...
        		/ ******	Process****** /
        		else if (MWFNode.ACTION_AppsProcess.equals(action)) {
                             ... // hier Änderungen notwendig
                        }
}

```

---

<div class="post-metadata">

**Author:** ![Peter\_G](https://forum.metasfresh.org/letter_avatar_proxy/v4/letter/p/c67d28/32.png) [@Peter\_G](https://forum.metasfresh.org/u/Peter_G)\
**Post date:** [June 29, 2019, 8:40pm UTC](https://forum.metasfresh.org/t/erweiterung-von-workflows-mit-groovy-prozessen/614/2 "2019-06-29T20:40:07Z")

</div>

Den Ausführungen des Kollegen kann ich nur zustimmen.  
Gerade durch das Erstellen / Customizen von Prozessen per Groovy kann metasfresh sich einen sehr großen Vorteil im Feld der ERP-Lösungen erarbeiten. Denn nicht jeder Berater draußen will bauen und dann deployen. Oft werden Prozesse draußen im Feld auf Zuruf implementiert. Und da ist bauen oft kontraproduktiv. Zumal es ja mit Groovy möglich ist, auf alle bestehenden Java-Objekte zu zugreifen.  
Und gerade im Bereich von Satelliten-Anwendungen kann man so komplett auf Bauen verzichten, wenn man die betreffenden Prozesse in Groovy erstellen kann.
