X++ code to create sales order with dialog box parameters (Customer account number , site id, warehouse id , item number ) in D365 F & O

 final class BASSalesOrderCreation extends RunBase

{

    DialogField CusAccount, itemNumber, inventSiteid, inventLocationid;


    CustAccount custAccount;


    ItemId itemId;


    InventSiteId SiteId;


    InventLocationId LocationId;


    SalesTable salestable;


    Object Dialog()

    {

        Dialog dialog;

        dialog = super();

        // Set a title fordialog

        dialog.caption( 'Sales Order Creation');

        // Add a new field to Dialog

        CusAccount = dialog.addField(extendedTypeStr(CustAccount), 'Customer Account' );


        itemNumber = dialog.addField(extendedTypeStr(ItemId), 'Item Number' );


        inventSiteid = dialog.addField(extendedTypeStr(InventSiteId), 'Site ID' );


        inventLocationid = dialog.addField(extendedTypeStr(InventLocationId), 'Warehouse ID' );


        return dialog;

    }


    public boolean getFromDialog()

    {

           

        // Retrieve values from Dialog

        custAccount =CusAccount.value();


        itemId=itemNumber.value();


        SiteId=inventSiteid.value();


        LocationId=inventLocationid.value();


        return super();

    }


    public void run()

    {

          //Data Entities Declaration

        SalesOrderHeaderV2Entity soHeaderEntity;

        SalesOrderLineV2Entity soLineEntity;


        //Sales Order Header Creation


        soHeaderEntity.initValue();

        soHeaderEntity.OrderingCustomerAccountNumber = custAccount;

        soHeaderEntity.insert();


        //Getting saleId to create lines

        SalesId salesId = soHeaderEntity.SalesOrderNumber;


        // Sales Order Line Creation


        soLineEntity.initValue();

        soLineEntity.SalesOrderNumber = salesId;

        soLineEntity.ItemNumber = itemId;

        soLineEntity.ShippingSiteId = SiteId;

        soLineEntity.ShippingWarehouseId = LocationId;

        soLineEntity.insert();


        Info(strFmt("Sales order %1 has been created",soHeaderEntity.SalesOrderNumber));


        //Updating sales order by SalesFromLetter class


        SalesFormLetter salesFormLetter;

        

        SalesTable salesUpate = SalesTable::find(salesId);


        //Posting SO Confirmation,I guess its mandatory

        //You cannot do invoice without doing SO confirm

        salesFormLetter = SalesFormLetter::construct(DocumentStatus::Confirmation);

        salesFormLetter.update(SalesTable::find(salesId));


        //Posting Packing slip

        salesFormLetter = SalesFormLetter::construct(DocumentStatus::PackingSlip);

        salesFormLetter.update(SalesTable::find(salesId));

        info('Packing slip posted');


        ////Posting SO Invoice

        salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice);

        salesFormLetter.update(SalesTable::find(salesId));

        info('Invoice posted');


            

    }


    public static void main(Args _args)

    {

        BASSalesOrderCreation salesorder = new BASSalesOrderCreation();

        if(salesorder.prompt())

        {

            salesorder.run();

        }



    }


}

Comments

Popular posts from this blog

How to Create a wizard in x++ d365

X++ code to CREATE AND POST A TRADE AGREEMENT IN MICROSOFT DYNAMICS 365 in D365 F & O

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