Create Categories in radial display order, Series for each metric and Values keyed by SeriesKey / CategoryKey. Bind PolarType to Entities.ChartSeriesType.Bar or Line. Stacking, LineStyle and ShowArea change presentation. Keep nonnegative measures when using percentage stacking; a missing observation uses IsMissing = True.
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.
Categories · BluChartCategory List · sample records and mapping
Create a screen local Categories of type BluChartCategory List. In your mapping action, use a temporary RowCategories of type BluChartCategory. Fill every field used by this chart before appending each row.
ListClear(List: Categories)
For Each source record in your ordered query result:
Assign RowCategories fields from that record
ListAppend(List: Categories, Element: RowCategories)
Example Assign values for the first sample row:
RowCategories.Key = "day-0"
RowCategories.Label = "Mon"
RowCategories.Color.Mode = Entities.ChartColorMode.Automatic
RowCategories.Color.ThemeColor = Entities.ComponentColor.Primary
RowCategories.Color.Hex = ""
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 BluChartCategory List, then assign its Data output to Categories. 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": "day-0",
"Label": "Mon",
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
},
{
"Key": "day-1",
"Label": "Tue",
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
},
{
"Key": "day-2",
"Label": "Wed",
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
},
{
"Key": "day-3",
"Label": "Thu",
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
},
{
"Key": "day-4",
"Label": "Fri",
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
},
{
"Key": "day-5",
"Label": "Sat",
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
}
]
Series · BluChartSeries List · sample records and mapping
Create a screen local Series of type BluChartSeries List. In your mapping action, use a temporary RowSeries of type BluChartSeries. Fill every field used by this chart before appending each row.
ListClear(List: Series)
For Each source record in your ordered query result:
Assign RowSeries fields from that record
ListAppend(List: Series, Element: RowSeries)
Example Assign values for the first sample row:
RowSeries.Key = "revenue"
RowSeries.Label = "Revenue"
RowSeries.Color.Mode = Entities.ChartColorMode.Automatic
RowSeries.Color.ThemeColor = Entities.ComponentColor.Primary
RowSeries.Color.Hex = ""
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 BluChartSeries List, then assign its Data output to Series. 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": "revenue",
"Label": "Revenue",
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
},
{
"Key": "forecast",
"Label": "Forecast",
"Color": {
"Mode": "Automatic",
"ThemeColor": "Primary",
"Hex": ""
}
}
]
Values · BluChartSeriesValue List · sample records and mapping
Create a screen local Values of type BluChartSeriesValue List. In your mapping action, use a temporary RowValues of type BluChartSeriesValue. Fill every field used by this chart before appending each row.
ListClear(List: Values)
For Each source record in your ordered query result:
Assign RowValues fields from that record
ListAppend(List: Values, Element: RowValues)
Example Assign values for the first sample row:
RowValues.SeriesKey = "revenue"
RowValues.CategoryKey = "day-0"
RowValues.Value = 92
RowValues.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 BluChartSeriesValue List, then assign its Data output to Values. 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.
[
{
"SeriesKey": "revenue",
"CategoryKey": "day-0",
"Value": 92,
"IsMissing": false
},
{
"SeriesKey": "revenue",
"CategoryKey": "day-1",
"Value": 112,
"IsMissing": false
},
{
"SeriesKey": "revenue",
"CategoryKey": "day-2",
"Value": 105,
"IsMissing": false
},
{
"SeriesKey": "revenue",
"CategoryKey": "day-3",
"Value": 138,
"IsMissing": false
},
{
"SeriesKey": "revenue",
"CategoryKey": "day-4",
"Value": 153,
"IsMissing": false
},
{
"SeriesKey": "revenue",
"CategoryKey": "day-5",
"Value": 172,
"IsMissing": false
},
{
"SeriesKey": "forecast",
"CategoryKey": "day-0",
"Value": 102,
"IsMissing": false
},
{
"SeriesKey": "forecast",
"CategoryKey": "day-1",
"Value": 108,
"IsMissing": false
},
{
"SeriesKey": "forecast",
"CategoryKey": "day-2",
"Value": 120,
"IsMissing": false
},
{
"SeriesKey": "forecast",
"CategoryKey": "day-3",
"Value": 130,
"IsMissing": false
},
{
"SeriesKey": "forecast",
"CategoryKey": "day-4",
"Value": 145,
"IsMissing": false
},
{
"SeriesKey": "forecast",
"CategoryKey": "day-5",
"Value": 160,
"IsMissing": false
}
]