# datasource — 数据源同步管理 将外部数据源(当前仅支持 OA 审批)同步到 AI 表格。完整链路:list-sources → (OA) 选择模板 → get-fields → create → sync-status → sync / update / get-config。 ## 命令一览 | 命令 | 用途 | 读/写 | |------|------|-------| | `+datasource-list-sources` | 列出可用数据源条目,获取 processCode/name/iconUrl/url | 读 | | `+datasource-get-fields` | 获取可同步字段列表,用于决定 field-ids | 读 | | `+datasource-create` | 创建数据源表并触发首次全量同步 | 写 | | `+datasource-update` | 更新已有数据源表的同步配置 | 写 | | `+datasource-sync` | 手动触发一次同步(最多 5 张表) | 写 | | `+datasource-sync-status` | 查询同步任务状态(RUNNING/FINISHED/FAILED) | 读 | | `+datasource-get-config` | 获取数据源表当前同步配置 | 读 | ## 典型工作流 ``` Step 0 列出可用来源 +datasource-list-sources --base-id --datasource-type OA → 返回 approvals 数组(通常含多个审批模板) Step 0.5 (OA 审批) 选择模板 list-sources 返回的 approvals 数组通常含多个审批模板,需确定目标: - 用户已指定名称(如"采购申请")→ 按 name 精确/模糊匹配 · 唯一命中 → 提取该条的 processCode/name/iconUrl/url,继续 · 多候选 → 列出匹配项让用户消歧 · 零命中 → 停止,提示用户确认名称或从完整列表选择 - 用户未指定 → 列出候选模板清单(name + processCode),等用户选择 - 禁止:未匹配直接选第一项、或凭记忆猜 processCode 注:此步骤针对 OA 审批数据源(多模板场景);其他数据源类型的 list-sources 返回结构可能不同,按实际 result 解析即可, 不一定需要选择步骤。 Step 1 (可选) 获取可同步字段 +datasource-get-fields --base-id --datasource-type OA --source-config '' → 决定需要同步哪些字段,得到 field-ids Step 2 创建数据源 +datasource-create --base-id --datasource-type OA --source-config '' → sourceConfig 中的 processCode/name/iconUrl/url 来自 Step 0.5 选中的模板 → 返回 tableId + taskId Step 3 查询同步结果 +datasource-sync-status --base-id --table-id --task-ids → FINISHED=完成,FAILED=看 errorCode 排查,RUNNING=轮询 Step 4 (后续) 手动触发同步 +datasource-sync --base-id --table-ids , → 返回新 taskId,再用 sync-status 查结果 Step 5 (后续) 更新配置 +datasource-update --base-id --table-id --source-config '' --auto → 更新后自动触发一次同步 查看当前配置 +datasource-get-config --base-id --table-id ``` ## sourceConfig 字段协议 以下字段协议仅适用于 OA 审批数据源(datasourceType=OA),其他数据源类型待后续开放。 ### 须从 list-sources 原样透传(必填) | 字段 | 类型 | 说明 | |------|------|------| | processCode | String | OA 审批流程编码 | | name | String | 展示名称 | | iconUrl | String | 图标 URL | | url | String | 跳转链接 | ### 调用方自行设置 | 字段 | 类型 | 必填 | 说明 | |------|------|------|------| | dataType | String | 是 | 数据范围类型:`time_range` / `start_time` / `recent_time` | | recentDays | String | 条件 | dataType=recent_time 时有效,取值 `7d`/`30d`/`1y`,默认 `30d` | | startDate | String | 条件 | dataType=time_range 或 start_time 时有效,`yyyy-MM-dd`,默认 30 天前 | | endDate | String | 条件 | dataType=time_range 时有效,`yyyy-MM-dd`,默认当天 | | keepRemovedFields | Boolean | 否 | 是否保留已删除字段,默认 false | | splitParentTableField | Boolean | 否 | 是否拆分父表字段 | > list-sources 返回的 keepRemovedFields / splitParentTableField / enableDataSyncOaDetailList 不要透传,由调用方按需设置。 ### 三种 dataType 最小示例 ```json // recent_time — 最近一段时间 {"processCode":"PROC-xxxx","name":"采购申请","dataType":"recent_time","recentDays":"30d","iconUrl":"...","url":"..."} // time_range — 指定起止日期 {"processCode":"PROC-xxxx","name":"采购申请","dataType":"time_range","startDate":"2025-01-01","endDate":"2025-12-31","iconUrl":"...","url":"..."} // start_time — 从某日期至今 {"processCode":"PROC-xxxx","name":"采购申请","dataType":"start_time","startDate":"2025-06-01","iconUrl":"...","url":"..."} ``` ## autoSyncSetting 频率配置 仅在 `--auto=true` 时生效。不传时使用下游默认自动同步策略。 | 字段 | 必填 | 说明 | |------|------|------| | syncType | 是 | `hourly`(按小时间隔)/ `scheduled`(定时触发) | | hourlyInterval | hourly 时 | 正整数,小时间隔 | | scheduleType | scheduled 时 | `daily` / `weekly` / `monthly` | | timeValue | scheduled 时 | `HH:mm` 触发时间 | | selectedMonthDays | monthly 时必填 | 每月几号触发,1-31 | | selectedWeekdays | weekly 时必填 | 每周哪几天触发,1=周一…7=周日 | | skipNonWorkingDay | 否 | 是否跳过非工作日,默认 false | 示例:`{"syncType":"scheduled","scheduleType":"daily","timeValue":"09:00"}` ## 命令详情 ### +datasource-list-sources — 列出可用数据源条目 ```bash dws aitable +datasource-list-sources --base-id BASE_ID --datasource-type OA --format json ``` | flag | 必填 | 说明 | |------|------|------| | `--base-id` | 是 | 目标 Base ID | | `--datasource-type` | 是 | 数据源类型,当前仅支持 `OA` | 返回每条条目包含 `result`(下游原始 JSON 字符串)和 `sourceType`(OA 审批对应 2)。OA 审批场景下 result 为 approvals 数组: ```json { "approvals": [ { "processCode": "PROC-xxxx", "name": "采购申请", "iconUrl": "https://...", "url": "https://...", "keepRemovedFields": false, "splitParentTableField": false, "enableDataSyncOaDetailList": false } ] } ``` 调用方应自行解析 result,提取目标模板字段后构造 sourceConfig。 ### +datasource-get-fields — 获取可同步字段列表 ```bash dws aitable +datasource-get-fields --base-id BASE_ID --datasource-type OA \ --source-config '{"processCode":"PROC-xxxx","name":"采购申请","dataType":"recent_time","recentDays":"30d","iconUrl":"...","url":"..."}' \ --format json ``` | flag | 必填 | 说明 | |------|------|------| | `--base-id` | 是 | 目标 Base ID | | `--datasource-type` | 是 | 数据源类型,当前仅支持 `OA` | | `--source-config` | 是 | 源配置 JSON 字符串,结构同 create 的 --source-config | 返回字段列表(字段 ID、名称、类型等),用于在 create/update 中指定 `--field-ids`。 ### +datasource-create — 创建数据源表 ```bash dws aitable +datasource-create --base-id BASE_ID --datasource-type OA \ --source-config '{"processCode":"PROC-xxxx","name":"采购申请","dataType":"recent_time","recentDays":"30d","iconUrl":"...","url":"..."}' \ --format json # 开启自动同步 + 自定义频率 dws aitable +datasource-create --base-id BASE_ID --datasource-type OA \ --source-config '...' --auto \ --auto-sync-setting '{"syncType":"scheduled","scheduleType":"daily","timeValue":"09:00"}' \ --format json ``` | flag | 必填 | 说明 | |------|------|------| | `--base-id` | 是 | 目标 Base ID | | `--datasource-type` | 是 | 数据源类型,当前仅支持 `OA` | | `--source-config` | 是 | 源配置 JSON 字符串(见上方字段协议) | | `--auto` | 否 | 是否开启自动同步,默认 false;无论是否传入,CLI 都会把该字段下发给下游 | | `--auto-sync-setting` | 否 | 自动同步频率配置 JSON 字符串,仅 --auto=true 时生效 | | `--field-ids` | 否 | 需要同步的字段 ID 列表,不传时同步全部字段 | 返回新建数据源表 tableId 和同步任务 taskId。创建后自动触发一次全量同步,需用 `+datasource-sync-status` 查最终结果。 ### +datasource-update — 更新数据源配置 ```bash # 仅开启自动同步 dws aitable +datasource-update --base-id BASE_ID --table-id TABLE_ID --auto --format json # 更新源配置 dws aitable +datasource-update --base-id BASE_ID --table-id TABLE_ID \ --source-config '{"processCode":"PROC-yyyy","name":"出差申请","dataType":"recent_time","recentDays":"30d","iconUrl":"...","url":"..."}' \ --format json ``` | flag | 必填 | 说明 | |------|------|------| | `--base-id` | 是 | 目标 Base ID | | `--table-id` | 是 | 已有数据源表 ID(sync=true) | | `--source-config` | 否 | 新的源配置 JSON 字符串,不传时保持原配置;传入时整体覆盖 | | `--auto` | 否 | 是否开启自动同步,不传时保持原设置 | | `--auto-sync-setting` | 否 | 自动同步频率配置 JSON 字符串,仅 --auto=true 时生效;不传时保持原频率配置 | | `--field-ids` | 否 | 需要同步的字段 ID 列表,不传时保持现有字段配置 | 更新后自动触发一次全量同步,返回新 taskId。 ### +datasource-sync — 手动触发同步 ```bash dws aitable +datasource-sync --base-id BASE_ID --table-ids TBL1,TBL2 --format json ``` | flag | 必填 | 说明 | |------|------|------| | `--base-id` | 是 | 目标 Base ID | | `--table-ids` | 是 | 待同步的数据源表 ID 列表(sync=true),1-5 个 | 返回结果包含文档链接,可打开查看同步进度。每张表独立提交,部分失败不影响其他表。 ### +datasource-sync-status — 按任务 ID 查询同步状态 ```bash dws aitable +datasource-sync-status --base-id BASE_ID --table-id TABLE_ID --task-ids TASK1,TASK2 --format json ``` | flag | 必填 | 说明 | |------|------|------| | `--base-id` | 是 | 目标 Base ID | | `--table-id` | 是 | 数据源表 ID(sync=true) | | `--task-ids` | 是 | 同步任务 ID 列表(由 create/update/sync 返回),1-5 个 | 任务状态:`RUNNING`(进行中)、`FINISHED`(完成)、`FAILED`(失败,含 errorCode + errorMessage)。 ### +datasource-get-config — 获取数据源配置 ```bash dws aitable +datasource-get-config --base-id BASE_ID --table-id TABLE_ID --format json ``` | flag | 必填 | 说明 | |------|------|------| | `--base-id` | 是 | 目标 Base ID | | `--table-id` | 是 | 数据源表 ID(sync=true) | 返回当前同步配置详情(sourceConfig、是否自动同步、同步状态等)。仅适用于数据源表,普通表会报错。 ## 错误码与排查 | 场景 | 表现 | 排查 | |------|------|------| | 同步运行中重复触发 | errorCode=4014,status=FAILED | 幂等冲突,稍后重试即可 | | 非数据源表触发 sync | 参数错误返回 | 确认 table 的 sync=true,用 `+base-get` / `+table-list` 检查 | | sourceConfig 缺必填字段 | 创建/更新失败 | 检查 processCode/name/iconUrl/url 是否从 list-sources 原样透传 | | dataType 与时间字段不匹配 | 创建失败 | recent_time 需 recentDays;time_range 需 startDate+endDate;start_time 需 startDate | ## 能力边界 | 能力 | 状态 | |------|------| | OA 审批数据源 | 已支持 | | 其他数据源类型 | 待后续开放 | | 全量同步 | 已支持 | | 增量同步 | 待后续开放 | | 自动同步 | 已支持(--auto + autoSyncSetting) | | 删除数据源表 | 走普通表删除,不走 datasource 命令 | ## 注意事项 - sourceConfig 是 **JSON 字符串**(不是 JSON 对象),CLI flag 传入时需要用单引号包裹 - list-sources 返回的 keepRemovedFields / splitParentTableField / enableDataSyncOaDetailList 不要透传,由调用方按需设置 - create/update 后自动触发一次同步,返回 taskId;用 sync-status 查最终结果 - sync 单次最多 5 张表,超出拆分多次调用 - sync-status 单次最多 5 个 taskId,超出拆分多次调用 - get-config 仅适用于数据源表(sync=true),普通表会报错