cloudcc-cli 2.4.0 → 2.4.2

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.
Files changed (49) hide show
  1. package/README.md +60 -0
  2. package/bin/index.js +5 -0
  3. package/cloudcc-dev-skill/SKILL.md +6 -12
  4. package/cloudcc-dev-skill/config.json +2 -2
  5. package/mcp/index.js +9 -4
  6. package/mcp/tools/Trigger List Retriever/handler.js +24 -8
  7. package/package.json +2 -2
  8. package/src/classes/create.js +1 -1
  9. package/src/classes/docs/devguide.md +138 -25
  10. package/src/config/use.js +20 -5
  11. package/src/dupeCatcher/create.js +76 -0
  12. package/src/dupeCatcher/delete.js +69 -0
  13. package/src/dupeCatcher/detail.js +57 -0
  14. package/src/dupeCatcher/doc.js +11 -0
  15. package/src/dupeCatcher/docs/devguide.md +125 -0
  16. package/src/dupeCatcher/docs/introduction.md +21 -0
  17. package/src/dupeCatcher/get.js +88 -0
  18. package/src/dupeCatcher/index.js +14 -0
  19. package/src/html/doc.js +35 -0
  20. package/src/html/docs/devguide.md +67 -0
  21. package/src/html/docs/introduction.md +4 -0
  22. package/src/html/index.js +11 -0
  23. package/src/openapi/cloudcc-openapi-sdk.js +1085 -0
  24. package/src/openapi/doc.js +30 -0
  25. package/src/openapi/docs/devguide.md +65 -0
  26. package/src/openapi/docs/introduction.md +43 -0
  27. package/src/openapi/get.js +45 -0
  28. package/src/openapi/index.js +12 -0
  29. package/src/plugin/publish1.js +1 -1
  30. package/src/plugin/pull.js +2 -2
  31. package/src/script/docs/devguide.md +22 -2
  32. package/src/sharingRule/doc.js +46 -0
  33. package/src/sharingRule/docs/devguide.md +28 -0
  34. package/src/sharingRule/docs/introduction.md +7 -0
  35. package/src/sharingRule/get.js +48 -0
  36. package/src/sharingRule/index.js +9 -0
  37. package/src/site/doc.js +35 -0
  38. package/src/site/docs/devguide.md +209 -0
  39. package/src/site/docs/introduction.md +4 -0
  40. package/src/site/index.js +11 -0
  41. package/src/timer/docs/devguide.md +218 -29
  42. package/src/triggers/docs/devguide.md +247 -127
  43. package/src/triggers/get.js +7 -0
  44. package/src/version/doctor.js +11 -4
  45. package/src/version/listModuleCommands.js +20 -0
  46. package/template/index.js +2 -2
  47. package/utils/config.js +129 -21
  48. package/cloudcc-dev-skill/cloudcc-dev-html.md +0 -42
  49. package/template/cloudcc-cli.configjs +0 -7
@@ -25,50 +25,167 @@
25
25
 
26
26
  ## 2. 编写依据
27
27
 
28
- - 官方 SDK 文档负责定义 `CCObject`、`UserInfo`、`CCService`、`SendEmail`、`DevLogger`、`TimeUtil`、自定义设置、共享对象相关能力
29
- - `triggers devguide` 负责定义 CLI、目录结构、创建发布拉取删除方式和触发器模块约束
28
+ - 官方 SDK 文档负责定义
29
+ `CCObject`、`UserInfo`、`CCService`、`SendEmail`、`DevLogger`、`TimeUtil`、自定义设置、共享对象相关能力
30
+ - `triggers devguide` 负责定义
31
+ CLI、目录结构、创建发布拉取删除方式和触发器模块约束
30
32
  - 当前项目触发器样例负责补充“本项目常见写法”和“本项目容易踩坑的地方”
31
33
 
32
- ## 3. AI 的总体职责
34
+ ## 3. introduction 的分工(避免重复)
33
35
 
34
- AI 在编写触发器时,应把自己视为“对象生命周期规则设计者”,而不是“在构造函数里临时塞一段业务代码的人”。
36
+ 为避免与 `triggers introduction` 内容重复,本 `devguide` 只保留“开发落地规范”:
35
37
 
