@amaster.ai/pi-lark 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +2 -2
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/skills/lark-apps/SKILL.md +24 -12
- package/skills/lark-apps/creative-design/agents/assets/vision-probe.png +0 -0
- package/skills/lark-apps/creative-design/agents/fork-verifier-agent.md +71 -0
- package/skills/lark-apps/creative-design/agents/vision-probe-agent.md +41 -0
- package/skills/lark-apps/creative-design/assets/index.html +27 -0
- package/skills/lark-apps/creative-design/creative-design.md +239 -0
- package/skills/lark-apps/creative-design/references/aily.md +39 -0
- package/skills/lark-apps/creative-design/references/animated-video.md +34 -0
- package/skills/lark-apps/creative-design/references/charts.md +165 -0
- package/skills/lark-apps/creative-design/references/claude.md +36 -0
- package/skills/lark-apps/creative-design/references/codex.md +32 -0
- package/skills/lark-apps/creative-design/references/data-report.md +108 -0
- package/skills/lark-apps/creative-design/references/frontend-design.md +71 -0
- package/skills/lark-apps/creative-design/references/hi-fi-design.md +32 -0
- package/skills/lark-apps/creative-design/references/interactive-prototype.md +24 -0
- package/skills/lark-apps/creative-design/references/make-a-deck.md +133 -0
- package/skills/lark-apps/creative-design/references/visual-exposure.md +82 -0
- package/skills/lark-apps/creative-design/references/wireframe.md +14 -0
- package/skills/lark-apps/creative-design/starter-components/android-frame.jsx +188 -0
- package/skills/lark-apps/creative-design/starter-components/animations.jsx +773 -0
- package/skills/lark-apps/creative-design/starter-components/browser-window.jsx +122 -0
- package/skills/lark-apps/creative-design/starter-components/deck-stage.js +2483 -0
- package/skills/lark-apps/creative-design/starter-components/design-canvas.jsx +1432 -0
- package/skills/lark-apps/creative-design/starter-components/ios-frame.jsx +270 -0
- package/skills/lark-apps/creative-design/starter-components/macos-window.jsx +197 -0
- package/skills/lark-apps/creative-design/starter-components/tweaks-panel.jsx +752 -0
- package/skills/lark-apps/references/lark-apps-automation.md +80 -2
- package/skills/lark-apps/references/lark-apps-cache.md +61 -0
- package/skills/lark-apps/references/lark-apps-cloud-dev.md +0 -1
- package/skills/lark-apps/references/lark-apps-create.md +1 -2
- package/skills/lark-apps/references/lark-apps-db.md +1 -1
- package/skills/lark-apps/references/lark-apps-env-pull.md +1 -1
- package/skills/lark-apps/references/lark-apps-file.md +2 -2
- package/skills/lark-apps/references/lark-apps-git-credential.md +1 -1
- package/skills/lark-apps/references/lark-apps-html-publish.md +4 -8
- package/skills/lark-apps/references/lark-apps-init.md +1 -1
- package/skills/lark-apps/references/lark-apps-list.md +1 -1
- package/skills/lark-apps/references/lark-apps-local-dev.md +54 -11
- package/skills/lark-apps/references/lark-apps-openapi-key.md +1 -1
- package/skills/lark-apps/references/lark-apps-release-create.md +2 -2
- package/skills/lark-apps/references/lark-apps-release-get.md +3 -3
- package/skills/lark-base/SKILL.md +20 -13
- package/skills/lark-base/references/lark-base-cell-value.md +3 -3
- package/skills/lark-base/references/lark-base-data-query.md +11 -4
- package/skills/lark-base/references/lark-base-field-create.md +4 -0
- package/skills/lark-base/references/lark-base-field-json.md +4 -4
- package/skills/lark-base/references/lark-base-field-update.md +17 -1
- package/skills/lark-base/references/lark-base-filter-condition.md +179 -0
- package/skills/lark-base/references/lark-base-form-questions-create.md +40 -7
- package/skills/lark-base/references/lark-base-form-questions-update.md +73 -20
- package/skills/lark-base/references/lark-base-form-submit.md +16 -7
- package/skills/lark-base/references/lark-base-record-batch-create.md +12 -10
- package/skills/lark-base/references/lark-base-record-batch-update.md +11 -9
- package/skills/lark-base/references/lark-base-record-upsert.md +1 -1
- package/skills/lark-base/references/lark-base-role-guide.md +11 -0
- package/skills/lark-base/references/lark-base-view-set-filter.md +11 -137
- package/skills/lark-base/references/role-config.md +31 -5
- package/skills/lark-calendar/SKILL.md +14 -8
- package/skills/lark-calendar/references/lark-calendar-create.md +6 -5
- package/skills/lark-calendar/references/lark-calendar-recurring.md +1 -0
- package/skills/lark-calendar/references/lark-calendar-room-find.md +2 -1
- package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +1 -0
- package/skills/lark-calendar/references/lark-calendar-suggestion.md +1 -1
- package/skills/lark-calendar/references/lark-calendar-update.md +10 -4
- package/skills/lark-contact/SKILL.md +19 -3
- package/skills/lark-contact/references/lark-contact-search-bot.md +60 -0
- package/skills/lark-doc/references/lark-doc-fetch.md +10 -2
- package/skills/lark-doc/references/lark-doc-whiteboard.md +9 -8
- package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +41 -0
- package/skills/lark-doc/references/lark-doc-xml.md +4 -3
- package/skills/lark-drive/SKILL.md +25 -45
- package/skills/lark-drive/references/lark-drive-add-comment.md +2 -4
- package/skills/lark-drive/references/lark-drive-add-reply.md +47 -0
- package/skills/lark-drive/references/lark-drive-apply-permission.md +2 -2
- package/skills/lark-drive/references/lark-drive-batch-query-comments.md +46 -0
- package/skills/lark-drive/references/lark-drive-comment-content.md +50 -0
- package/skills/lark-drive/references/lark-drive-comment-location.md +9 -15
- package/skills/lark-drive/references/lark-drive-delete-reply.md +48 -0
- package/skills/lark-drive/references/lark-drive-download.md +5 -1
- package/skills/lark-drive/references/lark-drive-list-comments.md +25 -68
- package/skills/lark-drive/references/lark-drive-list-replies.md +54 -0
- package/skills/lark-drive/references/lark-drive-member-add.md +2 -2
- package/skills/lark-drive/references/lark-drive-member-list.md +65 -0
- package/skills/lark-drive/references/lark-drive-permission-get-setting.md +48 -0
- package/skills/lark-drive/references/lark-drive-preview.md +11 -1
- package/skills/lark-drive/references/lark-drive-react-reply.md +51 -0
- package/skills/lark-drive/references/lark-drive-reactions.md +27 -25
- package/skills/lark-drive/references/lark-drive-resolve-comment.md +45 -0
- package/skills/lark-drive/references/lark-drive-restore-comment.md +46 -0
- package/skills/lark-drive/references/lark-drive-search.md +7 -1
- package/skills/lark-drive/references/lark-drive-secure-label.md +1 -1
- package/skills/lark-drive/references/lark-drive-update-reply.md +46 -0
- package/skills/lark-drive/references/lark-drive-upload.md +1 -0
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance-commands.md +38 -8
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance-outputs.md +10 -10
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance.md +22 -20
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-execute.md +273 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-recall.md +202 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-resolve-verify.md +231 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-review-plan.md +248 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector-setup.md +174 -0
- package/skills/lark-drive/references/lark-drive-workflow-topic-move-collector.md +202 -0
- package/skills/lark-drive/references/lark-drive-workflow.md +5 -4
- package/skills/lark-event/SKILL.md +1 -0
- package/skills/lark-event/references/lark-event-application.md +38 -0
- package/skills/lark-im/SKILL.md +1 -1
- package/skills/lark-im/references/card/card-2.0-schema.md +1 -1
- package/skills/lark-im/references/card/lark-im-card-style.md +4 -4
- package/skills/lark-im/references/card/resource/icons.md +14 -0
- package/skills/lark-im/references/lark-im-flag-list.md +8 -7
- package/skills/lark-okr/SKILL.md +71 -26
- package/skills/lark-okr/references/lark-okr-batch-create.md +19 -18
- package/skills/lark-okr/references/lark-okr-create.md +173 -0
- package/skills/lark-okr/references/lark-okr-cycle-list.md +17 -7
- package/skills/lark-okr/references/lark-okr-entities.md +1 -0
- package/skills/lark-okr/references/lark-okr-indicator-update.md +3 -1
- package/skills/lark-okr/references/lark-okr-indicators.md +61 -12
- package/skills/lark-okr/references/lark-okr-progress-list.md +21 -9
- package/skills/lark-slides/SKILL.md +115 -68
- package/skills/lark-slides/references/asset-planning.md +6 -4
- package/skills/lark-slides/references/iconpark.md +2 -2
- package/skills/lark-slides/references/lark-slides-create.md +16 -8
- package/skills/lark-slides/references/lark-slides-history.md +132 -0
- package/skills/lark-slides/references/lark-slides-media-upload.md +2 -3
- package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +7 -11
- package/skills/lark-slides/references/lark-slides-replace-slide.md +0 -3
- package/skills/lark-slides/references/lark-slides-screenshot.md +4 -4
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-create.md +219 -0
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +6 -5
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +2 -2
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +2 -3
- package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +65 -30
- package/skills/lark-slides/references/planning-layer.md +11 -10
- package/skills/lark-slides/references/slides_chart_demo.xml +1416 -1
- package/skills/lark-slides/references/slides_xml_schema_definition.xml +492 -76
- package/skills/lark-slides/references/troubleshooting.md +25 -7
- package/skills/lark-slides/references/validation-checklist.md +53 -16
- package/skills/lark-slides/references/visual-planning.md +25 -22
- package/skills/lark-slides/references/xml-schema-quick-ref.md +281 -45
- package/skills/lark-slides/scripts/sxsd_validator.py +908 -0
- package/skills/lark-slides/scripts/xml_text_overlap_lint.py +1650 -165
- package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +3139 -513
- package/skills/lark-task/SKILL.md +7 -0
- package/skills/lark-task/references/lark-task-complete.md +6 -2
- package/skills/lark-task/references/lark-task-create.md +9 -0
- package/skills/lark-task/references/lark-task-update.md +6 -2
- package/skills/lark-whiteboard/SKILL.md +13 -12
- package/skills/lark-whiteboard/elements/layout.md +1 -1
- package/skills/lark-whiteboard/elements/schema.md +2 -2
- package/skills/lark-whiteboard/references/{lark-whiteboard-query.md → lark-whiteboard-export.md} +15 -15
- package/skills/lark-whiteboard/references/lark-whiteboard-update.md +3 -3
- package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +7 -17
- package/skills/lark-whiteboard/routes/dsl.md +3 -3
- package/skills/lark-whiteboard/routes/mermaid.md +2 -2
- package/skills/lark-whiteboard/routes/svg-edit.md +4 -4
- package/skills/lark-whiteboard/routes/svg.md +11 -6
- package/skills/lark-whiteboard/scenes/bar-chart.md +1 -1
- package/skills/lark-whiteboard/scenes/fishbone.md +1 -1
- package/skills/lark-whiteboard/scenes/flywheel.md +1 -1
- package/skills/lark-whiteboard/scenes/line-chart.md +1 -1
- package/skills/lark-whiteboard/scenes/treemap.md +1 -1
- package/skills/lark-wiki/SKILL.md +1 -0
- package/skills/lark-drive/references/lark-drive-comments-guide.md +0 -80
- package/skills/lark-slides/references/examples.md +0 -91
- package/skills/lark-slides/references/lark-slides-whiteboard.md +0 -331
- package/skills/lark-slides/references/lark-slides-xml-get.md +0 -100
- package/skills/lark-slides/references/slide-templates.md +0 -201
- package/skills/lark-slides/references/slides_demo.xml +0 -226
- package/skills/lark-slides/references/xml-format-guide.md +0 -433
|
@@ -8,8 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
- `--json` 必须是 JSON 对象。
|
|
10
10
|
- `+record-upsert`:顶层直接传字段映射:`{"字段名或字段ID": CellValue}`。
|
|
11
|
-
- `+record-batch-create
|
|
12
|
-
- `+record-batch-update
|
|
11
|
+
- `+record-batch-create`:使用 `create_records`,其每个元素都是 `Map<FieldNameOrID, CellValue>`。
|
|
12
|
+
- `+record-batch-update`:使用 `update_records`,其每个 value 都是 `Map<FieldNameOrID, CellValue>`。
|
|
13
13
|
- 一次 payload 里同一字段只用一种 key(字段名或字段 ID),不要重复。
|
|
14
14
|
- 写入前先 `+field-list` 获取字段 `type/style/multiple`,再构造值。
|
|
15
15
|
- 需要清空字段时优先传 `null`(字段允许清空时)。
|
|
@@ -48,7 +48,7 @@ text 字段的 `style.type` 影响单元格检查逻辑:
|
|
|
48
48
|
|
|
49
49
|
### 2.3 select(单选/多选)
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
`select` 字段用 `multiple` 区分单选和多选:`multiple=false` 时传选项名字符串,`multiple=true` 时传选项名数组。只支持写入字段中已有的选项;构造 CellValue 前先用 `+field-list` 或 `+field-search-options` 确认目标选项存在。
|
|
52
52
|
|
|
53
53
|
```json
|
|
54
54
|
{
|
|
@@ -79,16 +79,23 @@ lark-cli base +data-query \
|
|
|
79
79
|
| `--base-token <token>` | 是 | Base Token(base_token) |
|
|
80
80
|
| `--dsl <json>` | 是 | LiteQuery Protocol JSON DSL 查询语句 |
|
|
81
81
|
|
|
82
|
-
##
|
|
82
|
+
## 如何从链接中解析参数
|
|
83
83
|
|
|
84
84
|
用户通常会提供如下 URL:
|
|
85
85
|
|
|
86
|
+
```text
|
|
87
|
+
https://example.feishu.cn/base/<base_token>?table=<block_id>
|
|
86
88
|
```
|
|
87
|
-
|
|
89
|
+
|
|
90
|
+
不要直接把 URL 中的 `table=` 当成数据表 ID。它表示当前选中的 Base 顶层块,可能是数据表、仪表盘、工作流、文件夹或文档。先解析链接:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
lark-cli base +url-resolve --url "<url>" --as user
|
|
88
94
|
```
|
|
89
95
|
|
|
90
|
-
- `--base-token
|
|
91
|
-
- DSL 中的 `tableId
|
|
96
|
+
- `--base-token`:使用返回的 `base_token`
|
|
97
|
+
- 仅当返回的 `block_type` 为 `table` 时,DSL 中的 `tableId` 才使用返回的 `table_id`
|
|
98
|
+
- 如果返回的是其他块类型,按 `hint.next_step` 继续处理;如果只返回中性的 `block_id`,先用 `+base-block-list` 确认块类型,再选择实际要查询的数据表
|
|
92
99
|
|
|
93
100
|
## API 入参详情
|
|
94
101
|
|
|
@@ -87,16 +87,20 @@ POST /open-apis/base/v3/bases/:base_token/tables/:table_id/fields
|
|
|
87
87
|
## 返回重点
|
|
88
88
|
|
|
89
89
|
- 返回 `field` 和 `created: true`。
|
|
90
|
+
- 如果返回 `field_get_recommended:false` 且 `next_step:"done"`,表示本次是简单字段创建,通常不需要立刻执行 `+field-get`。
|
|
91
|
+
- 如果返回 `field_get_recommended:true` 或 `next_step:"field_get"`,按 `verification_hint` 读回字段;`formula`、`lookup`、`link`、`auto_number` 等计算、关联或生成型字段更适合读回确认服务端最终结构。
|
|
90
92
|
|
|
91
93
|
## 工作流
|
|
92
94
|
|
|
93
95
|
|
|
94
96
|
1. formula / lookup 字段必须先阅读对应指南;没读之前不要直接创建。
|
|
97
|
+
2. 创建简单字段时,优先相信命令返回;只有用户要求精确核对额外属性,或返回建议读回时,才继续执行 `+field-get`。
|
|
95
98
|
|
|
96
99
|
## 坑点
|
|
97
100
|
|
|
98
101
|
- ⚠️ 这是写入操作,执行前必须确认。
|
|
99
102
|
- ⚠️ 当 `type` 是 `formula` 或 `lookup` 时,先读对应 guide,再创建。
|
|
103
|
+
- ⚠️ 不要把“每次创建后都 `+field-get`”当作固定流程;按返回里的 `field_get_recommended` 和 `next_step` 决定是否读回。
|
|
100
104
|
|
|
101
105
|
## 参考
|
|
102
106
|
|
|
@@ -180,11 +180,11 @@
|
|
|
180
180
|
|
|
181
181
|
支持字段:`icon`、`min`、`max`
|
|
182
182
|
|
|
183
|
-
默认值 /
|
|
183
|
+
默认值 / 已知平台范围:
|
|
184
184
|
- `icon` 默认 `star`
|
|
185
185
|
- `icon` 可用:`star`、`heart`、`thumbsup`、`fire`、`smile`、`lightning`、`flower`、`number`
|
|
186
186
|
- `min` 取值 `0..1`,默认 `1`
|
|
187
|
-
- `max`
|
|
187
|
+
- `max` 默认 `5`;常见或已文档化的范围为 `1..10`,但 CLI 不强制上限为 `10`。如果用户明确需要更大评分范围,优先确认平台能力或用 `+field-create/update --dry-run` 检查请求形状;平台拒绝后再建议改用普通数字或进度字段。
|
|
188
188
|
|
|
189
189
|
```json
|
|
190
190
|
{
|
|
@@ -419,7 +419,7 @@
|
|
|
419
419
|
|
|
420
420
|
### 3.11 auto_number
|
|
421
421
|
|
|
422
|
-
|
|
422
|
+
自动编号字段;创建时不写 `style.rules` 会使用默认规则:`NO.001`。更新已有自动编号字段时应显式提交目标 `style.rules`,因为 `+field-update` 会把新的编号规则重新应用到已有编号。
|
|
423
423
|
|
|
424
424
|
最小写法:
|
|
425
425
|
|
|
@@ -512,7 +512,7 @@
|
|
|
512
512
|
## 4. 创建与更新
|
|
513
513
|
|
|
514
514
|
- `+field-create`:按目标字段配置直接构造 `--json`。
|
|
515
|
-
- `+field-update`:使用同样的 JSON 结构,但语义是 `PUT`;建议先 `+field-get`,再按目标完整状态提交,并带 `--yes
|
|
515
|
+
- `+field-update`:使用同样的 JSON 结构,但语义是 `PUT`;建议先 `+field-get`,再按目标完整状态提交,并带 `--yes`。当 `type` 是 `auto_number` 时,更新编号规则本身就会把新规则应用到已有编号,无需额外参数,也不要在 JSON 里塞额外的底层实现参数。
|
|
516
516
|
|
|
517
517
|
## 5. 暂不支持字段
|
|
518
518
|
|
|
@@ -20,6 +20,13 @@ lark-cli base +field-update \
|
|
|
20
20
|
--field-id <field_id> \
|
|
21
21
|
--json '{"name":"负责人","type":"user","multiple":false,"default_value":null,"description":"用于标记记录的直接负责人"}' \
|
|
22
22
|
--yes
|
|
23
|
+
|
|
24
|
+
lark-cli base +field-update \
|
|
25
|
+
--base-token <base_token> \
|
|
26
|
+
--table-id <table_id> \
|
|
27
|
+
--field-id <field_id> \
|
|
28
|
+
--json '{"name":"编号","type":"auto_number","style":{"rules":[{"type":"text","text":"TASK-"},{"type":"created_time","date_format":"yyyyMM"},{"type":"text","text":"-"},{"type":"incremental_number","length":4}]}}' \
|
|
29
|
+
--yes
|
|
23
30
|
```
|
|
24
31
|
|
|
25
32
|
## 参数
|
|
@@ -42,6 +49,8 @@ lark-cli base +field-update \
|
|
|
42
49
|
PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/fields/:field_id
|
|
43
50
|
```
|
|
44
51
|
|
|
52
|
+
当 `--json.type` 是 `auto_number` 时,仍然走同一个 v3 字段更新接口:更新自动编号规则后,接口现状就会把新规则应用到已有编号(这是接口默认行为,只是 agent 通常不知道),因此**不需要**任何额外开关或参数。只需要正常提交目标自动编号字段定义即可;如果用户要求“将修改用于已有编号”,直接执行这次 `+field-update` 就能达到效果,不要在 `--json` 里额外添加任何参数去“触发”重排。
|
|
53
|
+
|
|
45
54
|
## JSON 值规范
|
|
46
55
|
|
|
47
56
|
- `--json` 必须是 **JSON 对象**,顶层直接传字段定义。
|
|
@@ -52,6 +61,7 @@ PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/fields/:field_id
|
|
|
52
61
|
- `link` 更新限制:
|
|
53
62
|
- 不能把非 `link` 字段改成 `link`,也不能把 `link` 改成非 `link`。
|
|
54
63
|
- 现有 `link` 字段的 `bidirectional` 不能改。
|
|
64
|
+
- `auto_number` 更新的 `style.rules` 支持 `text`、`created_time`、`incremental_number`。
|
|
55
65
|
|
|
56
66
|
**推荐更新示例**
|
|
57
67
|
|
|
@@ -83,13 +93,18 @@ PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/fields/:field_id
|
|
|
83
93
|
## 返回重点
|
|
84
94
|
|
|
85
95
|
- 返回 `field` 和 `updated: true`。
|
|
96
|
+
- `updated:true` 只表示更新请求成功,不表示字段结构、已有记录值或下游能力已经完成验证。`+field-update` 无法知道更新前的字段类型,因此成功响应会推荐执行 `+field-get`;若发生类型转换,还要抽样读取记录值。
|
|
97
|
+
- 如果响应中的 `field.type` 与提交的 `type` 不一致,必须把它当作待核验的类型不匹配;不能返回完成态,也不能只根据其中任一类型推断更新成功。
|
|
98
|
+
- 如果 API 报告本次更新没有产生任何变更(no-op),命令会如实返回该错误;这通常说明目标字段已是期望状态,不要机械重试同一份 `+field-update`。需要确认当前字段完整状态时执行 `+field-get`。
|
|
99
|
+
- 如果返回 `field_get_recommended:true` 或 `next_step:"field_get"`,按提示读回字段;`auto_number` 更新后还应抽样读记录值确认编号已按新规则生成。
|
|
86
100
|
|
|
87
101
|
## 工作流
|
|
88
102
|
|
|
89
103
|
|
|
90
104
|
1. 建议先用 `+field-get` 拉现状,再做最小化修改。
|
|
91
105
|
2. `formula/lookup` 类型更新前先阅读对应指南。
|
|
92
|
-
3.
|
|
106
|
+
3. 如果更新 `auto_number`,理解为“更新编号规则,同时把新规则应用到已有编号”;执行后按返回提示读回字段并在必要时抽样记录值。
|
|
107
|
+
4. 如果这次更新会改变字段 `type` 先按下方“字段类型变更规则”判断能否执行。如果不修改 `type`,大多数场景都相对安全。
|
|
93
108
|
|
|
94
109
|
## 字段类型变更规则
|
|
95
110
|
|
|
@@ -155,6 +170,7 @@ PUT /open-apis/base/v3/bases/:base_token/tables/:table_id/fields/:field_id
|
|
|
155
170
|
### 完成态验证
|
|
156
171
|
|
|
157
172
|
- `FieldReadback`: 读回字段结构,确认 `type` / `multiple` / `style` / `options`
|
|
173
|
+
- `NoopReadback`: `+field-update` 返回 no-op 错误时,只能说明 API 报告没有产生变更;可以跳过重复 update,但不能替代 `FieldReadback`
|
|
158
174
|
- `ValueReadback`: 抽样读回转换后的单元格值
|
|
159
175
|
- `DownstreamReadback`: 若涉及看板 / 分组 / 排序 / lookup / 公式,继续读回结果
|
|
160
176
|
- `CompletionRule`: 结构、值、下游能力都正确,才能回复“已完成”
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
# Base Filter 条件结构(公共协议)
|
|
2
|
+
|
|
3
|
+
Filter 是一组「字段/操作符/值」条件的组合,用 `logic`(`and` / `or`)把多条 `conditions` 连接起来,用于描述「满足什么条件」。视图筛选 `filter`、记录读取/搜索的 `--filter-json`、表单题目显隐条件 `visible_rule` 复用同一套 tuple 结构,本文件是其公共协议(SSOT)。
|
|
4
|
+
|
|
5
|
+
## 0. 适用范围
|
|
6
|
+
|
|
7
|
+
本协议只适用于以下场景:
|
|
8
|
+
|
|
9
|
+
- `+view-set-filter` / `+view-get-filter` 的视图筛选配置。
|
|
10
|
+
- `+record-list --filter-json` / `+record-search --filter-json` 的结构化记录筛选。
|
|
11
|
+
- `+form-questions-create` / `+form-questions-update` 中的 `visible_rule` 显隐条件。
|
|
12
|
+
|
|
13
|
+
本协议**不适用于 `+data-query`**。`+data-query` 支持过滤,但使用的是 LiteQuery DSL 的 `filters` 对象结构:`{"type":1,"conjunction":"and","conditions":[{"field_name":"状态","operator":"is","value":["有效"]}]}`,不是这里的 tuple 条件 `["状态","==","有效"]`。构造 `+data-query --dsl` 时请阅读 [lark-base-data-query.md](lark-base-data-query.md) 的 FilterGroup / Condition 章节。
|
|
14
|
+
|
|
15
|
+
## 1. 顶层结构
|
|
16
|
+
|
|
17
|
+
- 必须是 JSON 对象。
|
|
18
|
+
- 顶层结构是 `{logic?, conditions?}`。
|
|
19
|
+
- `logic` 默认 `and`;推荐只用 canonical 值 `and` / `or`。
|
|
20
|
+
- `conditions` 默认空数组。
|
|
21
|
+
- 每条条件写成 tuple:`[field, operator, value?]`。
|
|
22
|
+
- `empty` / `non_empty` 可写成 2 项:`[field, "empty"]`、`[field, "non_empty"]`。
|
|
23
|
+
|
|
24
|
+
```json
|
|
25
|
+
{
|
|
26
|
+
"logic": "and",
|
|
27
|
+
"conditions": [
|
|
28
|
+
["状态", "intersects", ["Doing"]],
|
|
29
|
+
["负责人", "intersects", [{ "id": "ou_xxx" }]],
|
|
30
|
+
["截止时间", "empty"]
|
|
31
|
+
]
|
|
32
|
+
}
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
清空写法:
|
|
36
|
+
|
|
37
|
+
```json
|
|
38
|
+
{
|
|
39
|
+
"conditions": []
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
## 2. operator
|
|
44
|
+
|
|
45
|
+
可用 operator:
|
|
46
|
+
- `==`
|
|
47
|
+
- `!=`
|
|
48
|
+
- `>`
|
|
49
|
+
- `>=`
|
|
50
|
+
- `<`
|
|
51
|
+
- `<=`
|
|
52
|
+
- `intersects`
|
|
53
|
+
- `disjoint`
|
|
54
|
+
- `empty`
|
|
55
|
+
- `non_empty`
|
|
56
|
+
|
|
57
|
+
## 3. value 写法
|
|
58
|
+
|
|
59
|
+
value 类型取决于条件引用对象(字段 / 题目)的类型。
|
|
60
|
+
|
|
61
|
+
### `text`
|
|
62
|
+
|
|
63
|
+
用字符串:
|
|
64
|
+
|
|
65
|
+
```json
|
|
66
|
+
["标题", "intersects", "发布"]
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### `location`
|
|
70
|
+
|
|
71
|
+
location 筛选只按 `full_address` 字符串匹配,不能直接按经纬度筛选;优先使用 `intersects` 做包含匹配,例如查深圳:
|
|
72
|
+
|
|
73
|
+
```json
|
|
74
|
+
["位置", "intersects", "深圳"]
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
不推荐写 `["位置", "==", "深圳"]` 这类精确匹配,除非确保筛选值与完整 `full_address` 完全一致。
|
|
78
|
+
|
|
79
|
+
### `number` / `auto_number`
|
|
80
|
+
|
|
81
|
+
用数字:
|
|
82
|
+
|
|
83
|
+
```json
|
|
84
|
+
["工时", ">=", 3.5]
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### `select`
|
|
88
|
+
|
|
89
|
+
用选项名数组:
|
|
90
|
+
|
|
91
|
+
```json
|
|
92
|
+
["状态", "intersects", ["Doing", "Blocked"]]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### `user` / `created_by` / `updated_by`
|
|
96
|
+
|
|
97
|
+
用对象数组:
|
|
98
|
+
|
|
99
|
+
> **人员筛选:不要猜 ID。** 不知道 `open_id` 时,先用 `lark-contact` 查 id:`lark-cli contact +search-user --query "<姓名/邮箱/手机号>" --as user`。
|
|
100
|
+
|
|
101
|
+
```json
|
|
102
|
+
["负责人", "intersects", [{ "id": "ou_xxx" }]]
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### `group_chat`
|
|
106
|
+
|
|
107
|
+
用对象数组:
|
|
108
|
+
|
|
109
|
+
> **群组筛选:不要猜 ID。** 不知道 `chat_id` 时,先用 `lark-im` 搜群:`lark-cli im +chat-search --query "<群名关键词>" --as user`;取结果里的 `oc_xxx`。
|
|
110
|
+
|
|
111
|
+
```json
|
|
112
|
+
["负责群", "intersects", [{ "id": "oc_xxx" }]]
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### `link`
|
|
116
|
+
|
|
117
|
+
用记录 id 对象数组:
|
|
118
|
+
|
|
119
|
+
```json
|
|
120
|
+
["关联任务", "intersects", [{ "id": "rec_xxx" }]]
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### `checkbox`
|
|
124
|
+
|
|
125
|
+
用布尔值:
|
|
126
|
+
|
|
127
|
+
```json
|
|
128
|
+
["完成", "==", true]
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### `datetime` / `created_at` / `updated_at`
|
|
132
|
+
|
|
133
|
+
用相对时间关键字或 `ExactDate(...)`:
|
|
134
|
+
|
|
135
|
+
```json
|
|
136
|
+
["截止时间", "==", "ExactDate(2026-01-01)"]
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
["截止时间", "==", "ExactDate(2026-01-01 11:30)"]
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
["截止时间", "==", "Today"]
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
可用关键字:
|
|
148
|
+
- `Today`
|
|
149
|
+
- `Yesterday`
|
|
150
|
+
- `Tomorrow`
|
|
151
|
+
|
|
152
|
+
### `formula` / `lookup`
|
|
153
|
+
|
|
154
|
+
- 筛选值类型由字段计算结果类型动态决定。
|
|
155
|
+
- 拿不准时,先把 `value` 当作单个字符串填入做一次尝试。
|
|
156
|
+
- 如果报错,再按错误提示把 `value` 改成对应类型。
|
|
157
|
+
|
|
158
|
+
字符串示例:
|
|
159
|
+
|
|
160
|
+
```json
|
|
161
|
+
["风险说明", "intersects", "高风险"]
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
数字示例:
|
|
165
|
+
|
|
166
|
+
```json
|
|
167
|
+
["汇总分", ">=", 80]
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## 4. 易错点
|
|
171
|
+
|
|
172
|
+
- 不要再写旧对象风格:`{"field_name":...,"operator":...}`。
|
|
173
|
+
- `user` / `group_chat` / `link` 不要写成单个标量。
|
|
174
|
+
- `empty` / `non_empty` 不要硬塞无意义的 value。
|
|
175
|
+
- 日期条件稳定写法用 `ExactDate(...)` 或 `Today` / `Yesterday` / `Tomorrow`。
|
|
176
|
+
- `formula` / `lookup` 的 value 形状不固定;拿不准时先读当前配置或字段定义,或根据错误提示修正类型。
|
|
177
|
+
|
|
178
|
+
## 5. 参考
|
|
179
|
+
- [lookup-field-guide.md](lookup-field-guide.md)
|
|
@@ -19,10 +19,7 @@ lark-cli base +form-questions-create \
|
|
|
19
19
|
--base-token <base_token> \
|
|
20
20
|
--table-id <table_id> \
|
|
21
21
|
--form-id <form_id> \
|
|
22
|
-
--questions '[
|
|
23
|
-
{"type":"text","title":"您的姓名是?","required":true},
|
|
24
|
-
{"type":"text","title":"您的联系方式是?","required":false}
|
|
25
|
-
]'
|
|
22
|
+
--questions '[{"type":"text","title":"您的姓名是?","required":true},{"type":"text","title":"您的联系方式是?","required":false}]'
|
|
26
23
|
|
|
27
24
|
# 添加单选题(带选项)
|
|
28
25
|
lark-cli base +form-questions-create \
|
|
@@ -50,6 +47,13 @@ lark-cli base +form-questions-create \
|
|
|
50
47
|
--table-id <table_id> \
|
|
51
48
|
--form-id <form_id> \
|
|
52
49
|
--questions '[{"type":"text","title":"反馈建议","description":"更多详情请查看[帮助文档](https://example.com/help)"}]'
|
|
50
|
+
|
|
51
|
+
# 添加带显隐条件(visible_rule)的问题:当「是否需要发票」选择「是」时才显示「发票抬头」
|
|
52
|
+
lark-cli base +form-questions-create \
|
|
53
|
+
--base-token <base_token> \
|
|
54
|
+
--table-id <table_id> \
|
|
55
|
+
--form-id <form_id> \
|
|
56
|
+
--questions '[{"type":"select","title":"是否需要发票","required":true,"options":[{"name":"是","hue":"Blue"},{"name":"否","hue":"Gray"}]},{"type":"text","title":"发票抬头","visible_rule":{"logic":"and","conditions":[["是否需要发票","==","是"]]}}]'
|
|
53
57
|
```
|
|
54
58
|
|
|
55
59
|
## 参数
|
|
@@ -78,6 +82,7 @@ lark-cli base +form-questions-create \
|
|
|
78
82
|
| `multiple` | 否 | 是否多选(`select`/`user` 类型有效,bool) |
|
|
79
83
|
| `options` | 否 | 选项列表(仅 `select` 有效):`[{"name":"选项1","hue":"Blue"}]`,hue 可选:`Red`/`Orange`/`Yellow`/`Green`/`Blue`/`Purple`/`Gray` |
|
|
80
84
|
| `style` | 否 | 字段样式配置(见下方说明) |
|
|
85
|
+
| `visible_rule` | 否 | 题目显隐条件(见下方「`visible_rule` 显隐条件」) |
|
|
81
86
|
|
|
82
87
|
### `style` 字段说明
|
|
83
88
|
|
|
@@ -88,6 +93,30 @@ lark-cli base +form-questions-create \
|
|
|
88
93
|
| `number`(评分) | `{"type":"rating","icon":"star","min":1,"max":5}` | icon 可选:`star`/`heart`/`thumbsup`/`fire`/`smile`/`lightning`/`flower`/`number` |
|
|
89
94
|
| `datetime` | `{"format":"yyyy/MM/dd"}` | format 可选:`yyyy/MM/dd`、`yyyy/MM/dd HH:mm`、`MM-dd`、`MM/dd/yyyy`、`dd/MM/yyyy` |
|
|
90
95
|
|
|
96
|
+
### `visible_rule` 显隐条件
|
|
97
|
+
|
|
98
|
+
> **仅当用户明确要求为题目设置显隐条件(显示/隐藏逻辑)时,才需要读下面的结构说明;否则忽略本节。**
|
|
99
|
+
|
|
100
|
+
`visible_rule` 控制题目在表单中的显示/隐藏:当条件满足时题目显示,不满足时隐藏;不传或 `conditions` 为空数组则题目始终显示。
|
|
101
|
+
|
|
102
|
+
- **结构与视图筛选 `filter` 完全一致**,即 `{logic?, conditions?}`,共用同一套公共协议。
|
|
103
|
+
- 与视图 `filter` 唯一的区别:`conditions` 中的 `field` 引用的是**同一表单内其他题目的题目名称或题目 ID**(推荐用题目 ID 以避免重名歧义),而不是数据表字段。
|
|
104
|
+
- **只能引用前序题目**:条件只能引用排在当前题目之前的题目——创建时按 `questions` 数组顺序判定(可引用同批次更靠前的新题目或表单中已有题目),不支持循环引用。
|
|
105
|
+
- 引用的题目必须真实存在,否则会报错。
|
|
106
|
+
- 列出题目(`+form-questions-list`)会在每个题目对象中**原样返回** `visible_rule`;未设置显隐条件的题目返回 `null` 或 `conditions` 为空数组。
|
|
107
|
+
|
|
108
|
+
```json
|
|
109
|
+
{
|
|
110
|
+
"logic": "and",
|
|
111
|
+
"conditions": [
|
|
112
|
+
["是否需要发票", "==", "是"],
|
|
113
|
+
["报销金额", ">=", 1000]
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
详细的 `visible_rule` 结构(顶层规则、operator 列表、各题目类型的 value 写法)请阅读 [lark-base-filter-condition.md](lark-base-filter-condition.md)。
|
|
119
|
+
|
|
91
120
|
## 输出格式
|
|
92
121
|
|
|
93
122
|
返回创建成功的问题列表:
|
|
@@ -108,11 +137,15 @@ lark-cli base +form-questions-create \
|
|
|
108
137
|
> [!CAUTION]
|
|
109
138
|
> 这是**写入操作** — 执行前必须向用户确认。
|
|
110
139
|
|
|
111
|
-
1.
|
|
112
|
-
2.
|
|
113
|
-
3.
|
|
140
|
+
1. 先确定表单所属的真实 `table_id`,并在整个表单管理工作流中复用它;仅在 ID 缺失或归属不明确时调用 `+table-list`。
|
|
141
|
+
2. 用 `+form-questions-list` 查看现有问题。问题 `id` 是承载该问题的 `field_id`,不是独立于数据表的临时 ID。
|
|
142
|
+
3. 除非用户明确要求同名的独立问题,否则目标标题已经存在时用 `+form-questions-update` 更新必填状态、标题或描述;不要创建同名问题后再删除旧问题。
|
|
143
|
+
4. 创建确实不存在的问题,或用户明确要求的同名独立问题,并报告新建的问题 ID。
|
|
144
|
+
|
|
145
|
+
`+form-questions-delete` 会删除承载问题的数据表字段,不能删除主字段问题。不要通过“新建重复问题再删除旧问题”来替换主字段。
|
|
114
146
|
|
|
115
147
|
## 参考
|
|
116
148
|
|
|
117
149
|
- [lark-base](../SKILL.md) — 多维表格全部命令
|
|
150
|
+
- [lark-base-filter-condition.md](lark-base-filter-condition.md) — `visible_rule` / `filter` 条件结构公共协议
|
|
118
151
|
- [lark-shared](../../lark-shared/SKILL.md) — 认证和全局参数
|
|
@@ -2,40 +2,60 @@
|
|
|
2
2
|
|
|
3
3
|
> **前置条件:** 先阅读 [`../lark-shared/SKILL.md`](../../lark-shared/SKILL.md) 了解认证、全局参数和安全规则。
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
批量更新多维表格表单/问卷中的问题配置(标题、描述、是否必填、显隐条件等)。
|
|
6
|
+
|
|
7
|
+
> [!CAUTION]
|
|
8
|
+
> `+form-questions-update` 是**题目配置全量覆盖**,不是 patch。对每个传入的题目,未携带的属性会回落为默认值,显式传空字符串 / `null` / 空数组会直接写入空或清空;如果要保留现有属性,必须先用 `+form-questions-list` 查出现状,再把要保留的字段一起带回 `--questions`。
|
|
6
9
|
|
|
7
10
|
## 命令
|
|
8
11
|
|
|
9
12
|
```bash
|
|
10
|
-
#
|
|
13
|
+
# 先读取现有题目配置,作为 read-modify-write 的基线
|
|
14
|
+
lark-cli base +form-questions-list \
|
|
15
|
+
--base-token <base_token> \
|
|
16
|
+
--table-id <table_id> \
|
|
17
|
+
--form-id <form_id>
|
|
18
|
+
|
|
19
|
+
# 更新一个问题的标题,同时带回要保留的 required / description / visible_rule 等字段
|
|
11
20
|
lark-cli base +form-questions-update \
|
|
12
21
|
--base-token <base_token> \
|
|
13
22
|
--table-id <table_id> \
|
|
14
23
|
--form-id <form_id> \
|
|
15
|
-
--questions '[{"id":"q_001","title":"您的真实姓名是?"}]'
|
|
24
|
+
--questions '[{"id":"q_001","title":"您的真实姓名是?","description":"请填写真实姓名","required":true,"visible_rule":null}]'
|
|
16
25
|
|
|
17
|
-
#
|
|
26
|
+
# 同时更新多个问题;每个对象都应是该题目的目标完整配置
|
|
18
27
|
lark-cli base +form-questions-update \
|
|
19
28
|
--base-token <base_token> \
|
|
20
29
|
--table-id <table_id> \
|
|
21
30
|
--form-id <form_id> \
|
|
22
|
-
--questions '[
|
|
23
|
-
{"id":"q_001","title":"姓名(必填)","required":true},
|
|
24
|
-
{"id":"q_002","title":"联系方式","required":false}
|
|
25
|
-
]'
|
|
31
|
+
--questions '[{"id":"q_001","title":"姓名(必填)","required":true},{"id":"q_002","title":"联系方式","required":false}]'
|
|
26
32
|
|
|
27
|
-
#
|
|
33
|
+
# 更新问题描述(纯文本),同时带回要保留的 title / required / visible_rule
|
|
34
|
+
lark-cli base +form-questions-update \
|
|
35
|
+
--base-token <base_token> \
|
|
36
|
+
--table-id <table_id> \
|
|
37
|
+
--form-id <form_id> \
|
|
38
|
+
--questions '[{"id":"q_001","title":"您的姓名","description":"请填写您的真实姓名","required":true,"visible_rule":null}]'
|
|
39
|
+
# 更新问题描述(含链接),同时带回要保留的 title / required / visible_rule
|
|
28
40
|
lark-cli base +form-questions-update \
|
|
29
41
|
--base-token <base_token> \
|
|
30
42
|
--table-id <table_id> \
|
|
31
43
|
--form-id <form_id> \
|
|
32
|
-
--questions '[{"id":"q_001","description":"
|
|
33
|
-
|
|
44
|
+
--questions '[{"id":"q_001","title":"反馈建议","description":"更多说明请参考[帮助文档](https://example.com/help)","required":false,"visible_rule":null}]'
|
|
45
|
+
|
|
46
|
+
# 更新题目显隐条件(visible_rule),同时带回要保留的 title / description / required
|
|
34
47
|
lark-cli base +form-questions-update \
|
|
35
48
|
--base-token <base_token> \
|
|
36
49
|
--table-id <table_id> \
|
|
37
50
|
--form-id <form_id> \
|
|
38
|
-
--questions '[{"id":"
|
|
51
|
+
--questions '[{"id":"q_002","title":"发票抬头","description":"","required":false,"visible_rule":{"logic":"and","conditions":[["q_001","==","是"]]}}]'
|
|
52
|
+
|
|
53
|
+
# 清空题目显隐条件(使题目始终显示),同时带回要保留的 title / description / required
|
|
54
|
+
lark-cli base +form-questions-update \
|
|
55
|
+
--base-token <base_token> \
|
|
56
|
+
--table-id <table_id> \
|
|
57
|
+
--form-id <form_id> \
|
|
58
|
+
--questions '[{"id":"q_002","title":"发票抬头","description":"","required":false,"visible_rule":null}]'
|
|
39
59
|
```
|
|
40
60
|
|
|
41
61
|
## 参数
|
|
@@ -52,15 +72,46 @@ lark-cli base +form-questions-update \
|
|
|
52
72
|
|
|
53
73
|
## `--questions` 格式
|
|
54
74
|
|
|
55
|
-
每个问题对象必须包含 `id
|
|
75
|
+
每个问题对象必须包含 `id`。注意:对象不是增量 patch,而是该题目的目标完整配置;未携带字段会按服务端默认值重建。
|
|
56
76
|
|
|
57
77
|
| 字段 | 必填 | 说明 |
|
|
58
78
|
|------|------|------|
|
|
59
79
|
| `id` | **是** | 问题 ID(field_id),不可修改 |
|
|
60
|
-
| `title` | 否 |
|
|
61
|
-
| `description` | 否 |
|
|
62
|
-
| `required` | 否 |
|
|
63
|
-
| `option_display_mode` | 否 |
|
|
80
|
+
| `title` | 否 | 目标问题标题;省略会回落为字段名,传空字符串会写入空标题(若服务端允许) |
|
|
81
|
+
| `description` | 否 | 目标问题描述(纯文本或 Markdown 链接,如 `[文本](https://example.com)`);省略或传空字符串都会清空描述 |
|
|
82
|
+
| `required` | 否 | 目标是否必填;省略会回落为 `false` |
|
|
83
|
+
| `option_display_mode` | 否 | 目标选项展示方式(仅 `select` 有效):`0`=下拉,`1`=纵向(默认),`2`=横向;省略会回落默认展示方式 |
|
|
84
|
+
| `visible_rule` | 否 | 目标题目显隐条件;传完整 `{logic, conditions}` 对象覆盖,传 `null` 或省略都会清空(见下方说明) |
|
|
85
|
+
|
|
86
|
+
## 全量覆盖语义
|
|
87
|
+
|
|
88
|
+
- 先执行 `+form-questions-list`,读取被更新题目的当前 `id`、`title`、`description`、`required`、`option_display_mode`、`visible_rule`。
|
|
89
|
+
- 构造 `--questions` 时,只改用户明确要求变化的字段;所有仍要保留的字段必须按当前值一并传回。
|
|
90
|
+
- 不要用“只传要改的字段”的方式更新题目。比如只传 `{"id":"q_002","title":"新标题"}` 会让 `description` 清空、`required` 回落为 `false`、`visible_rule` 清空。
|
|
91
|
+
- 用户明确要求清空时才传空值:`description:""` 清空描述,`visible_rule:null` 清空显隐条件,`conditions:[]` 也表示无条件显示。
|
|
92
|
+
|
|
93
|
+
### `visible_rule` 显隐条件
|
|
94
|
+
|
|
95
|
+
> **仅当用户明确要求为题目设置或修改显隐条件(显示/隐藏逻辑)时,才需要读下面的结构说明;否则忽略本节。**
|
|
96
|
+
|
|
97
|
+
`visible_rule` 控制题目显示/隐藏,**结构与视图筛选 `filter` 完全一致**(`{logic?, conditions?}`),共用同一套公共协议。
|
|
98
|
+
|
|
99
|
+
- `conditions` 中的 `field` 引用**同一表单内其他题目的题目名称或题目 ID**(推荐用题目 ID)。
|
|
100
|
+
- 更新时按表单中题目的**实际顺序**判定,只能引用排在当前题目之前的题目;不支持循环引用。
|
|
101
|
+
- 更新 `visible_rule` 需传**完整**的 `{logic, conditions}` 对象(整体覆盖);要保留现有显隐条件就必须把当前 `visible_rule` 原样带回;传 `null`、省略 `visible_rule` 或传空 `conditions` 都会使题目始终显示。
|
|
102
|
+
- 列出题目(`+form-questions-list`)会在每个题目对象中**原样返回** `visible_rule`;未设置显隐条件的题目返回 `null` 或 `conditions` 为空数组。
|
|
103
|
+
|
|
104
|
+
```json
|
|
105
|
+
{
|
|
106
|
+
"logic": "and",
|
|
107
|
+
"conditions": [
|
|
108
|
+
["q_001", "==", "是"],
|
|
109
|
+
["q_003", ">=", 1000]
|
|
110
|
+
]
|
|
111
|
+
}
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
详细的 `visible_rule` 结构(顶层规则、operator 列表、各题目类型的 value 写法)请阅读 [lark-base-filter-condition.md](lark-base-filter-condition.md)。
|
|
64
115
|
|
|
65
116
|
## 输出格式
|
|
66
117
|
|
|
@@ -82,11 +133,13 @@ lark-cli base +form-questions-update \
|
|
|
82
133
|
> [!CAUTION]
|
|
83
134
|
> 这是**写入操作** — 执行前必须向用户确认。
|
|
84
135
|
|
|
85
|
-
1. 先用 `+form-questions-list` 获取现有问题及其 `id`
|
|
86
|
-
2.
|
|
87
|
-
3.
|
|
136
|
+
1. 先用 `+form-questions-list` 获取现有问题及其 `id` 和完整配置。
|
|
137
|
+
2. 以现有配置为基线,只修改用户明确要求变化的字段;要保留的字段必须原样带回。
|
|
138
|
+
3. 构造包含 `id` 和目标完整配置的更新数组。
|
|
139
|
+
4. 执行命令并报告更新结果。
|
|
88
140
|
|
|
89
141
|
## 参考
|
|
90
142
|
|
|
91
143
|
- [lark-base](../SKILL.md) — 多维表格全部命令
|
|
144
|
+
- [lark-base-filter-condition.md](lark-base-filter-condition.md) — `visible_rule` / `filter` 条件结构公共协议
|
|
92
145
|
- [lark-shared](../../lark-shared/SKILL.md) — 认证和全局参数
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
|
|
5
5
|
通过表单分享链接填写并提交多维表格表单。仅支持分享模式(share_token),支持填写普通字段值和上传本地文件作为附件。
|
|
6
6
|
|
|
7
|
+
> **⚠️ 高风险写操作(high-risk-write):** 本命令会向表单写入并提交数据,属于高风险写操作,必须额外传递 `--yes` 进行确认,否则会返回 `confirmation_required` 错误并退出。当用户明确要求提交且目标表单无歧义时,直接附加 `--yes`,无需再次询问。
|
|
8
|
+
|
|
7
9
|
## 填写前必读:先获取表单详情
|
|
8
10
|
|
|
9
11
|
**在调用 `+form-submit` 之前,必须先使用 `+form-detail` 获取表单详情。** 原因如下:
|
|
@@ -21,10 +23,11 @@ lark-cli base +form-detail --share-token <share_token>
|
|
|
21
23
|
|
|
22
24
|
# 2️⃣ 根据返回的 questions 列表,按 type 格式化值、检查 required、判断 filter 条件
|
|
23
25
|
|
|
24
|
-
# 3️⃣
|
|
26
|
+
# 3️⃣ 再提交(高风险写操作,必须带 --yes)
|
|
25
27
|
lark-cli base +form-submit \
|
|
26
28
|
--share-token <share_token> \
|
|
27
|
-
--json '{"fields":{...}}'
|
|
29
|
+
--json '{"fields":{...}}' \
|
|
30
|
+
--yes
|
|
28
31
|
```
|
|
29
32
|
|
|
30
33
|
`+form-detail` 的返回中要重点读取 `questions[].type`、`questions[].required`、题目 `filter` 和附件场景所需的 `data.base_token`。
|
|
@@ -35,7 +38,8 @@ lark-cli base +form-submit \
|
|
|
35
38
|
# 基本提交(填写普通字段)
|
|
36
39
|
lark-cli base +form-submit \
|
|
37
40
|
--share-token <share_token> \
|
|
38
|
-
--json '{"fields":{"服务评分":5,"评价内容":"服务态度好"}}'
|
|
41
|
+
--json '{"fields":{"服务评分":5,"评价内容":"服务态度好"}}' \
|
|
42
|
+
--yes
|
|
39
43
|
|
|
40
44
|
# 带附件提交(需要额外提供 --base-token)
|
|
41
45
|
lark-cli base +form-submit \
|
|
@@ -47,15 +51,17 @@ lark-cli base +form-submit \
|
|
|
47
51
|
"附件字段名": ["./report.pdf", "./photo.png"],
|
|
48
52
|
"另一个附件字段": ["./doc.docx"]
|
|
49
53
|
}
|
|
50
|
-
}'
|
|
54
|
+
}' \
|
|
55
|
+
--yes
|
|
51
56
|
|
|
52
57
|
# 使用应用身份(bot)
|
|
53
58
|
lark-cli base +form-submit \
|
|
54
59
|
--share-token <share_token> \
|
|
55
60
|
--json '{"fields":{...}}' \
|
|
56
|
-
--as bot
|
|
61
|
+
--as bot \
|
|
62
|
+
--yes
|
|
57
63
|
|
|
58
|
-
# 预览 API
|
|
64
|
+
# 预览 API 调用(不实际执行,dry-run 无需 --yes)
|
|
59
65
|
lark-cli base +form-submit \
|
|
60
66
|
--share-token <share_token> \
|
|
61
67
|
--json '{"fields":{...}}' \
|
|
@@ -69,6 +75,7 @@ lark-cli base +form-submit \
|
|
|
69
75
|
| `--share-token <token>` | 是 | 表单分享 Token(必填),从表单分享链接中提取 |
|
|
70
76
|
| `--base-token <token>` | 条件必填 | Base token;**当 `--json` 包含 `attachments` 时必须提供**,用于将附件上传到 Base Drive Media |
|
|
71
77
|
| `--json <json>` | 是 | JSON 对象,包含 `"fields"`(普通字段值)和 `"attachments"`(附件上传),详见下方说明 |
|
|
78
|
+
| `--yes` | 是 | 确认高风险写操作。本命令为 high-risk-write,不带 `--yes` 会返回 `confirmation_required` |
|
|
72
79
|
| `--format` | 否 | 输出格式:json(默认)\| pretty \| table \| ndjson \| csv |
|
|
73
80
|
| `--as` | 否 | 身份:user(默认)\| bot |
|
|
74
81
|
| `--dry-run` | 否 | 预览 API 调用,不执行 |
|
|
@@ -138,7 +145,8 @@ https://www.example.com/share/base/form/shrbcvST8eZy0vk8zjVZ1CAXNye
|
|
|
138
145
|
```bash
|
|
139
146
|
lark-cli base +form-submit \
|
|
140
147
|
--share-token shrbcvST8eZy0vk8zjVZ1CAXNye \
|
|
141
|
-
--json '{"fields":{...}}'
|
|
148
|
+
--json '{"fields":{...}}' \
|
|
149
|
+
--yes
|
|
142
150
|
```
|
|
143
151
|
|
|
144
152
|
## 输出格式
|
|
@@ -158,6 +166,7 @@ lark-cli base +form-submit \
|
|
|
158
166
|
|
|
159
167
|
## 提示
|
|
160
168
|
|
|
169
|
+
- **本命令为高风险写操作(high-risk-write),必须额外传递 `--yes` 确认**,否则返回 `confirmation_required` 并以非零码退出;`--dry-run` 预览除外
|
|
161
170
|
- 本命令仅支持通过表单分享链接(share_token)提交,不支持通过 base_token + table_id + view_id 方式提交
|
|
162
171
|
- **当 `--json` 包含 `attachments` 时,必须额外提供 `--base-token`**,因为附件上传到 Base Drive Media 需要指定目标 Base
|
|
163
172
|
- 附件字段只需在 `--json.attachments` 中提供本地路径即可,CLI 自动完成校验、并行上传、Token 获取和合并写入
|