web
You’re offline. This is a read only version of the page.
close
Skip to main content

Announcements

News and Announcements icon
Community site session details

Community site session details

Session Id :
Supply chain | Supply Chain Management, Commerce
Answered

Custom Warehouse Management mobile app Work List-style page for Sales Orders (D365 F&O)(WMS)(WHS)

(3) ShareShare
ReportReport
Posted on by 44
 
Hi all,
I’m trying to create a custom mobile app menu item in the D365 Warehouse Management app via X++.
I have attached a screenshot of the standard Work List screen. My goal is to build a custom screen with the exact same UI design and behavior (grouped lists, card layout, etc.), but I need it to populate Sales Orders instead of warehouse work.
[Insert Image Here]
While I can build simple WMA screens, I am struggling to find the right base classes and framework logic to perfectly replicate this specific layout.
Does anyone know:
Which classes handle the UI generation for this specific screen?
How can I adapt this exact design pattern for a custom data entity?
Any advice or pointers to relevant standard classes would be very helpful.
Thank you!
 
I have the same question (0)
  • Suggested answer
    Assisted by AI
    ANInnoSolutions Profile Picture
    534 on at
    Hi Ahmet Enes,
     
    1) Issue
    In Dynamics 365 Warehouse Management (WMA), it is challenging to replicate the standard Work List mobile screen when building a custom solution via X++.
     
    Observed behavior:
    - Standard Work List screen shows a grouped card-style UI (grouped lists, tiles, summaries)
    - Custom mobile menu items only produce simple list/data entry screens
    - Unclear which framework classes control UI rendering (grouping, cards, layout)
    - No clear documentation on reproducing this UI pattern
    - Difficulty adapting UI to display Sales Orders instead of warehouse work
     
    2) Reason
    The issue is caused by how the Warehouse Management mobile framework is designed.
    A) Specialized framework
    - Work List is not a generic WMA screen
    - Built using dedicated classes, not the basic WHSWorkExecuteDisplay pattern
     
    B) Process Guide framework
    - Uses:
      WHSProcessGuide
      WHSProcessGuideStep
      WHSProcessGuidePageBuilder
    - UI is generated dynamically via metadata
     
    C) Custom Page Builder logic
    - Card/group layout is created via custom page builders
    - These define groups, cards, and aggregations
     
    D) Tight coupling to warehouse work
    - Uses WHSWorkTable and WHSWorkLine
    - Logic is specific to work execution
     
    E) No reusable card UI engine
    - No generic component for card layouts
    - UI must be built manually
     
    F) Limited extensibility
    - Extensions allow field and logic changes
    - Not full UI pattern replication
     
    3) Resolution
    Step 1: Review standard implementation
    - WHSProcessGuide
    - WHSWorkListProcessGuide
    - WHSWorkListPageBuilder
    - WHSWorkExecuteDisplay
     
    Step 2: Create custom Process Guide (Example)
    class SalesOrderProcessGuide extends WHSProcessGuide
    {
    }
    ...
     
    Step 3: Create a Step class (Example)
    class SalesOrderStep extends WHSProcessGuideStep
    {
        public WHSProcessGuidePageBuilder createPageBuilder()
        {
            return new SalesOrderPageBuilder();
        }
    }
    ...
     
    Step 4: Build custom Page Builder -core logic- (Example)
    class SalesOrderPageBuilder extends WHSProcessGuidePageBuilder
    {
        public void buildPage(WHSProcessGuidePage _page)
        {
            WHSProcessGuideGroup group;
     
            group = _page.addGroup("SalesOrders");
            group.addLabel("Open Orders");
     
            group.addField(identifierStr(SalesId), "SO-001");
            group.addField(identifierStr(CustAccount), "Cust001");
        }
    }
    ...
     
    Step 5: Add data query and grouping (Example)
    SalesTable salesTable;
     
    while select SalesId, CustAccount
        from salesTable
        where salesTable.SalesStatus == SalesStatus::Backorder
    {
        // Build grouped data structure
    }
    ...
     
    Step 6: Simulate card layout (Example)
    Customer A
      SO-001 | Date | Status
      SO-002 | Date | Status
     
    Customer B
      SO-003 | Date | Status
     
    Step 7: Create mobile menu item (Example)
    - Go to: Warehouse management > Setup > Mobile device menu items
    - Mode: Indirect
    - Link to your Process Guide class
     
    ---
     
    Key Takeaways
    - Work List UI is not reusable out-of-the-box
    - Built with Process Guide and Page Builder pattern
    - You must rebuild the layout manually
    - Grouping and card behavior must be implemented in code
     
    Relevant Classes
    - WHSProcessGuide
    - WHSProcessGuideStep
    - WHSProcessGuidePageBuilder
    - WHSWorkListPageBuilder
    - WHSWorkListProcessGuide
    - WHSWorkExecuteDisplay
     

    Rg,

    Alexander

    *Due to the complex and different possibilities of deploying Dynamics 365 I highly recommend not to setup the application without some expert/partner or support. (For more information contact me under anassl@inno-solutions.info or visit www.inno-solutions.de)

    *The Information comes directly from the manufacturer or provider and are validated (not guaranteed) up to date of creation of the posting.

    References:

    1. Microsoft Licensing Guide
    2. Microsoft Doc`s/Learn
  • CR-29051508-0 Profile Picture
    11 on at
    Hello Ahmet Enes,
     
    I just wanted to throw a no code option out there that I have had success with.
     
    In the mobile device menu items in D365 you can create a menu with a mode of "Indirect" and an activity code of "Data Inquiry". Using this you can build out your own query with tables joins to narrow down to what data you want to display. Then, you can use the field list to select which information and what order information is displayed on the cards. If you are wanting to look at Sales Orders then you might be able to use the table "CustSalesOpenOrders_NA" for this data inquiry menu.
     
    If you want to have the ability to pull information from the cards into a specific menu to begin work then you can go to (Warehouse Management > Setup > Mobile Device > Mobile Device Steps) and add a detour from the cards into the specific menu you want. The Step ID for these data inquiry menus is "GenericDataInquiryList".
     
    In my instance we created a mobile device menu using the data inquiry and the table "WHSWorkLine". This allowed me to customize which data was displayed on the cards. The users will then start with the menu "Replen List", once they identify which work they will begin then they click/tap and hold on the card to open the detour which takes them straight into a restocking menu and it will pull in the Work ID from the card into the detorued menu. 
     
  • Ahmet Enes Profile Picture
    44 on at

    Thank you for your help. Your suggestion resolved the issue and pointed me in the right direction. Thank you.

  • Ahmet Enes Profile Picture
    44 on at
    Thank you again for your earlier suggestion — it worked very well.
    I now have a follow-up question regarding the second screen.
    My first screen is a standard Data Inquiry menu (GenericDataInquiryList), and from there I open a custom Process Guide screen via a detour/menu step.
    The issue is that the second screen is a fully custom ProcessGuide implementation (X++), so it does not expose fields in the Mobile Device Menu Steps configuration. Because of that, I cannot select/pass fields from the first screen through the standard configuration.
    What is the recommended way to transfer selected record values (for example SalesId or other fields from the selected card) from the GenericDataInquiryList screen into a custom ProcessGuide controller/step?(
    I also tried accessing the values through:
    WhsrfPassthrough pass = controller.parmSessionState().parmPass();
    However, I could not get the selected record context correctly.
    Either:
    it returns all sales orders as a list,
    or the selected Sales Order values are not included in the header/main data at all.
    So currently I’m unable to determine how to retrieve only the tapped/selected card values from the GenericDataInquiryList screen inside my custom ProcessGuide flow.
    )

Under review

Thank you for your reply! To ensure a great experience for everyone, your content is awaiting approval by our Community Managers. Please check back later.

Helpful resources

Quick Links

Season of Sharing Community Challenge Launch!

Jump in, show your community spirit, and win prizes!

Women in Power Builds Momentum

Expanding mentorship, skilling, and AI innovation

Congratulations to the April Top 10 Community Leaders

These are the community rock stars!

Leaderboard > Supply chain | Supply Chain Management, Commerce

#1
AndrƩ Arnaud de Calavon Profile Picture

AndrƩ Arnaud de Cal... 145 Super User 2026 Season 1

#2
Abhilash Warrier Profile Picture

Abhilash Warrier 102 Super User 2026 Season 1

#3
Laurens vd Tang Profile Picture

Laurens vd Tang 97 Super User 2026 Season 1

Last 30 days Overall leaderboard

Product updates

Dynamics 365 release plans