X++ code to write SysOperation framework using AOT Queries

Data Contract Class :

[DataContractAttribute]

class ARF_DispatchTrackOrderDataContract extends ARF_DispatchTrackQueryDataContract

{

    [DataMemberAttribute,

     AifQueryTypeAttribute('_encodedQuery',

     queryStr(ARF_SalesTableQuery))  // simple query name

    ]

    public str parmEncodedQuery(str _encodedQuery = encodedQuery)

    {

        return super(_encodedQuery);

    }


Base data contract

class ARF_DispatchTrackQueryDataContract

{

    str         encodedQuery;

    QueryName   queryName;

 

    public Query createQuery()

    {

        Query query = new Query(this.queryName());

        return Query;

    }


    public str parmEncodedQuery(str _encodedQuery = encodedQuery)

    {

        encodedQuery = _encodedQuery;

        return encodedQuery;

    }


    public Query Query(Query _query = null)

    {

        if (prmisDefault(_query))

        {

            return

    ARF_DispatchTrackQueryDataContract::DataContractQuery(this);

        }

        return ARF_DispatchTrackQueryDataContract::DataContractQuery(

            this,

            _query);

    }


    public final str queryName()

    {

        if (queryName == '')

        {

            queryName =

    ARF_DispatchTrackQueryDataContract::DataContractQueryName(this);

        }

        return queryName;

    }


    public static Query DataContractQuery(

        ARF_DispatchTrackQueryDataContract

            _ARF_DispatchTrackQueryDataContract,

        Query _query = null)

    {

        if (prmisDefault(_query) == false)

        {

            if (_query != null)

            {

                _ARF_DispatchTrackQueryDataContract.parmEncodedQuery(

        SysOperationHelper::base64Encode(_query.pack()));

            }

            else

            {

                _ARF_DispatchTrackQueryDataContract.parmEncodedQuery('');

            }

        }

        if (_ARF_DispatchTrackQueryDataContract.parmEncodedQuery()

            == '')

        {

            _ARF_DispatchTrackQueryDataContract.parmEncodedQuery(

                SysOperationHelper::base64Encode(

        _ARF_DispatchTrackQueryDataContract.createQuery().pack()));

        }

 

        return new Query(SysOperationHelper::base64Decode(

            _ARF_DispatchTrackQueryDataContract.parmEncodedQuery()));

    }


    public static queryName DataContractQueryName(

        ARF_DispatchTrackQueryDataContract _dataContract)

    {

        DictMethod  dictMethod = new DictMethod(

            UtilElementType::ClassInstanceMethod,

            classIdGet(_dataContract),

            methodStr(ARF_DispatchTrackQueryDataContract,

                parmEncodedQuery));

        

        AifQueryTypeAttribute  aifQueryTypeAttribute =

            dictMethod.getAttribute(

                classStr(AifQueryTypeAttribute));


        queryName queryName = '';

        if (aifQueryTypeAttribute != null)

        {

            queryName = aifQueryTypeAttribute.queryName();

        }

 

        return queryName;

    }

}


Service Class :

class ARF_DispatchTrackOrderService

{

    public void GetSalesDetails(

        ARF_DispatchTrackOrderDataContract _dataContract)

    {

        QueryRun queryRun = new QueryRun(_dataContract.Query());

        ARFDispatchTrackOrders   dispatchTrackOrders;


        while (queryRun.next())

        {

            SalesTable salesTable = queryRun.get(tableNum(SalesTable));

            ttsbegin;

            dispatchTrackOrders.ARFSalesId     = salesTable.SalesId;

            dispatchTrackOrders.isARFScheduled = salesTable.ARF_Scheduled;

            dispatchTrackOrders.Processed      = false;

            dispatchTrackOrders.insert();

            ttscommit;   

        }

    }

}


Controller Class :

class ARF_DispatchTrackOrderController extends SysOperationServiceController

{

    protected void new()

    {

        super(classStr(ARF_DispatchTrackOrderService), methodStr(ARF_DispatchTrackOrderService, GetSalesDetails), SysOperationExecutionMode::Synchronous);

    }


    /// <summary>

    /// To construct LocationRecordsController class

    /// </summary>

    public static ARF_DispatchTrackOrderController construct(SysOperationExecutionMode _executionMode = SysOperationExecutionMode::Synchronous)

    {

        ARF_DispatchTrackOrderController controller;

        controller = new ARF_DispatchTrackOrderController();

        controller.parmExecutionMode(_executionMode);

        return controller;

    }


    /// <summary>

    /// Main method of LocationRecordsController class

    /// </summary>

    public static void main(Args _args)

    {

        ARF_DispatchTrackOrderController controller;

        controller = ARF_DispatchTrackOrderController::construct();

        controller.parmArgs(_args);

        controller.startOperation();

    }


    /// <summary>

    /// To set caption of a batch job

    /// </summary>

    public ClassDescription defaultCaption()

    {

        return "Location Records";

    }


}

Comments

Popular posts from this blog

How to Create a wizard in x++ d365

how to post trade agreement journals automatically using x++ code

x++ code to submit and approve and reject the invent movement workflow in d365 F&O