A mobile application has been created using SAP S/4HANA and Flutter that enables warehouse employees to perform picking and packing tasks quickly. The video demonstrates a step-by-step process of how to perform simple picking and packing tasks.
We all know the mobile capabilities of SAP EWM, which can be accessed through ITSMobile, Fiori Apps, or third-party solutions. However, I wanted to explore how Flutter, a mobile app development framework, could be leveraged to create warehouse applications. Specifically, I was interested in examining the following aspects:
SAP EWM, short for Extended Warehouse Management, is an advanced system for managing warehouses. It is a crucial part of the logistics management system and provides a range of functionalities necessary for managing complex supply chains and warehouses. Some of the key functionalities provided by SAP EWM include inventory management, inbound and outbound processing, picking, packing, and shipping, all of which are essential for efficient logistics management. Furthermore, SAP EWM allows for real-time inventory information, enabling companies to make informed decisions on the go. SAP EWM can be implemented as part of the SAP S/4HANA system.
This is a simple workflow in a warehouse that demonstrates the order processing for an e-commerce business.
Main flow
Using SAP S/4HANA, the system receives the order information and locates the appropriate storage location in the warehouse where the required items are located. The items are then scanned and picked according to the quantity needed before being moved to the packing area within the warehouse. Next, suitable packaging materials are selected based on the size and weight of the items, and packing is carried out accordingly.
The app is created by communicating with the Warehouse, Handling Unit, and Product APIs.
Solution Architecture
Flutter is an open-source mobile application development framework that enables developers to build applications for iOS and Android (as well as web and desktop) from a single codebase. With its fast performance and flexible UI toolkit, consisting of widgets, developers can easily and quickly create stunning and responsive interfaces. When designing a warehouse app using SAP EWM, the focus is often on creating accurate and agile API communication, which involves using multiple complex API packages and their business logic, rather than on meticulous UI design. As such, Flutter's characteristics, as mentioned above, make it well-suited for this purpose.
Furthermore, tasks in a warehouse often request different API packages at one time and merge them or complex state management. Therefore, it is recommended to consider scalable and testable designs, such as MVVM architecture or clean architecture, from the initial design stage to ensure efficient and maintainable code.
Before delving into the technical aspects of this blog post, it may be helpful to understand several EWM terms in this blog post context.
BUoM and AUoM
After receiving Goods Receipt, workers must complete three actions using APIs.
1. Pick items
The worker must pick the ordered items from the Source Storage Bins in the storage area and transport them to the Destination Storage Bin.
Pick items
HTTP header key | Example value |
Content-Type | application/json |
X-CSRF-Token | qnBqyZf5R0D6eBqv_uZwKA== |
If-Match | W/"SADL-020230425084852C~20230425084852" |
You can learn about If-Match and Etag concepts, as well as common mistakes, here
{
"AlternativeUnit": "CAR",
"ActualQuantityInAltvUnit": 1,
"DifferenceQuantityInAltvUnit": 0,
"DestinationStorageBin": "GI-AREA-01",
"SourceHandlingUnit": "",
"DestinationHandlingUnit": "",
"DestinationResource": "",
"EWMPutAwayPhysInvtryExecSts": "",
"WhseTaskExCodeDestStorageBin": "",
"WhseTaskExceptionCodeQtyDiff": ""
}
2. Create HU
Create HU
HTTP header key | Example value |
Content-Type | application/json |
X-CSRF-Token | ugcXiHWm6XOJOHv68Md7VA== |
{
"Warehouse": "1750",
"PackagingMaterial": "PMCARTON",
"StorageBin":"GI-AREA-01"
}
3. Pack items
Pack items
Path: /HandlingUnitItem
HTTP header key | Example value |
Content-Type | application/json |
X-CSRF-Token | 8A9S-a-N7G52N2j9Cu1Brw== |
If-Match | W/"SADL-020230428023430C~20230428023430" |
{
"Warehouse": "1750",
"HandlingUnitExternalID": "300000928",
"HandlingUnitReferenceDocument": "80316802",
"HandlingUnitRefDocumentItem": "10",
"HandlingUnitQuantity": 1,
"HandlingUnitQuantityUnit": "PAC",
"HandlingUnitAltUnitOfMeasure": "CAR"
}
Handling Unit Reference Document is a delivery ID, and Handling Unit Ref Document Item is an item ID in the delivery. You can obtain each ID from the values of EWMDelivery and EWMDeliveryItem in the relevant warehouse task.
Additionally, please note that the Handling Unit Quantity in this API is the number of packed items using AUoM. Therefore, if you pack one carton of body soap, which equals three pieces, the value should be 1 (CAR), not 3 (PC).
Log on
The employee in the warehouse must log on as a specific user (SHR1-2) to perform EWM tasks.
Path: /WarehouseResource(EWMWarehouse='1750',EWMResource='SHR1-2')/SAP__self.LogonToWarehouseResource
HTTP header key | Example value |
X-CSRF-Token | X94Fzf2BeephdX5neTvEKw== |
Designate a worker
A warehouse worker must be designated to handle an order in the warehouse.
Path: /WarehouseOrder(EWMWarehouse='1750',WarehouseOrder='2000001599')/SAP__self.AssignWarehouseOrder
HTTP header key | Example value |
Content-Type | application/json |
X-CSRF-Token | VR0I3kXz7j9h9vqMAyK0Bw== |
{
"EWMResource": "SHR1-2"
}
Add EAN to Task Class field
To integrate EAN (barcode information) into the Warehouse Order and Task (A2X) system, you must obtain it from the Product API package and add it to the Warehouse task field. While the item name is also not present in Warehouse Order and Task (A2X), it can be obtained through a process similar to merging with EAN. However, for the sake of simplicity, this process will not be covered here. The process for integrating EAN can be divided as follows:
1. Retrieve an order.
Path: /WarehouseOrder(EWMWarehouse='1750',WarehouseOrder='2000001599')?$expand=*
2. Create a filter string based on the "Product" key present in each child element of the array that contains the
"_WarehouseTask" object under warehouse order. To filter the tasks in the video (355, 356, and 373), write a method that outputs a filter string:
filter = "Product eq '355' or Product eq '356' or Product eq '373'"
3. Using the filter created in step 2, fetch Products. GlobalTradeItemNumber is the EAN.
4. Add the EAN value to the Task class field by retrieving the product array and selecting the one where the product ID and AUoM match.
Depending on the requirements, the following features could be added:
The warehouse application has pros and cons:
Pros
Cons
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
26 | |
16 | |
14 | |
13 | |
11 | |
9 | |
7 | |
6 | |
5 | |
5 |