Skip to main content
react-roster-shift-board/ is a React 19 / TypeScript 5 / Vite 7 single-page application that ships inside the AL extension. At build time it produces a single bundle and CSS file directly into BC-Human-Resource-AL/scripts/assets/. At runtime it loads inside a BC iframe via the standard Control Add-in mechanism.

Two screens, one app

The Gantt screen is not rendered in the current build. The code is retained for partner-specific deployments that re-enable it.

What it does for the user

Open the Visual Roster Board page in BC (page=70003175). The page loads an iframe; the React app inside it:
  1. Fetches the list of employees and the list of shift configurations marked Add to Roster = true.
  2. Fetches roster entries for the visible date window (default: 3 months centred on today).
  3. Renders a two-pane layout — a searchable employee sidebar on the left, a Syncfusion ScheduleComponent grouped by shift on the right.
  4. Lets the user drag an employee onto a shift slot. The app calls back into BC to insert an Employee Roster HAC row.
  5. Re-renders the updated assignment in place.
There is no separate “save” button — every drag-drop is committed immediately.

How it talks to BC

Strictly through the Control Add-in extensibility bridge: No HTTP, no fetch, no OData from the React side. This keeps audit, permissions and tenant-isolation uniform with BC’s normal access control.

Stack

License note for AppSource

Syncfusion EJ2 is commercial. The license key lives in react-roster-shift-board/syncfusion-license.txt. registerLicense(key) from @syncfusion/ej2-base must be called at startup before any Syncfusion component renders.
Confirm this call is present in main.tsx or App.tsx before final AppSource submission, or the production build will display Syncfusion’s evaluation banner.

Project layout

Build and deploy

Then build the AL extension as normal. The bundle is part of the .app artifact — no separate frontend hosting needed.