7.8 KiB
BaseApp Block data_config
本文件说明 BaseApp 组件 data_config 的 CLI 映射与操作约束,不复制完整字段 Schema。App 图表的每个 data_sources[] 元素复用 Dashboard Block 配置 的字段取值、筛选、分组、排序及规范化规则;区别是 Dashboard 使用扁平单数据源结构,而 App 图表在顶层使用共享的 base_token 和多数据源 data_sources[]。列表组件是 App 独有协议,不复用 Dashboard 图表结构。本文所称“组件协议”是指 CLI 随版本发布的 API 元数据、本文明确列出的约束及实际服务端校验结果。
类型映射
- 图表:
--type column|bar|line|pie|ring|area|combo|scatter|funnel|wordCloud|radar|statistics - 富文本:
--type text(与 Dashboard 文本组件同名同义) - 列表:
--type list --sub-type standard|grouped|collapsible|card|detail - 列表省略
--sub-type时默认standard type/sub_type创建后不可修改
外层请求字段
- Create 只发送
name、type、按需发送的sub_type和data_config。name、type必填;图表和列表的data_config必填,富文本可省略。 - 标准列表未显式指定
--sub-type时,不发送sub_type,由服务端使用standard默认值;其他列表类型必须发送对应sub_type。 - 图表和富文本不得发送
sub_type。 - Update 只发送
name、data_config,且至少提供一个;未传字段保持不变,不允许修改type、sub_type。 - 布局、位置、尺寸、
show_title等展示配置不属于本期公开 Create/Update 请求字段,CLI 不提供或提升这些字段。
列表配置
列表公共数据源字段为单值 base_token 和 table_name。每个列表最多关联一个 Base,且该 Base 必须位于 App 所在的同一 Workspace。
按组件协议,各 subtype 使用以下字段组:
- 公共:
base_token、table_name、filter、sort_by standard/grouped/collapsible:columns、group_bycard:fields、card_configdetail:fields、detail_configcolumns和fields都是可选字段。未指定时 CLI 不发送,由服务端使用产品默认字段。- 只有用户显式指定
columns/fields时才发送;显式传[]表示明确发送空数组,不能作为默认值自动补入。 filter、sort_by、group_by、card_config、detail_config也都是可选字段;未指定时不发送。- 列表 Create 的
data_config必填,其中只有base_token和table_name是顶层必填字段。 - 可选对象一旦传入,其内部必填项仍须满足协议,例如
filter必须包含conjunction和 1~50 项conditions。
不要添加协议未定义的语义校验,尤其不要假设:
- detail/card 必须有 title;
- grouped/collapsible 必须或只能有一个 group_by;
- fields 存在 role 或 visible 属性。
未知顶层字段会被本地校验拒绝;只有确认 CLI 校验与最新协议不一致时才使用 --no-validate。
创建示例
lark-cli base +app-block-create \
--app-token <app_token> --page-id <page_id> \
--name "订单列表" \
--type list --sub-type standard \
--data-config '{"base_token":"<base_token>","table_name":"订单"}'
字段的具体对象结构与必填性以 CLI 当前版本的 API 元数据和服务端校验结果为准,不在这里猜测未公开属性。
更新语义
下面是只更新顶层 filter 的示例,适用于协议将 filter 定义在 data_config 顶层的组件(所有列表 subtype 均可使用)。组件类型在创建后不可修改,所以 update 命令不再传 --type。App 图表的 filter 定义在对应的 data_sources[] 元素中;更新图表筛选时必须按图表结构传入完整 data_sources,不能把 filter 提到顶层。
lark-cli base +app-block-update \
--app-token <app_token> --page-id <page_id> --block-id <block_id> \
--data-config '{"filter":{"conjunction":"and","conditions":[{"field_name":"状态","operator":"is","value":"已完成"}]}}'
- CLI 只发送用户显式传入的字段。
- 未传字段由服务端保持不变。
- 不为 update 注入 create 默认值,不先读取后拼成全量配置。
- 数组/对象字段的替换粒度以组件协议和服务端校验结果为准。
图表与富文本
App 图表是多数据源结构(ChartDataConfig),与 Dashboard 的扁平单源结构不同。 顶层用一个 base_token(所有数据源共用),table_name / series / count_all / group_by / filter 下沉到每个 data_sources[] 元素里;顶层另有可选的 data_source_mode 和 sort。每个数据源内部各字段的取值逻辑与 Dashboard Block 配置 完全一致(series[].rollup 大写、group_by[].sort 小写等),CLI 对每个 data_sources[] 元素复用同一套规范化与校验。富文本使用 --type text,配置为 {"text":"..."},无数据源;Create 时可省略 data_config,等价于空文本。
text 内容怎么取:text 组件没有
/data接口,走+app-block-get-data会被服务端兜底成通用 500。改用+app-block-get --block-id <widget_id>直接读data_config.text(Markdown 原文)。图表仍走+app-block-get-data --block-id <chart_token>。
顶层参数:
| 参数 | 必填 | 取值 | 说明 |
|---|---|---|---|
base_token |
是 | string |
数据所在 Base 的 token;所有数据源共用同一个值。App 命令不带 --base-token,只能写在 data_config 内 |
data_sources |
是 | ChartDataSourceConfig[] |
有序数组,至少一项 |
data_source_mode |
否 | aggregate / compare |
aggregate(默认)在横轴聚合数据源;compare 按数据源拆分系列 |
sort |
否 | {type: group|value|record, order?: asc|desc} |
顶层排序;statistics 不允许 |
每个 data_sources[] 元素:table_name(必填)、series 与 count_all=true 二选一、group_by(最多 2 项,statistics 不允许)、filter。
{
"base_token": "A2f5boKjfazMzesI9zKbmugTc4T",
"data_sources": [
{
"table_name": "数据表",
"count_all": true,
"group_by": [
{ "field_name": "文本", "mode": "integrated", "sort": { "type": "value", "order": "desc" } }
]
}
]
}
对应命令(单数据源计数柱状图):
lark-cli base +app-block-create \
--app-token <app_token> --page-id <page_id> \
--name "文本分布" --type column \
--data-config '{"base_token":"A2f5boKjfazMzesI9zKbmugTc4T","data_sources":[{"table_name":"数据表","count_all":true,"group_by":[{"field_name":"文本","mode":"integrated","sort":{"type":"value","order":"desc"}}]}]}'
多数据源示例(两张表各出一条系列,按数据源拆分):
lark-cli base +app-block-create \
--app-token <app_token> --page-id <page_id> \
--name "销售与成本" --type combo \
--data-config '{"base_token":"bas_xxx","data_source_mode":"compare","data_sources":[{"table_name":"销售表","group_by":[{"field_name":"月份","sort":{"type":"group","order":"asc"}}],"series":[{"field_name":"销售额","rollup":"SUM"}]},{"table_name":"成本表","group_by":[{"field_name":"月份","sort":{"type":"group","order":"asc"}}],"series":[{"field_name":"成本","rollup":"SUM"}]}],"sort":{"type":"group","order":"asc"}}'
Update 语义:传入 data_sources 即全量替换整个有序数组;修改 base_token 时必须同时传入完整 data_sources。请求不得包含 sub_type(平滑/堆积/百分比等展示变体走产品默认值)。布局、位置、尺寸和展示配置不属于本期公开 Create/Update 协议。其他请求字段以 CLI 当前版本的 API 元数据和服务端校验结果为准。