Create a Run base batch class in AX 7.0 / D365 F&O X++ code
Recently got a requirement to create a run base batch for enabling customer interest charges flag in credit and collection module. So, I created the below class.
Please change the code according to your requirement.
Step 1 - Copy and paste the below code in a new class
Step 2 - Create a new action button and attach the class to it.
Step 3 - Add the action button to a module. In my case, I added it to the Credit and Collection -> Periodic area.
Please change the code according to your requirement.
Step 1 - Copy and paste the below code in a new class
Step 2 - Create a new action button and attach the class to it.
Step 3 - Add the action button to a module. In my case, I added it to the Credit and Collection -> Periodic area.
class BCCustTransInterestUpdate extends RunBaseBatch { CustAccount custAccount;
// Dialog fields DialogField dlgCustAccount;
#define.CurrentVersion(1) #define.Version1(1) #localmacro.CurrentList custAccount #endmacro
protected boolean canRunInNewSession() { return true; }
public boolean canGoBatchJournal() { return true; }
public Object dialog() { DialogRunbase dialog = super();
dlgCustAccount = dialog.addFieldValue(extendedTypeStr(CustAccount), custAccount);
return dialog; }
public boolean getFromDialog() { custAccount = dlgCustAccount.value();
return super(); }
protected void new() { super(); }
public container pack() { return [#CurrentVersion,#CurrentList]; }
public boolean unpack(container packedClass) { Version version = RunBase::getVersion(packedClass); ;
switch (version) { case #CurrentVersion: [version,#CurrentList] = packedClass; break; default: return false; }
return true; }
public void updateCustIntrest() { Query query; QueryBuildDataSource qbds; QueryRun qr; CustTrans custTrans;
query = new Query(); qbds = query.addDataSource(tableNum(CustTrans)); if (custAccount) { qbds.addRange(fieldNum(CustTrans, AccountNum)).value(custAccount); }
qr = new QueryRun(query);
while (qr.next()) { custTrans = qr.get(tableNum(CustTrans));
if (custTrans.DueDate < DateTimeUtil::getToday(DateTimeUtil::getUserPreferredTimeZone()) && CustTable::find(custTrans.AccountNum).CustExcludeInterestCharges == false) { ttsbegin;
custTrans.selectForUpdate(true); custTrans.Interest = NoYes::Yes; custTrans.update();
ttscommit; } }
}
/// <summary> /// Contains the code that does the actual job of the class. /// </summary> public void run() { #OCCRetryCount if (! this.validate()) { throw error(""); }
try { ttsbegin;
this.updateCustIntrest();
ttscommit; } catch (Exception::Deadlock) { retry; } catch (Exception::UpdateConflict) { if (appl.ttsLevel() == 0) { if (xSession::currentRetryCount() >= #RetryNum) { throw Exception::UpdateConflictNotRecovered; } else { retry; } } else { throw Exception::UpdateConflict; } } }
public boolean runsImpersonated() { return true; }
server static BCCustTransInterestUpdate construct() { return new BCCustTransInterestUpdate(); }
static ClassDescription description() { return "Customer intrest update"; }
static void main(Args args) { BCCustTransInterestUpdate custTransIntrestUpdate; custTransIntrestUpdate = BCCustTransInterestUpdate::construct();
if (custTransIntrestUpdate.prompt()) { custTransIntrestUpdate.runOperation(); } }
}
Comments
Post a Comment