Hi Friends,
ARGS is your friend in the world of AX (me also :) ). It allows you to pass records, the calling locations (form, report, query etc) , ENUMS and the list goes on!
Simple declaration of args
Args args = new Args();
Now lets try passing args an record.
select firstonly custTable where custTable.AccountNum == ‘XXXX’
if(custTable)
{
args.record(custTable);
}
Now lets view a snippet of code that passes in a record and runs a report using the record passed in.
I- Create an instance of the report run class.
Create a new Args instance to hold all of this information.
Pass the name of the report.
Instantiate the report run object and call the init and and run methods of the report.
II- Next override the init method of the report and put a condition that checks to see if a record was passed to the report from the args object. If so do not allow the user to be interactive with the report and sent the report straight to the screen.
III- Set a report variable eHeader to the record that was passed to the report. If there is no calling record to the report meaning the report is being launched from a menu or elsewhere besides a place with a calling record then allow interaction of the report query for the users to select the range criteria they want to use.
IV- Then override the fetch method and keep the super in place to allow the standard query to run however before the super use a condition to determine if a record has been passed into the report. If so then set a query of a key field to the a field from the record passed in.
V- You can use args to do the same with forms as well
You can pass in objects such as maps to run reports I have done this as well and I find it very helpful and useful
ARGS is your friend in the world of AX (me also :) ). It allows you to pass records, the calling locations (form, report, query etc) , ENUMS and the list goes on!
Simple declaration of args
Args args = new Args();
Now lets try passing args an record.
select firstonly custTable where custTable.AccountNum == ‘XXXX’
if(custTable)
{
args.record(custTable);
}
Now lets view a snippet of code that passes in a record and runs a report using the record passed in.
I- Create an instance of the report run class.
Create a new Args instance to hold all of this information.
Pass the name of the report.
Instantiate the report run object and call the init and and run methods of the report.
II- Next override the init method of the report and put a condition that checks to see if a record was passed to the report from the args object. If so do not allow the user to be interactive with the report and sent the report straight to the screen.
III- Set a report variable eHeader to the record that was passed to the report. If there is no calling record to the report meaning the report is being launched from a menu or elsewhere besides a place with a calling record then allow interaction of the report query for the users to select the range criteria they want to use.
IV- Then override the fetch method and keep the super in place to allow the standard query to run however before the super use a condition to determine if a record has been passed into the report. If so then set a query of a key field to the a field from the record passed in.
V- You can use args to do the same with forms as well
You can pass in objects such as maps to run reports I have done this as well and I find it very helpful and useful
void printPickList(wfsEMPickListHeader wfsEMPickListHeader)
{
Args args = new args();
ReportRun reportRun;
;
args.name(reportStr(wfsEMExportPickList));
args.caller(this);
args.record(wfsEMPickListHeader);
reportRun = classfactory.reportRunClass(args);
reportRun.init();
reportRun.run();
}
public void init()
{
super();
if(element.args().record())
{
this.report().interactive(false);
this.query().interactive(false);
this.printJobSettings().preferredTarget(PrintMedium::Screen);
eHeader = element.args().record();
}
else
{
this.report().interactive(true);
this.query().interactive(true);
}
}
public boolean fetch()
{
boolean ret;
if(element.args().record())
{
element.query().dataSourceTable(tablenum(wfsEMPickListHeader)).
addRange(fieldnum(wfsEMPickListHeader,PickListId)).value(eHeader.PickListId);
}
ret = super();
return ret;
}
void wfsRMRunManualTruckLoadIdForm()
{
wfsWhseUser wfsWhseUser;
FormRun formRun;
Args args = new Args();
boolean ret = false;
;
args.record(this);
formRun = new MenuFunction(menuitemdisplaystr(wfsManualTruckLoadSelection),
MenuItemType::Display).create(args);
formRun.run();
formRun.wait();
}
-Harry