openyida 2026.5.18 → 2026.5.19-beta.1
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/package.json
CHANGED
|
@@ -14,6 +14,7 @@ const SKILL_COVERAGE = {
|
|
|
14
14
|
'yida-app': { level: 'real-e2e', stages: ['app', 'form', 'page', 'data', 'report', 'dashboard'] },
|
|
15
15
|
'yida-app-permission': { level: 'offline-unit', tests: ['tests/app-permission.test.js'], reason: 'app admin mutations affect real application access; shared real E2E only validates safe read paths' },
|
|
16
16
|
'yida-basic-info': { level: 'offline-unit', tests: ['tests/basic-info.test.js'], reason: 'basic-info reads org admin metadata and can update domains; unit coverage avoids mutating shared real org settings' },
|
|
17
|
+
'yida-business-rule': { level: 'opt-in', reason: 'business association rules mutate form event configuration; validate in a dedicated real-form/UI stage before adding to deterministic shared E2E' },
|
|
17
18
|
'yida-chart': { level: 'real-e2e', stages: ['report', 'dashboard'], tests: ['report chart config generation'] },
|
|
18
19
|
'yida-connector': { level: 'offline', stages: ['connector-local'], commands: ['connector gen-template', 'connector parse-api'] },
|
|
19
20
|
'yida-corp-efficiency': { level: 'offline-unit', tests: ['tests/corp-efficiency.test.js'], reason: 'enterprise efficiency queries and notify mutations are not safe for shared real org E2E' },
|
package/yida-skills/SKILL.md
CHANGED
|
@@ -180,6 +180,7 @@ openyida copy
|
|
|
180
180
|
| `yida-table-form` | `skills/yida-table-form/SKILL.md` | 表格形态批量录入页面 | 详见 SKILL.md |
|
|
181
181
|
| `yida-process-rule` | `skills/yida-process-rule/SKILL.md` | 配置流程规则、审批节点和字段权限 | `openyida configure-process <appType> <formUuid> <流程JSON>` |
|
|
182
182
|
| `yida-integration` | `skills/yida-integration/SKILL.md` | 集成自动化逻辑流(创建/列表/启停) | `openyida integration <create\|list\|enable\|disable> ...` |
|
|
183
|
+
| `yida-business-rule` | `skills/yida-business-rule/SKILL.md` | 表单业务关联规则高级函数(INSERT/UPDATE/DELETE/UPSERT) | 详见 SKILL.md |
|
|
183
184
|
| `yida-connector` | `skills/yida-connector/SKILL.md` | HTTP 连接器创建、测试与动作管理 | `openyida connector smart-create <配置>` |
|
|
184
185
|
| `sls-log-workbench` | `skills/sls-log-workbench/SKILL.md` | SLS 日志查询工作台排查(内部技术支持) | 详见 SKILL.md |
|
|
185
186
|
| `yida-dashboard` | `skills/yida-dashboard/SKILL.md` | 经营看板/驾驶舱/数据大屏完整产品化交付(单屏控制塔+宜搭待办连接器真实钉钉待办闭环+卡片截图+组织内短链) | 详见 SKILL.md |
|
|
@@ -293,10 +293,17 @@ DEPTNAME(LOGINUSERWORKNO())
|
|
|
293
293
|
|
|
294
294
|
| 函数名 | 说明 | 表单 | 报表 | 数据准备 |
|
|
295
295
|
|--------|------|------|------|---------|
|
|
296
|
-
| `
|
|
297
|
-
| `
|
|
298
|
-
| `
|
|
299
|
-
| `
|
|
296
|
+
| `INSERT(目标表, 目标列1, 目标值1, ...)` | 将当前表数据插入到目标表 | ✅ | ❌ | ❌ |
|
|
297
|
+
| `UPDATE(目标表, 主条件, 子条件, 目标列1, 目标值1, ...)` | 更新目标表中符合条件的数据 | ✅ | ❌ | ❌ |
|
|
298
|
+
| `UPSERT(目标表, 主条件, 子条件, 目标列1, 目标值1, ...)` | 往目标表插入或更新数据(有则更新,无则插入) | ✅ | ❌ | ❌ |
|
|
299
|
+
| `DELETE(目标表, 主条件, 子条件)` | 删除目标表中符合条件的数据 | ✅ | ❌ | ❌ |
|
|
300
|
+
|
|
301
|
+
### 高级函数配置要点
|
|
302
|
+
|
|
303
|
+
- 高级函数只能配置在「表单设置 → 表单事件 → 公式执行 → 添加业务关联规则」中,不是普通字段默认值公式。
|
|
304
|
+
- 公式编辑器中目标表、目标列、当前表字段必须通过左侧列表点击插入令牌;不要直接手敲表单名或字段名。
|
|
305
|
+
- `子条件` 用于定位目标表某条数据下的子表单明细;不操作子表单时必须写 `""`,不能省略。
|
|
306
|
+
- 在 `EQ()` 等逻辑函数中,除 `AND()`、`OR()` 外,第一个参数必须是目标表中的组件,不能与当前表字段写反。
|
|
300
307
|
|
|
301
308
|
### 高级函数用量限制
|
|
302
309
|
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: yida-business-rule
|
|
3
|
+
description: 宜搭表单业务关联规则/高级函数配置技能。用于用户明确要求在表单设置中配置业务关联规则,或使用 INSERT、UPDATE、DELETE、UPSERT 高级函数做跨表增删改。不适用于:常规推荐的集成自动化逻辑流(应使用 yida-integration),或普通字段默认值/校验公式(应使用 yida-formula)。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# yida-business-rule — 业务关联规则高级函数
|
|
7
|
+
|
|
8
|
+
## 适用边界
|
|
9
|
+
|
|
10
|
+
业务关联规则是宜搭表单设置里的旧式/低频跨表联动能力。用户明确提到以下意图时使用本技能:
|
|
11
|
+
|
|
12
|
+
- "业务关联规则"、"表单事件里的公式执行"
|
|
13
|
+
- "高级函数"、"INSERT"、"UPDATE"、"DELETE"、"UPSERT"
|
|
14
|
+
- "要在表单设置里配 upsert/update/delete/insert"
|
|
15
|
+
- 明确不想用集成自动化,而要用公式函数做跨表增删改
|
|
16
|
+
|
|
17
|
+
默认建议:
|
|
18
|
+
|
|
19
|
+
| 场景 | 使用技能 |
|
|
20
|
+
|------|---------|
|
|
21
|
+
| 常规提交后跨表联动、长期维护、节点编排 | `yida-integration` |
|
|
22
|
+
| 用户明确要求高级函数/业务关联规则 | **本技能** |
|
|
23
|
+
| 字段默认值、计算字段、自定义校验 | `yida-formula` |
|
|
24
|
+
| 查询/新增/更新已有表单数据记录 | `yida-data-management` |
|
|
25
|
+
|
|
26
|
+
## 配置入口
|
|
27
|
+
|
|
28
|
+
在表单设计器里进入:
|
|
29
|
+
|
|
30
|
+
```text
|
|
31
|
+
表单设置 → 表单事件 → 公式执行 → 添加业务关联规则
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
业务关联规则弹窗包含三个事件输入框:
|
|
35
|
+
|
|
36
|
+
| 事件 | 触发时机 |
|
|
37
|
+
|------|---------|
|
|
38
|
+
| `单据提交` | 新增记录提交成功后 |
|
|
39
|
+
| `单据删除` | 删除记录成功后 |
|
|
40
|
+
| `单据编辑` | 编辑记录提交成功后 |
|
|
41
|
+
|
|
42
|
+
点击事件输入框会打开「公式执行」编辑器。配置完成后必须依次确认:公式弹窗 → 业务关联规则弹窗 → 保存表单。
|
|
43
|
+
|
|
44
|
+
## 关键原则:必须插入令牌
|
|
45
|
+
|
|
46
|
+
业务关联公式不是普通字段公式。普通字段公式引用字段用 `#{fieldId}`;业务关联规则引用目标表、目标字段、当前表字段时,必须在公式编辑器左侧列表点击插入令牌。
|
|
47
|
+
|
|
48
|
+
不要直接手敲中文表单名或字段名。实际验证中,手敲下面这种文本会报非法标识符:
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
UPSERT(Upsert目标,EQ(Upsert目标.键,"x"),"",Upsert目标.键,"x")
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
正确方式是在编辑器中输入函数名、括号、逗号、字符串常量,然后点击左侧字段列表插入 `Upsert目标`、`Upsert目标.键` 等令牌。最终输入框看起来可能和手敲文本相似,但内部结构不同。
|
|
55
|
+
|
|
56
|
+
## 高级函数签名
|
|
57
|
+
|
|
58
|
+
| 函数 | 格式 | 说明 |
|
|
59
|
+
|------|------|------|
|
|
60
|
+
| `INSERT` | `INSERT(目标表, 目标列1, 目标值1, 目标列2, 目标值2, ...)` | 向目标表插入新实例 |
|
|
61
|
+
| `UPDATE` | `UPDATE(目标表, 主条件, 子条件, 目标列1, 目标值1, ...)` | 更新目标表中满足条件的数据 |
|
|
62
|
+
| `UPSERT` | `UPSERT(目标表, 主条件, 子条件, 目标列1, 目标值1, ...)` | 有匹配数据则更新,无匹配数据则插入 |
|
|
63
|
+
| `DELETE` | `DELETE(目标表, 主条件, 子条件)` | 删除目标表中满足条件的数据 |
|
|
64
|
+
|
|
65
|
+
`子条件` 用于定位目标表某条数据下的子表单明细。不操作子表单时必须写 `""`,不能省略。
|
|
66
|
+
|
|
67
|
+
## UPSERT 模板
|
|
68
|
+
|
|
69
|
+
普通主表字段 upsert:
|
|
70
|
+
|
|
71
|
+
```text
|
|
72
|
+
UPSERT(目标表, EQ(目标表.业务键, 当前表业务键), "", 目标表.业务键, 当前表业务键, 目标表.目标字段, 当前表来源字段)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
库存类示例:
|
|
76
|
+
|
|
77
|
+
```text
|
|
78
|
+
UPSERT(存货表, EQ(存货表.商品名, 商品名), "", 存货表.商品名, 商品名, 存货表.存货量, 存货表.存货量 + 进货量)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
固定值探测示例:
|
|
82
|
+
|
|
83
|
+
```text
|
|
84
|
+
UPSERT(Upsert目标, EQ(Upsert目标.键, "_openyida_upsert_probe"), "", Upsert目标.键, "_openyida_upsert_probe", Upsert目标.备注, "configured from form settings")
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
以上示例中的表单名和字段名只是可读展示。真实配置时,所有表单和字段引用都要从左侧列表点击插入令牌。
|
|
88
|
+
|
|
89
|
+
## 条件规则
|
|
90
|
+
|
|
91
|
+
- `主条件`、`子条件` 必须由逻辑函数构造,常见为 `EQ()`、`AND()`、`OR()`。
|
|
92
|
+
- 除 `AND()`、`OR()` 外,逻辑函数第一个参数必须是目标表组件,例如 `EQ(存货表.商品名, 商品名)`。
|
|
93
|
+
- 不要把当前表字段写在 `EQ()` 第一个参数,也不要在第一个参数里嵌套其他函数。
|
|
94
|
+
- 更新普通组件时,`目标列` 必须是目标表普通组件。
|
|
95
|
+
- 更新子表单明细时,`目标列` 必须是对应明细下的组件。
|
|
96
|
+
- 同一个高级函数里不要同时更新普通组件和明细组件;需要拆成多条规则或多个函数。
|
|
97
|
+
|
|
98
|
+
## 浏览器配置步骤
|
|
99
|
+
|
|
100
|
+
1. 确认触发表单和目标表单都在同一应用内。
|
|
101
|
+
2. 用 `openyida get-schema <appType> <formUuid>` 查清目标字段和来源字段,避免点错。
|
|
102
|
+
3. 打开触发表单设计器,进入 `表单设置 → 表单事件 → 公式执行 → 添加业务关联规则`。
|
|
103
|
+
4. 点击要配置的事件输入框,例如 `单据编辑`。
|
|
104
|
+
5. 在公式编辑器中只手动输入函数名、括号、逗号、字符串常量。
|
|
105
|
+
6. 目标表、目标列、来源字段全部从左侧列表点击插入令牌。
|
|
106
|
+
7. 每插入一个令牌后暂停并校验公式显示,避免 CodeMirror 光标错位。
|
|
107
|
+
8. 点击公式弹窗「确定」。如果能回到业务关联规则弹窗,说明公式通过编辑器校验。
|
|
108
|
+
9. 点击业务关联规则弹窗「确定」,最后点击表单设计器「保存」并确认保存成功。
|
|
109
|
+
|
|
110
|
+
## 用量限制
|
|
111
|
+
|
|
112
|
+
| 函数 | 目标表类型 | 用量限制 |
|
|
113
|
+
|------|-----------|---------|
|
|
114
|
+
| `INSERT` | 主表 | 批量导入无条数限制,建议单次不超过 1000 条 |
|
|
115
|
+
| `INSERT` | 子表单插入主表 | 免费版 ≤50 条;轻享/专业/专属版 ≤500 条 |
|
|
116
|
+
| `UPDATE` | 主表 | 单次最多更新 100 条,超出会报错 |
|
|
117
|
+
| `UPDATE` | 子表单 | 免费版 ≤50 条;轻享/专业/专属版 ≤500 条 |
|
|
118
|
+
| `UPSERT` | 主表 | 单次最多 100 条,超出会报错 |
|
|
119
|
+
| `UPSERT` | 子表单 | 免费版 ≤50 条;轻享/专业/专属版 ≤500 条 |
|
|
120
|
+
| `DELETE` | 主表 | 单次最多删除 100 条 |
|
|
121
|
+
| `DELETE` | 子表单 | 轻享/专业/专属版 ≤500 条 |
|
|
122
|
+
|
|
123
|
+
## 常见错误
|
|
124
|
+
|
|
125
|
+
| 错误 | 原因 | 处理 |
|
|
126
|
+
|------|------|------|
|
|
127
|
+
| `该标识符不合法` | 手敲了表单名/字段名 | 从左侧列表点击插入令牌 |
|
|
128
|
+
| `Unexpected end of input` | 公式未闭合或必填参数缺失 | 检查括号、逗号、`子条件` |
|
|
129
|
+
| 规则未触发 | 配在错误事件或未保存表单 | 检查 `单据提交/删除/编辑` 和保存结果 |
|
|
130
|
+
| 更新结果过多 | 条件不够精确或超出限制 | 收紧 `主条件`,必要时改用集成自动化 |
|
|
131
|
+
|
|
132
|
+
## 参考
|
|
133
|
+
|
|
134
|
+
- 宜搭帮助中心:表单业务规则
|
|
135
|
+
- 宜搭帮助中心:INSERT / UPDATE / UPSERT / DELETE 业务关联公式
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: yida-formula
|
|
3
|
-
description:
|
|
3
|
+
description: 宜搭表单公式编写规范,包含函数速查、语法规则、常见场景示例。不适用于:配置业务关联规则/高级函数(应使用 yida-business-rule),或创建表单字段结构(应使用 yida-create-form-page)。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# 宜搭表单公式编写规范
|
|
@@ -15,7 +15,8 @@ description: 宜搭表单公式编写规范,包含函数速查、语法规则
|
|
|
15
15
|
- 用户需要了解宜搭公式函数的用法和语法
|
|
16
16
|
|
|
17
17
|
**不适用场景(不要触发)**:
|
|
18
|
-
-
|
|
18
|
+
- 配置业务关联规则、高级函数、`INSERT`/`UPDATE`/`DELETE`/`UPSERT` → `yida-business-rule`
|
|
19
|
+
- 配置复杂或长期维护的提交后跨表联动,且用户未明确要求高级函数 → `yida-integration`(集成自动化)
|
|
19
20
|
- 创建/修改表单字段结构 → `yida-create-form-page`
|
|
20
21
|
- 查询表单数据记录 → `yida-data-management`
|
|
21
22
|
- 配置审批流程条件 → `yida-process-rule`
|
|
@@ -26,7 +27,8 @@ description: 宜搭表单公式编写规范,包含函数速查、语法规则
|
|
|
26
27
|
| 字段值自动计算(如:总金额 = 单价 × 数量) | **本技能** |
|
|
27
28
|
| 字段默认值(如:默认填充当前登录人) | **本技能** |
|
|
28
29
|
| 字段校验规则(如:结束日期必须晚于开始日期) | **本技能** |
|
|
29
|
-
|
|
|
30
|
+
| 用户明确要求业务关联规则或 UPSERT 等高级函数 | `yida-business-rule` |
|
|
31
|
+
| 提交后更新其他表单数据(常规/推荐方案) | `yida-integration` |
|
|
30
32
|
| 创建 NumberField、TextField 等字段 | `yida-create-form-page` |
|
|
31
33
|
|
|
32
34
|
|
|
@@ -35,7 +37,7 @@ description: 宜搭表单公式编写规范,包含函数速查、语法规则
|
|
|
35
37
|
宜搭公式可以:
|
|
36
38
|
1. **自动计算字段默认值**:在数值、单行文本、日期、成员等字段上配置公式,根据其他字段自动计算出值
|
|
37
39
|
2. **配置校验规则**:在提交时校验数据是否符合规则(在表单属性的「校验」中配置)
|
|
38
|
-
3.
|
|
40
|
+
3. **辅助识别业务关联规则边界**:提交后增删改其他表单数据的高级函数已拆分到 `yida-business-rule`
|
|
39
41
|
|
|
40
42
|
> 完整函数列表参见 `../../references/formula-functions.md`
|
|
41
43
|
|
|
@@ -49,7 +51,7 @@ description: 宜搭表单公式编写规范,包含函数速查、语法规则
|
|
|
49
51
|
|---------|------|---------|
|
|
50
52
|
| 字段的「默认值」→「公式」 | 字段打开时自动计算并填入值 | 总金额 = 单价 × 数量 |
|
|
51
53
|
| 字段的「校验」→「自定义校验」 | 提交时校验字段值是否合法 | 结束日期必须晚于开始日期 |
|
|
52
|
-
|
|
|
54
|
+
| 表单设置 → 表单事件 → 公式执行 → 添加业务关联规则 | 提交后触发跨表数据操作 | 改用 `yida-business-rule` |
|
|
53
55
|
|
|
54
56
|
---
|
|
55
57
|
|
|
@@ -188,6 +190,12 @@ TODAY()
|
|
|
188
190
|
|
|
189
191
|
---
|
|
190
192
|
|
|
193
|
+
## 业务关联规则边界
|
|
194
|
+
|
|
195
|
+
业务关联规则、高级函数、`INSERT`/`UPDATE`/`DELETE`/`UPSERT` 已拆分到独立子技能 `yida-business-rule`。本技能只处理普通字段公式、默认值公式和自定义校验公式。
|
|
196
|
+
|
|
197
|
+
---
|
|
198
|
+
|
|
191
199
|
## 函数分类速查
|
|
192
200
|
|
|
193
201
|
> 完整函数参数说明见 `../../references/formula-functions.md`
|
|
@@ -422,15 +430,9 @@ ARRAYGET(SPLIT(#{textField_tags}, ","), 1)
|
|
|
422
430
|
1. 用一个单行文本字段通过公式接收日期值
|
|
423
431
|
2. 用该单行文本字段作为判断条件
|
|
424
432
|
|
|
425
|
-
### ⚠️
|
|
426
|
-
|
|
427
|
-
在高级函数(INSERT/UPDATE/DELETE/UPSERT)的条件中使用 `EQ` 时:
|
|
428
|
-
- 被更新表单中用于比较的字段必须放在 `EQ` 的**第一个参数**
|
|
429
|
-
- 用于比较的字段不能嵌套其他公式
|
|
430
|
-
|
|
431
|
-
### ⚠️ 业务关联规则与集成自动化混用
|
|
433
|
+
### ⚠️ 业务关联规则单独处理
|
|
432
434
|
|
|
433
|
-
|
|
435
|
+
`INSERT`/`UPDATE`/`DELETE`/`UPSERT` 属于表单事件里的业务关联规则高级函数,不属于普通字段公式。遇到这类需求时切换到 `yida-business-rule`。
|
|
434
436
|
|
|
435
437
|
---
|
|
436
438
|
|
|
@@ -440,7 +442,8 @@ ARRAYGET(SPLIT(#{textField_tags}, ","), 1)
|
|
|
440
442
|
|------|---------|
|
|
441
443
|
| 创建表单基础字段结构 | `yida-create-form-page`(创建 `NumberField`、`TextField` 等字段) |
|
|
442
444
|
| 获取字段真实 fieldId 用于公式引用 | `yida-get-schema`(get-schema 后从 fieldId 属性获取,再用 `#{fieldId}` 格式写入公式) |
|
|
443
|
-
|
|
|
445
|
+
| 配置业务关联规则高级函数 | `yida-business-rule` |
|
|
446
|
+
| 配置提交后的常规数据联动 | `yida-integration` |
|
|
444
447
|
| 完整函数参数说明 | `../../references/formula-functions.md` |
|
|
445
448
|
|
|
446
449
|
## 异常处理
|
|
@@ -451,7 +454,7 @@ ARRAYGET(SPLIT(#{textField_tags}, ","), 1)
|
|
|
451
454
|
| 公式报"循环依赖" | 公式中不能引用当前字段本身,检查是否存在循环引用 |
|
|
452
455
|
| 字段值未自动计算 | 确认字段已设置 `valueType: "formula"`,隐藏字段需开启「始终提交」 |
|
|
453
456
|
| 比较运算符报错 | 禁止使用 `>=`、`<=` 等符号,必须改用 `GE()`、`LE()` 等函数 |
|
|
454
|
-
|
|
|
457
|
+
| 误把高级函数写到字段公式里 | 切换到 `yida-business-rule`,在表单事件的业务关联规则中配置 |
|
|
455
458
|
| 字段 ID 引用错误 | 先用 `openyida get-schema` 获取真实 fieldId,公式中用 `#{fieldId}` 格式引用 |
|
|
456
459
|
|
|
457
460
|
## Memory 策略
|