Skip to content

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.

  1. Expose DemoDailySummarySet of type DemoDailySummary with WorkDate, PlannedHours, and ActualHours.
  2. Seed two dates with planned/actual pairs 6/4 and 8/7.
  3. 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.

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.

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.

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.

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.

Use the build and acceptance checklist before delivering a change.