Simple example for a business events

 Requirement :- Here we are calling a business event whenever there is update in sales quantity. We are using

Contract class :- To give message to user 
Business event class :-  Which is called whenever it is needed 
Extension class :- Overriding update() of SalesLine table.

This code will help you to create business event and calles the same whenever there is change in sales quantity.

Contract class :- 

/// <summary>

/// The data contract for a <c>HFGIOMSalesLineUpdateBusinessEvent</c>.

/// </summary>

[DataContract]

public final class HFGIOMSalesLineUpdateBusinessEventContract extends BusinessEventsContract

{

    private SalesIdBase      salesId;

    private LineNum          lineNumber;

    private ItemIdSmall      itemId;

    private InventQty        qtyOrdered;

    private SalesQty         qtyDelivered;

    private SalesQty         remainSalesPhysical;

    private TransDate        receiptDateConfirmed;

    private TransDate        receiptDateConfirmedIso;

    


    /// <summary>

    /// Creates a <c>HFGIOMSalesLineUpdateBusinessEventContract</c> from a <c>salesLine</c> record.

    /// </summary>

    /// <param name = "_SalesLine">A <c>CustInvoiceJour</c> record.</param>

    /// <returns>A <c>HFGIOMSalesLineUpdateBusinessEventContract</c>.</returns>

    public static HFGIOMSalesLineUpdateBusinessEventContract newFromSalesLine(SalesLine _salesLine)

    {

        var contract = new HFGIOMSalesLineUpdateBusinessEventContract();

        contract.initialize(_salesLine);


        return contract;

    }


    private void initialize(SalesLine _salesLine)

    {

        //CustParameters custParameters = CustParameters::find();

        salesId                 = _salesLine.SalesId;

        lineNumber              = _salesLine.LineNum;

        itemId                  = _salesLine.ItemId;

        qtyOrdered              = _salesLine.QtyOrdered;

        qtyDelivered            = _salesLine.deliveredInTotal();

        remainSalesPhysical     = _salesLine.RemainInventPhysical;

        receiptDateConfirmed    = _salesLine.ReceiptDateConfirmed;

        receiptDateConfirmedIso = _salesLine.ReceiptDateConfirmed;


    }


    private void new()

    {

    }


    [DataMember('SalesOrder'), BusinessEventsDataMember("Sales order")]

    public SalesIdBase parmSaleOrderId(SalesIdBase _salesId = salesId)

    {

        salesId = _salesId;


        return salesId;

    }


    [DataMember('LineNumber'), BusinessEventsDataMember("Line number")]

    public LineNum parmLineNum(LineNum _lineNumber = lineNumber)

    {

        lineNumber = _lineNumber;


        return lineNumber;

    }


    [DataMember('ItemId'), BusinessEventsDataMember("Item number")]

    public itemId parmItemId(itemId _itemId = itemId)

    {

        itemId = _itemId;


        return itemId;

    }


    [DataMember('qtyOrdered'), BusinessEventsDataMember("Quautity ordered")]

    public InventQty parmqtyOrdered(InventQty _qtyOrdered = qtyOrdered)

    {

        qtyOrdered = _qtyOrdered;


        return qtyOrdered;

    }


    [DataMember('qtyDelivered'), BusinessEventsDataMember("Quantity delivered")]

    public SalesQty parmqtyDelivered(SalesQty _qtyDelivered = qtyDelivered)

    {

        qtyDelivered = _qtyDelivered;


        return qtyDelivered;

    }


    [DataMember('RemainingPhysicalQty'), BusinessEventsDataMember("@AccountsReceivable:qtyDelivered")]

    public SalesQty parmRemainingPhysical(SalesQty _remainSalesPhysical = remainSalesPhysical)

    {

        remainSalesPhysical = _remainSalesPhysical;


        return remainSalesPhysical;

    }


    [DataMember('ReceiptDateConfirmed'), BusinessEventsDataMember("Receip date confirmed")]

    public TransDate parmReceiptDateConfirmed(TransDate _receiptDateConfirmed = receiptDateConfirmed)

    {

        receiptDateConfirmed = _receiptDateConfirmed;


        return receiptDateConfirmed;

    }


    [DataMember('ReceiptDateConfirmedISO'), BusinessEventsDataMember("Receipt date confirmed ISO")]

    public TransDate parmReceiptDateConfirmedIso(TransDate _receiptDateConfirmedIso = receiptDateConfirmedIso)

    {

        receiptDateConfirmedIso = _receiptDateConfirmedIso;


        return receiptDateConfirmedIso;

    }

}

Business event class :- 

/// <summary>
/// Sales line update business event.
/// </summary>
[BusinessEvents(classStr(HFGIOMSalesLineUpdateBusinessEventContract),
    'HFGIOMSalesLineUpdateBusinessEventDescription',

    'AccountsReceivable:HFGIOMSalesLineUpdateBusinessEventDescription', ModuleAxapta::SalesOrder)]
public final class HFGIOMSalesLineUpdateBusinessEvent extends BusinessEventsBase
{
    private SalesLine salesLine;
    private SalesLine parmSalesLine(SalesLine _SalesLine = SalesLine)
    {
        SalesLine = _SalesLine;
        return SalesLine;
    }
    /// <summary>
    /// Creates a <c>HFGIOMSalesLineUpdateBusinessEvent</c> from a <c>CustInvoiceJour</c> record.
    /// </summary>
    /// <param name = "_SalesLine"> A <c>CustInvoiceJour</c> record.</param>
    /// <returns>A <c>HFGIOMSalesLineUpdateBusinessEvent</c>.</returns>
    public static HFGIOMSalesLineUpdateBusinessEvent newFromSalesLine(SalesLine _SalesLine)
    {
        HFGIOMSalesLineUpdateBusinessEvent businessEvent = new HFGIOMSalesLineUpdateBusinessEvent();
        businessEvent.parmSalesLine(_SalesLine);
        return businessEvent;
    }
    private void new()
    {
    }
    [Wrappable(true), Replaceable(true)]
    public BusinessEventsContract buildContract()
    {
        return HFGIOMSalesLineUpdateBusinessEventContract::newFromSalesLine(SalesLine);
    }
}

Extension class :- 

[ExtensionOf(tableStr(SalesLine))]
final class HFGIOMSalesLine_Extension
{
    public void  update(boolean  _dropInvent,
                        Common   _childBuffer, 
                        boolean  _updateOrderLineOfDeliverySchedule,
                        boolean  _mcrAutoallocate,
                        boolean  _cameFromCreate,
                        boolean  _promptSuppItem
                        )
    {
        SalesLine     salesLine            = this.orig();
        InventQty     qtyOrdered           = salesLine.QtyOrdered;
        SalesQty      remainingPhysicalQty = salesLine.RemainSalesPhysical;
        TransDate     receiptDateConfirmed = salesLine.ReceiptDateConfirmed;

        next update(_dropInvent,_childBuffer,_updateOrderLineOfDeliverySchedule,
            _mcrAutoallocate,_cameFromCreate,_promptSuppItem);

        if(this.QtyOrdered != qtyOrdered || this.RemainSalesPhysical != remainingPhysicalQty
            || this.ReceiptDateConfirmed != receiptDateConfirmed)
        {
            //calling HFGIOMSalesLineUpdateBusinessEvent
            HFGIOMSalesLineUpdateBusinessEvent::newFromSalesLine(this).send();
        }

    }

}

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 CREATE AND POST A TRADE AGREEMENT IN MICROSOFT DYNAMICS 365 in D365 F & O