Background batch job template without dialog box

Can be used for calculations in background to avoid blocking of main process. For example to prind invoice to PDF file and then send it as business event.

/// <summary>
/// Prints sales invoice to a PDF file
/// </summary>
class VKSalesInvoiceAutoPrintBatch  extends RunBaseBatch
{
    CustInvoiceJour               custInvoiceJour;
    RefRecId                   custInvoiceJourRecId;

    #define.CurrentVersion(1)
    #localmacro.CurrentList
        custInvoiceJourRecId
    #endmacro

    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 static VKSalesInvoiceAutoPrintBatch construct()
    {
        return new VKSalesInvoiceAutoPrintBatch();
    }

    /// <summary>
    /// Class description
    /// </summary>
    /// <returns>Class description</returns>
    public client server static ClassDescription description()
    {
        return "SalesInvoiceAutomatedBatchPrint";
    }

    public ClassDescription caption()
    {
        return "SalesInvoiceAutomatedBatchPrint";
    }

    public boolean mustGoBatch()
    {
        return true;
    }

    protected boolean canRunInNewSession()
    {
        return true;
    }

    public boolean canGoBatchJournal()
    {
        return true;
    }

    public boolean runsImpersonated()
    {
        return true;
    }

    public boolean showDialog()
    {
        return false;
    }

    private RefRecId parmCustInvoiceJourRecId(RefRecId _custInvoiceJourRecId = custInvoiceJourRecId)
    {
        custInvoiceJourRecId = _custInvoiceJourRecId;

        return custInvoiceJourRecId;
    }

    public void run()
    {
        custInvoiceJour = CustInvoiceJour::findRecId(this.parmCustInvoiceJourRecId());

        if (custInvoiceJour)
        {
            // Do something
        }

        info("@SYS335180");
    }

    public static void main(Args _args)
    {
        VKSalesInvoiceAutoPrintBatch batch = VKSalesInvoiceAutoPrintBatch::construct();
        CustInvoiceJour custInvoiceJour;

        if (!_args || !_args.record())
        {
            return;
        }

        if (_args.record().TableId == tableNum(CustInvoiceJour))
        {
            custInvoiceJour = _args.record();
            batch.parmCustInvoiceJourRecId(custInvoiceJour.RecId);
        }
        else
        {
            return;
        }

        batch.batchInfo().parmBatchExecute(NoYes::Yes);
        

        batch.prompt();
        //run is not needed after prompt, as it will always run in batch, and run will be called from batch framework
        //batch.run();
    }
}
To schedule the main process needs to call the main method:
VKSalesInvoiceAutoPrintBatch::main();


 

Search

About

DaxOnline.org is free platform that allows you to quickly store and reuse snippets, notes, articles related to Dynamics AX.

Authors are allowed to set their own AdSense units and "buy me a coffee" link.
Join us.

Blog Tags