Builds Cue tiles and Activities CardPart pages for Business Central Role Centers, creates FlowField tables with CalcFormula counts, and implements drill-down navigation. Use when adding KPI dashboards, displaying record statistics, creating status indicators, or extending existing Role Centers with custom activity tiles.
69
83%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Prerequisites: Identify source tables, filter criteria, and target Role Center (e.g., Order Processor 9006, Accountant 9027).
Architecture: Role Center Page → Activities CardPart (CueGroups) → Cue Table (FlowFields with CalcFormula counts)
The Cue Table contains FlowFields that calculate counts from source records.
Key patterns:
CalcFormula = count(...)table <ID> "<PREFIX> <Area> Cue"
{
Caption = '<Area> Cue';
DataClassification = CustomerContent;
fields
{
field(1; "Primary Key"; Code[10])
{
Caption = 'Primary Key';
DataClassification = SystemMetadata;
}
field(10; "<Status1> <Records>"; Integer)
{
CalcFormula = count("<Source Table>" where(
"<FilterField1>" = const(<Value1>),
"<StatusField>" = const(<Status1>)));
Caption = '<Status1> <Records>';
ToolTip = 'Number of <records> with status <Status1>';
Editable = false;
FieldClass = FlowField;
}
field(20; "<Status2> <Records>"; Integer)
{
CalcFormula = count("<Source Table>" where(
"<FilterField1>" = const(<Value1>),
"<StatusField>" = const(<Status2>)));
Caption = '<Status2> <Records>';
ToolTip = 'Number of <records> with status <Status2>';
Editable = false;
FieldClass = FlowField;
}
// Add more cue fields as needed...
}
keys
{
key(PK; "Primary Key")
{
Clustered = true;
}
}
}The Activities page displays the cue tiles and handles drill-down navigation.
Key patterns:
page <ID> "<PREFIX> <Area> Activities"
{
Caption = '<Area>';
PageType = CardPart;
RefreshOnActivate = true;
SourceTable = "<PREFIX> <Area> Cue";
layout
{
area(content)
{
cuegroup(<GroupName>)
{
Caption = '<Group Title>';
field("<Field1>"; Rec."<Field1>")
{
ApplicationArea = All;
DrillDownPageID = "<Target List Page>";
ToolTip = '<Tooltip>';
trigger OnDrillDown()
var
SourceRec: Record "<Source Table>";
begin
SourceRec.SetRange("<FilterField1>", <Value1>);
SourceRec.SetRange("<StatusField>", <StatusValue>);
Page.Run(Page::"<Target List Page>", SourceRec);
end;
}
field("<Field2>"; Rec."<Field2>")
{
ApplicationArea = All;
DrillDownPageID = "<Target List Page>";
ToolTip = '<Tooltip>';
Style = Attention; // Yellow highlight
trigger OnDrillDown()
// ... similar pattern
}
field("<Field3>"; Rec."<Field3>")
{
ApplicationArea = All;
Style = Favorable; // Green highlight
// ...
}
}
}
}
trigger OnOpenPage()
begin
Rec.Reset();
if not Rec.Get() then begin
Rec.Init();
Rec.Insert();
end;
end;
}Add your Activities page to an existing Role Center.
Key patterns:
addafter or addbefore for positioningpageextension <ID> "<PREFIX> <RoleCenterName> Ext" extends "<RoleCenterPageName>"
{
layout
{
addafter(<ExistingControlName>)
{
part("<PREFIX> <Area> Activities"; "<PREFIX> <Area> Activities")
{
ApplicationArea = All;
Caption = '<Area>';
}
}
}
actions
{
addlast(Sections)
{
group(<PREFIX><Area>Section)
{
Caption = '<Area>';
Image = Setup;
action(<PREFIX><Action1>)
{
Caption = '<Action Title>';
ApplicationArea = All;
ToolTip = '<Tooltip>';
RunObject = Page "<Target Page>";
}
}
}
}
}Cue Styles: Attention (yellow), Favorable (green), Unfavorable (red), Subordinate (gray), Ambiguous (orange)
Common Role Centers: Order Processor (9006), Accountant (9027), Business Manager (9022), Sales Manager (9005), Purchasing Agent (9007)
Best Practices: Efficient CalcFormula filters • OnDrillDown must match CalcFormula filters • Single record table (Primary Key = '') • RefreshOnActivate = true
See references/ folder for:
cue-patterns.md - Complete code examples52f8705
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.