[]
capabilities.json 的核心由四部分组成:
dataBinding:定义数据入口
options:定义属性入口
actions:定义操作入口
analysis:定义分析入口
一个设计清晰的插件,通常具备以下闭环:
用户绑定数据
用户配置属性
用户执行动作
插件参与筛选、钻取、导出、联动等分析过程
interface IDataBinding {
dataRoles: Array<IDataRole | IDataRolesCollection>;
templates?: IDataRoleTemplate[];
dataViewMappings?: IDataViewMappingConfig[];
conditions?: IDataRoleConditions;
conversionRules?: IConversionRules;
}
interface IOption extends IIconable, ILocalizable {
name: string;
type: DataRoleOptionType | DataRoleTemplateOptionType;
defaultValue?: any;
}
interface IItemOption extends IIconable, ILocalizable {
name: string;
type: DataRoleItemOptionType;
defaultValue?: any;
}enum DataRoleOptionType {
Enum = 'enum',
Format = 'format',
DisplayUnit = 'displayUnit',
}
enum DataRoleItemOptionType {
Enum = 'enum',
Format = 'format',
DisplayUnit = 'displayUnit',
RenderSetting = 'renderSetting',
}
export enum DataRoleType {
Value = 'value',
Grouping = 'grouping',
GroupingOrValue = 'groupingOrValue',
Attribute = 'attribute',
AttributeOrValue = 'attributeOrValue',
}
enum DatasetFieldDataType {
date = 'date',
datetime = 'datetime',
number = 'number',
string = 'string',
boolean = 'boolean',
}
interface IDataRole extends ILocalizable {
name: DataRoleName;
aliasName: DataRoleName;
kind: DataRoleType;
options: IOption[];
itemOptions: IItemOption[];
hidden?: boolean;
acceptedTypes?: DatasetFieldDataType[];
preferredKind?: DataRoleType;
}dataRoles 关键字段说明字段 | 说明 |
|---|---|
| 数据角色名称 |
| 切换图表类型时用于识别等价角色 |
| 角色类型 |
| 针对整个 role 的配置项 |
| 针对 role 内单个字段的配置项 |
| 是否在面板隐藏,但仍可参与映射 |
| 限定允许绑定的数据类型 |
| 对 |
kind 类型类型 | 含义 |
|---|---|
| 分组/维度字段 |
| 度量值字段 |
| 可做分组也可做度量 |
| 分组后取第一个值 |
| 既可做属性也可做值 |
IDataRolesCollection 与模板集合interface IDataRolesCollection extends ILocalizable {
kind: DataRoleType.DataRoleCollection;
groups?: TemplateName[];
collapsible?: boolean;
editable?: boolean;
}
interface IDataRoleTemplate extends ILocalizable, IIconable {
name: TemplateName;
dataRoles?: IDataRole[];
dataViewMappings: IDataViewMappingConfig[];
conditions?: IDataRoleConditions;
options?: IOption[];
}适用场景:
KPI 矩阵
多值组集合
复杂模板型可视化
当插件需要支持“动态增加分组模板”时,通常会使用 templates + collection 组合。
interface IDataViewMapping {
required?: IDataRoleConditions;
}
interface IDataView {
single: ISingleDataView;
plain: IPlainDataView;
matrix: IMatrixDataView;
}
interface IDataRoleProfile {
options: any;
values: IPivotSettingProfile[];
}
interface IPivotSettingProfile {
display: string;
name: string;
method?: AggMethod;
dataType: DataType;
format: string;
}interface ISingleDataViewMapping extends IDataViewMapping {
value: DataRoleName;
}
interface ISingleDataView {
value: number;
profile: { [key: string]: IDataRoleProfile };
options: any;
}适用场景:
KPI
单值卡片
动态数字
interface IPlainDataViewMapping extends IDataViewMapping {
dataRoles: DataRoleName[];
series?: DataRoleName;
trellisRows?: DataRoleName;
trellisColumns?: DataRoleName;
}
interface IPlainDataView {
data: any[];
profile: { [dataRoleName: string]: IDataRoleProfile };
sort: {
[columnDisplay: string]: {
order: any[];
priority: -1 | 0 | 1;
}
};
options: any;
}适用场景:
大多数图表
列表型展示
交互型控件
interface IMatrixDataViewMapping extends IDataViewMapping {
values: DataRoleName[];
rows: DataRoleName[];
columns: DataRoleName[];
}适用场景:
交叉表
透视型图表
热力图、矩阵图
interface IDataRoleCondition {
[dataRoleName: string]: {
max?: number;
min?: number;
};
}说明:
conditions 之间是“或”关系
每个 condition 内部各 role 之间是“且”关系
典型作用:
限制某角色最少绑定几个字段
当 series 存在时,把 values 限制为最多 1 个
控制某个可视化的合法绑定模式
enum ConversionCommand {
All = 'all',
First = 'first',
Last = 'last',
}
enum ConversionPhase {
Pre = 'pre',
Post = 'post'
}
interface IConversionRulesDetail {
mode: ConversionPhase;
conditions?: Array<IDataRoleCondition>;
execute: Array<{
source: DataRoleName;
target: DataRoleName;
cmd: ConversionCommand;
}>;
}
interface IConversionRules {
in?: Array<IConversionRulesDetail>;
out?: Array<IConversionRulesDetail>;
}主要用途:
图表类型切换时的数据角色迁移
从源插件迁移字段到目标插件
在默认转换规则前后追加自定义规则
常见命令含义:
All:全部迁移
First:迁移第一个字段
Last:迁移最后一个字段
interface IOptions {
common?: {
size?: ISize;
margin?: IPosition;
filter?: boolean;
};
visual?: IVisualCategory[];
}enum InheritProperty {
Palette = 'dashboard.palette',
TextStyle = 'dashboard.textStyle',
TitleTextStyle = 'dashboard.titleTextStyle',
BackgroundColor = 'dashboard.backgroundColor',
}
enum PublicPropertyType {
Text = 'Text',
Integer = 'Integer',
Float = 'Float',
Boolean = 'Boolean',
LongText = 'LongText',
Enum = 'Enum',
Color = 'Color',
Percentage = 'Percentage',
Format = 'Format',
DisplayUnit = 'DisplayUnit',
Angle = 'Angle',
Palette = 'Palette',
TextStyle = 'TextStyle',
Position = 'Position',
Image = 'Image',
Hidden = 'Hidden',
ColorAssignment = 'ColorAssignment',
Collection = 'Collection'
}
enum CategoryType {
Title = 'title',
Appearance = 'appearance',
Custom = 'custom',
Interaction = 'interaction',
}interface IVisualCategory extends ILocalizable {
type?: CategoryType;
properties?: IVisualProperty[];
}
interface IProperty {
name: string;
inheritFrom?: InheritProperty;
defaultValue?: any;
structuredPath?: string;
}
interface IVisualProperty extends IProperty {
type?: PublicPropertyType;
hidden?: boolean;
}分类 | 说明 |
|---|---|
| 控制标题开关、对齐方式等 |
| 控制背景、边框、阴影、边距、填充等 |
| 控制交叉筛选、跳转、参数监听、隐藏动作等 |
| 自定义业务属性 |
类型 | 用途 |
|---|---|
| 文本输入 |
| 整数输入 |
| 浮点输入 |
| 开关 |
| 多行文本 |
| 下拉选择 |
| 颜色选择 |
| 百分比滑块 |
| 格式编辑 |
| 显示单位 |
| 角度滑块 |
| 调色板 |
| 字体、字号、颜色 |
| 位置/边距 |
| 图片 |
| 隐藏属性,不在面板展示 |
| 颜色映射属性 |
| 集合型复杂属性 |
| 点击行为配置 |
字段 | 说明 |
|---|---|
| 继承仪表板属性或同级属性 |
| 默认值 |
| 嵌套路径,如 |
| 不在属性面板展示,但可在代码中读写 |
interface IColorAssignmentProperty extends IVisualProperty {
alias?: string;
palettePath?: string;
}使用要求:
在 capabilities.json 中声明 ColorAssignment
在 visual.ts 中实现 getColorAssignmentConfigMapping
Collection 用于定义列表型复杂配置,例如阈值区间、颜色规则、分段区间等。
enum ItemType {
Text = 'Text',
Integer = 'Integer',
Float = 'Float',
Boolean = 'Boolean',
LongText = 'LongText',
Enum = 'Enum',
Color = 'Color',
Percentage = 'Percentage',
Format = 'Format',
DisplayUnit = 'DisplayUnit',
Slider = 'Slider',
Image = 'Image',
}
interface IItemProperty {
name?: string;
displayName?: string;
displayNameKey?: string;
defaultValue?: any;
type: ItemType;
}
interface ICollectionProperty extends IVisualProperty {
itemShape: IItemProperty | IItemProperty[];
defaultValue?: any[];
}enum InteractionMouseEventAction {
ShowTooltip = 'showTooltip',
None = 'none',
Keep = 'keep',
Exclude = 'exclude',
DrillTo = 'drillTo',
JumpTo = 'jumpTo',
AddMonitor = 'addMonitor',
}
interface IClickActionProperty extends IVisualProperty {
disableActions?: Array<InteractionMouseEventAction>;
}interface IAction extends IMember {
type: ActionType;
}动作 | 作用 | 设计态 | 运行态 |
|---|---|---|---|
| 数据过滤 | 是 | 是 |
| 排序 | 是 | 是 |
| 排名 | 是 | 是 |
| 转换图表类型或调整绑定 | 是 | 是 |
| 编辑 | 是 | 否 |
| 聚焦 | 是 | 是 |
| 聚焦态显示数据透视表 | 是 | 否 |
| 导出 PNG / Excel | 否 | 是 |
| 批注 | 是 | 否 |
| 把常用属性映射到动作栏 | 是 | 是 |
| 自定义事件按钮 | 是 | 是 |
| 共享场景 | 是 | 否 |
| 打开完整仪表板 | 是 | 否 |
| 清除选择 | 否 | 是 |
| 记录分析路径 | 否 | 是 |
| 保存为模板 | 是 | 否 |
convertVisualinterface IConvertVisualAction extends IAction {
disableChangePivotSetting?: boolean;
disableChangeChartType?: boolean;
}showDatainterface IShowDataAction extends IAction {
disableCustomData?: boolean;
rule: IConversionRules;
}exportinterface IExportAction extends IAction {
disablePNG?: boolean;
disableExcel?: boolean;
}extensionenum ExtensionType {
Toggle = 'toggle',
Enum = 'enum',
ReferenceLine = '_referenceLine',
TrendLine = '_trendLine',
ImagePicker = '_imagePicker',
ConditionalFormat = '_conditionalFormat',
}
interface IExtensionAction extends IAction {
path: string;
extensionType: ExtensionType;
horizontal?: boolean;
}
interface IToggleExtension extends IExtensionAction {
toggleState?: Array<ILocalizable & IIconable>;
}
interface IEnumExtension extends IExtensionAction {
items: IEnumItem[];
}说明:
extension 允许把属性面板中的属性直接映射到动作栏
path 必须指向对应属性名称
适合暴露高频属性,例如开关、枚举、参考线、条件格式等
eventinterface IEventAction extends IAction {
horizontal?: boolean;
}说明:
定义自定义动作按钮
点击后可通过 eventService.registerOnCustomEventCallback 接收事件
需要特别注意:
在 capabilities.json 中声明动作,不代表业务逻辑已自动生效
例如开启 sort 后,插件仍需在消费 dataView.sort 时自行排序
开启 event 后,仍需在 visual.ts 中注册回调
开启 extension 后,仍需在代码中读取对应属性并响应变化
目前文档重点介绍的是 drill。
interface IDrillAction extends IAction {
rule: IDrillRule;
}
interface IDrillRule {
roles: string[];
type?: DrillDownType;
}
enum DrillDownType {
Default = 'all',
List = 'list',
Path = 'path',
}字段说明:
roles:定义钻取时使用哪些 data role
type:默认钻取模式
all:全部维度
list:部分维度
path:固定路径
这意味着插件不只是“画图”,还可以成为 Wyn 分析链路中的一个节点。