Calendars, Gantt charts, maps, and Kanban boards
Client keyword reference / Calendars, Gantt charts, maps, and Kanban boards
IFS Cloud 26R1 · Documentation-based examples · Not compiled or executed in IFS.
Start with read-only rendering. Moving an item on a visual board requires a separate authorized server operation and recovery behavior. Use an explicit date/time-zone policy and keep a normal list available while reconciling the visualization.
calendar and events
Section titled “calendar and events”- Expose
DemoVisitSetof typeDemoVisitwithTitle,StartAt, andEndAt(Timestamp), plus BooleanAllDay. - Prepare a one-hour visit and a second visit on the next day, with known timezone semantics.
- Put
calendar TrainingVisits using DemoVisitSet;in a page and define:
calendar TrainingVisits for DemoVisit { label = "Training visits"; weeknumbers = [true]; events { start = StartAt; end = EndAt; allday = [AllDay = true]; view Week, Month { field Title; } view TimelineMonth { customdaterange = [true]; } }}Switch views and timezone settings and compare timestamps to service data. Test zero/negative duration, an event across midnight, and the all-day case. Define separate date attributes with startdate/enddate when that is your business contract; do not silently reinterpret timestamps as dates. Resource grouping, resource, and schedule blocks require their own mapped attributes/arrays; first verify every visit appears exactly once without grouping. A UI calendar does not book capacity or prevent overlap by itself.
ganttchart rows items and styles
Section titled “ganttchart rows items and styles”Expose DemoPlanSet (type DemoPlan, with PlanId and Title) and a Tasks array to DemoPlanTask with TaskId, StartAt, and FinishAt. Bind ganttchart TrainingPlan using DemoPlanSet; in a page.
ganttchart TrainingPlan for DemoPlan { label = "Training delivery plan"; datagrid { ganttcolumn PlanId; ganttcolumn Title; } ganttchartitem TrainingTask(Tasks);}ganttchartitem TrainingTask for DemoPlanTask { starttime StartAt; endtime FinishAt; ganttchartitemstyle TrainingTaskStyle = [true];}ganttchartitemstyle TrainingTaskStyle { shape = default; emphasis = Primary;}Create two plans with separate tasks; expand both and compare date positions with the source list. A nested ganttchartrow ChildPlan for DemoPlan { datagrid { ganttcolumn PlanId; ganttcolumn Title; } ganttchartitem TrainingTask(Tasks); } can be inserted through a correctly mapped ChildPlans array using ganttchartrow ChildPlan(ChildPlans);. Verify the child relationship terminates and cannot cycle before making it recursive.
Gantt schedules dependencies and moves
Section titled “Gantt schedules dependencies and moves”A schedule requires its own DemoShift rows. The following file-scope declaration can be attached to a compatible Gantt row with ganttchartschedule TrainingShift(Shifts); and a matching row schedule ID:
ganttchartschedule TrainingShift for DemoShift { scheduleid CalendarId; schedulestart ShiftStart; scheduleend ShiftEnd; ganttchartitemstyle TrainingTaskStyle = [true];}For dependencies, first assign stable item IDs and expose matching predecessor/successor IDs. Then define a ganttdependency with dependencytype FinishToStart = [true];, fromitem = "${PredecessorId}";, and toitem = "${SuccessorId}"; and attach it through the dependency array. Check that each endpoint resolves to one item.
Add a mutation only after rendering passes. Inside an item definition a move command { execute { call MoveTrainingTask(TaskId, StartAt, FinishAt); } } requires that exact action contract. A resize command similarly needs a server update, not just a success toast. Test stale versions, rejected moves, cancellation, and reload. Check the new dates were saved once and failed operations restore the correct view. Keep server-side schedule constraints authoritative.
map locations and pins
Section titled “map locations and pins”Expose a DemoDispatch record with CenterLatitude, CenterLongitude, and DispatchId; a function GetTrainingStops(DispatchId) must return stop rows with StopLatitude/StopLongitude. Place the map on a page bound to the dispatch record.
map TrainingStops for DemoDispatch { label = "Training route stops"; location { latitude CenterLatitude; longitude CenterLongitude; } pin VisitPin using GetTrainingStops(DispatchId) { latitude StopLatitude; longitude StopLongitude; tooltip { field StopName; } }}Start with two permitted coordinates whose positions you know. Confirm latitude/longitude are not swapped and nulls are not converted to 0,0. Verify map service setup and the user’s permissions independently of the data query. Define a pinstyle only when you need a distinct legend; a changed pin position is not persisted without a move action.
For a line between stops, use a polyline with startlocation and endlocation, each mapping latitude/longitude. A route additionally needs the service’s route/ranking contract; it is not automatically a route optimizer. A region needs ordered boundary points or its documented center/radius contract. Validate those inputs against the official map reference before adding them to the basic map.
kanbanboard and kanbancard
Section titled “kanbanboard and kanbancard”Expose DemoRequest with a StageKey and a function GetTrainingStageNames() returning the column-key/name format required by the Kanban contract. Seed one record in each known stage. Insert kanbanboard TrainingBoard using DemoRequestSet; in a page.
kanbanboard TrainingBoard for DemoRequest { kanbancolumn StageKey; kanbancolumnname = GetTrainingStageNames(); kanbancard TrainingRequestCard;}kanbancard TrainingRequestCard for DemoRequest { field RequestId; field Title;}Check column keys against service results, including an unknown stage and an empty column. A move command needs the documented destination-column context and a server action enforcing permitted transitions. Until that contract is implemented and verified, treat this as a read-only board. After adding movement, test a rejected transition and reload to prove that cards represent stored state.
Official syntax and next steps
Section titled “Official syntax and next steps”Use the build and acceptance checklist before delivering a change.