Skip to content

Instantly share code, notes, and snippets.

@anozimada
Created April 7, 2023 13:37
Show Gist options
  • Save anozimada/255167d8bb26efaf3667b7635e01d67f to your computer and use it in GitHub Desktop.
Save anozimada/255167d8bb26efaf3667b7635e01d67f to your computer and use it in GitHub Desktop.
Just testing Ask for Input in process
package org.idempiere.process;
import java.util.ArrayList;
import java.util.List;
import org.adempiere.util.Callback;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.window.FDialog;
import org.compiere.model.MColumn;
import org.compiere.model.MLookup;
import org.compiere.model.MLookupFactory;
import org.compiere.model.MOrg;
import org.compiere.process.SvrProcess;
import org.compiere.util.AdempiereUserError;
import org.compiere.util.DisplayType;
@org.adempiere.base.annotation.Process
public class AskInputProcess extends SvrProcess {
protected void prepare() {
}
protected String doIt() throws Exception {
final List<Integer> selectedList = new ArrayList<>();
MLookup lookup = MLookupFactory.get(getCtx(), 0, 0, MColumn.getColumn_ID("C_Order", "AD_Org_ID"),
DisplayType.TableDir);
FDialog.askForInput("Select an Org:", lookup, DisplayType.TableDir, new Callback<Object>() {
@Override
public void onCallback(Object result) {
if (result != null)
selectedList.add((Integer) result);
}
}, AEnv.getDesktop(), 0);
int timeoutInSeconds = 10;
int sleepms = 200;
int maxcycles = timeoutInSeconds * 1000 / sleepms;
int cycles = 0;
while (selectedList.isEmpty()) {
try {
Thread.sleep(sleepms);
} catch (InterruptedException e) {
}
cycles++;
if (cycles > maxcycles)
throw new AdempiereUserError("Timeout waiting for user answer");
}
addLog("Selected Org: " + MOrg.get(selectedList.get(0)).getName());
return "@OK@";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment