cloudcc-cli 2.4.0 → 2.4.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/README.md +18 -0
- package/mcp/index.js +9 -4
- package/mcp/tools/Trigger List Retriever/handler.js +24 -8
- package/package.json +1 -1
- package/src/classes/docs/devguide.md +138 -25
- package/src/script/docs/devguide.md +22 -2
- package/src/timer/docs/devguide.md +218 -29
- package/src/triggers/docs/devguide.md +248 -127
- package/src/triggers/get.js +8 -0
package/README.md
CHANGED
|
@@ -71,6 +71,24 @@ Resolve the script path on macOS/Linux with:
|
|
|
71
71
|
echo "$(npm root -g)/cloudcc-cli/bin/mcp.js"
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
+
# ReleaseV2.4.1
|
|
75
|
+
|
|
76
|
+
#### Release Date: 2026-4-9
|
|
77
|
+
|
|
78
|
+
#### Release Scope: Full
|
|
79
|
+
|
|
80
|
+
#### Release Content
|
|
81
|
+
|
|
82
|
+
- Docs alignment
|
|
83
|
+
- Refined `devguide` structure for `classes`, `timer`, and `triggers` to focus on implementation rules and avoid duplicated concept sections covered by `introduction`
|
|
84
|
+
- Added complete CLI command and argument sections in `classes` and `triggers` devguides, aligned with actual module handlers
|
|
85
|
+
- Expanded `timer` devguide command/argument coverage for all supported actions (`create`, `publish`, `pull`, `get`, `detail`, `pullList`, `delete`, `doc`)
|
|
86
|
+
- Query parameter documentation
|
|
87
|
+
- Added trigger list query field documentation in trigger devguide, including `fid`/`objId` semantics
|
|
88
|
+
- Clarified script list query docs: `condition.objName` is the query field and its value should be object **label** (not API name)
|
|
89
|
+
- MCP consistency
|
|
90
|
+
- Extended trigger list MCP schema and handler parameters (`objId`, paging, filter, sort) and aligned descriptions with CLI query body usage
|
|
91
|
+
|
|
74
92
|
# ReleaseV2.4.0
|
|
75
93
|
|
|
76
94
|
#### Release Date: 2026-4-8
|
package/mcp/index.js
CHANGED
|
@@ -394,10 +394,15 @@ mcpServer.registerTool(
|
|
|
394
394
|
mcpServer.registerTool(
|
|
395
395
|
'get_trigger_list',
|
|
396
396
|
{
|
|
397
|
-
description: '获取 CloudCC CRM
|
|
398
|
-
inputSchema: z.object({
|
|
399
|
-
triggerName: z.string().optional().describe('
|
|
400
|
-
targetObjectId: z.string().optional().describe('可选,目标对象ID
|
|
397
|
+
description: '获取 CloudCC CRM 服务器上的触发器列表。支持按触发器名称、对象ID筛选,并支持分页/扩展过滤/排序参数。',
|
|
398
|
+
inputSchema: z.object({
|
|
399
|
+
triggerName: z.string().optional().describe('可选,触发器名称(映射到查询字段 sname)'),
|
|
400
|
+
targetObjectId: z.string().optional().describe('可选,目标对象ID(映射到查询字段 fid)'),
|
|
401
|
+
objId: z.string().optional().describe('可选,目标对象ID语义化别名(会映射到 fid)'),
|
|
402
|
+
shownum: z.union([z.string(), z.number()]).optional().describe('可选,每页条数(默认 2000)'),
|
|
403
|
+
showpage: z.union([z.string(), z.number()]).optional().describe('可选,页码(默认 1)'),
|
|
404
|
+
rptcond: z.string().optional().describe('可选,扩展过滤条件(默认空字符串)'),
|
|
405
|
+
rptorder: z.string().optional().describe('可选,排序条件(默认空字符串)'),
|
|
401
406
|
projectPath: z.string().describe('项目根目录路径,默认为当前工作目录')
|
|
402
407
|
})
|
|
403
408
|
},
|
|
@@ -9,20 +9,36 @@ const { runCcJsonCommand } = require('../../cliRunner');
|
|
|
9
9
|
/**
|
|
10
10
|
* 获取触发器列表
|
|
11
11
|
* @param {Object} params - 参数对象
|
|
12
|
-
* @param {string} params.triggerName -
|
|
13
|
-
* @param {string} params.targetObjectId - 可选,目标对象ID
|
|
12
|
+
* @param {string} params.triggerName - 可选,触发器名称(映射到 sname)
|
|
13
|
+
* @param {string} params.targetObjectId - 可选,目标对象ID(映射到 fid)
|
|
14
|
+
* @param {string} params.objId - 可选,目标对象ID(语义化别名,映射到 fid)
|
|
15
|
+
* @param {string|number} params.shownum - 可选,每页条数,默认 2000
|
|
16
|
+
* @param {string|number} params.showpage - 可选,页码,默认 1
|
|
17
|
+
* @param {string} params.rptcond - 可选,扩展过滤条件
|
|
18
|
+
* @param {string} params.rptorder - 可选,排序条件
|
|
14
19
|
* @param {string} params.projectPath - 项目路径(可选,默认为当前工作目录)
|
|
15
20
|
*/
|
|
16
|
-
async function listTriggers({
|
|
21
|
+
async function listTriggers({
|
|
22
|
+
triggerName = '',
|
|
23
|
+
targetObjectId = '',
|
|
24
|
+
objId = '',
|
|
25
|
+
shownum = '2000',
|
|
26
|
+
showpage = '1',
|
|
27
|
+
rptcond = '',
|
|
28
|
+
rptorder = '',
|
|
29
|
+
projectPath = process.cwd()
|
|
30
|
+
}) {
|
|
17
31
|
try {
|
|
18
32
|
// 构造查询条件
|
|
33
|
+
const objectId = targetObjectId || objId || "";
|
|
19
34
|
const queryBody = {
|
|
20
|
-
shownum:
|
|
21
|
-
showpage:
|
|
22
|
-
fid:
|
|
35
|
+
shownum: String(shownum),
|
|
36
|
+
showpage: String(showpage),
|
|
37
|
+
fid: objectId,
|
|
23
38
|
sname: triggerName || "",
|
|
24
|
-
rptcond: '',
|
|
25
|
-
rptorder: ''
|
|
39
|
+
rptcond: rptcond || '',
|
|
40
|
+
rptorder: rptorder || '',
|
|
41
|
+
objId: objectId
|
|
26
42
|
};
|
|
27
43
|
|
|
28
44
|
const resolvedPath = path.resolve(projectPath);
|
package/package.json
CHANGED
|
@@ -25,39 +25,152 @@
|
|
|
25
25
|
|
|
26
26
|
- CloudCC 官方后端 SDK 参考:`CCObject`、`UserInfo`、`CCService`、`SendEmail`、`DevLogger`、`TimeUtil`
|
|
27
27
|
|
|
28
|
-
## 3.
|
|
28
|
+
## 3. 与 introduction 的分工(避免重复)
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
为避免与 `classes introduction` 内容重复,本 `devguide` 只保留“开发落地规范”:
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
- 命令与入参(可直接执行)
|
|
33
|
+
- 目录与文件约束(可直接检查)
|
|
34
|
+
- SDK 用法与边界(可直接编码)
|
|
35
|
+
- 代码结构、禁止事项与自检清单(可直接评审)
|
|
33
36
|
|
|
34
|
-
|
|
35
|
-
- 结构清晰
|
|
36
|
-
- 可复用
|
|
37
|
-
- 易排错
|
|
38
|
-
- 易发布
|
|
37
|
+
“自定义类是什么、适用/不适用场景、能力边界、与其他实现方式差异”等概念说明,统一以 `cloudcc doc classes introduction` 为准。
|
|
39
38
|
|
|
40
|
-
## 4.
|
|
39
|
+
## 4. classes 模块支持的 CLI 命令总览(重点:入参)
|
|
41
40
|
|
|
42
|
-
|
|
41
|
+
说明:
|
|
43
42
|
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
- 逻辑会被多个入口复用
|
|
47
|
-
- 需要复杂规则计算
|
|
48
|
-
- 需要流程状态推进
|
|
49
|
-
- 需要调用外部系统
|
|
50
|
-
- 需要处理附件、文件、目录
|
|
51
|
-
- 需要统一日志、异常、时间处理
|
|
52
|
-
- 需要自动通知、提醒、待办协同
|
|
53
|
-
- 需要接入 AI 或分析能力
|
|
43
|
+
- 下文命令中的资源名使用 `classes`。
|
|
44
|
+
- `projectPath` 未传时,默认使用当前工作目录。
|
|
54
45
|
|
|
55
|
-
|
|
46
|
+
#### 1) 创建自定义类
|
|
56
47
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
48
|
+
命令:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
cloudcc create classes <name>
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
参数:
|
|
55
|
+
|
|
56
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
57
|
+
| --- | --- | --- | --- |
|
|
58
|
+
| `name` | 是 | `string` | 类名(同时作为目录名、Java 主类名) |
|
|
59
|
+
|
|
60
|
+
#### 2) 发布自定义类
|
|
61
|
+
|
|
62
|
+
命令:
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
cloudcc publish classes <name>
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
参数:
|
|
69
|
+
|
|
70
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
71
|
+
| --- | --- | --- | --- |
|
|
72
|
+
| `name` | 是 | `string` | 本地 `classes/<name>/` 目录名 |
|
|
73
|
+
|
|
74
|
+
#### 3) 拉取自定义类(按本地名称)
|
|
75
|
+
|
|
76
|
+
命令:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
cloudcc pull classes <name>
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
参数:
|
|
83
|
+
|
|
84
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
85
|
+
| --- | --- | --- | --- |
|
|
86
|
+
| `name` | 是 | `string` | 本地 `classes/<name>/` 目录名;会读取该目录 `config.json` 中的 `id` 拉取 |
|
|
87
|
+
|
|
88
|
+
#### 4) 查询自定义类列表(支持条件查询)
|
|
89
|
+
|
|
90
|
+
命令:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
cloudcc get classes [listQueryJson] [projectPath]
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
`listQueryJson` 推荐结构:
|
|
97
|
+
|
|
98
|
+
```json
|
|
99
|
+
{
|
|
100
|
+
"shownum": 2000,
|
|
101
|
+
"showpage": 1,
|
|
102
|
+
"sname": ""
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
字段说明:
|
|
107
|
+
|
|
108
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
109
|
+
| --- | --- | --- | --- |
|
|
110
|
+
| `shownum` | `number|string` | 否 | 每页条数,默认 `2000` |
|
|
111
|
+
| `showpage` | `number|string` | 否 | 页码,默认 `1` |
|
|
112
|
+
| `sname` | `string` | 否 | 名称筛选关键字,模糊查询 |
|
|
113
|
+
|
|
114
|
+
#### 5) 查看自定义类详情
|
|
115
|
+
|
|
116
|
+
命令:
|
|
117
|
+
|
|
118
|
+
```bash
|
|
119
|
+
cloudcc detail classes <name> <id>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
参数规则(实现口径):
|
|
123
|
+
|
|
124
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
125
|
+
| --- | --- | --- | --- |
|
|
126
|
+
| `name` | 条件必填 | `string` | 传 `name` 时优先查本地;本地不完整时再走线上 |
|
|
127
|
+
| `id` | 条件必填 | `string` | 当 `name` 为空时,必须传 `id` 走线上查询 |
|
|
128
|
+
|
|
129
|
+
等价理解:`name` 与 `id` 至少传一个,优先使用 `name` 路径。
|
|
130
|
+
|
|
131
|
+
#### 6) 按 ID 拉取并落地到本地目录
|
|
132
|
+
|
|
133
|
+
命令:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
cloudcc pullList classes <id> <projectPath>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
参数:
|
|
140
|
+
|
|
141
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
142
|
+
| --- | --- | --- | --- |
|
|
143
|
+
| `id` | 是 | `string` | 线上自定义类 ID |
|
|
144
|
+
| `projectPath` | 是 | `string` | 项目根目录;会写入到 `<projectPath>/classes/<name>/` |
|
|
145
|
+
|
|
146
|
+
#### 7) 删除自定义类
|
|
147
|
+
|
|
148
|
+
命令:
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
cloudcc delete classes <nameOrId> [projectPath]
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
参数规则:
|
|
155
|
+
|
|
156
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
157
|
+
| --- | --- | --- | --- |
|
|
158
|
+
| `nameOrId` | 是 | `string` | 可传本地目录名或线上 ID;若本地 `classes/<nameOrId>/config.json` 存在且带 `id`,优先使用其中 `id` 删除 |
|
|
159
|
+
| `projectPath` | 否 | `string` | 项目根目录,默认当前目录 |
|
|
160
|
+
|
|
161
|
+
#### 8) 文档命令
|
|
162
|
+
|
|
163
|
+
命令:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
cloudcc doc classes <introduction|devguide>
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
参数:
|
|
170
|
+
|
|
171
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
172
|
+
| --- | --- | --- | --- |
|
|
173
|
+
| `introduction|devguide` | 是 | `string` | `introduction` 返回概念文档;`devguide` 返回开发规范(并附 SDK 速查) |
|
|
61
174
|
|
|
62
175
|
## 5. AI 必须遵守的硬规则
|
|
63
176
|
|
|
@@ -55,9 +55,12 @@ cloudcc get script <encodedCondJson> <projectPath>
|
|
|
55
55
|
| condition | object | 非必须 | `{}` | 查询条件 |
|
|
56
56
|
| condition.scriptName | string | 非必须 | `""` | 脚本名称筛选 |
|
|
57
57
|
| condition.pageLabel | string | 非必须 | `""` | 页面标签筛选 |
|
|
58
|
-
| condition.objName | string | 非必须 | `""` |
|
|
58
|
+
| condition.objName | string | 非必须 | `""` | 对象名称label筛选(例如你说“客户对象”,就传 `客户`;不要让 AI 自动映射成 `account`) |
|
|
59
59
|
|
|
60
|
-
|
|
60
|
+
|
|
61
|
+
> 注意:`objName` 直接按你要查询的对象名称来传,并按实际值原样传入。
|
|
62
|
+
> 例如对象名称是 `客户`、`客户004`,就直接传 `客户`、`客户004`;**不要**按语义自动换成 `account`。
|
|
63
|
+
> 如果返回为空,通常意味着目标环境里的对象名称不是你传的这个值(可以去对象管理里看一下该对象的名称/标识)。
|
|
61
64
|
|
|
62
65
|
---
|
|
63
66
|
|
|
@@ -177,6 +180,23 @@ cloudcc get script "$(node -e "console.log(encodeURI(JSON.stringify({pageSize:50
|
|
|
177
180
|
cloudcc get script "$(node -e "console.log(encodeURI(JSON.stringify({pageSize:50,pageNo:1,condition:{scriptName:'test',pageLabel:'',objName:''}})))")" .
|
|
178
181
|
```
|
|
179
182
|
|
|
183
|
+
### 按对象名称筛选(示例:`客户` / `客户004`)
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
# 对象名称为“客户”
|
|
187
|
+
cloudcc get script "$(node -e "console.log(encodeURI(JSON.stringify({pageSize:50,pageNo:1,condition:{scriptName:'',pageLabel:'',objName:'客户'}})))")" .
|
|
188
|
+
|
|
189
|
+
# 对象名称为“客户004”
|
|
190
|
+
cloudcc get script "$(node -e "console.log(encodeURI(JSON.stringify({pageSize:50,pageNo:1,condition:{scriptName:'',pageLabel:'',objName:'客户004'}})))")" .
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
错误示例(不要这样传):
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# 业务上说“客户”,就不要自作主张写成 account
|
|
197
|
+
cloudcc get script "$(node -e "console.log(encodeURI(JSON.stringify({pageSize:50,pageNo:1,condition:{scriptName:'',pageLabel:'',objName:'account'}})))")" .
|
|
198
|
+
```
|
|
199
|
+
|
|
180
200
|
### 新建脚本(本地)
|
|
181
201
|
|
|
182
202
|
```bash
|
|
@@ -18,38 +18,16 @@
|
|
|
18
18
|
- `2-timer-classes-analysis.md` 提供当前项目定时器使用场景和共性模式
|
|
19
19
|
- `timer devguide` 提供本地目录、CLI、发布和 SOURCE 区域约束
|
|
20
20
|
|
|
21
|
-
## 3.
|
|
21
|
+
## 3. 与 introduction 的分工(避免重复)
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
为避免与 `timer introduction` 内容重复,本 `devguide` 只保留“开发落地规范”:
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
- 命令与入参(可直接执行)
|
|
26
|
+
- 目录与文件约束(可直接检查)
|
|
27
|
+
- SDK 用法与边界(可直接编码)
|
|
28
|
+
- 代码模板与禁止事项(可直接评审)
|
|
26
29
|
|
|
27
|
-
|
|
28
|
-
- 需要每天、每周、每月、月初、月末执行
|
|
29
|
-
- 需要批量扫描一批记录并统一处理
|
|
30
|
-
- 需要失败补偿、周期重试或后台巡检
|
|
31
|
-
- 需要构建底表、看板、台账、报表支撑数据
|
|
32
|
-
- 需要在满足条件后自动提醒、自动推进、自动同步
|
|
33
|
-
|
|
34
|
-
### 3.2 不适合定时器类的情况
|
|
35
|
-
|
|
36
|
-
- 记录保存时必须立刻校验或立刻拦截
|
|
37
|
-
- 单笔数据变化后必须在同一事务里马上联动
|
|
38
|
-
- 高度依赖前端交互、人工确认、页面反馈
|
|
39
|
-
- 只是一次性临时数据处理,不需要长期调度
|
|
40
|
-
|
|
41
|
-
### 3.3 当前项目中定时器的六大主类型
|
|
42
|
-
|
|
43
|
-
根据现有项目总结,AI 应优先将需求归入以下类型之一:
|
|
44
|
-
|
|
45
|
-
- 提醒通知类
|
|
46
|
-
- 同步推送集成类
|
|
47
|
-
- 刷新更新修正类
|
|
48
|
-
- 报表底表支撑类
|
|
49
|
-
- 自动生成派生类
|
|
50
|
-
- 权限共享治理类
|
|
51
|
-
|
|
52
|
-
如果需求明显不属于上述类型,AI 应重新评估是否真的应该落到定时器类。
|
|
30
|
+
“定时器是什么、能解决什么、与触发器差异、适用/不适用场景”等概念说明,统一以 `cloudcc doc timer introduction` 为准。
|
|
53
31
|
|
|
54
32
|
## 4. 文件与交付规范
|
|
55
33
|
|
|
@@ -75,6 +53,217 @@ AI 在动手写代码前,必须先判断需求是否真的适合用定时器
|
|
|
75
53
|
- 让类继承 `CCSchedule`
|
|
76
54
|
- 构造方法名与类名一致
|
|
77
55
|
|
|
56
|
+
### 4.4 timer 模块支持的 CLI 命令总览(重点:入参)
|
|
57
|
+
|
|
58
|
+
说明:
|
|
59
|
+
|
|
60
|
+
- 下文命令中的资源名使用 `timer`,也可使用别名 `schedule`(两者路由到同一模块)。
|
|
61
|
+
- `projectPath` 未传时,默认使用当前工作目录。
|
|
62
|
+
|
|
63
|
+
#### 1) 创建定时类
|
|
64
|
+
|
|
65
|
+
命令:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
cloudcc create timer <name>
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
参数:
|
|
72
|
+
|
|
73
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
74
|
+
| --- | --- | --- | --- |
|
|
75
|
+
| `name` | 是 | `string` | 定时类名称(同时作为目录名、Java 类名) |
|
|
76
|
+
|
|
77
|
+
示例:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
cloudcc create timer DailySyncJob
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
#### 2) 发布定时类
|
|
86
|
+
|
|
87
|
+
命令:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
cloudcc publish timer <name>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
参数:
|
|
94
|
+
|
|
95
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
96
|
+
| --- | --- | --- | --- |
|
|
97
|
+
| `name` | 是 | `string` | 本地 `schedule/<name>/` 目录名 |
|
|
98
|
+
|
|
99
|
+
示例:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
cloudcc publish timer DailySyncJob
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
#### 3) 拉取定时类(按本地名称)
|
|
108
|
+
|
|
109
|
+
命令:
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
cloudcc pull timer <name>
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
参数:
|
|
116
|
+
|
|
117
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
118
|
+
| --- | --- | --- | --- |
|
|
119
|
+
| `name` | 是 | `string` | 本地 `schedule/<name>/` 目录名;会读取该目录 `config.json` 中的 `id` 到线上拉取 |
|
|
120
|
+
|
|
121
|
+
示例:
|
|
122
|
+
|
|
123
|
+
```bash
|
|
124
|
+
cloudcc pull timer DailySyncJob
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
#### 4) 查询定时类列表(支持条件查询)
|
|
130
|
+
|
|
131
|
+
命令:
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
cloudcc get timer [listQueryJson] [projectPath]
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
`listQueryJson` 推荐结构:
|
|
138
|
+
|
|
139
|
+
```json
|
|
140
|
+
{
|
|
141
|
+
"shownum": 2000,
|
|
142
|
+
"showpage": 1,
|
|
143
|
+
"sname": "",
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
字段说明:
|
|
148
|
+
|
|
149
|
+
| 字段 | 类型 | 必填 | 说明 |
|
|
150
|
+
| --- | --- | --- | --- |
|
|
151
|
+
| `shownum` | `number|string` | 否 | 每页条数,默认 `2000` |
|
|
152
|
+
| `showpage` | `number|string` | 否 | 页码,默认 `1` |
|
|
153
|
+
| `sname` | `string` | 否 | 名称筛选关键字,模糊查询 |
|
|
154
|
+
|
|
155
|
+
示例:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
cloudcc get timer "$(node -e 'console.log(encodeURI(JSON.stringify({shownum:2000,showpage:1,fid:\"\",sname:\"Daily\",rptcond:\"\",rptorder:\"\"})))')"
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
#### 5) 查看定时类详情
|
|
164
|
+
|
|
165
|
+
命令:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
cloudcc detail timer <name> <id>
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
参数规则(实现口径):
|
|
172
|
+
|
|
173
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
174
|
+
| --- | --- | --- | --- |
|
|
175
|
+
| `name` | 条件必填 | `string` | 传 `name` 时优先查本地;本地不完整时再走线上 |
|
|
176
|
+
| `id` | 条件必填 | `string` | 当 `name` 为空时,必须传 `id` 走线上查询 |
|
|
177
|
+
|
|
178
|
+
等价理解:`name` 与 `id` 至少传一个,优先使用 `name` 路径。
|
|
179
|
+
|
|
180
|
+
示例(按本地名):
|
|
181
|
+
|
|
182
|
+
```bash
|
|
183
|
+
cloudcc detail timer DailySyncJob
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
示例(按线上 id):
|
|
187
|
+
|
|
188
|
+
```bash
|
|
189
|
+
cloudcc detail timer "" a0Bxxxxxxxxxxxx
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
#### 6) 按 ID 拉取并落地到本地目录
|
|
195
|
+
|
|
196
|
+
命令:
|
|
197
|
+
|
|
198
|
+
```bash
|
|
199
|
+
cloudcc pullList timer <id> <projectPath>
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
参数:
|
|
203
|
+
|
|
204
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
205
|
+
| --- | --- | --- | --- |
|
|
206
|
+
| `id` | 是 | `string` | 线上定时类 ID |
|
|
207
|
+
| `projectPath` | 是 | `string` | 项目根目录;会写入到 `<projectPath>/schedule/<name>/` |
|
|
208
|
+
|
|
209
|
+
示例:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
cloudcc pullList timer a0Bxxxxxxxxxxxx /path/to/project
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
---
|
|
216
|
+
|
|
217
|
+
#### 7) 删除定时类
|
|
218
|
+
|
|
219
|
+
命令:
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
cloudcc delete timer <nameOrId> [projectPath]
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
参数规则:
|
|
226
|
+
|
|
227
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
228
|
+
| --- | --- | --- | --- |
|
|
229
|
+
| `nameOrId` | 是 | `string` | 可传本地目录名或线上 ID;若本地 `schedule/<nameOrId>/config.json` 存在且带 `id`,优先使用其中 `id` 删除 |
|
|
230
|
+
| `projectPath` | 否 | `string` | 项目根目录,默认当前目录 |
|
|
231
|
+
|
|
232
|
+
示例(按名称):
|
|
233
|
+
|
|
234
|
+
```bash
|
|
235
|
+
cloudcc delete timer DailySyncJob
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
示例(按 id):
|
|
239
|
+
|
|
240
|
+
```bash
|
|
241
|
+
cloudcc delete timer a0Bxxxxxxxxxxxx
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
#### 8) 文档命令
|
|
247
|
+
|
|
248
|
+
命令:
|
|
249
|
+
|
|
250
|
+
```bash
|
|
251
|
+
cloudcc doc timer <introduction|devguide>
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
参数:
|
|
255
|
+
|
|
256
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
257
|
+
| --- | --- | --- | --- |
|
|
258
|
+
| `introduction|devguide` | 是 | `string` | `introduction` 返回概念文档;`devguide` 返回开发规范(并附 SDK 速查) |
|
|
259
|
+
|
|
260
|
+
示例:
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
cloudcc doc timer introduction
|
|
264
|
+
cloudcc doc timer devguide
|
|
265
|
+
```
|
|
266
|
+
|
|
78
267
|
## 5. AI 编写定时器类的核心原则
|
|
79
268
|
|
|
80
269
|
### 5.1 先分析,再编码
|
|
@@ -25,50 +25,168 @@
|
|
|
25
25
|
|
|
26
26
|
## 2. 编写依据
|
|
27
27
|
|
|
28
|
-
- 官方 SDK 文档负责定义
|
|
29
|
-
|
|
28
|
+
- 官方 SDK 文档负责定义
|
|
29
|
+
`CCObject`、`UserInfo`、`CCService`、`SendEmail`、`DevLogger`、`TimeUtil`、自定义设置、共享对象相关能力
|
|
30
|
+
- `triggers devguide` 负责定义
|
|
31
|
+
CLI、目录结构、创建发布拉取删除方式和触发器模块约束
|
|
30
32
|
- 当前项目触发器样例负责补充“本项目常见写法”和“本项目容易踩坑的地方”
|
|
31
33
|
|
|
32
|
-
## 3.
|
|
34
|
+
## 3. 与 introduction 的分工(避免重复)
|
|
33
35
|
|
|
34
|
-
|
|
36
|
+
为避免与 `triggers introduction` 内容重复,本 `devguide` 只保留“开发落地规范”:
|
|
35
37
|
|
|
36
|
-
|
|
38
|
+
- 命令与入参(可直接执行)
|
|
39
|
+
- 目录与文件约束(可直接检查)
|
|
40
|
+
- SDK 用法与边界(可直接编码)
|
|
41
|
+
- 代码结构、性能/递归/幂等与交付要求(可直接评审)
|
|
37
42
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
- 控制触发器体量,不把复杂逻辑全部堆在入口里
|
|
41
|
-
- 正确调用 SDK 完成查、增、改、删、通知、日志、时间处理
|
|
42
|
-
- 主动规避递归触发、重复生成、全表扫描、时区错误、共享误删等风险
|
|
43
|
+
“触发器是什么、适用/不适用场景、能力边界、与其他实现方式差异”等概念说明,统一以
|
|
44
|
+
`cloudcc doc triggers introduction` 为准。
|
|
43
45
|
|
|
44
|
-
## 4.
|
|
46
|
+
## 4. triggers 模块支持的 CLI 命令总览(重点:入参)
|
|
45
47
|
|
|
46
|
-
|
|
48
|
+
说明:
|
|
47
49
|
|
|
48
|
-
|
|
50
|
+
- 下文命令中的资源名使用 `triggers`。
|
|
51
|
+
- `projectPath` 未传时,默认使用当前工作目录。
|
|
49
52
|
|
|
50
|
-
|
|
51
|
-
- 某条记录修改时必须立即校验或联动
|
|
52
|
-
- 某条记录删除前必须阻止或删除后必须补偿
|
|
53
|
-
- 提交审批、审批通过、审批撤回时必须执行规则
|
|
54
|
-
- 当前规则必须平台层统一执行,不能依赖前端页面
|
|
55
|
-
- 当前动作如果不在这一刻做,会造成数据错误、状态错误或流程错误
|
|
53
|
+
#### 1) 创建触发器
|
|
56
54
|
|
|
57
|
-
|
|
55
|
+
命令:
|
|
58
56
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
57
|
+
```bash
|
|
58
|
+
cloudcc create triggers <encodedCreateJson>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
`encodedCreateJson`(先 JSON.stringify,再 encodeURI)推荐字段:
|
|
62
|
+
|
|
63
|
+
| 字段 | 必填 | 类型 | 说明 |
|
|
64
|
+
| ----------------- | ---- | -------- | ------------------------------------------------------ |
|
|
65
|
+
| `schemetableName` | 是 | `string` | 目标对象 API 名(目录中会转小写) |
|
|
66
|
+
| `targetObjectId` | 是 | `string` | 目标对象 ID |
|
|
67
|
+
| `triggerTime` | 是 | `string` | 触发时机,如 `beforeInsert`、`afterUpdate`、`approval` |
|
|
68
|
+
| `name` | 是 | `string` | 触发器名称 |
|
|
69
|
+
| `apiname` | 建议 | `string` | 触发器 API 名 |
|
|
70
|
+
|
|
71
|
+
#### 2) 发布触发器
|
|
72
|
+
|
|
73
|
+
命令:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
cloudcc publish triggers <namePath>
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
参数:
|
|
80
|
+
|
|
81
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
82
|
+
| ---------- | ---- | -------- | --------------------------------------- |
|
|
83
|
+
| `namePath` | 是 | `string` | 触发器路径,格式:`对象小写名/触发器名` |
|
|
84
|
+
|
|
85
|
+
#### 3) 拉取触发器(按本地路径)
|
|
86
|
+
|
|
87
|
+
命令:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
cloudcc pull triggers <namePath>
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
参数:
|
|
94
|
+
|
|
95
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
96
|
+
| ---------- | ---- | -------- | -------------------------------------------------------------------------------- |
|
|
97
|
+
| `namePath` | 是 | `string` | 触发器路径,格式:`对象小写名/触发器名`;会读取该目录 `config.json` 的 `id` 拉取 |
|
|
98
|
+
|
|
99
|
+
#### 4) 查询触发器列表(支持条件查询)
|
|
100
|
+
|
|
101
|
+
命令:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
cloudcc get triggers <listQueryJson> [projectPath]
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
`listQueryJson` 推荐结构:
|
|
108
|
+
|
|
109
|
+
```json
|
|
110
|
+
{
|
|
111
|
+
"shownum": 2000,
|
|
112
|
+
"showpage": 1,
|
|
113
|
+
"fid": "",
|
|
114
|
+
"sname": "",
|
|
115
|
+
"rptcond": "",
|
|
116
|
+
"rptorder": "",
|
|
117
|
+
"objId": ""
|
|
118
|
+
}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
字段语义:
|
|
122
|
+
|
|
123
|
+
| 字段 | 含义 | 类型 | 是否推荐 | 说明 |
|
|
124
|
+
| ---------- | ----------------- | -------- | -------- | ------------------------ |
|
|
125
|
+
| `shownum` | 每页条数 | `number | string` | 推荐 |
|
|
126
|
+
| `showpage` | 页码 | `number | string` | 推荐 |
|
|
127
|
+
| `sname` | 触发器名字 | `string` | 可选 | 按名称模糊筛选,模糊查询 |
|
|
128
|
+
| `objId` | 触发器作用对象 ID | `string` | 可选 | 对象id |
|
|
129
|
+
|
|
130
|
+
#### 5) 查看触发器详情
|
|
131
|
+
|
|
132
|
+
命令:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
cloudcc detail triggers <namePath> <id>
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
参数规则(实现口径):
|
|
139
|
+
|
|
140
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
141
|
+
| ---------- | -------- | -------- | ------------------------------------------------ |
|
|
142
|
+
| `namePath` | 条件必填 | `string` | 传 `namePath` 时优先查本地;本地不完整时再走线上 |
|
|
143
|
+
| `id` | 条件必填 | `string` | 当 `namePath` 为空时,必须传 `id` 走线上查询 |
|
|
144
|
+
|
|
145
|
+
等价理解:`namePath` 与 `id` 至少传一个,优先使用 `namePath` 路径。
|
|
146
|
+
|
|
147
|
+
#### 6) 按 ID 拉取并落地到本地目录
|
|
148
|
+
|
|
149
|
+
命令:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
cloudcc pullList triggers <id> <projectPath>
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
参数:
|
|
156
|
+
|
|
157
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
158
|
+
| ------------- | ---- | -------- | ----------------------------------------------------------- |
|
|
159
|
+
| `id` | 是 | `string` | 线上触发器 ID |
|
|
160
|
+
| `projectPath` | 是 | `string` | 项目根目录;会写入到 `<projectPath>/triggers/<obj>/<name>/` |
|
|
161
|
+
|
|
162
|
+
#### 7) 删除触发器
|
|
163
|
+
|
|
164
|
+
命令:
|
|
165
|
+
|
|
166
|
+
```bash
|
|
167
|
+
cloudcc delete triggers <namePathOrId> [projectPath]
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
参数规则:
|
|
171
|
+
|
|
172
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
173
|
+
| -------------- | ---- | -------- | ------------------------------------------------------------------------------------- |
|
|
174
|
+
| `namePathOrId` | 是 | `string` | 可传触发器路径或线上 ID;若本地路径存在且 `config.json` 含 `id`,优先使用该 `id` 删除 |
|
|
175
|
+
| `projectPath` | 否 | `string` | 项目根目录,默认当前目录 |
|
|
176
|
+
|
|
177
|
+
#### 8) 文档命令
|
|
178
|
+
|
|
179
|
+
命令:
|
|
180
|
+
|
|
181
|
+
```bash
|
|
182
|
+
cloudcc doc triggers <introduction|devguide>
|
|
183
|
+
```
|
|
65
184
|
|
|
66
|
-
|
|
185
|
+
参数:
|
|
67
186
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
- 页面交互,用页面脚本或组件
|
|
187
|
+
| 参数 | 必填 | 类型 | 说明 |
|
|
188
|
+
| ------------- | --------- | ---- | -------- |
|
|
189
|
+
| `introduction | devguide` | 是 | `string` |
|
|
72
190
|
|
|
73
191
|
## 5. 当前项目中触发器的真实约束
|
|
74
192
|
|
|
@@ -230,7 +348,8 @@ AI 不能默认“更新一下没事”。
|
|
|
230
348
|
|
|
231
349
|
## 8. SDK 使用规范
|
|
232
350
|
|
|
233
|
-
本节是本文的核心。以下 API 说明基于官方 SDK 页面整理,并专门补成“AI
|
|
351
|
+
本节是本文的核心。以下 API 说明基于官方 SDK 页面整理,并专门补成“AI
|
|
352
|
+
可直接使用”的格式。
|
|
234
353
|
|
|
235
354
|
写法原则:
|
|
236
355
|
|
|
@@ -258,18 +377,18 @@ public CCObject(String ccobj, String isShared)
|
|
|
258
377
|
|
|
259
378
|
参数说明:
|
|
260
379
|
|
|
261
|
-
| 方法
|
|
262
|
-
|
|
|
263
|
-
| `CCObject(String ccobj)`
|
|
264
|
-
| `CCObject(String ccobj, String isShared)` | `ccobj`
|
|
265
|
-
| `CCObject(String ccobj, String isShared)` | `isShared` | `String` | 是
|
|
380
|
+
| 方法 | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
381
|
+
| ----------------------------------------- | ---------- | -------- | -------- | --------------------------------------- | ------------------------------------------ |
|
|
382
|
+
| `CCObject(String ccobj)` | `ccobj` | `String` | 是 | 对象 API | 传对象 API 名,如 `Account`、`Opportunity` |
|
|
383
|
+
| `CCObject(String ccobj, String isShared)` | `ccobj` | `String` | 是 | 对象 API | 用于共享对象 |
|
|
384
|
+
| `CCObject(String ccobj, String isShared)` | `isShared` | `String` | 是 | 共享标识,建议使用 `CCObject.IS_SHARED` | 不要手写魔法值,优先常量 |
|
|
266
385
|
|
|
267
386
|
常量字段:
|
|
268
387
|
|
|
269
|
-
| 字段
|
|
270
|
-
|
|
|
388
|
+
| 字段 | 类型 | 默认值 | 说明 |
|
|
389
|
+
| ------------ | -------- | ------------- | ------------- |
|
|
271
390
|
| `OBJECT_API` | `String` | `CCObjectAPI` | 对象 API 常量 |
|
|
272
|
-
| `IS_SHARED`
|
|
391
|
+
| `IS_SHARED` | `String` | `isShared` | 共享对象常量 |
|
|
273
392
|
|
|
274
393
|
#### 8.1.2 常用方法
|
|
275
394
|
|
|
@@ -282,17 +401,17 @@ public String put(String apiName, String value)
|
|
|
282
401
|
|
|
283
402
|
参数说明:
|
|
284
403
|
|
|
285
|
-
| 方法
|
|
286
|
-
|
|
|
287
|
-
| `put` | `apiName` | `String` | 是
|
|
288
|
-
| `put` | `value`
|
|
404
|
+
| 方法 | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
405
|
+
| ----- | --------- | -------- | -------- | ------------ | ---------------------------------------------------------------- |
|
|
406
|
+
| `put` | `apiName` | `String` | 是 | 字段 APIName | 必须传字段 API 名,不要传字段显示名 |
|
|
407
|
+
| `put` | `value` | `String` | 是 | 字段值 | 官方示例按字符串传;AI 应按当前项目已有写法与 SDK 能力处理值类型 |
|
|
289
408
|
|
|
290
409
|
返回值说明:
|
|
291
410
|
|
|
292
|
-
| 方法
|
|
293
|
-
|
|
|
294
|
-
| `getObjectApiName` | `String` | 当前对象 API 名
|
|
295
|
-
| `put`
|
|
411
|
+
| 方法 | 返回类型 | 含义 |
|
|
412
|
+
| ------------------ | -------- | -------------------------------------------------- |
|
|
413
|
+
| `getObjectApiName` | `String` | 当前对象 API 名 |
|
|
414
|
+
| `put` | `String` | `HashMap` 风格返回值;在触发器里通常不依赖其返回值 |
|
|
296
415
|
|
|
297
416
|
AI 使用规则:
|
|
298
417
|
|
|
@@ -324,15 +443,16 @@ public String getRoleId()
|
|
|
324
443
|
|
|
325
444
|
返回值说明:
|
|
326
445
|
|
|
327
|
-
| 方法
|
|
328
|
-
|
|
|
446
|
+
| 方法 | 返回类型 | 官方说明 | AI 使用说明 |
|
|
447
|
+
| ----------- | -------- | ------------------------------ | -------------------- |
|
|
329
448
|
| `getUserId` | `String` | 当前用户 ID,未设置返回 `null` | 适合做当前操作人识别 |
|
|
330
|
-
| `getOrgId`
|
|
331
|
-
| `getRoleId` | `String` | 当前角色 ID,未设置返回 `null` | 适合做角色权限判断
|
|
449
|
+
| `getOrgId` | `String` | 当前组织 ID,未设置返回 `null` | 适合做组织级逻辑判断 |
|
|
450
|
+
| `getRoleId` | `String` | 当前角色 ID,未设置返回 `null` | 适合做角色权限判断 |
|
|
332
451
|
|
|
333
452
|
AI 使用规则:
|
|
334
453
|
|
|
335
|
-
- `CCService`、`SendEmail`、`DevLogger`、`TimeUtil` 都应围绕 `userInfo`
|
|
454
|
+
- `CCService`、`SendEmail`、`DevLogger`、`TimeUtil` 都应围绕 `userInfo`
|
|
455
|
+
构造或调用
|
|
336
456
|
- 不要硬编码用户、组织、角色信息替代 `userInfo`
|
|
337
457
|
|
|
338
458
|
### 8.3 `CCService` 详细说明
|
|
@@ -352,9 +472,9 @@ public CCService(UserInfo userInfo)
|
|
|
352
472
|
|
|
353
473
|
参数说明:
|
|
354
474
|
|
|
355
|
-
| 参数
|
|
356
|
-
|
|
|
357
|
-
| `userInfo` | `UserInfo` | 是
|
|
475
|
+
| 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
476
|
+
| ---------- | ---------- | -------- | -------- | -------------------- |
|
|
477
|
+
| `userInfo` | `UserInfo` | 是 | 用户对象 | 必须传当前上下文用户 |
|
|
358
478
|
|
|
359
479
|
#### 8.3.2 `insert`
|
|
360
480
|
|
|
@@ -366,9 +486,9 @@ public ServiceResult insert(CCObject ccobj) throws BusiException
|
|
|
366
486
|
|
|
367
487
|
参数说明:
|
|
368
488
|
|
|
369
|
-
| 参数
|
|
370
|
-
|
|
|
371
|
-
| `ccobj` | `CCObject` | 是
|
|
489
|
+
| 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
490
|
+
| ------- | ---------- | -------- | -------- | ---------------- |
|
|
491
|
+
| `ccobj` | `CCObject` | 是 | CC 对象 | 用于新增单条记录 |
|
|
372
492
|
|
|
373
493
|
返回值:
|
|
374
494
|
|
|
@@ -397,14 +517,14 @@ public List<CCObject> cquery(String apiName, String condtion, boolean isDataObje
|
|
|
397
517
|
|
|
398
518
|
参数说明:
|
|
399
519
|
|
|
400
|
-
| 方法
|
|
401
|
-
|
|
|
402
|
-
| `cquery(apiName, condtion, order)`
|
|
403
|
-
| `cquery(apiName, condtion, order)`
|
|
404
|
-
| `cquery(apiName, condtion, order)`
|
|
405
|
-
| `cquery(apiName, condtion, isDataObject)` | `apiName`
|
|
406
|
-
| `cquery(apiName, condtion, isDataObject)` | `condtion`
|
|
407
|
-
| `cquery(apiName, condtion, isDataObject)` | `isDataObject` | `Boolean` | 否
|
|
520
|
+
| 方法 | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
521
|
+
| ----------------------------------------- | -------------- | --------- | -------- | --------------------------------------------------------------- | ------------------------------ |
|
|
522
|
+
| `cquery(apiName, condtion, order)` | `apiName` | `String` | 是 | 对象 APIName | 必传对象 API |
|
|
523
|
+
| `cquery(apiName, condtion, order)` | `condition` | `String` | 否 | 使用字段 APIName 查询,自定义字段一定要加 `__c`;无条件则查全部 | 必须收窄条件,避免全表查 |
|
|
524
|
+
| `cquery(apiName, condtion, order)` | `order` | `String` | 否 | 使用字段 APIName 排序,自定义字段一定要加 `__c` | 只在确实需要排序时传 |
|
|
525
|
+
| `cquery(apiName, condtion, isDataObject)` | `apiName` | `String` | 是 | 对象 APIName | 必传对象 API |
|
|
526
|
+
| `cquery(apiName, condtion, isDataObject)` | `condtion` | `String` | 否 | 同上 | 自定义字段记得 `__c` |
|
|
527
|
+
| `cquery(apiName, condtion, isDataObject)` | `isDataObject` | `Boolean` | 否 | `true` 查普通数据,`false` 查共享数据 | 不要混淆普通对象和共享对象口径 |
|
|
408
528
|
|
|
409
529
|
返回值:
|
|
410
530
|
|
|
@@ -432,10 +552,10 @@ public List<CCObject> cqlQuery(String apiName, String cql) throws Exception
|
|
|
432
552
|
|
|
433
553
|
参数说明:
|
|
434
554
|
|
|
435
|
-
| 参数
|
|
436
|
-
|
|
|
437
|
-
| `apiName` | `String` | 是
|
|
438
|
-
| `cql`
|
|
555
|
+
| 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
556
|
+
| --------- | -------- | -------- | ------------------------------- | ------------------------------------------- |
|
|
557
|
+
| `apiName` | `String` | 是 | 对象 APIName | 必传主对象 API |
|
|
558
|
+
| `cql` | `String` | 否 | SQL 语句,支持常用 `where` 条件 | 适用于聚合、复杂过滤;避免无边界 `select *` |
|
|
439
559
|
|
|
440
560
|
返回值:
|
|
441
561
|
|
|
@@ -463,9 +583,9 @@ public ServiceResult update(CCObject ccobj) throws Exception
|
|
|
463
583
|
|
|
464
584
|
参数说明:
|
|
465
585
|
|
|
466
|
-
| 参数
|
|
467
|
-
|
|
|
468
|
-
| `ccobj` | `CCObject` | 是
|
|
586
|
+
| 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
587
|
+
| ------- | ---------- | -------- | -------- | --------------------- |
|
|
588
|
+
| `ccobj` | `CCObject` | 是 | CC 对象 | 修改记录时必须带 `id` |
|
|
469
589
|
|
|
470
590
|
返回值:
|
|
471
591
|
|
|
@@ -493,9 +613,9 @@ public ServiceResult delete(CCObject ccobj) throws Exception
|
|
|
493
613
|
|
|
494
614
|
参数说明:
|
|
495
615
|
|
|
496
|
-
| 参数
|
|
497
|
-
|
|
|
498
|
-
| `ccobj` | `CCObject` | 是
|
|
616
|
+
| 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
617
|
+
| ------- | ---------- | -------- | -------- | ------------------------- |
|
|
618
|
+
| `ccobj` | `CCObject` | 是 | CC 对象 | 删除记录时通常必须带 `id` |
|
|
499
619
|
|
|
500
620
|
返回值:
|
|
501
621
|
|
|
@@ -523,10 +643,10 @@ public void deleteShareObjectBySql(String objectApiName, String expression) thro
|
|
|
523
643
|
|
|
524
644
|
参数说明:
|
|
525
645
|
|
|
526
|
-
| 参数
|
|
527
|
-
|
|
|
528
|
-
| `objectApiName` | `String` | 是
|
|
529
|
-
| `expression`
|
|
646
|
+
| 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
647
|
+
| --------------- | -------- | -------- | ------------------------------ | ------------------------ |
|
|
648
|
+
| `objectApiName` | `String` | 是 | 对象 APIName | 共享对象 API |
|
|
649
|
+
| `expression` | `String` | 是 | SQL 表达式,字段不需要加 `__c` | 这是共享删除的关键差异点 |
|
|
530
650
|
|
|
531
651
|
返回值:
|
|
532
652
|
|
|
@@ -555,13 +675,13 @@ public Map getCustomSetting(String objectApiName, String id)
|
|
|
555
675
|
|
|
556
676
|
参数说明:
|
|
557
677
|
|
|
558
|
-
| 方法
|
|
559
|
-
|
|
|
560
|
-
| `getListCustomSetting(String objectApiName)`
|
|
561
|
-
| `getListCustomSetting(String apiName, String name)` | `apiName`
|
|
562
|
-
| `getListCustomSetting(String apiName, String name)` | `name`
|
|
563
|
-
| `getCustomSetting(String objectApiName, String id)` | `objectApiName` | `String` | 是
|
|
564
|
-
| `getCustomSetting(String objectApiName, String id)` | `id`
|
|
678
|
+
| 方法 | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
679
|
+
| --------------------------------------------------- | --------------- | -------- | -------- | ------------------ | ---------------------------------- |
|
|
680
|
+
| `getListCustomSetting(String objectApiName)` | `objectApiName` | `String` | 是 | 对象 APIName | 返回某个列表型自定义设置的全部数据 |
|
|
681
|
+
| `getListCustomSetting(String apiName, String name)` | `apiName` | `String` | 是 | 对象 APIName | 取列表型自定义设置中的单条 |
|
|
682
|
+
| `getListCustomSetting(String apiName, String name)` | `name` | `String` | 是 | 自定义设置属性名称 | 通过名称定位单条配置 |
|
|
683
|
+
| `getCustomSetting(String objectApiName, String id)` | `objectApiName` | `String` | 是 | 对象 APIName | 用于层次结构型自定义设置 |
|
|
684
|
+
| `getCustomSetting(String objectApiName, String id)` | `id` | `String` | 是 | 简档 id 或用户 id | 按权限上下文取配置 |
|
|
565
685
|
|
|
566
686
|
返回值:
|
|
567
687
|
|
|
@@ -597,9 +717,9 @@ public SendEmail(UserInfo userInfo)
|
|
|
597
717
|
|
|
598
718
|
参数说明:
|
|
599
719
|
|
|
600
|
-
| 参数
|
|
601
|
-
|
|
|
602
|
-
| `userInfo` | `UserInfo` | 是
|
|
720
|
+
| 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
721
|
+
| ---------- | ---------- | -------- | -------- | -------------------- |
|
|
722
|
+
| `userInfo` | `UserInfo` | 是 | 用户对象 | 用当前上下文发送邮件 |
|
|
603
723
|
|
|
604
724
|
#### 8.4.2 `sendMailFromSystem`
|
|
605
725
|
|
|
@@ -617,14 +737,14 @@ public boolean sendMailFromSystem(
|
|
|
617
737
|
|
|
618
738
|
参数说明:
|
|
619
739
|
|
|
620
|
-
| 参数
|
|
621
|
-
|
|
|
622
|
-
| `toAddress`
|
|
623
|
-
| `ccAddress`
|
|
624
|
-
| `bccAddress` | `String[]` | 是
|
|
625
|
-
| `subject`
|
|
626
|
-
| `content`
|
|
627
|
-
| `isText`
|
|
740
|
+
| 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
741
|
+
| ------------ | ---------- | -------- | -------------------------------------- | --------------------- |
|
|
742
|
+
| `toAddress` | `String[]` | 是 | 收件箱 | 没有收件人不要发送 |
|
|
743
|
+
| `ccAddress` | `String[]` | 是 | 抄送人 | 没有可传空数组 |
|
|
744
|
+
| `bccAddress` | `String[]` | 是 | 密送人 | 没有可传空数组 |
|
|
745
|
+
| `subject` | `String` | 是 | 邮件标题 | 标题要能表达业务动作 |
|
|
746
|
+
| `content` | `String` | 是 | 邮件内容 | HTML 内容要控制复杂度 |
|
|
747
|
+
| `isText` | `boolean` | 是 | 是否采用 TXT 方式发送;`false` 为 HTML | HTML 邮件常用 `false` |
|
|
628
748
|
|
|
629
749
|
返回值:
|
|
630
750
|
|
|
@@ -651,13 +771,13 @@ public ServiceResult sendEmailNew(
|
|
|
651
771
|
|
|
652
772
|
参数说明:
|
|
653
773
|
|
|
654
|
-
| 参数
|
|
655
|
-
|
|
|
656
|
-
| `emailtemplateid` | `String`
|
|
657
|
-
| `toaddress`
|
|
658
|
-
| `ccaddress`
|
|
659
|
-
| `bcaddress`
|
|
660
|
-
| `id`
|
|
774
|
+
| 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
775
|
+
| ----------------- | ---------- | -------- | ------------------- | -------------------------------------------------------------------------------- |
|
|
776
|
+
| `emailtemplateid` | `String` | 是 | 邮件模版 id | 优先模板化发送 |
|
|
777
|
+
| `toaddress` | `String[]` | 是 | 收件箱 | 传收件人数组 |
|
|
778
|
+
| `ccaddress` | `String[]` | 是 | 抄送人 | 没有可传空数组 |
|
|
779
|
+
| `bcaddress` | `String[]` | 是 | 密送人 | 官方签名为 `bcaddress`,按签名使用 |
|
|
780
|
+
| `id` | `String` | 是 | 官方文档仅给出 `id` | 结合方法语义,AI 应将其视为模板填充关联记录 ID;此处为基于官方方法名与示例的推断 |
|
|
661
781
|
|
|
662
782
|
返回值:
|
|
663
783
|
|
|
@@ -684,9 +804,9 @@ public DevLogger(UserInfo userInfo)
|
|
|
684
804
|
|
|
685
805
|
参数说明:
|
|
686
806
|
|
|
687
|
-
| 参数
|
|
688
|
-
|
|
|
689
|
-
| `userInfo` | `UserInfo` | 是
|
|
807
|
+
| 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
808
|
+
| ---------- | ---------- | -------- | -------- | -------------------- |
|
|
809
|
+
| `userInfo` | `UserInfo` | 是 | 用户对象 | 用当前上下文记录日志 |
|
|
690
810
|
|
|
691
811
|
#### 8.5.2 `devLogInfo`
|
|
692
812
|
|
|
@@ -698,9 +818,9 @@ public void devLogInfo(String info)
|
|
|
698
818
|
|
|
699
819
|
参数说明:
|
|
700
820
|
|
|
701
|
-
| 参数
|
|
702
|
-
|
|
|
703
|
-
| `info` | `String` | 是
|
|
821
|
+
| 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
822
|
+
| ------ | -------- | -------- | -------- | -------------------------------- |
|
|
823
|
+
| `info` | `String` | 是 | 日志信息 | 记录关键主键、关键分支、关键动作 |
|
|
704
824
|
|
|
705
825
|
返回值:
|
|
706
826
|
|
|
@@ -716,10 +836,10 @@ public void devLogError(String error, Throwable throwable)
|
|
|
716
836
|
|
|
717
837
|
参数说明:
|
|
718
838
|
|
|
719
|
-
| 参数
|
|
720
|
-
|
|
|
721
|
-
| `error`
|
|
722
|
-
| `throwable` | `Throwable` | 否
|
|
839
|
+
| 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
|
|
840
|
+
| ----------- | ----------- | -------- | -------- | -------------------------- |
|
|
841
|
+
| `error` | `String` | 是 | 日志信息 | 错误信息必须包含业务上下文 |
|
|
842
|
+
| `throwable` | `Throwable` | 否 | 异常对象 | 有异常时尽量带上 |
|
|
723
843
|
|
|
724
844
|
返回值:
|
|
725
845
|
|
|
@@ -737,7 +857,8 @@ AI 使用规则:
|
|
|
737
857
|
类说明:
|
|
738
858
|
|
|
739
859
|
- 官方说明:`Date` 和 `Calendar` 默认基于本地时区,跨时区处理容易出错
|
|
740
|
-
- 作用:所有和当前时间、用户时区、格式化、Calendar 相关的逻辑,都应优先走
|
|
860
|
+
- 作用:所有和当前时间、用户时区、格式化、Calendar 相关的逻辑,都应优先走
|
|
861
|
+
`TimeUtil`
|
|
741
862
|
|
|
742
863
|
#### 8.6.1 `getNowDate`
|
|
743
864
|
|
|
@@ -750,9 +871,9 @@ task.setBeginTime(TimeUtil.getNowDate(userInfo));
|
|
|
750
871
|
|
|
751
872
|
参数说明:
|
|
752
873
|
|
|
753
|
-
| 参数
|
|
754
|
-
|
|
|
755
|
-
| `userInfo` | `UserInfo` | 是
|
|
874
|
+
| 参数 | 类型 | 是否必填 | 官方说明 |
|
|
875
|
+
| ---------- | ---------- | -------- | -------- |
|
|
876
|
+
| `userInfo` | `UserInfo` | 是 | 用户对象 |
|
|
756
877
|
|
|
757
878
|
AI 使用规则:
|
|
758
879
|
|
|
@@ -768,9 +889,9 @@ TimeUtil.getUserTimeZone(userInfo)
|
|
|
768
889
|
|
|
769
890
|
参数说明:
|
|
770
891
|
|
|
771
|
-
| 参数
|
|
772
|
-
|
|
|
773
|
-
| `userInfo` | `UserInfo` | 是
|
|
892
|
+
| 参数 | 类型 | 是否必填 | 官方说明 |
|
|
893
|
+
| ---------- | ---------- | -------- | -------- |
|
|
894
|
+
| `userInfo` | `UserInfo` | 是 | 用户对象 |
|
|
774
895
|
|
|
775
896
|
AI 使用规则:
|
|
776
897
|
|
|
@@ -786,10 +907,10 @@ SimpleDateFormat myDateFormat = TimeUtil.getSimpleDateFormat(format, userInfo);
|
|
|
786
907
|
|
|
787
908
|
参数说明:
|
|
788
909
|
|
|
789
|
-
| 参数
|
|
790
|
-
|
|
|
791
|
-
| `format`
|
|
792
|
-
| `userInfo` | `UserInfo` | 是
|
|
910
|
+
| 参数 | 类型 | 是否必填 | 默认值 | 官方说明 | AI 使用说明 |
|
|
911
|
+
| ---------- | ---------- | -------- | -------------- | -------- | ---------------------- |
|
|
912
|
+
| `format` | `String` | 是 | `"yyyy-MM-dd"` | 格式化 | 显式传格式串 |
|
|
913
|
+
| `userInfo` | `UserInfo` | 是 | - | 用户对象 | 用用户时区创建格式化器 |
|
|
793
914
|
|
|
794
915
|
#### 8.6.4 `getCalendar`
|
|
795
916
|
|
package/src/triggers/get.js
CHANGED
|
@@ -3,6 +3,14 @@ const { postClass } = require("../../utils/http")
|
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* cloudcc get triggers <listQueryJson> [projectPath]
|
|
6
|
+
* listQueryJson 字段说明:
|
|
7
|
+
* - shownum: 每页条数
|
|
8
|
+
* - showpage: 页码
|
|
9
|
+
* - sname: 触发器名字
|
|
10
|
+
* - fid: 触发器作用对象 ID(兼容字段)
|
|
11
|
+
* - objId: 触发器作用对象 ID(会自动映射到 fid)
|
|
12
|
+
* - rptcond: 额外筛选条件
|
|
13
|
+
* - rptorder: 排序条件
|
|
6
14
|
* @param {string[]} argvs
|
|
7
15
|
*/
|
|
8
16
|
async function get(argvs, isMcp = false) {
|