Map nonnegative measures into Items. For a single ring keep Nested = False and RingKey blank. For multiple rings populate Rings, connect each item through RingKey and set Nested = True. Keep item keys unique across rings. InnerRadius accepts 0–75 percent; CenterLabel is display text, so calculate any business total in your application if you show it elsewhere.
Create your own GetChartData Data Action or Server Action, authorize its query and return the typed Lists above. If an Aggregate returns entity records, map them explicitly into these public Structures using a For Each, Assign and ListAppend. Only bind a query result directly when its type already matches. The chart does not query your database.
Items · BluChartCircularItem List · sample records and mapping
Create a screen local Items of type BluChartCircularItem List. In your mapping action, use a temporary RowItems of type BluChartCircularItem. Fill every field used by this chart before appending each row.
ListClear(List: Items)
For Each source record in your ordered query result:
Assign RowItems fields from that record
ListAppend(List: Items, Element: RowItems)
Example Assign values for the first sample row:
RowItems.Key = "platform"
RowItems.Label = "Platform"
RowItems.Value = 420
RowItems.Color.Mode = Entities.ChartColorMode.Automatic
RowItems.Color.ThemeColor = Entities.ComponentColor.Primary
RowItems.Color.Hex = ""
RowItems.IsMissing = False
The loop describes your action flow, not code to paste into a JavaScript node. Replace the sample literals with your query fields. Reset optional fields on every iteration so values do not carry over from the previous row.
For a quick fixture, use JSON Deserialize with Data Type BluChartCircularItem List, then assign its Data output to Items. In the JSONString expression editor, wrap the copied JSON in a Text literal and double embedded quotes, or read it from a Text variable. The resulting Block input remains a typed List.
[
{
"Key": "platform",
"Label": "Platform",
"Value": 420,
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
},
"IsMissing": false
},
{
"Key": "services",
"Label": "Services",
"Value": 260,
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
},
"IsMissing": false
},
{
"Key": "support",
"Label": "Support",
"Value": 180,
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
},
"IsMissing": false
},
{
"Key": "training",
"Label": "Training",
"Value": 90,
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
},
"IsMissing": false
},
{
"Key": "other",
"Label": "Other",
"Value": 50,
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
},
"IsMissing": false
}
]
Rings · BluChartRing List · sample records and mapping
Create a screen local Rings of type BluChartRing List. In your mapping action, use a temporary RowRings of type BluChartRing. Fill every field used by this chart before appending each row.
Leave Rings as an empty BluChartRing List for this example.
The loop describes your action flow, not code to paste into a JavaScript node. Replace the sample literals with your query fields. Reset optional fields on every iteration so values do not carry over from the previous row.