36
- AI 需要同时做到:
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
- AI 在动手前,必须先判断需求是否属于“对象事件驱动”。
48
+ 说明:
47
49
 
48
- ### 4.1 适合触发器的情况
50
+ - 下文命令中的资源名使用 `triggers`。
51
+ - `projectPath` 未传时,默认使用当前工作目录。
49
52
 
50
- - 某条记录新增时必须立即执行
51
- - 某条记录修改时必须立即校验或联动
52
- - 某条记录删除前必须阻止或删除后必须补偿
53
- - 提交审批、审批通过、审批撤回时必须执行规则
54
- - 当前规则必须平台层统一执行,不能依赖前端页面
55
- - 当前动作如果不在这一刻做,会造成数据错误、状态错误或流程错误
53
+ #### 1) 创建触发器
56
54
 
57
- ### 4.2 不适合优先使用触发器的情况
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
+ "sname": "",
114
+ "rptcond": "",
115
+ "rptorder": "",
116
+ "objId": ""
117
+ }
118
+ ```
119
+
120
+ 字段语义:
121
+
122
+ | 字段 | 含义 | 类型 | 是否推荐 | 说明 |
123
+ | ---------- | ----------------- | -------- | -------- | ------------------------ |
124
+ | `shownum` | 每页条数 | `number | string` | 推荐 |
125
+ | `showpage` | 页码 | `number | string` | 推荐 |
126
+ | `sname` | 触发器名字 | `string` | 可选 | 按名称模糊筛选,模糊查询 |
127
+ | `objId` | 触发器作用对象 ID | `string` | 可选 | 对象id(对象筛选优先用该字段) |
128
+
129
+ #### 5) 查看触发器详情
130
+
131
+ 命令:
132
+
133
+ ```bash
134
+ cloudcc detail triggers <namePath> <id>
135
+ ```
136
+
137
+ 参数规则(实现口径):
138
+
139
+ | 参数 | 必填 | 类型 | 说明 |
140
+ | ---------- | -------- | -------- | ------------------------------------------------ |
141
+ | `namePath` | 条件必填 | `string` | 传 `namePath` 时优先查本地;本地不完整时再走线上 |
142
+ | `id` | 条件必填 | `string` | 当 `namePath` 为空时,必须传 `id` 走线上查询 |
143
+
144
+ 等价理解:`namePath` 与 `id` 至少传一个,优先使用 `namePath` 路径。
145
+
146
+ #### 6) 按 ID 拉取并落地到本地目录
147
+
148
+ 命令:
149
+
150
+ ```bash
151
+ cloudcc pullList triggers <id> <projectPath>
152
+ ```
153
+
154
+ 参数:
155
+
156
+ | 参数 | 必填 | 类型 | 说明 |
157
+ | ------------- | ---- | -------- | ----------------------------------------------------------- |
158
+ | `id` | 是 | `string` | 线上触发器 ID |
159
+ | `projectPath` | 是 | `string` | 项目根目录;会写入到 `<projectPath>/triggers/<obj>/<name>/` |
160
+
161
+ #### 7) 删除触发器
162
+
163
+ 命令:
164
+
165
+ ```bash
166
+ cloudcc delete triggers <namePathOrId> [projectPath]
167
+ ```
168
+
169
+ 参数规则:
170
+
171
+ | 参数 | 必填 | 类型 | 说明 |
172
+ | -------------- | ---- | -------- | ------------------------------------------------------------------------------------- |
173
+ | `namePathOrId` | 是 | `string` | 可传触发器路径或线上 ID;若本地路径存在且 `config.json` 含 `id`,优先使用该 `id` 删除 |
174
+ | `projectPath` | 否 | `string` | 项目根目录,默认当前目录 |
175
+
176
+ #### 8) 文档命令
177
+
178
+ 命令:
179
+
180
+ ```bash
181
+ cloudcc doc triggers <introduction|devguide>
182
+ ```
65
183
 
66
- ### 4.3 AI 的默认选型规则
184
+ 参数:
67
185
 
68
- - 单条记录实时事件,用触发器
69
- - 可复用核心逻辑,下沉到自定义类
70
- - 周期批处理,用定时器
71
- - 页面交互,用页面脚本或组件
186
+ | 参数 | 必填 | 类型 | 说明 |
187
+ | ------------- | --------- | ---- | -------- |
188
+ | `introduction | devguide` | 是 | `string` |
72
189
 
73
190
  ## 5. 当前项目中触发器的真实约束
74
191
 
@@ -230,7 +347,8 @@ AI 不能默认“更新一下没事”。
230
347
 
231
348
  ## 8. SDK 使用规范
232
349
 
233
- 本节是本文的核心。以下 API 说明基于官方 SDK 页面整理,并专门补成“AI 可直接使用”的格式。
350
+ 本节是本文的核心。以下 API 说明基于官方 SDK 页面整理,并专门补成“AI
351
+ 可直接使用”的格式。
234
352
 
235
353
  写法原则:
236
354
 
@@ -258,18 +376,18 @@ public CCObject(String ccobj, String isShared)
258
376
 
259
377
  参数说明:
260
378
 
261
- | 方法 | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
262
- | --- | --- | --- | --- | --- | --- |
263
- | `CCObject(String ccobj)` | `ccobj` | `String` | 是 | 对象 API | 传对象 API 名,如 `Account`、`Opportunity` |
264
- | `CCObject(String ccobj, String isShared)` | `ccobj` | `String` | 是 | 对象 API | 用于共享对象 |
265
- | `CCObject(String ccobj, String isShared)` | `isShared` | `String` | 是 | 共享标识,建议使用 `CCObject.IS_SHARED` | 不要手写魔法值,优先常量 |
379
+ | 方法 | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
380
+ | ----------------------------------------- | ---------- | -------- | -------- | --------------------------------------- | ------------------------------------------ |
381
+ | `CCObject(String ccobj)` | `ccobj` | `String` | 是 | 对象 API | 传对象 API 名,如 `Account`、`Opportunity` |
382
+ | `CCObject(String ccobj, String isShared)` | `ccobj` | `String` | 是 | 对象 API | 用于共享对象 |
383
+ | `CCObject(String ccobj, String isShared)` | `isShared` | `String` | 是 | 共享标识,建议使用 `CCObject.IS_SHARED` | 不要手写魔法值,优先常量 |
266
384
 
267
385
  常量字段:
268
386
 
269
- | 字段 | 类型 | 默认值 | 说明 |
270
- | --- | --- | --- | --- |
387
+ | 字段 | 类型 | 默认值 | 说明 |
388
+ | ------------ | -------- | ------------- | ------------- |
271
389
  | `OBJECT_API` | `String` | `CCObjectAPI` | 对象 API 常量 |
272
- | `IS_SHARED` | `String` | `isShared` | 共享对象常量 |
390
+ | `IS_SHARED` | `String` | `isShared` | 共享对象常量 |
273
391
 
274
392
  #### 8.1.2 常用方法
275
393
 
@@ -282,17 +400,17 @@ public String put(String apiName, String value)
282
400
 
283
401
  参数说明:
284
402
 
285
- | 方法 | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
286
- | --- | --- | --- | --- | --- | --- |
287
- | `put` | `apiName` | `String` | 是 | 字段 APIName | 必须传字段 API 名,不要传字段显示名 |
288
- | `put` | `value` | `String` | 是 | 字段值 | 官方示例按字符串传;AI 应按当前项目已有写法与 SDK 能力处理值类型 |
403
+ | 方法 | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
404
+ | ----- | --------- | -------- | -------- | ------------ | ---------------------------------------------------------------- |
405
+ | `put` | `apiName` | `String` | 是 | 字段 APIName | 必须传字段 API 名,不要传字段显示名 |
406
+ | `put` | `value` | `String` | 是 | 字段值 | 官方示例按字符串传;AI 应按当前项目已有写法与 SDK 能力处理值类型 |
289
407
 
290
408
  返回值说明:
291
409
 
292
- | 方法 | 返回类型 | 含义 |
293
- | --- | --- | --- |
294
- | `getObjectApiName` | `String` | 当前对象 API 名 |
295
- | `put` | `String` | `HashMap` 风格返回值;在触发器里通常不依赖其返回值 |
410
+ | 方法 | 返回类型 | 含义 |
411
+ | ------------------ | -------- | -------------------------------------------------- |
412
+ | `getObjectApiName` | `String` | 当前对象 API 名 |
413
+ | `put` | `String` | `HashMap` 风格返回值;在触发器里通常不依赖其返回值 |
296
414
 
297
415
  AI 使用规则:
298
416
 
@@ -324,15 +442,16 @@ public String getRoleId()
324
442
 
325
443
  返回值说明:
326
444
 
327
- | 方法 | 返回类型 | 官方说明 | AI 使用说明 |
328
- | --- | --- | --- | --- |
445
+ | 方法 | 返回类型 | 官方说明 | AI 使用说明 |
446
+ | ----------- | -------- | ------------------------------ | -------------------- |
329
447
  | `getUserId` | `String` | 当前用户 ID,未设置返回 `null` | 适合做当前操作人识别 |
330
- | `getOrgId` | `String` | 当前组织 ID,未设置返回 `null` | 适合做组织级逻辑判断 |
331
- | `getRoleId` | `String` | 当前角色 ID,未设置返回 `null` | 适合做角色权限判断 |
448
+ | `getOrgId` | `String` | 当前组织 ID,未设置返回 `null` | 适合做组织级逻辑判断 |
449
+ | `getRoleId` | `String` | 当前角色 ID,未设置返回 `null` | 适合做角色权限判断 |
332
450
 
333
451
  AI 使用规则:
334
452
 
335
- - `CCService`、`SendEmail`、`DevLogger`、`TimeUtil` 都应围绕 `userInfo` 构造或调用
453
+ - `CCService`、`SendEmail`、`DevLogger`、`TimeUtil` 都应围绕 `userInfo`
454
+ 构造或调用
336
455
  - 不要硬编码用户、组织、角色信息替代 `userInfo`
337
456
 
338
457
  ### 8.3 `CCService` 详细说明
@@ -352,9 +471,9 @@ public CCService(UserInfo userInfo)
352
471
 
353
472
  参数说明:
354
473
 
355
- | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
356
- | --- | --- | --- | --- | --- |
357
- | `userInfo` | `UserInfo` | 是 | 用户对象 | 必须传当前上下文用户 |
474
+ | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
475
+ | ---------- | ---------- | -------- | -------- | -------------------- |
476
+ | `userInfo` | `UserInfo` | 是 | 用户对象 | 必须传当前上下文用户 |
358
477
 
359
478
  #### 8.3.2 `insert`
360
479
 
@@ -366,9 +485,9 @@ public ServiceResult insert(CCObject ccobj) throws BusiException
366
485
 
367
486
  参数说明:
368
487
 
369
- | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
370
- | --- | --- | --- | --- | --- |
371
- | `ccobj` | `CCObject` | 是 | CC 对象 | 用于新增单条记录 |
488
+ | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
489
+ | ------- | ---------- | -------- | -------- | ---------------- |
490
+ | `ccobj` | `CCObject` | 是 | CC 对象 | 用于新增单条记录 |
372
491
 
373
492
  返回值:
374
493
 
@@ -397,14 +516,14 @@ public List<CCObject> cquery(String apiName, String condtion, boolean isDataObje
397
516
 
398
517
  参数说明:
399
518
 
400
- | 方法 | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
401
- | --- | --- | --- | --- | --- | --- |
402
- | `cquery(apiName, condtion, order)` | `apiName` | `String` | 是 | 对象 APIName | 必传对象 API |
403
- | `cquery(apiName, condtion, order)` | `condition` | `String` | 否 | 使用字段 APIName 查询,自定义字段一定要加 `__c`;无条件则查全部 | 必须收窄条件,避免全表查 |
404
- | `cquery(apiName, condtion, order)` | `order` | `String` | 否 | 使用字段 APIName 排序,自定义字段一定要加 `__c` | 只在确实需要排序时传 |
405
- | `cquery(apiName, condtion, isDataObject)` | `apiName` | `String` | 是 | 对象 APIName | 必传对象 API |
406
- | `cquery(apiName, condtion, isDataObject)` | `condtion` | `String` | 否 | 同上 | 自定义字段记得 `__c` |
407
- | `cquery(apiName, condtion, isDataObject)` | `isDataObject` | `Boolean` | 否 | `true` 查普通数据,`false` 查共享数据 | 不要混淆普通对象和共享对象口径 |
519
+ | 方法 | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
520
+ | ----------------------------------------- | -------------- | --------- | -------- | --------------------------------------------------------------- | ------------------------------ |
521
+ | `cquery(apiName, condtion, order)` | `apiName` | `String` | 是 | 对象 APIName | 必传对象 API |
522
+ | `cquery(apiName, condtion, order)` | `condition` | `String` | 否 | 使用字段 APIName 查询,自定义字段一定要加 `__c`;无条件则查全部 | 必须收窄条件,避免全表查 |
523
+ | `cquery(apiName, condtion, order)` | `order` | `String` | 否 | 使用字段 APIName 排序,自定义字段一定要加 `__c` | 只在确实需要排序时传 |
524
+ | `cquery(apiName, condtion, isDataObject)` | `apiName` | `String` | 是 | 对象 APIName | 必传对象 API |
525
+ | `cquery(apiName, condtion, isDataObject)` | `condtion` | `String` | 否 | 同上 | 自定义字段记得 `__c` |
526
+ | `cquery(apiName, condtion, isDataObject)` | `isDataObject` | `Boolean` | 否 | `true` 查普通数据,`false` 查共享数据 | 不要混淆普通对象和共享对象口径 |
408
527
 
409
528
  返回值:
410
529
 
@@ -432,10 +551,10 @@ public List<CCObject> cqlQuery(String apiName, String cql) throws Exception
432
551
 
433
552
  参数说明:
434
553
 
435
- | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
436
- | --- | --- | --- | --- | --- |
437
- | `apiName` | `String` | 是 | 对象 APIName | 必传主对象 API |
438
- | `cql` | `String` | 否 | SQL 语句,支持常用 `where` 条件 | 适用于聚合、复杂过滤;避免无边界 `select *` |
554
+ | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
555
+ | --------- | -------- | -------- | ------------------------------- | ------------------------------------------- |
556
+ | `apiName` | `String` | 是 | 对象 APIName | 必传主对象 API |
557
+ | `cql` | `String` | 否 | SQL 语句,支持常用 `where` 条件 | 适用于聚合、复杂过滤;避免无边界 `select *` |
439
558
 
440
559
  返回值:
441
560
 
@@ -463,9 +582,9 @@ public ServiceResult update(CCObject ccobj) throws Exception
463
582
 
464
583
  参数说明:
465
584
 
466
- | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
467
- | --- | --- | --- | --- | --- |
468
- | `ccobj` | `CCObject` | 是 | CC 对象 | 修改记录时必须带 `id` |
585
+ | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
586
+ | ------- | ---------- | -------- | -------- | --------------------- |
587
+ | `ccobj` | `CCObject` | 是 | CC 对象 | 修改记录时必须带 `id` |
469
588
 
470
589
  返回值:
471
590
 
@@ -493,9 +612,9 @@ public ServiceResult delete(CCObject ccobj) throws Exception
493
612
 
494
613
  参数说明:
495
614
 
496
- | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
497
- | --- | --- | --- | --- | --- |
498
- | `ccobj` | `CCObject` | 是 | CC 对象 | 删除记录时通常必须带 `id` |
615
+ | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
616
+ | ------- | ---------- | -------- | -------- | ------------------------- |
617
+ | `ccobj` | `CCObject` | 是 | CC 对象 | 删除记录时通常必须带 `id` |
499
618
 
500
619
  返回值:
501
620
 
@@ -523,10 +642,10 @@ public void deleteShareObjectBySql(String objectApiName, String expression) thro
523
642
 
524
643
  参数说明:
525
644
 
526
- | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
527
- | --- | --- | --- | --- | --- |
528
- | `objectApiName` | `String` | 是 | 对象 APIName | 共享对象 API |
529
- | `expression` | `String` | 是 | SQL 表达式,字段不需要加 `__c` | 这是共享删除的关键差异点 |
645
+ | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
646
+ | --------------- | -------- | -------- | ------------------------------ | ------------------------ |
647
+ | `objectApiName` | `String` | 是 | 对象 APIName | 共享对象 API |
648
+ | `expression` | `String` | 是 | SQL 表达式,字段不需要加 `__c` | 这是共享删除的关键差异点 |
530
649
 
531
650
  返回值:
532
651
 
@@ -555,13 +674,13 @@ public Map getCustomSetting(String objectApiName, String id)
555
674
 
556
675
  参数说明:
557
676
 
558
- | 方法 | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
559
- | --- | --- | --- | --- | --- | --- |
560
- | `getListCustomSetting(String objectApiName)` | `objectApiName` | `String` | 是 | 对象 APIName | 返回某个列表型自定义设置的全部数据 |
561
- | `getListCustomSetting(String apiName, String name)` | `apiName` | `String` | 是 | 对象 APIName | 取列表型自定义设置中的单条 |
562
- | `getListCustomSetting(String apiName, String name)` | `name` | `String` | 是 | 自定义设置属性名称 | 通过名称定位单条配置 |
563
- | `getCustomSetting(String objectApiName, String id)` | `objectApiName` | `String` | 是 | 对象 APIName | 用于层次结构型自定义设置 |
564
- | `getCustomSetting(String objectApiName, String id)` | `id` | `String` | 是 | 简档 id 或用户 id | 按权限上下文取配置 |
677
+ | 方法 | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
678
+ | --------------------------------------------------- | --------------- | -------- | -------- | ------------------ | ---------------------------------- |
679
+ | `getListCustomSetting(String objectApiName)` | `objectApiName` | `String` | 是 | 对象 APIName | 返回某个列表型自定义设置的全部数据 |
680
+ | `getListCustomSetting(String apiName, String name)` | `apiName` | `String` | 是 | 对象 APIName | 取列表型自定义设置中的单条 |
681
+ | `getListCustomSetting(String apiName, String name)` | `name` | `String` | 是 | 自定义设置属性名称 | 通过名称定位单条配置 |
682
+ | `getCustomSetting(String objectApiName, String id)` | `objectApiName` | `String` | 是 | 对象 APIName | 用于层次结构型自定义设置 |
683
+ | `getCustomSetting(String objectApiName, String id)` | `id` | `String` | 是 | 简档 id 或用户 id | 按权限上下文取配置 |
565
684
 
566
685
  返回值:
567
686
 
@@ -597,9 +716,9 @@ public SendEmail(UserInfo userInfo)
597
716
 
598
717
  参数说明:
599
718
 
600
- | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
601
- | --- | --- | --- | --- | --- |
602
- | `userInfo` | `UserInfo` | 是 | 用户对象 | 用当前上下文发送邮件 |
719
+ | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
720
+ | ---------- | ---------- | -------- | -------- | -------------------- |
721
+ | `userInfo` | `UserInfo` | 是 | 用户对象 | 用当前上下文发送邮件 |
603
722
 
604
723
  #### 8.4.2 `sendMailFromSystem`
605
724
 
@@ -617,14 +736,14 @@ public boolean sendMailFromSystem(
617
736
 
618
737
  参数说明:
619
738
 
620
- | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
621
- | --- | --- | --- | --- | --- |
622
- | `toAddress` | `String[]` | 是 | 收件箱 | 没有收件人不要发送 |
623
- | `ccAddress` | `String[]` | 是 | 抄送人 | 没有可传空数组 |
624
- | `bccAddress` | `String[]` | 是 | 密送人 | 没有可传空数组 |
625
- | `subject` | `String` | 是 | 邮件标题 | 标题要能表达业务动作 |
626
- | `content` | `String` | 是 | 邮件内容 | HTML 内容要控制复杂度 |
627
- | `isText` | `boolean` | 是 | 是否采用 TXT 方式发送;`false` 为 HTML | HTML 邮件常用 `false` |
739
+ | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
740
+ | ------------ | ---------- | -------- | -------------------------------------- | --------------------- |
741
+ | `toAddress` | `String[]` | 是 | 收件箱 | 没有收件人不要发送 |
742
+ | `ccAddress` | `String[]` | 是 | 抄送人 | 没有可传空数组 |
743
+ | `bccAddress` | `String[]` | 是 | 密送人 | 没有可传空数组 |
744
+ | `subject` | `String` | 是 | 邮件标题 | 标题要能表达业务动作 |
745
+ | `content` | `String` | 是 | 邮件内容 | HTML 内容要控制复杂度 |
746
+ | `isText` | `boolean` | 是 | 是否采用 TXT 方式发送;`false` 为 HTML | HTML 邮件常用 `false` |
628
747
 
629
748
  返回值:
630
749
 
@@ -651,13 +770,13 @@ public ServiceResult sendEmailNew(
651
770
 
652
771
  参数说明:
653
772
 
654
- | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
655
- | --- | --- | --- | --- | --- |
656
- | `emailtemplateid` | `String` | 是 | 邮件模版 id | 优先模板化发送 |
657
- | `toaddress` | `String[]` | 是 | 收件箱 | 传收件人数组 |
658
- | `ccaddress` | `String[]` | 是 | 抄送人 | 没有可传空数组 |
659
- | `bcaddress` | `String[]` | 是 | 密送人 | 官方签名为 `bcaddress`,按签名使用 |
660
- | `id` | `String` | 是 | 官方文档仅给出 `id` | 结合方法语义,AI 应将其视为模板填充关联记录 ID;此处为基于官方方法名与示例的推断 |
773
+ | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
774
+ | ----------------- | ---------- | -------- | ------------------- | -------------------------------------------------------------------------------- |
775
+ | `emailtemplateid` | `String` | 是 | 邮件模版 id | 优先模板化发送 |
776
+ | `toaddress` | `String[]` | 是 | 收件箱 | 传收件人数组 |
777
+ | `ccaddress` | `String[]` | 是 | 抄送人 | 没有可传空数组 |
778
+ | `bcaddress` | `String[]` | 是 | 密送人 | 官方签名为 `bcaddress`,按签名使用 |
779
+ | `id` | `String` | 是 | 官方文档仅给出 `id` | 结合方法语义,AI 应将其视为模板填充关联记录 ID;此处为基于官方方法名与示例的推断 |
661
780
 
662
781
  返回值:
663
782
 
@@ -684,9 +803,9 @@ public DevLogger(UserInfo userInfo)
684
803
 
685
804
  参数说明:
686
805
 
687
- | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
688
- | --- | --- | --- | --- | --- |
689
- | `userInfo` | `UserInfo` | 是 | 用户对象 | 用当前上下文记录日志 |
806
+ | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
807
+ | ---------- | ---------- | -------- | -------- | -------------------- |
808
+ | `userInfo` | `UserInfo` | 是 | 用户对象 | 用当前上下文记录日志 |
690
809
 
691
810
  #### 8.5.2 `devLogInfo`
692
811
 
@@ -698,9 +817,9 @@ public void devLogInfo(String info)
698
817
 
699
818
  参数说明:
700
819
 
701
- | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
702
- | --- | --- | --- | --- | --- |
703
- | `info` | `String` | 是 | 日志信息 | 记录关键主键、关键分支、关键动作 |
820
+ | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
821
+ | ------ | -------- | -------- | -------- | -------------------------------- |
822
+ | `info` | `String` | 是 | 日志信息 | 记录关键主键、关键分支、关键动作 |
704
823
 
705
824
  返回值:
706
825
 
@@ -716,10 +835,10 @@ public void devLogError(String error, Throwable throwable)
716
835
 
717
836
  参数说明:
718
837
 
719
- | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
720
- | --- | --- | --- | --- | --- |
721
- | `error` | `String` | 是 | 日志信息 | 错误信息必须包含业务上下文 |
722
- | `throwable` | `Throwable` | 否 | 异常对象 | 有异常时尽量带上 |
838
+ | 参数 | 类型 | 是否必填 | 官方说明 | AI 使用说明 |
839
+ | ----------- | ----------- | -------- | -------- | -------------------------- |
840
+ | `error` | `String` | 是 | 日志信息 | 错误信息必须包含业务上下文 |
841
+ | `throwable` | `Throwable` | 否 | 异常对象 | 有异常时尽量带上 |
723
842
 
724
843
  返回值:
725
844
 
@@ -737,7 +856,8 @@ AI 使用规则:
737
856
  类说明:
738
857
 
739
858
  - 官方说明:`Date` 和 `Calendar` 默认基于本地时区,跨时区处理容易出错
740
- - 作用:所有和当前时间、用户时区、格式化、Calendar 相关的逻辑,都应优先走 `TimeUtil`
859
+ - 作用:所有和当前时间、用户时区、格式化、Calendar 相关的逻辑,都应优先走
860
+ `TimeUtil`
741
861
 
742
862
  #### 8.6.1 `getNowDate`
743
863
 
@@ -750,9 +870,9 @@ task.setBeginTime(TimeUtil.getNowDate(userInfo));
750
870
 
751
871
  参数说明:
752
872
 
753
- | 参数 | 类型 | 是否必填 | 官方说明 |
754
- | --- | --- | --- | --- |
755
- | `userInfo` | `UserInfo` | 是 | 用户对象 |
873
+ | 参数 | 类型 | 是否必填 | 官方说明 |
874
+ | ---------- | ---------- | -------- | -------- |
875
+ | `userInfo` | `UserInfo` | 是 | 用户对象 |
756
876
 
757
877
  AI 使用规则:
758
878
 
@@ -768,9 +888,9 @@ TimeUtil.getUserTimeZone(userInfo)
768
888
 
769
889
  参数说明:
770
890
 
771
- | 参数 | 类型 | 是否必填 | 官方说明 |
772
- | --- | --- | --- | --- |
773
- | `userInfo` | `UserInfo` | 是 | 用户对象 |
891
+ | 参数 | 类型 | 是否必填 | 官方说明 |
892
+ | ---------- | ---------- | -------- | -------- |
893
+ | `userInfo` | `UserInfo` | 是 | 用户对象 |
774
894
 
775
895
  AI 使用规则:
776
896
 
@@ -786,10 +906,10 @@ SimpleDateFormat myDateFormat = TimeUtil.getSimpleDateFormat(format, userInfo);
786
906
 
787
907
  参数说明:
788
908
 
789
- | 参数 | 类型 | 是否必填 | 默认值 | 官方说明 | AI 使用说明 |
790
- | --- | --- | --- | --- | --- | --- |
791
- | `format` | `String` | 是 | `"yyyy-MM-dd"` | 格式化 | 显式传格式串 |
792
- | `userInfo` | `UserInfo` | 是 | - | 用户对象 | 用用户时区创建格式化器 |
909
+ | 参数 | 类型 | 是否必填 | 默认值 | 官方说明 | AI 使用说明 |
910
+ | ---------- | ---------- | -------- | -------------- | -------- | ---------------------- |
911
+ | `format` | `String` | 是 | `"yyyy-MM-dd"` | 格式化 | 显式传格式串 |
912
+ | `userInfo` | `UserInfo` | 是 | - | 用户对象 | 用用户时区创建格式化器 |
793
913
 
794
914
  #### 8.6.4 `getCalendar`
795
915
 
@@ -3,6 +3,13 @@ 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
+ * - objId: 触发器作用对象 ID(对象筛选请优先使用此字段)
11
+ * - rptcond: 额外筛选条件
12
+ * - rptorder: 排序条件
6
13
  * @param {string[]} argvs
7
14
  */
8
15
  async function get(argvs, isMcp = false) {
@@ -11,12 +11,19 @@ function doctor() {
11
11
  console.error(chalk.green("✓") + " cloudcc-cli v" + pkg.version)
12
12
 
13
13
  const cwd = process.cwd()
14
- const configPath = path.join(cwd, "cloudcc-cli.config.js")
15
- if (fs.existsSync(configPath)) {
16
- console.error(chalk.green("✓") + " 当前目录存在 cloudcc-cli.config.js")
14
+ const jsonPath = path.join(cwd, "cloudcc-cli.config.json")
15
+ const jsPath = path.join(cwd, "cloudcc-cli.config.js")
16
+ const hasJson = fs.existsSync(jsonPath)
17
+ const hasJs = fs.existsSync(jsPath)
18
+ if (hasJson || hasJs) {
19
+ const parts = []
20
+ if (hasJson) parts.push("cloudcc-cli.config.json")
21
+ if (hasJs) parts.push("cloudcc-cli.config.js")
22
+ console.error(chalk.green("✓") + " 当前目录存在 " + parts.join("、"))
17
23
  } else {
18
24
  console.error(
19
- chalk.yellow("○") + " 当前目录未找到 cloudcc-cli.config.js(若在本目录开发 CloudCC 项目,请先初始化或放入配置)"
25
+ chalk.yellow("○") +
26
+ " 当前目录未找到 cloudcc-cli.config.json / cloudcc-cli.config.js(若在本目录开发 CloudCC 项目,请先初始化或放入配置)"
20
27
  )
21
28
  }
22
29
  console.error()