用途
Domo App Studio(原称 Data Apps)提供多页面仪表盘构建器,采用基于画布的布局系统。每个应用包含多个视图(页面),每个视图拥有控制卡片位置的布局。本技能用于通过 REST API 构建和管理 Domo App Studio 应用,涵盖应用创建、视图/页面管理、画布布局、卡片放置以及多页面仪表盘配置。
主要能力
- 创建应用:通过 POST /content/v1/dataapps 创建新应用,自动生成一个默认着陆视图。
- 读取应用结构:通过 GET /content/v1/dataapps/:dataAppId 获取所有视图、导航、主题和应用级设置。
- 更新应用配置:通过 PUT 更新应用级设置(导航方向、标题、图标等),但不会更新布局。
- 自定义应用图标:生成 256×256 PNG 图标并上传至 Domo Data File Service,再通过应用 PUT 设置 iconDataFileId 和 navIconDataFileId。
- 创建新视图(页面):通过 POST /content/v1/dataapps/:dataAppId/views 创建新页面。
- 读取和更新导航:通过 GET /content/v1/dataapps/:dataAppId/navigation 读取,通过 PUT /navigation/reorder 更新导航顺序、名称和图标。
- 页面布局管理:获取布局、获取写锁、更新布局、释放写锁。
- 卡片管理:向页面添加卡片、列出页面卡片、直接在页面上创建 KPI 卡片、从页面移除卡片、向 Domo 概览页(页面 ID -100000)添加卡片。
使用方式
认证
所有 App Studio API 调用使用 X-Domo-Authentication: {SID} 头。SID 可通过 upload_bridge.py 的 get_sid(instance) 获取,或通过 ryuu 令牌交换流程(domo login → refresh token → SID)获取。开发者令牌(X-DOMO-Developer-Token)对某些端点有效,但对其他端点会失败,SID 是普遍可靠的。
CLI vs API
Java CLI 没有 App Studio 命令。所有 App Studio 操作(创建应用、管理视图、配置布局)都需要通过 curl 调用 REST API。
自定义调色板
必须使用自定义调色板,禁止使用 Domo 原生/默认调色板。从 domo-app-theme/references/color-palettes.md 中选择精选调色板(50 个 OKLCH 调色板,涵盖 9 种和谐类型)。在 pro-code CSS 中使用 OKLCH 值;转换为 hex 用于原生卡片 series_N_color 覆盖。所有 App Studio 主题颜色、pro-code 图表颜色、横幅颜色和卡片样式都必须使用所选调色板。
创建应用
POST /content/v1/dataapps
Body: {"title": "My Dashboard App", "description": "Description of the app"}
响应包含 dataAppId、landingViewId 和 views 数组。应用创建时带有一个默认视图,landingViewId 兼作卡片和布局操作的 pageId。
自定义应用图标
每个 App Studio 应用必须有自定义图标,不能保留默认占位符。
步骤 1:使用 Pillow 生成 256×256 PNG 图标。
步骤 2:上传至 Domo Data File Service:
POST /api/data/v1/data-files?name={app-slug}-icon.png&description={App+Title+Icon}&public=true
Content-Type: image/png
Body: raw PNG bytes
注意:Content-Type 必须是 image/png,否则返回 415。
步骤 3:通过标准应用 PUT 设置 iconDataFileId 和 navIconDataFileId。PUT 必须发送完整应用对象,部分负载会导致 400。
创建新视图
POST /content/v1/dataapps/:dataAppId/views
Body: {"owners": [{"id": 723132419, "type": "USER", "displayName": null}], "type": "dataappview", "title": "Production", "pageName": "Production", "locked": false, "mobileEnabled": true, "sharedViewPage": true, "virtualPage": false}
owners 数组必须至少包含当前用户,type 必须为 dataappview。
导航管理
导航存储在应用对象的 navigations 数组中,但不会通过应用 PUT 更新。必须使用 /navigation/reorder 端点更新导航标签和图标。实体类型包括 HOME、VIEW、AI_ASSISTANT、CONTROLS、DISTRIBUTE、MORE。
页面布局 API
- 获取布局:GET /content/v4/pages/:pageId/layouts
- 获取写锁:PUT /content/v4/pages/layouts/:layoutId/writelock(编辑前必须获取,否则返回 403 WL003)
- 更新布局:PUT /content/v4/pages/layouts/:layoutId(必须持有写锁)
- 释放写锁:DELETE /content/v4/pages/layouts/:layoutId/writelock
卡片管理
- 添加卡片到页面:POST /content/v1/pages/:pageId/cards/:cardId
- 列出页面卡片:GET /content/v1/pages/:pageId/cards
- 直接在页面上创建 KPI 卡片:PUT /content/v3/cards/kpi?pageId=:pageId
- 从页面移除卡片:DELETE /content/v1/pages/:pageId/cards/:cardId
- 向 Domo 概览页添加卡片:POST /content/v1/pages/-100000/cards/:cardId
布局结构
content 数组定义页面上的项目,每个项目有 contentKey 链接到 template 数组。内容类型包括 CARD、HEADER、SPACER、SEPARATOR、PAGE_BREAK。
standard.template 和 compact.template 数组定义每个内容项的网格位置。standard 用于桌面,compact 用于移动端。
画布与附录:virtual 和 virtualAppendix 均为 false 表示在画布上,均为 true 表示在附录中。
网格系统:
- 标准布局(桌面):网格宽度 60 单位,典型卡片宽度 10/15/20/30/60,典型卡片高度 10(KPI/筛选卡)、22(图表)、25(表格)、30(大图表),标题高度 4,间隔高度 3,分隔符高度 2。
- 紧凑布局(移动端):网格宽度 12 单位,典型卡片宽度 12(全宽堆叠),典型卡片高度 6(KPI)、8(图表)、10(表格),标题高度 3。
适用场景
- 在 Domo 平台上构建多页面仪表盘应用。
- 通过 API 自动化管理 App Studio 应用的视图、布局和卡片。
- 需要自定义主题和调色板的 Domo 应用开发。
限制
- Java CLI 没有 App Studio 命令,必须使用 REST API。
- 应用 PUT 必须发送完整对象,部分更新会导致 400 Bad Request。
- 导航更新必须使用专用端点,应用 PUT 中的导航更改会被静默忽略。
- 编辑布局前必须获取写锁,否则返回 403。
- 图标上传的 Content-Type 必须为 image/png。
- 必须使用自定义调色板,禁止使用 Domo 默认调色板。
- 状态:从实时测试逆向工程,2026 年 3 月。已在 aeroateam-partner.domo.com(应用 453445400)、csibas.domo.com(应用 1400847176、2061524048)验证。