Database insert/update before process start.

54 views
Skip to first unread message

Kanat Mergenbayev

unread,
Dec 4, 2021, 5:28:20 AM12/4/21
to iDempiere
Hi 

Could you please help me figuring out how to insert/update database change before i start process. I have a custom EventHandler which on save/change runs process. Inside of the process I am getting Bank object by it's id but it is empty.

public class BankEventHandler extends AbstractEventHandler {

CLogger log = CLogger.getCLogger(BankEventHandler.class);
@Override
protected void doHandleEvent(Event event) {
// TODO Auto-generated method stub
PO po = getPO(event);

if (po instanceof MBank) {
Properties context = Env.getCtx();
MBank bank = (MBank) po;
Integer tableId = bank.get_Table_ID();
Integer recordId = bank.get_ID();
Integer processId = MProcess.getProcess_ID("Single record sync", null);
MProcess process = MProcess.get(context, processId);
log.warning("table ID = " + tableId.toString() + " record ID = " + recordId.toString());
ProcessInfo pi = new ProcessInfo (process.getName(), process.getAD_Process_ID(), tableId, recordId);

pi.setAD_Client_ID(Env.getAD_Client_ID(context));
pi.setAD_User_ID(Env.getAD_User_ID(context));
log.warning("------ sync process started ------");
ServerProcessCtl.process(pi, Trx.get(bank.get_TrxName(), false));
if (pi.isError()) {
log.warning("------ sync process failed ------");
// fail("Error running Sync process" + (Util.isEmpty(pi.getSummary()) ? "" : " : " +pi.getSummary()));
return;
}
}
}

@Override
protected void initialize() {
// TODO Auto-generated method stub
registerTableEvent(IEventTopics.PO_AFTER_CHANGE, MBank.Table_Name);
registerTableEvent(IEventTopics.PO_AFTER_NEW, MBank.Table_Name);
}
}

public class SingleRecordSync extends SvrProcess {

private Integer tableId;
private Integer recordId;
@Override
protected void prepare() {
// TODO Auto-generated method stub

log.warning("------ warning message single record sync prepare ------");
ProcessInfo processInfo = this.getProcessInfo();
tableId = processInfo.getTable_ID();
recordId = processInfo.getRecord_ID();

}

@Override
protected String doIt() throws Exception {
// TODO Auto-generated method stub
log.warning("------ warning message single record sync do it ------");
log.warning("table ID = " + tableId.toString() + " record ID = " + recordId.toString());
Bank bank = new Bank();
bank.setRecordId(recordId);
bank.sync();

return null;
}
}

public class Bank {
private Integer recordId;
CLogger log = CLogger.getCLogger(Bank.class);

public void setRecordId(Integer id) {
this.recordId = id;
}
public void sync() {
MBank bank = MBank.get(this.recordId);
log.warning("--------- Documnet № " + bank.getC_Bank_ID() + " Bank name " + bank.getName()); 
}
}

16:26:47.648-----------> SingleRecordSync.doIt: ------ warning message single record sync do it ------ [223]
16:26:47.649-----------> SingleRecordSync.doIt: table ID = 296 record ID = 1000006 [223]
16:26:47.652===========> MBank.load: NO Data found for C_Bank_ID=1000006 [223]

16:26:47.800-----------> BankEventHandler.doHandleEvent: ------ sync process failed ------ [223]
16:26:47.801-----------> GridTable.saveWarning: SaveError -  [223]

And there is no data inside table c_bank

Heng Sin Low

unread,
Dec 4, 2021, 5:43:05 AM12/4/21
to idem...@googlegroups.com
you have to pass trxname to Bank and use new MBank(Env.getCtx, recordId, trxName) instead of MBank.get

--
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/302ade23-0084-40eb-8338-ead9f945434bn%40googlegroups.com.

Kanat Mergenbayev

unread,
Dec 5, 2021, 11:51:34 PM12/5/21
to iDempiere
Thank you.

суббота, 4 декабря 2021 г. в 16:43:05 UTC+6, hengsin:
Reply all
Reply to author
Forward
0 new messages