The RunBase framework provides a standardized approach to creating processes and batch jobs in Microsoft Dynamics AX.
The framework is implemented by the RunBase application class and supplies many features, which include the following:
- Query
- Dialog, with persistence of the last values entered by the user
- Validate
- Batch execution for users to schedule jobs. This functionality uses the RunBaseBatch class) and the pack and unpack methods with versioning.
- Progress bar
- Run
- Client/server-optimized
Following are descriptions of some of the most important RunBase methods.
You must create a static description method that returns a class description—the class's role in the UI.
The description method must have the RunAs property set to Called or the equivalent behavior. If the class is defined as client or server, define the method as client server.
For example:
client server static ClassDescription description()
{
return "@SYS54106";
}
The RunBase.run method is the central method of the class. The job is done in the run method.
Skeleton:
void run() { // Local declarations. try { this.progressInit ttsBegin; // Reset the variables that were changed in the transaction. ... // Do the job. while select forUpdate myTrans... { progress.incCount(); progress.setText ... ... ttsCommit; } catch (Exception::Deadlock) { retry; } }
Place code that modifies the RunBase query in the RunBaseReport.initQuery method. The RunBaseReport.initQueryRun method calls initQuery.
If the query in a RunbaseReport depends on values from the dialog, call this.initQueryRun after the data is moved from the fields to the variables.
Example
private boolean getFromDialog() { ; perDate = dialogDate.value(); this.initQueryRun(); return super(); }
The initQueryRun method in the previous code calls initQuery.
private Query initQuery() { query query = super(); queryBuildRange qbr; ; qbr = query.dataSourceTable( tableNum(InventTrans)).findRange( fieldNum(InventTrans,DatePhysical)); if (!qbr) { qbr = query.dataSourceTable( tableNum(InventTrans)).addRange( fieldNum(InventTrans,DatePhysical)); } qbr.value(SySQuery::range(prevYr(PerDate),PerDate)); qbr = query.dataSourceTable( tableNum(InventTrans)).findRange( fieldNum(InventTrans,DateFinancial)); if (!qbr) { qbr = query.dataSourceTable( tableNum(InventTrans)).addRange( fieldNum(InventTrans,dateFinancial)); } qbr.value(SysQuery::value(perDate+1) + '..' + ',' + sysQuery::valueEmptyString()); return query; }
RunBase class: The RunBase class is a framework for classes that need a dialog for user interaction and that need the dialog values to be saved per user. The RunBase application framework runs or batches an operation. An operation is a unit of work, such as the posting of a sales order or calculation of a master schedule.The RunBase framework uses the Dialog framework to prompt a user for data input. It uses the SysLastValue framework to persist usage data and the Operation Progress framework to show operation progress.
class RunBase extends Object implements SysSaveable, SysRunable
RunBaseBatch class: All jobs that must be able to run in a batch must inherit from this class. The RunBaseBatch framework extends the RunBase framework, and X++ classes that extend this framework can have their operations enlisted in the batch queue.
class RunBaseBatch extends RunBase implements Batchable
RunBaseReport class: The RunBaseReport class makes all reports batchable and creates a standard dialog box.
class RunBaseReport extends RunBaseBatch
This class is instantiated through the SysReportRun Class. It should be used by all reports. The purpose of the class is to:
- Make all reports batchable
- Create a standard dialog
If you are creating more complex reports, it might be necessary to inherit from this class. If this is the case, you must create the following methods:
lastValueElementName(). Returns the report name.
description(). Static.
main(). Static.
No comments:
Post a Comment