Hi, everyone! I’m working on a custom C# service allowing my company to use the “Manual Reservations for Customer Order Line” functionality with custom reservation location logic programmatically. Reason being our business analysts have determined the native “Reserve Customer Order Lines” IFS functionality doesn’t work for our business needs as we need to be able to choose the inventory location to reserve from. I’ve been told there are ways in native IFS functionality to somewhat determine how the reservation locations get chosen. But that option doesn’t work for us, either.
Currently, my process for reserving customer order lines looks like this:
- Grab reservation locations from custom PL/SQL logic. This is a sub second operation the majority of the time.
- Loop through all of the reservation locations, executing a reservation for each location using the following API endpoints:
- ManualReservationsForShipmentAndCustomerOrderLine.svc/ManualReservationsForShipmentAndCustomerOrderLineSet(SourceRef1='{SourceRef1}',SourceRef2Db='{SourceRef2Db}',SourceRef3Db='{SourceRef3Db}',SourceRef4Db='{SourceRef4Db}',SourceRefType=IfsApp.ManualReservationsForShipmentAndCustomerOrderLine.LogisticsSourceRefTypeShipment'{SourceRefType}',ShipmentId={ShipmentId},Contract='{Contract}')
- ManualReservationsForShipmentAndCustomerOrderLine.svc/ManualReservationsForShipmentAndCustomerOrderLineSet(SourceRef1='{SourceRef1}',SourceRef2Db='{SourceRef2Db}',SourceRef3Db='{SourceRef3Db}',SourceRef4Db='{SourceRef4Db}',SourceRefType=IfsApp.ManualReservationsForShipmentAndCustomerOrderLine.LogisticsSourceRefTypeShipment'{SourceRefType}',ShipmentId={ShipmentId},Contract='{Contract}')/InventoryPartInStockArray(Contract='{InventoryPartInStock_Contract}',PartNo='{InventoryPartInStock_PartNo}',ConfigurationId='{InventoryPartInStock_ConfigurationId}',LocationNo='{InventoryPartInStock_LocationNo}',LotBatchNo='{InventoryPartInStock_LotBatchNo}',SerialNo='{InventoryPartInStock_SerialNo}',EngChgLevel='{InventoryPartInStock_EngChgLevel}',WaivDevRejNo='{InventoryPartInStock_WaivDevRejNo}',ActivitySeq={InventoryPartInStock_ActivitySeq},HandlingUnitId={InventoryPartInStock_HandlingUnitId},SourceRef1='{InventoryPartInStock_SourceRef1}',SourceRef2Db='{InventoryPartInStock_SourceRef2Db}',SourceRef3Db='{InventoryPartInStock_SourceRef3Db}',SourceRef4Db='{InventoryPartInStock_SourceRef4Db}',SourceRefTypeDb='{InventoryPartInStock_SourceRefTypeDb}',ShipmentId={InventoryPartInStock_ShipmentId})
- ManualReservationsForShipmentAndCustomerOrderLine.svc/InventoryPartInStockSet(Contract='{Contract}',PartNo='{PartNo}',ConfigurationId='{ConfigurationId}',LocationNo='{LocationNo}',LotBatchNo='{LotBatchNo}',SerialNo='{SerialNo}',EngChgLevel='{EngChgLevel}',WaivDevRejNo='{WaivDevRejNo}',ActivitySeq={ActivitySeq},HandlingUnitId={HandlingUnitId},SourceRef1='{SourceRef1}',SourceRef2Db='{SourceRef2Db}',SourceRef3Db='{SourceRef3Db}',SourceRef4Db='{SourceRef4Db}',SourceRefTypeDb='{SourceRefTypeDb}',ShipmentId={ShipmentId})/IfsApp.ManualReservationsForShipmentAndCustomerOrderLine.InventoryPartInStock_ReserveManually
The main problem we’re having right now is speed with the API calls. Here are the main reasons why: IFS locks down the customer order record when reserving any of the customer order lines underneath it (“ORA-20113: CustomerOrder.FND_LOCKED: The update could not be performed since the Customer Order record is currently locked. Please retry the operation.”). This causes us to not be able to execute reservations for lines under an order until the current order line is finished. So, we cannot run the lines in parallel. IFS also locks down the customer order line record (understandable, here), so we cannot run each reservation location for an order line in parallel, either (although, I don’t think that would save much time per most lines anyhow).
And here is why the above speed issue is causing problems for us: the above process for one customer order line can take 6-7 seconds to execute some lines. And that number continues to grow the more reservation locations are needed for one customer order line. This becomes a problem because we can have orders with up to 500-700 lines on it.
I’m looking to see if:
- Is there a way to not get the customer order record to lock during reservations for customer order lines?
- Is there an API endpoint I’m missing that allows us to pass in a LIST of customer order lines and reservation locations to reserve those lines to? Versus the current option of doing each one at a time?
Thank you for any help/insight!