With that, we can to create and modify our reports dynamically, and adjust its properties at runtime.
#AOT
str reportName = 'MakeReport';
tableid custTableId = tablenum(CustTable);
TreeNode reportNode = TreeNode::findNode(#ReportsPath);
Report areport;
ReportDesign design;
ReportAutoDesignSpecs specs;
ReportSection section;
ReportRun run;
;
areport.query().addDataSource(custTableId);
section = specs.addSection(ReportBlockType::Body, custTableId);
section.addControl(custTableId, fieldnum(CustTable, AccountNum));
section.addControl(custTableId, fieldnum(CustTable, Name));
areport.query().interactive(false);
areport.AOTcompile();
run.init();
run.run();
}
static void MakeReportAtRuntime(Args _args)
{#AOT
str reportName = 'MakeReport';
tableid custTableId = tablenum(CustTable);
TreeNode reportNode = TreeNode::findNode(#ReportsPath);
Report areport;
ReportDesign design;
ReportAutoDesignSpecs specs;
ReportSection section;
ReportRun run;
;
//Delete the report if it already exists
areport = reportNode.AOTfindChild(reportName); if (areport)
areport.AOTdelete(); //Build the report
areport = reportNode.AOTadd(reportName);areport.query().addDataSource(custTableId);
design = areport.addDesign('Design');
specs = design.autoDesignSpecs();section = specs.addSection(ReportBlockType::Body, custTableId);
section.addControl(custTableId, fieldnum(CustTable, AccountNum));
section.addControl(custTableId, fieldnum(CustTable, Name));
//Now the report will not prompt for user input
areport.interactive(false);areport.query().interactive(false);
areport.AOTcompile();
//Run the report
run = ClassFactory.reportRunClass(new Args(reportName));run.init();
run.run();
}