first commit

This commit is contained in:
2026-09-02 11:44:52 +08:00
commit 0c8fa2653e
309 changed files with 57278 additions and 0 deletions
@@ -0,0 +1,78 @@
# AI 表格记录操作
仅在根 Skill 的记录 Golden Route 参数不足,或需要字段值格式、删除、历史、分享、附件细节时读取。本文件不负责 Base/Table 选路。
## 查询
```bash
dws aitable +record-query --base-id <B> --table-id <T> --record-ids <R1,R2>
dws aitable +record-query --base-id <B> --table-id <T> --record-ids <R1,R2> --field-ids <F_NAME,F_STATUS>
dws aitable +record-query --base-id <B> --table-id <T> --query "关键词" --limit 100
dws aitable +record-query --base-id <B> --table-id <T> --filters '<JSON>' --sort '<JSON>'
dws aitable record query --base-id <B> --table-id <T> --filters '<JSON>' --all --page-limit 50
```
- `record-ids` 用于稳定 ID 精确读取;`query` 用于全文搜索;复杂条件用 `filters`
- 用户要求“只返回/仅查看”指定列时,查询必须在工具层传 `--field-ids <ID1,ID2>`。不要先拉取全部字段再只在最终答复中删列;字段投影既是结果契约,也是降低响应 token 的手段。
- filters 使用 `{"operator":"and|or","operands":[...]}`,字段引用使用 fieldId。若 Case 明确需要复杂操作符,应一开始把 [filter-sort](aitable/aitable-filter-sort.md) 选为唯一 Reference,而不是先读本文件后继续加载。
- `+record-query` 必须传真实 `base-id``table-id`。URL 先用 `+url-resolve`;名称先用 `+resolve-base` / `+resolve-table` 唯一解析,禁止自动选第一项。
- 单页 `limit` 为 1-100。返回 `data.records``data.hasMore`,存在后续页时还会返回 `data.nextCursor`;把该值原样传给下一次 `--cursor`
- `+record-query` 不提供 `--all`;明确要求全量时改用原子 `record query --all --page-limit <N>`。达到页上限后仍有 `hasMore=true` 代表截断,应从返回 cursor 续跑;只有 `hasMore=false`,或按 `record-ids` 查询且所有请求 ID 均已返回时,才能声称结果完整。
## 新增
当前没有 `+record-create`,使用原子命令:
```bash
dws aitable record create --base-id <B> --table-id <T> \
--records '[{"cells":{"fldText":"内容"}}]' --format json
```
长 JSON 写到 cwd 内相对文件后使用 `--records-file ./records.json`。从真实返回的 `data.newRecordIds[]` 取 recordId,再用 `+record-query --record-ids` 回读;用户限定返回列时同时传 `--field-ids`。不要从输入顺序、名称或行号推断 ID。
## 更新、同步与批量修改
已知 recordId
```bash
dws aitable +record-update --base-id <B> --table-id <T> \
--records '[{"recordId":"<R>","cells":{"fldStatus":"完成"}}]'
```
`+record-update` 自动按 100 条分片并逐批回读;该 shortcut 只接受 `--records`。超长文件输入需要改用原子 `record update --records-file`,不要给 shortcut 猜造 flag。
单选、多选等字段的写入值可能是名称字符串,读回则是 `{id,name}` 或对象数组。若 shortcut 因原始类型不同返回 commit-unknown/read-back mismatch,禁止重放更新;只按返回的 recordId 做一次 `+record-query`,把单选按 `name`、多选按名称集合归一化比较。归一化后与目标一致时,按“独立读回已确认写入”报告,并保留 shortcut 的误报信息供排障。
按业务唯一键同步使用 `+record-upsert-by-key`:0 条创建、1 条更新、多条冲突停止。按条件批改使用 `+record-bulk-patch`,必须提供 filters/query/record-ids 中至少一种选择条件,或显式 `--all`,并设置合理 `--max-matches`
## 删除
```bash
dws aitable +record-delete --base-id <B> --table-id <T> --record-ids <R1,R2>
```
删除不可逆。只使用已确认的真实 recordId;shortcut 自动分片并验证记录已不存在。未知结果按 recordId 回读,不重放已完成批次。
## 常用字段值
| 字段类型 | 写入值 |
|---|---|
| 文本、单选 | 字符串;单选使用已有选项名称 |
| 多选 | 选项名称数组 |
| 数字、评分 | JSON number |
| 复选框 | boolean |
| 日期 | 按字段配置要求的时间值;不凭展示文本猜格式 |
| URL | 按当前字段 Schema 要求的对象或字符串 |
| 人员、关联记录 | 使用真实 userId/recordId,不用姓名代替 |
| 附件 | 先用 `+attachment-put` 获得 AITable 附件 token,再写字段 |
公式、查找引用、创建人/时间、修改人/时间等只读字段不得写入。字段类型不明时只读取目标字段配置一次。
## 历史、分享与主键文档
- 记录历史:`dws aitable +record-history-list --base-id <B> --table-id <T> --record-id <R>`。已有真实 recordId 直接执行,不扫描 Help 或产品 Catalog。
- 批量记录分享:`dws aitable +record-share-links --base <B> --table <T> --record-ids <R1,R2>`;单条也可用 `+record-share-url`
- 用户要求把分享链接“发给”联系人时,AITable 的职责在链接生成后结束;随后加载 `dingtalk-chat`,用 `dws chat +dm --to <姓名> --text <包含全部链接的文本>` 对每位收件人分别发送并检查真实回执。只解析联系人或只生成 URL 都不算完成。
- 主键文档:`+record-primary-doc-get` / `+record-primary-doc-create`
创建主键文档必须显式传 primaryDoc 类型的 `--field-id`;字段类型不明时先读取目标字段。正文读写切到 Doc;这里仅管理记录与文档关联。