Groovy Callouts in metasfresh

Ich würde ich gerne wissen,
ob die Callouts in metasfresh genau so funktionieren wie in adempiere?.
Wenn nein, wie und wo sind die Unterschiede? Wo gibt es eine Doku?

Hintergrund, der adempiere-Kunde nutzt derzeit groovy Callouts,
um aus einem Auftrag Informationen für COM-Komponenten (excel,outlook) zu übertragen.

Beispiel für ein Callout auf mierp:
Schnittstelle AD-excel (wg Datenblatt (excel) mit Endkundendaten), wurde in AD implementiert.

Testweise habe ich den Callout in metasfresh definiert:

  • an Spalte POReference, Tabelle C_Order
  • Calssname = @script:groovy:CalloutSmartEndCustomerDataExcel
  • und in Rule das skript
  • eventtype ist C (Callout)

Für den Test habe ich das skript als “HalloWorld” implementiert, das das original mit der excel-Schnittstelle sicher schief gehen würde.

Das Ergebnis im Log deutet darauf hin, dass die groovy engine im metasfresg nicht aktiv ist:

ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider com.sun.script.groovy.GroovyScriptEngineFactory not found
ScriptEngineManager providers.next(): javax.script.ScriptEngineFactory: Provider com.sun.script.jython.JythonScriptEngineFactory not found
2016-11-24 12:41:31.592  WARN 12176 --- [pool-3-thread-1] org.compiere.model.GridTab               : java.lang.NullPointerException

org.adempiere.ad.callout.exceptions.CalloutExecutionException: java.lang.NullPointerException
	at org.adempiere.ad.callout.exceptions.CalloutExecutionException.of(CalloutExecutionException.java:28)
	at org.adempiere.ad.callout.api.impl.CalloutExecutor.execute(CalloutExecutor.java:296)
	at org.adempiere.ad.callout.api.impl.CalloutExecutor.execute(CalloutExecutor.java:118)
	at org.compiere.model.GridTab.processCallout(GridTab.java:3347)
	at org.compiere.model.GridTab.dataNew(GridTab.java:1529)
	at org.compiere.apps.APanel.stateChanged0(APanel.java:1773)
	at org.compiere.apps.APanel.stateChanged(APanel.java:1585)
	at javax.swing.JTabbedPane.fireStateChanged(JTabbedPane.java:416)
	at javax.swing.JTabbedPane$ModelListener.stateChanged(JTabbedPane.java:270)
	at javax.swing.DefaultSingleSelectionModel.fireStateChanged(DefaultSingleSelectionModel.java:132)
	at javax.swing.DefaultSingleSelectionModel.setSelectedIndex(DefaultSingleSelectionModel.java:67)
	at javax.swing.JTabbedPane.setSelectedIndexImpl(JTabbedPane.java:616)
	at javax.swing.JTabbedPane.setSelectedIndex(JTabbedPane.java:591)
	at org.compiere.grid.VTabbedPane.setSelectedIndex(VTabbedPane.java:338)
	at javax.swing.JTabbedPane.insertTab(JTabbedPane.java:731)
	at org.compiere.swing.CTabbedPane.insertTab(CTabbedPane.java:200)
	at javax.swing.JTabbedPane.addTab(JTabbedPane.java:767)
	at org.compiere.grid.VTabbedPane.addTab(VTabbedPane.java:103)
	at org.compiere.apps.APanel.initPanel(APanel.java:1032)
	at org.compiere.apps.AWindow.initWindow(AWindow.java:98)
	at org.adempiere.ui.api.impl.WindowBL.openWindow(WindowBL.java:79)
	at org.compiere.apps.AMenuStartItem.startWindow(AMenuStartItem.java:314)
	at org.compiere.apps.AMenuStartItem.doInBackground(AMenuStartItem.java:191)
	at org.compiere.apps.AMenuStartItem.doInBackground(AMenuStartItem.java:1)
	at javax.swing.SwingWorker$1.call(SwingWorker.java:295)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at javax.swing.SwingWorker.run(SwingWorker.java:334)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NullPointerException: null
	at org.compiere.model.MRule.setContext(MRule.java:260)
	at org.adempiere.ad.callout.api.impl.RuleCalloutInstance.execute(RuleCalloutInstance.java:150)
	at org.adempiere.ad.callout.api.impl.CalloutExecutor.execute(CalloutExecutor.java:261)
	... 28 common frames omitted

Hello,

I’ve submited a task for this issue: https://github.com/metasfresh/metasfresh/issues/646

Hi again,

Here is the pull request to fix the issue: https://github.com/metasfresh/metasfresh/pull/647

We are planning to include it in next release.

tkx Teo,

I detect that the ad_rule.script definition in mf is too short:
script character varying(2000),
In adempiere is was defined to 8000. Is there any reason why it was shortened?
Even 8K is to short. I suggest to define it to 16K or more.

Hello,

There is no particular reason.
Feel free to make it bigger on your side,
and we will also do it in one of the next releases.

PS: submited https://github.com/metasfresh/metasfresh/issues/649