cloudcc-cli 2.2.2 → 2.2.4

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 (174) hide show
  1. package/.vscode/settings.json +3 -0
  2. package/README.md +47 -0
  3. package/bin/cc.js +11 -35
  4. package/bin/index.js +33 -0
  5. package/bin/mcp-svc.js +13 -0
  6. package/bin/mcp.js +18 -0
  7. package/java/com/cloudcc/core/TriggerInvoker.java +17 -1
  8. package/package.json +16 -7
  9. package/pom.xml +1 -0
  10. package/prompt/DevelopmentEnvironmentConstruction.ts +133 -0
  11. package/prompt/ccdk.ts +1190 -0
  12. package/prompt/ccprompt.ts +8 -0
  13. package/prompt/cloudccdev.ts +109 -0
  14. package/prompt/index.ts +52 -0
  15. package/prompt/objectInfo.ts +94 -0
  16. package/prompt/objectList.ts +25 -0
  17. package/prompt/openapi.ts +310 -0
  18. package/prompt/system.ts +14 -0
  19. package/prompt/vscodeExtension.ts +27 -0
  20. package/src/approval/approve.js +105 -0
  21. package/src/approval/get.js +245 -0
  22. package/src/approval/index.js +11 -0
  23. package/src/approval/reject.js +105 -0
  24. package/src/brief/get.js +51 -0
  25. package/src/brief/index.js +7 -0
  26. package/src/config/get.js +1 -1
  27. package/src/fields/create.js +204 -0
  28. package/src/fields/fields/A.js +23 -0
  29. package/src/fields/fields/AD.js +25 -0
  30. package/src/fields/fields/B.js +28 -0
  31. package/src/fields/fields/C.js +28 -0
  32. package/src/fields/fields/D.js +27 -0
  33. package/src/fields/fields/E.js +28 -0
  34. package/src/fields/fields/ENC.js +28 -0
  35. package/src/fields/fields/ENCD.js +28 -0
  36. package/src/fields/fields/F.js +27 -0
  37. package/src/fields/fields/FL.js +25 -0
  38. package/src/fields/fields/H.js +27 -0
  39. package/src/fields/fields/IMG.js +27 -0
  40. package/src/fields/fields/J.js +26 -0
  41. package/src/fields/fields/L.js +32 -0
  42. package/src/fields/fields/LT.js +28 -0
  43. package/src/fields/fields/M.js +29 -0
  44. package/src/fields/fields/MR.js +24 -0
  45. package/src/fields/fields/N.js +30 -0
  46. package/src/fields/fields/P.js +28 -0
  47. package/src/fields/fields/Q.js +35 -0
  48. package/src/fields/fields/S.js +30 -0
  49. package/src/fields/fields/SCORE.js +24 -0
  50. package/src/fields/fields/T.js +27 -0
  51. package/src/fields/fields/U.js +28 -0
  52. package/src/fields/fields/X.js +28 -0
  53. package/src/fields/fields/Y.js +33 -0
  54. package/src/fields/get.js +36 -0
  55. package/src/fields/index.js +9 -0
  56. package/src/mcp/MCP/345/234/272/346/231/257/346/250/241/346/213/237.md +8 -0
  57. package/src/mcp/index-sse-svc.js +126 -0
  58. package/src/mcp/index-streamable-svc.js +180 -0
  59. package/src/mcp/index.js +631 -0
  60. package/src/mcp/readme.md +137 -0
  61. package/src/mcp/tools/Approval/handler.js +349 -0
  62. package/src/mcp/tools/Class Creator/handler.js +37 -0
  63. package/src/mcp/tools/Class Detail Retriever/handler.js +33 -0
  64. package/src/mcp/tools/Class Detail Retriever/prompt.js +37 -0
  65. package/src/mcp/tools/Class Editor Guide/handler.js +72 -0
  66. package/src/mcp/tools/Class Editor Guide/prompt.js +468 -0
  67. package/src/mcp/tools/Class List Retriever/handler.js +36 -0
  68. package/src/mcp/tools/Class Publisher/handler.js +29 -0
  69. package/src/mcp/tools/Class Publisher/prompt.js +40 -0
  70. package/src/mcp/tools/Class Puller/handler.js +86 -0
  71. package/src/mcp/tools/Class Puller/prompt.js +49 -0
  72. package/src/mcp/tools/Client Script Creator/handler.js +179 -0
  73. package/src/mcp/tools/Client Script Detail Retriever/handler.js +53 -0
  74. package/src/mcp/tools/Client Script Editor Guide/handler.js +633 -0
  75. package/src/mcp/tools/Client Script List Retriever/handler.js +68 -0
  76. package/src/mcp/tools/Client Script Publisher/handler.js +54 -0
  77. package/src/mcp/tools/Client Script Puller/handler.js +73 -0
  78. package/src/mcp/tools/CloudCC Development Overview/handler.js +48 -0
  79. package/src/mcp/tools/CloudCC Development Overview/prompt.js +870 -0
  80. package/src/mcp/tools/Component Creator/handler.js +44 -0
  81. package/src/mcp/tools/Component Detail Retriever/handler.js +38 -0
  82. package/src/mcp/tools/Component Editor Guide/handler.js +76 -0
  83. package/src/mcp/tools/Component Editor Guide/prompt.js +519 -0
  84. package/src/mcp/tools/Component List Retriever/handler.js +43 -0
  85. package/src/mcp/tools/Component Publisher/handler.js +18 -0
  86. package/src/mcp/tools/Component Publisher/prompt.js +659 -0
  87. package/src/mcp/tools/Component Puller/handler.js +63 -0
  88. package/src/mcp/tools/Dev Environment Creator/fetcher.js +500 -0
  89. package/src/mcp/tools/Dev Environment Creator/handler.js +92 -0
  90. package/src/mcp/tools/Dev Environment Creator/prompt.js +273 -0
  91. package/src/mcp/tools/Dev Environment Validator/handler.js +88 -0
  92. package/src/mcp/tools/Dev Environment Validator/prompt.js +193 -0
  93. package/src/mcp/tools/Developer Key Setup Guide/fetcher.js +278 -0
  94. package/src/mcp/tools/Developer Key Setup Guide/handler.js +43 -0
  95. package/src/mcp/tools/Developer Key Setup Guide/prompt.js +71 -0
  96. package/src/mcp/tools/Object Creator/handler.js +34 -0
  97. package/src/mcp/tools/Object Fields Creator/handler.js +64 -0
  98. package/src/mcp/tools/Object Fields Retriever/handler.js +37 -0
  99. package/src/mcp/tools/Object Fields Retriever/prompt.js +10 -0
  100. package/src/mcp/tools/Object List Retriever/handler.js +43 -0
  101. package/src/mcp/tools/Object List Retriever/prompt.js +10 -0
  102. package/src/mcp/tools/Scheduled Class Creator/handler.js +37 -0
  103. package/src/mcp/tools/Scheduled Class Detail Retriever/handler.js +34 -0
  104. package/src/mcp/tools/Scheduled Class List Retriever/handler.js +52 -0
  105. package/src/mcp/tools/Scheduled Class Publisher/handler.js +30 -0
  106. package/src/mcp/tools/Scheduled Class Puller/handler.js +92 -0
  107. package/src/mcp/tools/Trigger Creator/handler.js +53 -0
  108. package/src/mcp/tools/Trigger Detail Retriever/handler.js +33 -0
  109. package/src/mcp/tools/Trigger Editor Guide/handler.js +58 -0
  110. package/src/mcp/tools/Trigger List Retriever/handler.js +49 -0
  111. package/src/mcp/tools/Trigger Publisher/handler.js +34 -0
  112. package/src/mcp/tools/Trigger Puller/handler.js +40 -0
  113. package/src/mcp/tools/ccdk/fetcher.js +18 -0
  114. package/src/mcp/tools/ccdk/handler.js +98 -0
  115. package/src/mcp/tools/ccdk/prompt.js +453 -0
  116. package/src/mcp/tools/index.js +23 -0
  117. package/src/object/create.js +105 -0
  118. package/src/object/get.js +43 -4
  119. package/src/object/index.js +2 -1
  120. package/src/plugin/create.js +1 -2
  121. package/src/plugin/create1.js +9 -9
  122. package/src/plugin/detail.js +91 -0
  123. package/src/plugin/get.js +79 -0
  124. package/src/plugin/index.js +4 -1
  125. package/src/plugin/publish.js +13 -13
  126. package/src/plugin/publish1.js +33 -24
  127. package/src/plugin/pull.js +173 -0
  128. package/src/project/create.js +9 -9
  129. package/src/project/create1.js +31 -17
  130. package/src/recordType/get.js +4 -2
  131. package/src/script/create.js +7 -7
  132. package/src/script/detail.js +95 -0
  133. package/src/script/get.js +4 -2
  134. package/src/script/index.js +1 -0
  135. package/src/script/publish.js +14 -14
  136. package/src/script/pull.js +12 -12
  137. package/src/script/pullList.js +5 -3
  138. package/src/timer/create.js +7 -7
  139. package/src/timer/detail.js +84 -0
  140. package/src/timer/get.js +6 -3
  141. package/src/timer/publish.js +7 -7
  142. package/src/timer/pull.js +8 -8
  143. package/src/timer/pullList.js +5 -3
  144. package/src/token/get.js +1 -1
  145. package/src/triggers/create.js +7 -7
  146. package/src/triggers/detail.js +90 -0
  147. package/src/triggers/get.js +4 -2
  148. package/src/triggers/index.js +1 -0
  149. package/src/triggers/publish.js +7 -7
  150. package/src/triggers/pull.js +8 -8
  151. package/src/triggers/pullList.js +5 -3
  152. package/src/version/get.js +3 -3
  153. package/target/ccopenapi-0.0.3-classes.jar +0 -0
  154. package/target/ccopenapi-0.0.3.jar +0 -0
  155. package/target/maven-archiver/pom.properties +3 -0
  156. package/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst +18 -0
  157. package/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst +19 -0
  158. package/template/Appvue +452 -12
  159. package/template/index.js +30 -19
  160. package/tool/branch/index.js +1 -1
  161. package/tool/checkLange/checkLang.js +6 -6
  162. package/tool/checkLange/clearLang.js +1 -1
  163. package/utils/accessClass.js +23 -0
  164. package/utils/checkVersion.js +22 -20
  165. package/utils/config.js +18 -3
  166. package/utils/http.js +10 -10
  167. package/utils/utils.js +128 -40
  168. package/java/com/cloudcc/core/CCTriggerDemo.java +0 -25
  169. package/src/classes/create.js +0 -65
  170. package/src/classes/get.js +0 -21
  171. package/src/classes/index.js +0 -11
  172. package/src/classes/publish.js +0 -50
  173. package/src/classes/pull.js +0 -54
  174. package/src/classes/pullList.js +0 -44
