Skip to Content
Technical Articles
Author's profile photo Ryutaro Umezuki

SAP EWM and Flutter: The Warehouse Management Solution for Efficient Picking and Packing


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:

  • The complexity of development and API integration
  • The responsiveness of the application compared to a regular web application
  • The architectural design that meets the requirements of warehouse applications.

What is SAP EWM?

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.

Use case

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 for SAP EWM

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.

Handling Unit (HU): A physical packaging unit used to items for transportation. It contains one or more items or products and includes additional information such as weight or volume.

Source Storage Bin: A location in the warehouse where items are stored before being transferred.

Destination Storage Bin: A location where workers need to transport items after picking them from the Source Storage Bin.

Base Unit of Measure (BUoM): A standard unit of measurement used for picking and packing item quantities.

Alternative Unit of Measure (AUoM): A secondary unit of measurement used for picking and packing item quantities.


BUoM and AUoM

Main Process

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==

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 HUCreate%20HU

Create HU

HTTP header key Example value
Content-Type application/json
X-CSRF-Token ugcXiHWm6XOJOHv68Md7VA==
  "Warehouse": "1750",
  "PackagingMaterial": "PMCARTON",

3. Pack items

Pack items

Path: /HandlingUnitItem

HTTP header key Example value
Content-Type application/json
X-CSRF-Token 8A9S-a-N7G52N2j9Cu1Brw==
  "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).

Other technical parts

Log on

The employee in the warehouse must log on as a specific user (SHR1-2) to perform EWM tasks.
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.

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.

Future Possibilities

Depending on the requirements, the following features could be added:

  • Ability to search for specific orders using keywords
  • Geolocation functionality for users and items
  • Real-time notifications for stock information
  • Sorting of orders based on expiration or creation time
  • Creation of multiple Handling Units and partial packing of items into them.


The warehouse application has pros and cons:


  • The picking and packing process is fast. (Users)
  • The UI design makes it easy to understand the task information. (Users)
  • Development is fast thanks to the single codebase, UI widgets, and hot reload and restart feature. (Developers)
  • Flutter enables to create applications for iOS, Android, Web, Windows and MacOS using a single codebase. (Developers)
  • The MVVM architecture and widget design are well-suited to the warehouse requirements, facilitating the addition of new features and the maintenance of the application. (Developers)


  • The system lacks optimization, which means users cannot pick multiple related orders at once and pack them separately. (Users)
  • Integrating multiple APIs correctly needs a proper understanding of programming and SAP specifications, which can be challenging for more advanced requirements. (Developers)


Assigned Tags

      You must be Logged on to comment or reply to a post.
      Author's profile photo RAJESH SHARMA

      Very nice explanation

      Author's profile photo Ryutaro Umezuki
      Ryutaro Umezuki
      Blog Post Author

      Thank you!

      Author's profile photo Chuan Fei Too
      Chuan Fei Too

      Thanks for sharing. Lookong forward for more post

      Author's profile photo Ryutaro Umezuki
      Ryutaro Umezuki
      Blog Post Author

      Thank you for your positive feedback.

      Author's profile photo Lukas Novak
      Lukas Novak

      I actually wanted to use Flutter for the same use case! I used Flutter before and it is just amazing to work with. Thank you for this detailed showcase 🙂

      Author's profile photo Ryutaro Umezuki
      Ryutaro Umezuki
      Blog Post Author

      Great to hear that you felt the showcase helpful!

      Author's profile photo Larry DuBois
      Larry DuBois

      Did you create a code repo that you can share?

      Author's profile photo Ryutaro Umezuki
      Ryutaro Umezuki
      Blog Post Author

      Unfortunately this is a private repo.