Monday, December 15, 2008

Creating a report in X++ code and running

Here is a small job that demonstrates the main parts of build a report dynamically in X++ and launching it.

static void MakeReportJob(Args _args)
{
    #AOT
    str reportName = 'aaMakeReport';
    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 = ClassFactory.reportRunClass(new Args(reportName));
    run.init();
    run.run();
}

No comments:

How to identify the user that was used to change an object from AOT in AX2012

Get the object name for which we need to track these (user and date&time) information's. Login to SQL Server Management Studio an...