Goodmorning everyone.
I would need help to be able to ask a question before reactivating an order.
I tried to use an AbstractEventHandler class, with
registerTableEvent (IEventTopics.DOC_BEFORE_REACTIVATE, I_C_Order.Table_Name);
but by error in the process if I want to set and open the
FDialog.ask (....):!ENTRY org.eclipse.equinox.event 4 0 2019-02-28 08:50:27.232
!MESSAGE Exception while dispatching event org.osgi.service.event.Event [topic=adempiere/doc/beforeReactivate] {event.data=MOrder[1000001-org/19ODV-002,IsSOTrx=true,C_DocType_ID=1000032, GrandTotal=122.00], event.errorMessages=[Components can be accessed only in event listeners], tableName=C_Order} to handler it.idIta.idempiere.coreUtil.model.EventHandler_CoreUtil@782c992e
!STACK 0
java.lang.IllegalStateException: Components can be accessed only in event listeners
at org.zkoss.zk.ui.impl.UiEngineImpl.getCurrentVisualizer(UiEngineImpl.java:303)
at org.zkoss.zk.ui.impl.UiEngineImpl.addMoved(UiEngineImpl.java:350)
at org.zkoss.zk.ui.AbstractComponent.addMoved(AbstractComponent.java:481)
at org.zkoss.zk.ui.AbstractComponent.setPageBefore(AbstractComponent.java:430)
at org.zkoss.zk.ui.AbstractComponent.setPage(AbstractComponent.java:395)
at org.adempiere.webui.apps.AEnv.showCenterScreen(AEnv.java:107)
at org.adempiere.webui.component.Messagebox.show(Messagebox.java:320)
at org.adempiere.webui.component.Messagebox.showDialog(Messagebox.java:339)
at org.adempiere.webui.window.FDialog.ask(FDialog.java:395)
at org.adempiere.webui.window.FDialog.ask(FDialog.java:346)
at it.idIta.idempiere.coreUtil.model.EventHandler_CoreUtil.doHandleEvent(EventHandler_CoreUtil.java:57)
at org.adempiere.base.event.AbstractEventHandler.handleEvent(AbstractEventHandler.java:36)
at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:205)
at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:203)
at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:233)
at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151)
at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:132)
at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:75)
at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:44)
at org.adempiere.base.event.EventManager.sendEvent(EventManager.java:103)
at org.compiere.model.ModelValidationEngine.fireDocValidate(ModelValidationEngine.java:578)
at org.compiere.model.MOrder.reActivateIt(MOrder.java:2709)
at org.compiere.process.DocumentEngine.reActivateIt(DocumentEngine.java:639)
at org.compiere.process.DocumentEngine.processIt(DocumentEngine.java:359)
at org.compiere.process.DocumentEngine.processIt(DocumentEngine.java:281)
at org.compiere.model.MOrder.processIt(MOrder.java:1223)
at org.compiere.wf.MWFActivity.performWork(MWFActivity.java:1014)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:879)
at org.compiere.wf.MWFProcess.startNext(MWFProcess.java:373)
at org.compiere.wf.MWFProcess.checkActivities(MWFProcess.java:283)
at org.compiere.wf.MWFActivity.setWFState(MWFActivity.java:280)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:896)
at org.compiere.wf.MWFProcess.startWork(MWFProcess.java:505)
at org.compiere.wf.MWorkflow.start(MWorkflow.java:690)
at org.adempiere.util.ProcessUtil.startWorkFlow(ProcessUtil.java:319)
at org.compiere.apps.AbstractProcessCtl.startWorkflow(AbstractProcessCtl.java:392)
at org.compiere.apps.AbstractProcessCtl.run(AbstractProcessCtl.java:210)
at org.adempiere.webui.apps.WProcessCtl.process(WProcessCtl.java:197)
at org.adempiere.webui.apps.AbstractProcessDialog$ProcessDialogRunnable.doRun(AbstractProcessDialog.java:1103)
at org.adempiere.util.ContextRunnable.run(ContextRunnable.java:38)
at org.adempiere.webui.apps.DesktopRunnable.run(DesktopRunnable.java:40)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
at java.base/java.lang.Thread.run(Thread.java:834)
08:50:27.235-----------> MWFActivity.run: MWFNode[184-(DocAuto),Action=DocumentAction=--] [104]
java.lang.Exception: Components can be accessed only in event listeners
at org.compiere.wf.MWFActivity.performWork(MWFActivity.java:1052)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:879)
at org.compiere.wf.MWFProcess.startNext(MWFProcess.java:373)
at org.compiere.wf.MWFProcess.checkActivities(MWFProcess.java:283)
at org.compiere.wf.MWFActivity.setWFState(MWFActivity.java:280)
at org.compiere.wf.MWFActivity.run(MWFActivity.java:896)
at org.compiere.wf.MWFProcess.startWork(MWFProcess.java:505)
at org.compiere.wf.MWorkflow.start(MWorkflow.java:690)
at org.adempiere.util.ProcessUtil.startWorkFlow(ProcessUtil.java:319)
at org.compiere.apps.AbstractProcessCtl.startWorkflow(AbstractProcessCtl.java:392)
at org.compiere.apps.AbstractProcessCtl.run(AbstractProcessCtl.java:210)
I wanted to try to intercept the "WorkflowProcess" and use the method
SvrProcess.processUI.ask (String message, Callback <Boolean> callback)
but for example
Env.getProcessUI (Properties ctx)
returns NULL.
Do you know to tell me, please, how can you solve this?
Thanks in advance.
Andrew