Ask for reactivate Order - PROBLEM

110 views
Skip to first unread message

Andrea Checchia

unread,
Feb 28, 2019, 2:52:38 AM2/28/19
to iDempiere
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

Nicolas Micoud

unread,
Feb 28, 2019, 3:31:07 AM2/28/19
to iDempiere
Hi,

I don't think it is possible to open a popup from an Event class.
I see 2 options :
 #1 : use a process instead
 #2 : customize directly WDocActionPanel and do something similar to the line 364 : if(clientInfo.isConfirmOnDocClose() || clientInfo.isConfirmOnDocVoid()) ; ugly but it should work

Regards,

Nicolas

Andrea Checchia

unread,
Feb 28, 2019, 7:34:06 AM2/28/19
to iDempiere
Thank you Nicolas for your answer.

I will try the solution n. #2 and I'll see if I can solve the problem.

Thanks a lot.
Andrew.

Andrea Checchia

unread,
Mar 4, 2019, 2:45:21 AM3/4/19
to iDempiere
Hi Nicolas,

Thanks a lot. I followed your advice (solution #2) and it worked !!
Thanks again.

Andrew.

Il giorno giovedì 28 febbraio 2019 09:31:07 UTC+1, Nicolas Micoud ha scritto:

Heng Sin Low

unread,
Mar 4, 2019, 6:05:38 PM3/4/19
to idem...@googlegroups.com
private synchronized boolean isAskDialogRunning() {
return isAskRunning;
}

private synchronized void askDialogClosed() {
isAskRunning  = false;
}

boolean askResult = false;
AEnv.executeAsyncDesktopTask(() -> {
FDialog.ask(..., result -> {
askResult = result;
askDialogClosed  ();
});
});
while ( isAskDialogRunning  ())
{
Thread.sleep(100);
}

--
You received this message because you are subscribed to the Google Groups "iDempiere" group.
To unsubscribe from this group and stop receiving emails from it, send an email to idempiere+...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/idempiere/67344a30-7788-4ecc-8dd8-c85cc3f1a3a2%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
Reply all
Reply to author
Forward
0 new messages