Hi,
What you’re trying to do (replacing Native MFSM execution with Web) is a common requirement, but there’s no direct replacement or switch. Native and Web apps are built on different paradigms, so the correct way is to rebuild the execution layer while reusing logic selectively.
First thing to understand
The MFSM Native modules (like WorkOrder execution) are heavily dependent on:
- Nanoflows
- Offline-first architecture
- Native widgets/snippets
These won’t work in Web at all, so trying to reuse them directly (especially snippets like nativeAppointment_ProceedButtons) will not work.
1. Reuse Domain Model as-is
- WorkOrder, Appointment, Status, etc. → no changes needed
- This part is fully reusable
2. Identify which logic is reusable
Check your nanoflows:
- If they contain pure business logic → move that into a microflow
- If they contain UI / device / offline logic → rewrite
Best practice:
- Create a shared microflow layer
- Call that from:
- Web (microflows)
- Native (nanoflows via microflow calls)
3. Replace Nanoflow actions properly
Example:
nativeAppointment_ProceedButtons
This usually contains:
- Start Journey
- Start Work
- Complete
In Web:
- Create separate microflows:
- ACT_StartJourney
- ACT_StartWork
- ACT_Complete
Each should:
- Update status
- Commit object
- Refresh
Then bind buttons in Web UI to these microflows.
4. Rebuild UI (don’t try to reuse snippets)
Native:
- Snippets
- Native buttons
- Mobile layout
Web:
- Create new pages using:
- Data View (Appointment/WorkOrder)
- Buttons
- Conditional visibility
Example:
Instead of:
- Native ProceedButtons snippet
Do:
- Data View → Appointment
- Buttons:
- Start Journey (visible when status = Planned)
- Start Work (visible when status = Arrived)
- Complete (visible when status = In Progress)
5. Handle visibility (important)
Native uses nanoflow-based logic.
In Web:
Use:
$Appointment/Status = 'Planned'
Or:
- Boolean helper attributes (if logic is complex)
6. Remove Offline dependency
Your current app:
- Uses offline sync
- Local DB
For Web:
- Everything becomes online (runtime DB)
So:
- Remove sync flows
- Remove offline-only entities if any
- Replace nanoflow retrieve → normal retrieve
7. One important mistake to avoid
Don’t try:
- Embedding native modules in web
- Reusing native snippets
- Calling nanoflows from web
It will either fail or behave inconsistently.
8. Recommended architecture
Create 3 layers:
- Domain Layer → Reuse
- Logic Layer (Microflows) → Shared
- UI LayerNative → Nanoflow + Native UI
- Web → Microflow + Web UI
There is no “replacement” for Native modules in Web. The correct and stable approach is:
- Reuse domain model
- Move business logic into microflows
- Rebuild UI using Web components
- Replace nanoflows with microflows
- Remove offline dependencies
That’s how most teams implement MFSM execution on Web alongside Native.
If you follow this approach, you’ll get a clean and maintainable Web execution flow without breaking your existing Native app.