@@ -0,0 +1,8 @@
1
+ export default interface CCPrompt {
2
+ // 提示词标题
3
+ title: string,
4
+ // 提示词概述
5
+ description: string,
6
+ // 提示词内容
7
+ content: string
8
+ }
@@ -0,0 +1,109 @@
1
+ export default {
2
+ "title": "CloudCC开发者平台简介",
3
+ "description": "此文档简单概要的介绍了cloudcc开发者平台,如果用户希望快速了解平台的基本信息,可以使用此文档内容回答",
4
+ "content":
5
+ `
6
+ --------CloudCC开发者平台概述开始--------
7
+ # CloudCC开发者平台概述
8
+
9
+ ## CloudCC开发者平台是一个供开发人员为 cloudcc crm 开发定制应用程序的平台,有各种平台开发工具提供教程和文档。
10
+
11
+ ## Cloudcc dev 开发平台包括以下工具:
12
+
13
+ ### cloudcc-cli:基于 Node.js 开发的脚手架工具,用于创建模板项目,支持自定义类、自定义触发器、自定义定时器类、客户端脚本、自定义组件的创建/发布/同步拉取。
14
+
15
+ ### cloudcc-vs-extension(简称 CloudCC):一款 VS Code 插件,通过界面操作调用 cloudcc-cli 命令,提升开发效率。
16
+
17
+ ### CCDK:基于 JavaScript 实现的一套 API,可在自定义组件、客户端脚本、自定义脚本按钮、自定义脚本菜单中调用。
18
+
19
+ ### OpenAPI:是一套java实现的cloudcc 接口功能,可在自定义类、定时器、触发器中直接调用的JAVA API,方便开发者访问 CloudCC 平台资源。
20
+
21
+ ### 自定义类:使用 Java 编写自定义类,可以调用openapi中提供的方法。可以查询平台上的业务数据并实现特殊功能。发布到平台后,可以暴露接口供自定义页面使用。
22
+ #### temlateCode: @SOURCE_CONTENT_START和@SOURCE_CONTENT_END之间的内容是业务代码
23
+ // @SOURCE_CONTENT_START
24
+ public class Demo{
25
+ private UserInfo userInfo;
26
+ private CCService cs;
27
+
28
+ public Demo(UserInfo userInfo){
29
+ this(userInfo,new CCService(userInfo));
30
+ }
31
+ public Demo(UserInfo userInfo,CCService cs){
32
+ this.userInfo = userInfo;
33
+ this.cs=cs;
34
+ }
35
+
36
+ public String demo(String str){
37
+ str = "demo";
38
+ return str;
39
+ }
40
+ }
41
+ // @SOURCE_CONTENT_END
42
+
43
+ ### 自定义触发器:用 Java 编写的代码片段,可以调用openapi中提供的方法,实现特殊功能。在创建、删除、更新或查询对象数据时运行。
44
+ #### templateCode:
45
+ public class Demo extends CCTrigger {
46
+ public void demo(){
47
+ // @SOURCE_CONTENT_START
48
+ System.out.print("hello World");
49
+ // @SOURCE_CONTENT_END
50
+ }
51
+ }
52
+
53
+ ### 自定义定时器类:用 Java 编写的代码片段,可以调用openapi中提供的方法,可以查询平台上的业务数据,实现特殊功能,并可设置为在后台按固定时间间隔触发。
54
+ #### templateCode:
55
+ public class Demo extends CCSchedule {
56
+ public void demo(){
57
+ // @SOURCE_CONTENT_START
58
+ System.out.print("hello World");
59
+ // @SOURCE_CONTENT_END
60
+ }
61
+ }
62
+
63
+ ### 自定义组件说明:
64
+ * 是指使用 Vue2 开发的单页面组件(Single-File Component)。
65
+ * 开发完成后需发布到 CloudCC CRM平台,并可在自定义页面中使用。
66
+ * 组件名称必须遵循 cc-xxx 格式命名(例如:cc-user-list),禁止使用驼峰命名法(CamelCase)。
67
+ * 可以调用CCDK提供的API。
68
+ #### templateCode:
69
+ <template>
70
+ <div class="cc-container">
71
+ <div>Hello</div>
72
+ </div>
73
+ </template>
74
+
75
+ <script>
76
+ export default {
77
+ data() {
78
+ return {
79
+ componentInfo: {
80
+
81
+ component: "component-cc-demo",
82
+
83
+ compName: "compName-cc-demo",
84
+
85
+ compDesc: "Component description information",
86
+ },
87
+ isLock: false,
88
+ };
89
+ },
90
+ };
91
+ </script>
92
+ <style lang="scss" scoped>
93
+ .cc-container {
94
+ text-align: center;
95
+ padding: 8px;
96
+ background: goldenrod;
97
+ }
98
+ </style>
99
+
100
+
101
+ ### 自定义页面:在开发者后台管理中,可以创建自定义页面,使用自定义组件布局。发布到CRM系统后,支持创建自定义页面菜单,并通过 CCDK 调用。
102
+
103
+ ### 客户端脚本:用 JavaScript 编写的代码片段,可以注入到平台页面中,并在页面特殊时间点触发,如打开/关闭,创建/编辑/查看对象页面时。代码中可以使用CCDK的API。
104
+ #### templateCode:
105
+ function main($CCDK, obj){
106
+ console.error("hello World")
107
+ }
108
+ --------CloudCC开发者平台概述结束--------
109
+ `};
@@ -0,0 +1,52 @@
1
+ import system from './system';
2
+ import cloudccdev from './cloudccdev';
3
+ import ccdk from './ccdk';
4
+ import openapi from './openapi';
5
+ import vscodeExtension from './vscodeExtension';
6
+ import DevelopmentEnvironmentConstruction from './DevelopmentEnvironmentConstruction';
7
+ import objectList from './objectList';
8
+ import CCPrompt from "./ccprompt";
9
+ // 定义提示列表对象
10
+ const promptList: Record<string, CCPrompt> = {
11
+ "system": system,
12
+ "objectList": objectList(),
13
+ "cloudccdev": cloudccdev,
14
+ "ccdk": ccdk,
15
+ "openapi": openapi,
16
+ "vscodeExtension": vscodeExtension,
17
+ "DevelopmentEnvironmentConstruction": DevelopmentEnvironmentConstruction,
18
+ };
19
+
20
+ export function getPrompt(key: string) {
21
+ return promptList[key];
22
+ }
23
+
24
+ /**
25
+ * 获取系统提示词
26
+ * 不再包含对象信息,对象信息通过工具按需获取
27
+ */
28
+ export function getSystemPrompt() {
29
+ return `
30
+ ${system.content}
31
+
32
+ 【CloudCC开发文档内容开始】
33
+ ${cloudccdev.content}
34
+ ${openapi.content}
35
+ ${ccdk.content}
36
+ ${vscodeExtension.content}
37
+ ${DevelopmentEnvironmentConstruction.content}
38
+ 【CloudCC开发文档内容结束】
39
+
40
+ 重要提示 - CloudCC对象查询流程:
41
+ 1. 当用户请求涉及CloudCC对象时,首先调用 cloudcc_getObjectList 工具
42
+ - 参数:userPrompt(用户的完整请求)
43
+ - 返回:匹配的对象简要信息数组(包含 apiname、objname、objprefix)
44
+
45
+ 2. 获取到对象简要信息后,调用 cloudcc_getObject 工具获取详细字段信息
46
+ - 参数:objects(第一步返回的对象信息数组)
47
+ - 返回:所有对象的详细字段定义
48
+
49
+ 3. 不要猜测对象的字段,始终通过工具获取准确信息
50
+ 4. 一次可以查询多个对象(最多6个)
51
+ `;
52
+ }
@@ -0,0 +1,94 @@
1
+ import * as vscode from 'vscode';
2
+ import { execSync } from 'child_process';
3
+ import objectList from './objectList';
4
+
5
+ // 缓存对象列表和查询结果
6
+ let objectListCache: string | null = null;
7
+ const objectInfoCache = new Map<string, string>();
8
+
9
+ /**
10
+ * 重置对象信息缓存
11
+ */
12
+ export function resetObjectCache(): void {
13
+ objectListCache = null;
14
+ objectInfoCache.clear();
15
+ }
16
+
17
+ /**
18
+ * 获取对象列表
19
+ * @returns 对象列表内容
20
+ */
21
+ export function getObjectList(): string {
22
+ if (objectListCache === null) {
23
+ objectListCache = objectList().content;
24
+ }
25
+ return objectListCache;
26
+ }
27
+
28
+ /**
29
+ * 根据用户请求查找相关对象
30
+ * @param prompt 用户请求文本
31
+ * @param token 取消令牌
32
+ * @returns 解析后的对象列表和详细信息
33
+ */
34
+ export async function getObjectsInfo(
35
+ prompt: string,
36
+ model: vscode.LanguageModelChat,
37
+ token: vscode.CancellationToken
38
+ ): Promise<string> {
39
+ // 获取对象列表
40
+ const objList = getObjectList();
41
+ if (objList) {
42
+ // 使用语言模型匹配对象
43
+ const object = await model.sendRequest([vscode.LanguageModelChatMessage.User(`
44
+ 对象集合信息如下:${objList}。
45
+ 请严格从以下内容中查找匹配的对象信息:'${prompt}'。
46
+
47
+ 匹配规则:
48
+ • 仅从对象集合中精确查找是否包含在'${prompt}'中提及的对象。
49
+ • '${prompt}'中的关键字与对象objname匹配,包含或是相近。
50
+ • 如果未找到任何匹配对象,请返回[]。
51
+ • 如果找到匹配对象,仅返回文本格式的数组,格式如下:
52
+ [
53
+ {"apiname":"xxx","objname":"xxx","objprefix":"xxx"},
54
+ {"apiname":"xxx","objname":"xxx","objprefix":"xxx"}
55
+ ]
56
+ 注意:
57
+ • 不要返回 Markdown 格式。
58
+ • 不要添加任何额外文本、注释或说明。
59
+ • 严格按照上述格式返回数据。`)], {}, token);
60
+
61
+ let objects = "";
62
+ for await (const fragment of object.text) {
63
+ objects += fragment;
64
+ }
65
+ let objectsInfo = "";
66
+ if (objects) {
67
+ try {
68
+ const parsedObjects = JSON.parse(objects);
69
+ if (parsedObjects.length < 6) {
70
+ for (const obj of parsedObjects) {
71
+ // 如果缓存中没有该对象信息,则查询并缓存
72
+ if (!objectInfoCache.has(obj.apiname)) {
73
+ const result = execSync(
74
+ `cc get object ${vscode.workspace.rootPath} fields ${encodeURI(JSON.stringify(obj))}`
75
+ ).toString("utf8").trim();
76
+
77
+ if (result) {
78
+ objectInfoCache.set(obj.apiname, result);
79
+ objectsInfo += result;
80
+ }
81
+ } else {
82
+ // 从缓存中获取结果
83
+ objectsInfo += objectInfoCache.get(obj.apiname);
84
+ }
85
+ }
86
+ }
87
+ } catch (error) {
88
+ console.error("Error parsing objects:", error);
89
+ }
90
+ }
91
+ return objectsInfo;
92
+ }
93
+ return ""; // Ensure a default return value if no objects are found
94
+ }
@@ -0,0 +1,25 @@
1
+
2
+ import * as vscode from 'vscode';
3
+ import { execSync } from 'child_process';
4
+
5
+ export default function objectList() {
6
+ try {
7
+ const list = execSync(`cc get object ${vscode.workspace.rootPath} chat`).toString("utf8").trim();
8
+ return {
9
+ "title": "对象列表",
10
+ "description": "对象列表信息,包括标准对象和自定义对象。",
11
+ "content": `
12
+ cloudcc对象列表如下:
13
+ ${list}
14
+ `
15
+ };
16
+ } catch (e) {
17
+ console.error("获取对象列表失败", e);
18
+ return {
19
+ "title": "对象列表",
20
+ "description": "对象列表信息,包括标准对象和自定义对象。",
21
+ "content": ""
22
+ };
23
+ }
24
+
25
+ }
@@ -0,0 +1,310 @@
1
+ export default {
2
+ "title": "openapi后端开发",
3
+ "description": "此文档关于自定义类,自定义定时器类,自定义触发器的api开发文档,包含了一些实例,如果有相关这些问题,可以使用此文档回答用户。",
4
+ "content": `
5
+ --------OpenAPI文档开始--------
6
+ # OpenAPI概述
7
+ ## OpenAPI是对cloudcc后端功能的封装,可以在自定义类,自定义定时器类,自定义触发器中使用,访问cloudcc crm的资源和服务。
8
+
9
+ # CloudCC类/定时器类使用指南
10
+ ## CCService
11
+ ### 实例化CCService类:
12
+ CCService cs = new CCService((UserInfo) userInfo);
13
+ ### 说明:
14
+ * CCService包含增删改查基础功能
15
+ * 触发器由CloudCC平台动态编译,可以直接调用CCService方法。
16
+ * 调用方法与Java方法相同。
17
+
18
+ ## CCObject
19
+ ### 实例化CCService类:
20
+ CCObject opp = new CCObject(apiname);
21
+ ### 说明:
22
+ * cloudcc平台对象的封装,包含对象属性和字段信息
23
+
24
+
25
+ ### 使用CCService和CCObject创建记录
26
+ #### 创建Opportunity对象数据:
27
+ CCObject opp = new CCObject("Opportunity");
28
+ CCObject oppshare = new CCObject("Opportunity", CCObject.IS_SHARED);
29
+ opp.put("name", "value");
30
+ cs.insert(opp);
31
+
32
+ ### 使用CCService和CCObject查询记录,推荐使用cquery。
33
+ #### 使用cquery方法进行简单列表查询:
34
+ List<CCObject> opps = cs.cquery("Opportunity", "khmc__c='" + record_new.get("id") + "'");
35
+
36
+ #### 使用cqlQuery方法进行复杂SQL查询:
37
+ List<> ccobjs = cs.cqlQuery("Opportunity", "select sum(amount) as sumAmount from Opportunity where khmc = '0012001238ytwuiw'");
38
+
39
+ ### 使用CCService更新记录
40
+ #### 示例:
41
+ cs.update(opp);
42
+
43
+ ### 使用CCService删除记录
44
+ #### 示例:
45
+ cs.delete(opp);
46
+
47
+ ### 使用CCService和CCObject处理共享表
48
+ #### 查询共享表:
49
+ List<CCObject> sharedRecords = cs.cquery("OpportunityShare", "condition", false);
50
+ #### 删除共享表记录:
51
+ cs.deleteShareObjectBySql("OpportunityShare", "condition");
52
+
53
+ ## SendEmail
54
+ ### 使用sendMailFromSystem发送邮件
55
+ #### 示例:
56
+ SendEmail sendEmail = new SendEmail(userInfo);
57
+ sendEmail.sendMailFromSystem(String[] toAddress, String[] ccAddress, String[] bccAddress, String subject, String content, boolean isText);
58
+
59
+ ## DevLogger
60
+ ### 初始化
61
+ DevLogger cclogger = new DevLogger(userInfo);
62
+ ### 记录消息
63
+ cclogger.devLogInfo("信息日志");
64
+ cclogger.devLogError("错误日志");
65
+ cclogger.devLogError("错误日志", throwable);
66
+
67
+ ## TimeUtil
68
+ ### 说明
69
+ * 类用于多时区支持
70
+ #### 示例:
71
+ Date now = TimeUtil.getNowDate(userInfo);
72
+ SimpleDateFormat sdf = TimeUtil.getSimpleDateFormat("yyyy-MM-dd", userInfo);
73
+ Calendar cal = TimeUtil.getCalendar(userInfo);
74
+
75
+ # CloudCC触发器使用指南
76
+ ## 基本信息
77
+ ### 触发器代码中可用参数:
78
+ (UserInfo) userInfo
79
+ (Map) record_old
80
+ (Map) record_new
81
+
82
+ ## 获取记录值:
83
+ record_new.get("name");
84
+
85
+ ## 增加记录
86
+ ### 使用CCObject:
87
+ // 构建数据对象,传入对象API名称:
88
+ CCObject opp = new CCObject("TableName");
89
+ // 构建共享表对象,传入对象API名称和共享标志:
90
+ CCObject oppshare = new CCObject("TableName", CCObject.IS_SHARED);
91
+ // 给CCObject赋值:
92
+ opp.put("name", "value"); // name是字段API名称
93
+ // 将CCObject保存到数据库:
94
+ this.insert(opp);
95
+ ### 注意
96
+ * 系统字段如ID、自动编号、创建人、创建时间不需要赋值。
97
+
98
+ ## 查询记录
99
+ ### 使用cquery方法进行简单列表查询:
100
+ List<CCObject> opps = this.cquery("Opportunity", "khmc__c='" + record_new.get("id") + "'");
101
+ ### 方法变体:
102
+ // 返回所有记录
103
+ cquery(String objectApiName);
104
+ // 根据条件返回记录,支持常见的where条件
105
+ cquery(String objectApiName, String exp);
106
+ // 根据条件返回并排序记录
107
+ cquery(String objectApiName, String exp, String ordering);
108
+ ### 使用cqlQuery方法进行复杂SQL查询:
109
+ List<CCObject> ccobjs = cqlQuery("Opportunity", "select sum(amount) as sumAmount from Opportunity where khmc = '0012001238ytwuiw'");
110
+ ### 注意:
111
+ * 函数中的字段必须在周围有空格
112
+ * 可以添加where条件
113
+ * 必须使用as别名从结果中检索
114
+ * 支持单表的各种函数
115
+
116
+ ## 更新记录
117
+ ### 示例:
118
+ this.update(opp);
119
+
120
+ ## 删除记录
121
+ ### 示例:
122
+ // 记录将被移动到回收站
123
+ this.delete(opp);
124
+
125
+ ## 错误处理
126
+ ### 返回错误消息:
127
+ // 触发器将从当前行返回,不再执行后续代码
128
+ trigger.addErrorMessage("错误信息");
129
+
130
+
131
+ ## 自定义日志记录
132
+ ### 使用DevLogger:
133
+ // 初始化记录器类:
134
+ DevLogger cclogger = new DevLogger(userInfo);
135
+ // 记录信息级别消息:
136
+ cclogger.devLogInfo(String log);
137
+ // 记录错误级别消息:
138
+ cclogger.devLogError(String log);
139
+ cclogger.devLogError(String log, Throwable throwable);
140
+
141
+ ## 循环调用
142
+ ### 触发器循环调用限制:
143
+ * 触发器最多可执行3次循环调用,如果超出,系统将显示错误消息。
144
+ * 示例:
145
+ * 在客户更新触发器中更新商机
146
+ * 在商机更新触发器中更新客户
147
+ * 在触发器中没有条件控制,系统最多允许3次这样的循环调用
148
+
149
+ ## 使用SendEmail发送通知
150
+ ### 发送电子邮件通知:
151
+ SendEmail sendEmail = new SendEmail(userInfo);
152
+ sendEmail.sendMailFromSystem(String[] toAddress, String[] ccAddress, String[] bccAddress, String subject, String content, boolean isText);
153
+ sendEmail.sendEmailNew(String emailtemplateid, String[] toAddress, String[] ccAddress, String[] bccAddress, String recordId);
154
+
155
+ ## 处理共享表
156
+ ### 查询共享表:
157
+ List<CCObject> sharedRecords = cquery("OpportunityShare", "condition", false);
158
+ ### 添加共享表记录:
159
+ * 参考创建记录部分
160
+ ### 删除共享表记录:
161
+ deleteShareObjectBySql("OpportunityShare", "condition");
162
+ ### 注意:
163
+ * 共享表表达式中的字段不需要"__c"
164
+
165
+ ## 使用自定义设置
166
+ // 查询"列表"类型自定义设置数据:
167
+ Map<String, Object> map = cs.getListCustomSetting("apiName");
168
+ Map<String, Object> mapByName = cs.getListCustomSetting("apiName", "Name");
169
+ // 查询"层次"类型自定义设置数据:
170
+ Map<String, Object> hierarchyMap = cs.getCustomSetting("apiName", "id");
171
+
172
+ ## 日期和时间多时区支持
173
+ ### 使用TimeUtil类,保存java.util.Date类型数据:
174
+ TpSysTask task = new TpSysTask();
175
+ task.setBeginTime(TimeUtil.getNowDate(userInfo));
176
+ dbman.insert(task); // 或 dbman.update(task);
177
+ ### 使用TimeUtil类和SimpleDateFormat格式化Date:
178
+ SimpleDateFormat myDateFormat = TimeUtil.getSimpleDateFormat("yyyy-MM-dd", userInfo);
179
+ ### 使用TimeUtil类和Calendar处理日期:
180
+ Calendar cal = TimeUtil.getCalendar(userInfo);
181
+
182
+ ## 获取电子邮件模板信息
183
+ * 示例:
184
+ Map<String, String> m = this.getMessageByTemplateId(String lang, String emailtemplateid, String... id);
185
+ String subject = m.get("subject");
186
+ String context = m.get("context");
187
+ boolean isText = Boolean.parseBoolean(m.get("istext"));
188
+
189
+ ## 触发器补充说明
190
+ * 首先提供创建触发器的步骤,然后提供代码示例
191
+ * 遵循Java编码标准,使用put进行字段赋值
192
+ * 代码示例中不要在第一行使用"trigger on"
193
+ * 参考以下代码:
194
+ // 假设record_new是一个新的对象实例,全局变量
195
+ record_new.put("status", "Closed Won");
196
+ record_new.put("closeDate", "2024-06-04");
197
+ // 更新商机
198
+ this.update(record_new);
199
+ * 在代码示例中使用全局record_new实例,不要创建新实例
200
+ * 在更新示例中包含this.update(record_new)
201
+ * 避免在代码示例中使用外部循环语句
202
+ * 自动生成代码标准:
203
+
204
+ ## 常见代码片段
205
+ ### 空值检查:
206
+ String varName = record_new.get("fieldName")==null?"":record_new.get("fieldName")+"";
207
+ ### 数值转换:
208
+ double varName = Double.valueOf(record_new.get("fieldName")==null||"".equals(record_new.get("fieldName")+"")?"0.0":record_new.get("fieldName")+"");
209
+ ### 数据库查询:
210
+ List<CCObject> varName = cquery("TableName", "condition");
211
+ if(varName.size() > 0) {
212
+ // 处理记录
213
+ }
214
+ ### 字段更新:
215
+ record.put("fieldName", value);
216
+ updateLt(record);
217
+
218
+ ## 约束条件
219
+ * 首先提供创建触发器的步骤
220
+ * 遵循Java编码标准,使用put进行字段赋值
221
+ * 代码示例中不要在第一行使用"trigger on"
222
+ * 参考以下代码:
223
+ // 假设record_new是一个新的对象实例,全局变量
224
+ record_new.put("status", "Closed Won");
225
+ record_new.put("closeDate", "2024-06-04");
226
+ // 更新商机
227
+ this.update(record_new);
228
+ * 在代码示例中使用全局record_new实例,不要创建新实例
229
+ * 在更新示例中包含this.update(record_new)
230
+ * 避免在代码示例中使用外部循环语句
231
+
232
+ # CloudCC公式字段创建要求:
233
+ * 首先描述CloudCC公式创建步骤
234
+ * 简单的字段算术运算可以直接实现
235
+ * 复杂的CloudCC公式字段可以使用MYSQL语法实现
236
+ * 使用MYSQL的CURDATE()获取当前日期,不要使用TODAY()
237
+ * 无需使用TO_DATE()进行格式化
238
+
239
+ # 自定义类,触发器模版代码:
240
+ ## 严格遵循代码
241
+ * 不要在触发器中执行任何逻辑
242
+ * 在自定义类中直接引用CCService上下文,必须遵循以下代码
243
+ ## 触发器模版代码
244
+ public abstract class CCTriggerHandler extends CCService {
245
+ public Map record_new;
246
+ public Map record_old;
247
+ public ServiceResult trigger;
248
+ UserInfo userInfo;
249
+ public CCTriggerHandler(Map triggernew, Map triggerold, ServiceResult svc, UserInfo uinfo){
250
+ super(uinfo);
251
+ this.record_new = triggernew;
252
+ this.record_old = triggerold;
253
+ this.trigger = svc;
254
+ }
255
+ public CCTriggerHandler(Map triggernew,Map triggerold,ServiceResult svc){
256
+ this.record_new = triggernew;
257
+ this.record_old = triggerold;
258
+ this.trigger = svc;
259
+ userInfo = null;
260
+ }
261
+ }
262
+
263
+ ## 自定义类示例代码
264
+ import org.apache.commons.lang3.StringUtils;
265
+ import java.text.SimpleDateFormat;
266
+
267
+ public class CustomClass extends CCTriggerHandler{
268
+ UserInfo userInfo = null;
269
+ public CustomClass(Map recordnew,Map recordold,ServiceResult svc,UserInfo uinfo){
270
+ super(recordnew,recordold,svc,uinfo);
271
+ userInfo = uinfo;
272
+ }
273
+ public CustomClass(Map recordnew,Map recordold,ServiceResult svc){
274
+ super(recordnew,recordold,svc);
275
+ }
276
+
277
+ public void execute() throws Exception{
278
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
279
+ String status = (String) record_new.get("status");
280
+ int num = 90;
281
+ Map map = getListCustomSetting("ss", "Report Validity Period");
282
+ if(map != null && map.containsKey("val")){
283
+ num = Integer.valueOf(map.get("val")+"");
284
+ }
285
+ Calendar today = Calendar.getInstance();
286
+ today.add(Calendar.DATE,num);
287
+ Date expireDate = today.getTime();
288
+ record_new.put("applicationstate","Valid");
289
+ if(true){
290
+ trigger.addErrorMessage("您需要返回表单的错误信息");
291
+ }
292
+ /**
293
+ CCObject obj = new CCObject("Account");
294
+ obj.put("name","this is an Account Name");
295
+ this.insert(obj);
296
+
297
+ this.update(obj);
298
+ **/
299
+ }
300
+ }
301
+ ## 触发器引用自定义类,示例代码
302
+ CustomClass customClass = new CustomClass(record_new,record_old,trigger,userInfo);
303
+
304
+ if(record_old != null){
305
+ // 逻辑处理
306
+ customClass.execute();
307
+ }
308
+ --------OpenAPI文档结束--------
309
+ `};
310
+
@@ -0,0 +1,14 @@
1
+ export default {
2
+ "title": "系统角色定义",
3
+ "description": "此文档描述了你是谁,以及你的能力",
4
+ "content": `
5
+ 【你的角色】
6
+ 你是一名全栈工程师,精通 Java、SQL、正则表达式、JavaScript、CSS、SCSS、HTML 等技术,熟悉 Vue2、Element-UI2、Apache ECharts 等框架和工具。
7
+
8
+ 【工作要求】
9
+ • 完整阅读并理解我提供的 CloudCC开发文档,所有回答优先使用提供的 CloudCC开发文档。
10
+ • 在涉及 UI 实现时,尽量使用 Element-UI2 框架(已全局安装,可直接调用)。
11
+ • 自定义组件涉及仪表板,柱状图,折线图等需求时,使用import * as echarts from 'echarts';导入即可。
12
+ • 非编程类问题,请委婉拒绝回答,例如:“抱歉,该问题超出我职责范围,无法提供帮助。”。
13
+ • 全程中文交流,保持耐心,主动引导用户思考并提问。
14
+ `};
@@ -0,0 +1,27 @@
1
+ export default {
2
+ "title": "vs code cloudcc扩展工具",
3
+ "description": "vs code扩展工具介绍,扩展工具名称是cloudcc,可以对自定义组件,自定义类,自定义定时器类,自定义触发器,客户端脚本进行管理,比如创建,发布,从线上拉取操作。",
4
+ "content":
5
+ `
6
+ --------cloudcc-vs-extension概述文档开始--------
7
+ # cloudcc-vs-extension 介绍:
8
+ ## 使用前,请通过在 VS Code 扩展商店中搜索来安装 CloudCC。
9
+ ## 创建命令:右键点击项目中的任何文件夹,选择您想要创建的资源类型。仅支持一下命令:
10
+ * New Class
11
+ * New Component
12
+ * New Schedule
13
+ * New Trigger
14
+ * New Client Script
15
+ ## 发布命令:右键点击您想要发布的文件并选择发布。或者打开您想要发布的文件,在编辑器中右键点击发布。仅支持一下命令:
16
+ * Publish Class
17
+ * Publish Component
18
+ * Publish Schedule
19
+ * Publish Trigger
20
+ * Publish Client Script
21
+ ## 拉取命令:右键点击您想要从线上拉取代码的文件并选择拉取。或者打开您想要从线上拉取代码的文件,在编辑器中右键点击拉取。仅支持一下命令:
22
+ * Pull Class
23
+ * Pull Schedule
24
+ * Pull Trigger
25
+ * Pull Client Script
26
+ --------cloudcc-vs-extension概述文档结束--------
27
+ `};