Charts, badges, progress, and state indicators
Client keyword reference / Charts, badges, progress, and state indicators
IFS Cloud 26R1 · Documentation-based examples · Not compiled or executed in IFS.
Create small summary datasets with known values before styling. These controls display the supplied data; they do not decide which business rows the user is authorized to read or guarantee correct aggregation. Use one chart at a time until counts reconcile.
Bar line radar and stacked charts
Section titled “Bar line radar and stacked charts”- Expose
DemoDailySummarySetof typeDemoDailySummarywithWorkDate,PlannedHours, andActualHours. - Seed two dates with planned/actual pairs 6/4 and 8/7.
- Insert
barchart HoursByDay using DemoDailySummarySet;into a page and declare:
barchart HoursByDay for DemoDailySummary { label = "Planned and actual hours"; orderby = WorkDate asc; x { value WorkDate; } y { value PlannedHours; value ActualHours; }}For a trend, use a separately named line chart:
linechart ActualTrend for DemoDailySummary { orderby = WorkDate asc; x { value WorkDate; } y { value ActualHours; }}For additive parts, expose DemoWorkMix with Team, TravelHours, and RepairHours and use stackedchart WorkMix for DemoWorkMix { x { value Team; } y { value TravelHours; value RepairHours; } }. A radar comparison requires commensurate measures: radarchart ReviewScores for DemoReviewScore { x { value Criterion; } y { value Score; } } with all scores on the same agreed scale. Bind each to its own correctly typed entity set.
Check totals and date order, then empty data and zero values. A stacked total is meaningful only for additive measures. For supported chart series, split { value Team; } partitions by Team, while colorsplit changes coloring. A topn = Count(3); inside a compatible y block truncates visible categories; check the Others bucket before hiding it with showothers = [false];. Advanced combinations such as constantline and seriestype have chart-specific placement; follow the individual chart reference.
Pie and funnel charts
Section titled “Pie and funnel charts”Expose DemoStageSummary with Stage and numeric RequestCount, and bind both declarations to DemoStageSummarySet at their insertion points:
piechart RequestDistribution for DemoStageSummary { label = "Requests by current stage"; argument Stage; value RequestCount;}funnelchart ReviewPipeline for DemoStageSummary { label = "Review pipeline counts"; argument Stage; value RequestCount;}Seed three categories with counts 12, 6, and 2. The pie should represent a total of 20. For the funnel, use data with a clearly documented stage/count definition; current-state counts alone do not establish conversion rates. Test a zero-total dataset rather than interpreting a blank pie as a service failure. Use centerlabel only where supported by the selected chart and reconcile its total independently.
badge and conditional formatting
Section titled “badge and conditional formatting”Inside a list for an entity with Boolean Closed, add:
badge Closed { label = "Completion"; style = TextOnly; emphasis True = [Closed = true]; emphasis False = [Closed = false];}Test true, false, and null; keep the underlying value readable without color. Conditional emphasis is a presentation rule, not a workflow transition. A compatible icon set can use iconset { icon "alert" { label = "Needs attention"; expression = [EstimateHours = null]; } }. Check the chosen icon exists in the installed icon library and keep its text equivalent available.
progressfield and stateindicator
Section titled “progressfield and stateindicator”For a list with numeric TotalChecks and PassedChecks, add:
progressfield { label = "Acceptance checks"; total TotalChecks { label = "Checks remaining"; } value PassedChecks { label = "Checks passed"; }}Use 10 total and 7 passed; expect 3 remaining. Reject inconsistent counts in the data source. For a page with text ReviewState, define a state indicator at file scope and insert stateindicator ReviewProgress; in that page:
stateindicator ReviewProgress for DemoReview { state "Open" { completed = 0%; emphasis StateOpen = [ReviewState = "Open"]; } state "Closed" { completed = 100%; emphasis StateClosed = [ReviewState = "Closed"]; }}The percentage is configured presentation, not a calculation of actual work done. Test both recognized states and an unexpected state. Changing this definition does not implement a server state machine.
boxmatrix
Section titled “boxmatrix”Expose DemoRisk with enumeration attributes Impact and Likelihood, a title, and a unique identity. Define a matching risk card if previews are needed. Attach this declaration to a list using boxmatrix ReviewRiskMatrix;:
boxmatrix ReviewRiskMatrix for DemoRisk { xaxis Likelihood { label = "Likelihood"; } yaxis Impact { label = "Impact"; } boxvalue Title; count = [true];}Place one known risk in each intended cell, then reconcile cell counts with a normal list. For query-based axes instead of enumerations, use the documented from ... using ... { map ...; } form and supply unique axis keys. Optional boxtitle, boxcolor, and boximage must refer to real attributes. Test a missing axis value and duplicate labels before treating the matrix as a complete risk inventory.
Official syntax and next steps
Section titled “Official syntax and next steps”- Charts/Bar Chart
- Charts/Line Chart
- Charts/Radar Chart
- Charts/Stacked Chart
- Charts/Pie Chart
- Charts/Funnel Chart
- Badge
- Conditional Formatting
- Progress Field
- State Indicator
- Box Matrix
Use the build and acceptance checklist before delivering a change.