This post is machine-translated. The original post in german language can be found here.
These post applies to following version:
Dynamics AX 2012
Dynamics AX 2012
Thank you. I was able to get unreserved and then reserve working. |
Very helpful piece of code, thank you. |
Muchas gracias, resolviste mi problema |
Thanks for your code |
How can i use it in Custom service integration in D365 FO |
|
|
|
|
|
|
The are a lot of examples about how to reserve a sales order line. But i did not find an example, where the result of the reservation has been tested.
So i had to write some code for my own. I am checking the reserved value before executing my code, and afterwards. If the reserved quantity is still the same, my job seems to have failed.
static void reserveSalesLine(Args _args) { InventTransIdSumSingleStatus inventTransIdSumSingleStatus; SalesLine salesLine; InventMovement inventMovement; InventDim inventDim; InventDimParm inventDimParmCriteria; InventQtyReservPhysical oldReservedQty; InventQtyReservPhysical newReservedQty; InventUpd_Reservation inventUpd_Reservation; InventQty reserveQty; // Inline method to get current reserved quantity for specific inventDim InventQtyReservPhysical getReservedQty() { inventDimParmCriteria.initFromInventDim(inventDim); inventTransIdSumSingleStatus = InventTransIdSumSingleStatus::newTransOriginIdStatus(InventTransOriginSalesLine::findInventTransOriginId(salesLine.DataAreaId, salesLine.InventTransId), StatusReceipt::None, StatusIssue::ReservPhysical); inventTransIdSumSingleStatus.parmInventDimCriteria(inventDim); inventTransIdSumSingleStatus.parmInventDimParmCriteria(inventDimParmCriteria); return inventTransIdSumSingleStatus.reservPhysical(); } // Sales order line salesLine = SalesLine::findInventTransId('012431'); inventMovement = InventTrans::findTransId(salesLine.InventTransId).inventMovement(true); // Build inventDim-Record, where the quantity should be reserved inventDim.clear(); inventDim.InventSiteId = "1"; inventDim.InventLocationId = "12"; inventDim.wmsLocationId = "12"; inventDim = InventDim::findOrCreate(inventDim); // Get current physical reserved Quantity oldReservedQty = getReservedQty(); // Set quanity which should be reserved (negative values to reserve, postive value to unreserve) reserveQty = -2; inventUpd_Reservation = InventUpd_Reservation::newInventDim(inventMovement, inventDim, reserveQty, true); inventUpd_Reservation.updateNow(); // Get new reserved quantity newReservedQty = getReservedQty(); // Compare old and new reserved quantity to identify if reservation failed if(oldReservedQty == newReservedQty) { error("Reservation failed."); } }