Friday, September 9, 2022

SysOperation Framework example in Dynamics 365 FO

Controller class:

class MCOCancelSalesOrderController extends SysOperationServiceController

{

    protected void new()

    {

        super();

        this.parmClassName(classStr(MCOCancelSalesOrderService));

        this.parmMethodName(methodStr(MCOCancelSalesOrderService, processOperation));

        this.parmDialogCaption("Batch operation dialog title");

    }

    public ClassDescription caption()

    {

        return "Batch operation task description";

    }

    public static void main(Args args)

    {

        MCOCancelSalesOrderController controller;

        controller = new MCOCancelSalesOrderController();

        controller.startOperation();

    }

}



Contract class:

[

DataContractAttribute

]

public class MCOCancelSalesOrderContract implements SysOperationValidatable

{

    TransDate startShipDate, cancelShipDate;

    [

        DataMemberAttribute(identifierStr(StatrShipDate)),

        AifCollectionTypeAttribute('startShipDate', Types::Date),

        SysOperationLabelAttribute(literalStr("@MCO:MCOStartshipdate")),

        SysOperationDisplayOrderAttribute('1')

    ]

    public transdate parmstartshipdate (TransDate _startShipDate = startShipDate)

    {

        startShipDate = _startShipDate;

        return startShipDate;

    }

    [

        DataMemberAttribute(identifierStr(CancelShipDate)),

        AifCollectionTypeAttribute('cancelShipDate', Types::Date),

        SysOperationLabelAttribute(literalStr("@MCO:MCOCancelshipdate")),

        SysOperationDisplayOrderAttribute('2')

    ]

    public transdate parmcancelshipdate (TransDate _cancelShipDate = cancelShipDate)

    {

        cancelShipDate = _cancelShipDate;

        return cancelShipDate;

    }

    public boolean validate()

    {

        boolean isValid = true;

        if (!startShipDate)

        {

            isValid = checkFailed(strFmt("@SYS84753", "@MCO:MCOStartshipdate"));

        }

        if (!cancelShipDate)

        {

            isValid = checkFailed(strFmt("@SYS84753", "@MCO:MCOCancelshipdate"));

        }  

        return isValid;

    }

}



Service class:

class MCOCancelSalesOrderService extends SysOperationServiceBase

{

    TransDate       StartShipDate, CancelShipDate;

    public void processOperation(MCOCancelSalesOrderContract _contract)

    {

        StartShipDate  = _contract.parmstartshipdate();

        CancelShipDate = _contract.parmcancelshipdate();

        if(StartShipDate && CancelShipDate)

        {

            Info("Both dates entered.");

        }

    }

}

Link

Link