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
Post a Comment