@stalfh233/omc-cli 0.5.16 → 0.6.0
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 +3 -1
- package/coverage/m1-coverage-manifest-v1.json +38 -0
- package/dist/bench/call-face-eval.js +6 -0
- package/dist/bench/intent-face-eval.js +6 -0
- package/dist/capability-overview.js +19 -3
- package/dist/cli.js +21 -1
- package/dist/contract-resources.js +2 -0
- package/dist/coverage-registry.js +2 -0
- package/dist/endpoints.js +13 -7
- package/dist/lanes/lane-ids.js +1 -0
- package/dist/lanes/online-js-contract.js +4 -4
- package/dist/lanes/programming-contract.js +113 -0
- package/dist/lanes/programming-coverage.js +18 -0
- package/dist/lanes/programming.js +435 -0
- package/dist/programming-workflow.js +793 -0
- package/dist/tools.js +2 -0
- package/docs/omc-introduction.md +6 -4
- package/docs/tool-surface-map.md +2 -1
- package/package.json +3 -3
- package/skills/omc-backend-online-coding.md +211 -0
- package/skills/omc-capabilities.md +10 -2
- package/skills/omc-glossary.md +9 -2
- package/skills/omc-start-here.md +1 -0
- package/skills/omc-tool-selection.md +1 -1
package/dist/tools.js
CHANGED
|
@@ -16,6 +16,7 @@ import { registerRuntimeDataLane } from "./lanes/runtime-data.js";
|
|
|
16
16
|
import { registerWorkflowLane } from "./lanes/workflow.js";
|
|
17
17
|
import { registerOrganizationLane } from "./lanes/organization.js";
|
|
18
18
|
import { registerOnlineJsLane } from "./lanes/online-js.js";
|
|
19
|
+
import { registerProgrammingLane } from "./lanes/programming.js";
|
|
19
20
|
import { registerB2Lane } from "./lanes/b2-registration.js";
|
|
20
21
|
import { registerListViewLane } from "./lanes/list-view.js";
|
|
21
22
|
import { registerReportLane } from "./lanes/report.js";
|
|
@@ -50,6 +51,7 @@ export function buildToolRegistry() {
|
|
|
50
51
|
registerWorkflowLane(tools);
|
|
51
52
|
registerOrganizationLane(tools);
|
|
52
53
|
registerOnlineJsLane(tools);
|
|
54
|
+
registerProgrammingLane(tools);
|
|
53
55
|
registerB2Lane(tools);
|
|
54
56
|
registerListViewLane(tools);
|
|
55
57
|
registerReportLane(tools);
|
package/docs/omc-introduction.md
CHANGED
|
@@ -464,14 +464,14 @@ omc call datarule.list --args '{"schemaCode":"…","dataRuleType":2}' # 读
|
|
|
464
464
|
想确认某个能力能不能做,先跑两条:
|
|
465
465
|
|
|
466
466
|
```bash
|
|
467
|
-
omc capabilities # 一张表看清
|
|
467
|
+
omc capabilities # 一张表看清 17 项能力
|
|
468
468
|
omc capability <id> --executable # 单个能力的完整执行包
|
|
469
469
|
```
|
|
470
470
|
|
|
471
471
|
覆盖的环节:
|
|
472
472
|
|
|
473
473
|
- 环境、应用、模型、字段
|
|
474
|
-
-
|
|
474
|
+
- 表单、视图、业务规则、**后端在线开发(Java 源码)**
|
|
475
475
|
- 审批流、业务集成
|
|
476
476
|
- 运行数据、报表
|
|
477
477
|
|
|
@@ -490,6 +490,7 @@ omc capability <id> --executable # 单个能力的完整执行包
|
|
|
490
490
|
| `rule-lifecycle` 规则生命周期 | 启用/停用/删除/手动执行 | 6 | executable | none | businessrule → - |
|
|
491
491
|
| `workflow` 流程模板 | 审批流模板、节点/路由、发布、事件规则绑定、发起权限、待办、组织(角色/部门/用户) | 38 | executable | partial | model → - |
|
|
492
492
|
| `onlinejs` 表单在线 JS | 表单在线脚本 compose / 读回(含 SHA-256) | 2 | executable | partial | form → - |
|
|
493
|
+
| `programming` 后端在线开发 | 业务规则 Java 源码:模板读取、草稿保存、编译检查、发布(发布即切编码模式生效) | 6 | executable | none | businessrule → - |
|
|
493
494
|
| `bizservice` 业务集成 | 服务与方法注册(RESTFUL/DATA_SQL/…)、分类、连接池、导入导出、设计器测试 | 24 | executable | partial | - |
|
|
494
495
|
| `report` 报表 | 报表页、BI 图表、数据集(**仅用户显式要求时**) | 9 | partial | partial | - |
|
|
495
496
|
| `data` 运行数据 | 业务记录读/写/更新/删除/提交(工作流) | 6 | executable | none | field → - |
|
|
@@ -653,7 +654,7 @@ CLI 把 writable、生产确认、写锁、幂等、读回做进**进程边界**
|
|
|
653
654
|
|
|
654
655
|
### 6.4 方法论随包走
|
|
655
656
|
|
|
656
|
-
`omc help` 带
|
|
657
|
+
`omc help` 带 14 个 topic,默认只回节索引。
|
|
657
658
|
|
|
658
659
|
常用的有:
|
|
659
660
|
|
|
@@ -704,7 +705,8 @@ CLI 把 writable、生产确认、写锁、幂等、读回做进**进程边界**
|
|
|
704
705
|
| 跨模型子表 / 关联联动 / 子到子 | blocked | 未取证,不猜写 |
|
|
705
706
|
| OCR / 电子签章 / 发票识别 | unsupported | 不在平台配置覆盖内 |
|
|
706
707
|
| 应用发布 / 环境上线 / 生产发布 | unsupported | CLI 只做配置,不做环境发布 |
|
|
707
|
-
|
|
|
708
|
+
| 在线后端编码(业务规则 Java Handler) | supported | `programming.*`:`get`(模板/草稿)→ `save`(草稿)→ `compile` → `publish`(发布即切编码模式并生效) |
|
|
709
|
+
| 规则图 EXECUTE_CODE / ONLINE_DEVELOP 节点、SPI/SERVICE 源码族 | unsupported | 节点型编码与非业务规则源码面不在 CLI 内 |
|
|
708
710
|
| 列表视图分组(queryLayer) | 未取证 | 别猜写 |
|
|
709
711
|
|
|
710
712
|
**两条补充:**
|
package/docs/tool-surface-map.md
CHANGED
|
@@ -25,7 +25,8 @@ Methodology (how to operate the tools) is read with `omc help <topic>` — see
|
|
|
25
25
|
| 24 | form-publish-chain | executable | `form.draft`, `form.publish`, `form.get` (draft-first, explicit publishedHtmlJson, control-level layout readback) |
|
|
26
26
|
| 25 | B1-businessrule | executable | `rule.save` (dead-state + B1.2 CRUD/conditional node graphs) |
|
|
27
27
|
| 26 | C-workflow-template | executable | `workflow.create` (minimal template lifecycle) |
|
|
28
|
-
| 27 | online-js (composer) | executable | `onlinejs.compose` (platform skeleton preserved, canonical customScript element with array attrs, publish + SHA-256 readback).
|
|
28
|
+
| 27 | online-js (composer) | executable | `onlinejs.compose` (platform skeleton preserved, canonical customScript element with array attrs, publish + SHA-256 readback). Form Online JS only |
|
|
29
|
+
| 27a | programming-online-dev | executable | `programming.get`, `programming.save`, `programming.compile`, `programming.publish` (backend Java handler source: template read via `get_source`, draft version 0, compile gate, publish flips the rule to CODING+enabled and inserts a published version). IDE-only endpoints (startDebugging/debug/complete/go_definition) are out of scope |
|
|
29
30
|
| 28 | M2-runtime-data (write/readback) | executable | `data.save`, `data.load`, `data.delete`, `data.list` |
|
|
30
31
|
| 29 | B2-registration | executable | `service.register` (+ method), `service.get`, `service.delete` |
|
|
31
32
|
| 30 | environment-governance | executable | `discover_environment`, `environment.fingerprint`, `doctor`, `get_status` |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stalfh233/omc-cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "CloudPivot 8.6 configuration capability CLI — governed, fail-closed, coverage-manifest bounded.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -52,9 +52,9 @@
|
|
|
52
52
|
"access": "public"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@stalfh233/omc-fake-platform": "0.
|
|
55
|
+
"@stalfh233/omc-fake-platform": "0.6.0",
|
|
56
56
|
"commander": "14.0.3",
|
|
57
|
-
"omc-core": "0.
|
|
57
|
+
"omc-core": "0.6.0",
|
|
58
58
|
"proper-lockfile": "4.1.2",
|
|
59
59
|
"write-file-atomic": "6.0.0",
|
|
60
60
|
"zod": "^3.23.8",
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: omc-backend-online-coding
|
|
3
|
+
description: 后端在线编码(CloudPivot 设计时「在线开发」Java 源码)操作手册:选型(在线编码 vs 二开扩展包)、单条与工作区两种模式、发布语义与模板约束、自动测试闭环、与 cpdocs 配合、handler 骨架与本机 inject_code_dir 部署坑。写/改/发布业务规则 Java 源码前读。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 后端在线编码(programming)
|
|
7
|
+
|
|
8
|
+
面向 agent 的操作手册:在 CloudPivot 上用「在线开发」写业务规则 Java 源码,
|
|
9
|
+
从读模板到发布验证的完整闭环。平台事实以 8.6.26 反编译源码为准,live
|
|
10
|
+
AI-Platform 1.1.25(8.7 时代)已实测(2026-11-03)。
|
|
11
|
+
|
|
12
|
+
## 0. 先分清三个"代码面"
|
|
13
|
+
|
|
14
|
+
| 面 | 是什么 | 用哪个面 |
|
|
15
|
+
|---|---|---|
|
|
16
|
+
| 表单在线 JS | 表单 `customScript` 脚本(浏览器端) | `onlinejs.get` / `onlinejs.compose` |
|
|
17
|
+
| **后端在线编码** | 业务规则的 Java Handler 源码,平台**每次执行时重新编译** | `programming.*` + `omc programming` 命令组 |
|
|
18
|
+
| 二开扩展包 | 独立 jar,构建期编译,部署到 `extensions/`(本地构建 + 部署) | 不在本 CLI 内 |
|
|
19
|
+
|
|
20
|
+
### 选型:在线编码 vs 本地扩展包
|
|
21
|
+
|
|
22
|
+
两者都写 Java,区别在**代码住在哪、怎么生效**:
|
|
23
|
+
|
|
24
|
+
| | 在线编码(本 CLI) | 本地扩展包 |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| 代码位置 | 平台库内(业务规则源码) | 本地 Maven 模块 |
|
|
27
|
+
| 编译时机 | 平台每次执行时重新编译 | 构建期 `mvn package` |
|
|
28
|
+
| 生效方式 | `programming.publish` 即时生效 | 打 jar → 部署到 `extensions/` → 重启 |
|
|
29
|
+
| 适用 | 单模型事件逻辑:Create / Update / Delete / Load / GetList / 自定义规则 | 跨模型聚合、REST 端点、平台级集成、需要额外依赖 |
|
|
30
|
+
| 调试 | `omc programming test`(触发 + 副作用断言) | 本地单测 / 远程 debug |
|
|
31
|
+
| 版本管理 | 本地 `.omc-programming/` 树 + git | 项目 git |
|
|
32
|
+
|
|
33
|
+
判据:**这段逻辑是不是「某个模型发生某事件时做什么」?** 是 → 在线编码,改完即生效,
|
|
34
|
+
不用构建部署。需要对外开接口、跨多模型事务、引第三方 jar → 本地扩展包。
|
|
35
|
+
|
|
36
|
+
先按 cpdocs 的落点判据定「配置 / 二开」;判到二开时,再用上表在两种 Java 落点间选。
|
|
37
|
+
|
|
38
|
+
## 1. 两种用法:单条 vs 工作区
|
|
39
|
+
|
|
40
|
+
### 单条(快速改一条规则)
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# 1) 读模板(未落库时平台按规则类型生成;不传 code 自动推导主键)
|
|
44
|
+
omc call programming.get --env <env> --args '{"schemaCode":"contract","businessRuleCode":"Update"}'
|
|
45
|
+
# 2) 编译检查(先编译,再保存——错误定位最省事)
|
|
46
|
+
omc call programming.compile --env <env> --args '{"schemaCode":"contract","businessRuleCode":"Update","content":"...java..."}'
|
|
47
|
+
# 3) 存草稿(不影响运行时)
|
|
48
|
+
omc call programming.save --env <env> --args-file save.json
|
|
49
|
+
# 4) 发布(内部编译→插入新版→规则切 CODING+enable+发布)
|
|
50
|
+
omc call programming.publish --env <env> --args-file publish.json
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 工作区(多规则、可 review,推荐)
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
omc programming pull --env <env> --app <appCode> # 远端 → .omc-programming/sources/<schema>/<rule>.java + manifest.json
|
|
57
|
+
# 改文件(用你惯用的编辑器/agent 编辑工具)
|
|
58
|
+
omc programming status --env <env> [--deep] # 本地改动 + 未发布改动(--deep 比远端哈希)
|
|
59
|
+
omc programming apply --env <env> [--publish] # 逐文件走治理:漂移门→save→(publish)
|
|
60
|
+
omc programming adopt --env <env> --schema <s> --rule <r> # 图形化规则 → 编码模板入树
|
|
61
|
+
omc programming test --env <env> --schema <s> --rule <r> # fixture 驱动的自动验证
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
收益:一规则一文件(diff/merge 交给 git)、manifest 带环境戳防跨环境、发布前的漂移门
|
|
65
|
+
(平台无乐观锁,CLI 用内容哈希做 advisory gate)。
|
|
66
|
+
|
|
67
|
+
## 2. 关键平台事实(踩坑点)
|
|
68
|
+
|
|
69
|
+
- **运行时只执行已发布版**。`save` 只是草稿;`publish` 才生效。published 内容没有 wire
|
|
70
|
+
读取端点——回滚靠本地 git。
|
|
71
|
+
- **publish 会改规则模式**:BUSINESS_RULE 源码发布时,服务端把规则置
|
|
72
|
+
`DevelopmentMode.CODING` + `enabled=true` + 发布规则。载荷必须带 `businessRule` 整模型
|
|
73
|
+
(工具会自动用 `businessrule/list_by_schemacode` 补齐)。
|
|
74
|
+
- **包路径/类名不得改**:类名必须是 `schemaCode + ruleCode + "Handler"`;包名必须是平台模板包:
|
|
75
|
+
- 8.6.26:`com.authine.cloudpivot.engine.service.bizrule.handler`
|
|
76
|
+
- live 8.7(AI-Platform 1.1.25):`com.authine.cloudpivot.engine.sourcecode.handler`
|
|
77
|
+
工具 preflight 两者都接受、其它拒绝(照 `programming.get` 返回的模板改,最稳)。
|
|
78
|
+
- **codeType 是数字**:BUSINESS_RULE=0(工具内部转换,不用手写)。
|
|
79
|
+
- **只支持业务规则**:8.6.26 的 `get_source` 对 SPI/SERVICE 直接拒绝,v1 不做。
|
|
80
|
+
- **IDE 端点不包**:`startDebugging`/`debug`/`complete`/`go_definition` 是 WEB-IDE 专用
|
|
81
|
+
(调试是 attach 式:挂断点后由真实业务事件触发,没有"假数据单测")。
|
|
82
|
+
|
|
83
|
+
## 3. 测试:`omc programming test`(自动调试)
|
|
84
|
+
|
|
85
|
+
编码规则**内联执行、不写 RuleLog**,所以验证靠「触发调用的响应 + 副作用断言」:
|
|
86
|
+
|
|
87
|
+
```yaml
|
|
88
|
+
# .omc-programming/tests/<schemaCode>/<ruleCode>.yaml
|
|
89
|
+
trigger:
|
|
90
|
+
action: create # create|update|delete|load|custom
|
|
91
|
+
data: { marker: "auto-test-1" }
|
|
92
|
+
asserts:
|
|
93
|
+
- data:
|
|
94
|
+
schema: target_model
|
|
95
|
+
filter: { marker: "auto-test-1" }
|
|
96
|
+
expect: { amount: 42 }
|
|
97
|
+
cleanup:
|
|
98
|
+
- delete: { schema: target_model, filter: { marker: "auto-test-1" } }
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
流水:compile 门禁 → publish(内容未变可跳过)→ 触发(`data.*`;`custom` 用 `rule.run`)
|
|
102
|
+
→ `data.list` 断言 → 只清理自己种的行 → 报告 `verdict`。编译失败/触发异常(带 Java
|
|
103
|
+
errmsg)/断言失败都会进报告,agent 据此改码重跑。
|
|
104
|
+
|
|
105
|
+
### 触发前提:DRAFT 不执行规则
|
|
106
|
+
|
|
107
|
+
**草稿态(DRAFT)的行不触发 Create/Update 分发**(`DomainServiceImpl.java:240-248`),
|
|
108
|
+
所以手动验证必须让数据进完成态:`data.save {…, submit:true}`,或先存草稿再
|
|
109
|
+
`data.submit {schemaCode, bizObjectId}`。
|
|
110
|
+
|
|
111
|
+
实测对照(同一模型、同一已发布规则):
|
|
112
|
+
|
|
113
|
+
| 写入方式 | sequenceStatus | 规则副作用 |
|
|
114
|
+
|---|---|---|
|
|
115
|
+
| `data.save`(不带 submit) | DRAFT | ❌ 不执行(字段保持原值) |
|
|
116
|
+
| `data.save {submit:true}` | COMPLETED | ✅ 执行(字段被规则改写) |
|
|
117
|
+
|
|
118
|
+
若验证时发现「规则好像没跑」,先查这条,再去查编译和 `inject_code_dir`。
|
|
119
|
+
|
|
120
|
+
**断言读值用 `data.load`,不要用 `data.list`**:`data.list` 只回视图列,未配置列的
|
|
121
|
+
字段一律 `null`(与规则是否执行无关)。
|
|
122
|
+
|
|
123
|
+
## 4. 与 cpdocs 配合开发
|
|
124
|
+
|
|
125
|
+
cpdocs 提供**平台知识与规范**,本 CLI 提供**执行面**。已安装时其镜像位于项目内
|
|
126
|
+
(Claude Code `.claude/skills/`、Codex `.agents/skills/`);未安装时以下入口不可用,
|
|
127
|
+
本 CLI 仍可独立完成 `programming.*` 的读写发布。
|
|
128
|
+
|
|
129
|
+
| 需要什么 | 用 cpdocs 的什么 |
|
|
130
|
+
|---|---|
|
|
131
|
+
| Engine Open API 用法(OpenEngine / BizObject / 查询 / 工作流) | `engine-api-guide`(平台版本证据的唯一权威) |
|
|
132
|
+
| 后端代码规范(红线、分层、命名、测试) | `backend-code-norms` |
|
|
133
|
+
| 落点判据与技能编排 | `cpdocs-guide`(落点:配置 / 二开,见其执行步骤第 4 步) |
|
|
134
|
+
| 复杂需求的阶段编排(方案 → 存疑 → 编码 → 联调) | `dev-workflow` |
|
|
135
|
+
|
|
136
|
+
推荐循环:**需求 → cpdocs 定落点与 API → `programming.get` 取模板 → 按 cpdocs 规范写 →
|
|
137
|
+
`compile` → `apply --publish` → `programming test` 断言 → (跨模型/对外接口才升到二开扩展包)**。
|
|
138
|
+
|
|
139
|
+
在线编码里能用什么:`java.lang/math/util/io` + `com.authine.cloudpivot.engine.open.*`
|
|
140
|
+
(OpenEngine)+ `engine.api.*`;web-api 类路径上的二开依赖也能用。**不要用 Spring**
|
|
141
|
+
(规则每次执行重新实例化,无 Spring 上下文),也别把规则类注册成 Bean(内存泄漏)。
|
|
142
|
+
|
|
143
|
+
## 5. 典型 handler 骨架(已验证可编译可运行)
|
|
144
|
+
|
|
145
|
+
```java
|
|
146
|
+
package com.authine.cloudpivot.engine.sourcecode.handler; // 以 get 返回的模板包名为准
|
|
147
|
+
|
|
148
|
+
import com.authine.cloudpivot.engine.bizobject.BizObject;
|
|
149
|
+
import com.authine.cloudpivot.engine.bizobject.filter.BizObjectQuery;
|
|
150
|
+
import com.authine.cloudpivot.engine.bizobject.filter.FilterExpression;
|
|
151
|
+
import com.authine.cloudpivot.engine.open.OpenEngine;
|
|
152
|
+
import com.authine.cloudpivot.engine.sourcecode.handler.context.Request;
|
|
153
|
+
import java.util.HashMap;
|
|
154
|
+
import java.util.List;
|
|
155
|
+
import java.util.Map;
|
|
156
|
+
|
|
157
|
+
public class <schema><rule>Handler extends BaseHandler {
|
|
158
|
+
@Override
|
|
159
|
+
public Object handle(Request request) {
|
|
160
|
+
OpenEngine engine = this.getOpenEngine(request);
|
|
161
|
+
BizObject current = request.getData().getBizObject();
|
|
162
|
+
Map<String, Object> param = request.getData().getCustomParams();
|
|
163
|
+
|
|
164
|
+
String marker = current == null ? null : (String) current.getData().get("marker");
|
|
165
|
+
List<BizObject> existing = engine.listBizObjects(new BizObjectQuery() {
|
|
166
|
+
@Override public String getSchemaCode() { return "target_model"; }
|
|
167
|
+
@Override public FilterExpression getFilterExpression() {
|
|
168
|
+
return new FilterExpression.Item("marker", FilterExpression.Op.Eq, marker);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
|
|
172
|
+
Map<String, Object> data = new HashMap<>();
|
|
173
|
+
data.put("marker", marker);
|
|
174
|
+
data.put("amount", 42);
|
|
175
|
+
if (existing != null && !existing.isEmpty()) {
|
|
176
|
+
BizObject target = existing.get(0);
|
|
177
|
+
target.getData().putAll(data);
|
|
178
|
+
engine.updateBizObject(target, false);
|
|
179
|
+
} else {
|
|
180
|
+
engine.createBizObject(new BizObject("target_model", null, data));
|
|
181
|
+
}
|
|
182
|
+
return data;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
默认规则(Create/Update/Delete/Load/GetList)的父类与签名不同,详见官方模板(`programming.get`)。
|
|
188
|
+
|
|
189
|
+
## 6. 本机部署前提(live 踩过的坑)
|
|
190
|
+
|
|
191
|
+
在线编码运行时会把编译产物写到 `<launcher>/inject_code_dir`。该目录不存在或容器用户
|
|
192
|
+
无写权限时:**publish 会成功,但规则执行报 50000**,日志
|
|
193
|
+
`log_error.log` 里是 `AccessDeniedException: /app/launcher/inject_code_dir`。
|
|
194
|
+
|
|
195
|
+
修复(宿主机,容器 root 视角):
|
|
196
|
+
|
|
197
|
+
```bash
|
|
198
|
+
LAUNCHER=/proc/<launcher-pid>/root/app/launcher
|
|
199
|
+
mkdir -p "$LAUNCHER/inject_code_dir" && chown <容器用户uid>:<gid> "$LAUNCHER/inject_code_dir" && chmod 775 "$LAUNCHER/inject_code_dir"
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## 7. 排障速查
|
|
203
|
+
|
|
204
|
+
| 现象 | 原因 | 处理 |
|
|
205
|
+
|---|---|---|
|
|
206
|
+
| publish 回 `PROGRAMMING_COMPILE_FAILED` | 编译失败 | `programming.compile` 看 errors;注意类名/包名/括号 |
|
|
207
|
+
| 规则执行 50000 | 运行时编译/注入失败 | 先看 `log_error.log`;常见是 `inject_code_dir` 权限 |
|
|
208
|
+
| `programming.schemas` 空 | 平台只列**已有编码规则**的模型 | 用 `rule.list` 找规则,`adopt`/`get` 起模板 |
|
|
209
|
+
| `list_source_by_schemacode` 报源码不存在 | 任一规则缺草稿会整列失败 | 用 `programming.get` 逐条读(未落库回模板) |
|
|
210
|
+
| apply 报 `remote-ahead` | 别人改过远端草稿 | 先 `pull`,再改再 apply |
|
|
211
|
+
| 默认视图查不到字段值 | 列表视图未配置列(投影 null) | 用 `data.load` 读真值,或 `listview.configure` 配列 |
|
|
@@ -36,6 +36,7 @@ only the section for the capability you need —
|
|
|
36
36
|
| 规则生命周期 `rule-lifecycle` | 规则启停删 | 启用规则、停用规则、删除规则、规则启停 | [规则生命周期](#规则生命周期-rule-lifecycle) |
|
|
37
37
|
| 流程模板 `workflow` | 审批流程模板 | 流程、工作流、审批、节点、待办、流转、参与人、审批人、表单操作按钮 | [流程模板](#流程模板-workflow) |
|
|
38
38
|
| 表单在线 JS `onlinejs` | 表单脚本发布/回读 | 在线js、脚本、联动、onload、onvalidate | [表单在线 JS](#表单在线-js-onlinejs) |
|
|
39
|
+
| 后端在线开发 `programming` | 业务规则 Java 源码(模板→草稿→编译→发布)+ 本地工作区 | 在线开发、在线编码、后端源码、java源码、编码模式、handler、源码编译 | [后端在线开发](#后端在线开发-programming) |
|
|
39
40
|
| 业务集成 `bizservice` | 集成服务与方法 | 集成、接口、服务、回调、对接、外部系统、datasql、restful | [业务集成](#业务集成-bizservice) |
|
|
40
41
|
| 报表 `report` | 报表页 + BI 图表(**仅显式要求时**) | 报表、图表、看板、bi、dashboard(用户点名的才做) | [报表](#报表-report) |
|
|
41
42
|
| 运行数据 `data` | 业务记录读写 | 运行数据、提交数据、保存记录、查记录 | [运行数据](#运行数据-data) |
|
|
@@ -158,7 +159,14 @@ only the section for the capability you need —
|
|
|
158
159
|
|
|
159
160
|
- **能做哪些事**:表单在线 JS 的 compose 六元素骨架、`draftHtmlJson.customScript`、发布与 SHA-256 回读;**读现存脚本**(`onlinejs.get` 抽 customScript innerHTML 原文+SHA-256,不必拉 form.get --full 六份 JSON)(脚本**编写**不在 CLI 范围,遵循项目在线 JS 规范或向用户索取定稿 source)。
|
|
160
161
|
- **工具**:`onlinejs.get`、`onlinejs.compose`
|
|
161
|
-
- **边界 / 陷阱**:仅表单在线 JS;后端在线开发(`/api/api/programming` Java
|
|
162
|
+
- **边界 / 陷阱**:仅表单在线 JS;后端在线开发(`/api/api/programming` Java 源码)是独立 `programming` lane(`programming.get/save/compile/publish`),与在线 JS 不互换。INCREMENTAL 合并对同内容重发幂等;同头注释的整文件修订会被拒(`onlinejs-revision-replace-required`),走 `onlinejs.get` 取回 → 改 → `replace:true`。
|
|
163
|
+
|
|
164
|
+
## 后端在线开发 `programming`
|
|
165
|
+
|
|
166
|
+
- **能做哪些事**:业务规则 Java Handler 源码(`/api/api/programming`)——`programming.get`(未落库时按规则类型模板生成)、`programming.save`(草稿)、`programming.compile`(远程编译检查)、`programming.publish`(内部强制编译→插 published 版本→把规则切 CODING+enable+发布)。运行时只执行 **published 最新版**;草稿保存不生效。
|
|
167
|
+
- **工具**:`programming.schemas`、`programming.sources`、`programming.get`、`programming.compile`、`programming.save`、`programming.publish`
|
|
168
|
+
- **工作区命令**(git 友好,`.omc-programming/`):`omc programming pull --env <env> --app <appCode>`(拉源码树+manifest,带环境戳)→ 改 `sources/<schema>/<rule>.java` → `omc programming status [--deep]` → `omc programming apply [--file …] [--publish]`;`omc programming adopt --schema <s> --rule <r>`(图形化规则→编码模板);`omc programming test --schema <s> --rule <r>`(fixture 驱动:compile→publish→触发→断言→清理,自动验证零人工)。
|
|
169
|
+
- **边界 / 陷阱**:包路径/类名不得改(本工具 preflight 拒绝);平台**无乐观锁**(apply 用内容哈希做 advisory 漂移门,remote-ahead 先 pull);published 内容无 wire 读端点 → 回滚靠本地 git;IDE 专用端点(startDebugging/debug/complete/go_definition)不包裹;8.6.26 仅开放 BUSINESS_RULE(SPI/SERVICE 不开放)。与表单在线 JS(`onlinejs.*`)严格分离。
|
|
162
170
|
|
|
163
171
|
## 业务集成 `bizservice`
|
|
164
172
|
|
|
@@ -202,7 +210,7 @@ only the section for the capability you need —
|
|
|
202
210
|
| 嵌套子表(子表套子表) | 平台不存在 | 平台本身就是一级子表:主表可多子表,子表不能再套子表;不是 CLI 缺口,不要按此设计 |
|
|
203
211
|
| OCR / 电子签章 / 发票识别 | unsupported | 不在平台配置覆盖内 |
|
|
204
212
|
| 应用发布 / 环境上线 / 生产发布 | unsupported | CLI 只做配置,不做环境发布 |
|
|
205
|
-
|
|
|
213
|
+
| 规则图 EXECUTE_CODE / ONLINE_DEVELOP 节点、SPI/SERVICE 源码面 | unsupported | 业务规则 Java 源码用 `programming.*`(模板→save→compile→publish);节点型编码与非业务规则源码族不在 CLI 内 |
|
|
206
214
|
|
|
207
215
|
> `blocked` / `unsupported` 是**原生配置**的判定,通常把行为路由到另一个代码所有者(`配置 + 后端扩展`),**不等于**需求不可交付。把 blocked face 编译成「做不了、留人工」是失败模式。
|
|
208
216
|
|
package/skills/omc-glossary.md
CHANGED
|
@@ -63,8 +63,15 @@ Terminology for the `omc` configuration CLI. Built on CloudPivot 8.6 (anchor
|
|
|
63
63
|
- **Online JS** — form-level custom script embedded in the published form:
|
|
64
64
|
compose (preserves the platform skeleton) → publish; the authoritative
|
|
65
65
|
readback is `onlinejs.compose` returning the read-back publishedHtmlJson
|
|
66
|
-
with a SHA-256 fingerprint. (
|
|
67
|
-
|
|
66
|
+
with a SHA-256 fingerprint. (Form Online JS only; backend Java source is
|
|
67
|
+
the separate **programming** lane below.)
|
|
68
|
+
- **Programming (programming)** — design-time 在线开发 Java source for a
|
|
69
|
+
business-rule handler (`/api/api/programming`): `programming.get` (template
|
|
70
|
+
or saved draft) → `programming.save` (draft, version 0) →
|
|
71
|
+
`programming.compile` → `programming.publish` (compiles, inserts a published
|
|
72
|
+
version, flips the rule to CODING+enabled). Runtime executes the latest
|
|
73
|
+
published source; draft saves change nothing. IDE-only endpoints
|
|
74
|
+
(startDebugging/debug/complete/go_definition) are not wrapped.
|
|
68
75
|
- **M2 runtime data** — `runtime/form/save|load|delete`, `query/list` (CLI
|
|
69
76
|
tools `data.save` / `data.load` / `data.submit` / `data.update` / `data.list`).
|
|
70
77
|
`data.load` is the authoritative custom-field readback; list projection
|
package/skills/omc-start-here.md
CHANGED
|
@@ -28,6 +28,7 @@ be treated as a second source. Read this, then follow the topics it names.
|
|
|
28
28
|
阶梯步骤已内联工具必填参数(`route.ladder[].tools`/`readTools`)与命中 recipe 的 `describe <tool> --example <id>`;据此直接执行——**不要再逐能力 `commands --lane`**,也不要先扫 `commands --json`/全部 `contract`/全部 `describe --full`。
|
|
29
29
|
方法论按 `route.readSections` 逐节读:对每条 `{topic, section}` 执行 `omc help <topic> --section "<section>"`(单节 0.4–3.4KB)。`omc help <topic>` 默认只回节索引(约 1KB,含每节字节数);**不要 `--all` 读整篇**(5–14KB,读一次就留在后续每一轮窗口)。**带着具体问题(错误码/跨能力语义/某个词)直接 `omc help --search "<词>"`**——跨全部 topic 全文检索,命中节的正文随结果内联返回,一次调用就是答案;**严禁自己写 `for t in …; do omc help $t --all | grep …` 循环**(r18 实测 12 调用/176KB,检索一次 8KB 搞定)。
|
|
30
30
|
1b. **改/删/重命名既有对象前先看影响面(本地规则图索引)**:`omc graph pull --env <env>` 一次拉全平台建本地索引(增量、秒级、带锁与 gap 报告),之后 `omc graph references <service|model|field> <code>` 离线答「谁引用了它」——一调替代逐模型 `rule.get` 枚举(r30 实测影响评估手工枚举 8×rule.get,graph 一调可达);`impact <kind> <code>` 看爆炸半径、`search <词>` 找规则 code、`status` 看索引新鲜度。索引不含规则条件叶子与流程绑定,命中后仍以 `rule.get` 原文为准。无索引时会拒绝并指路 pull。宿主已接 MCP 时用 `omc mcp-graph --path <项目根>`(工具 `omc_graph_explore`/`omc_graph_status`)。
|
|
31
|
+
1c. **写后端 Java 源码(在线开发)走工作区而不是一条条 call**:`omc programming pull --env <env> --app <appCode>` 把业务规则源码拉进 `.omc-programming/`(git 可管),改文件后 `omc programming status` → `omc programming apply [--publish]`(逐文件走编程面治理);图形化规则转编码用 `omc programming adopt --schema <s> --rule <r>`;验证用 `omc programming test --schema <s> --rule <r>`(fixture 驱动:compile→publish→触发→断言→清理)。**平台运行时只执行已发布版**:只 save 不 publish 等于没改;publish 内部会编译并把规则切 CODING+enable。包路径/类名不得改。
|
|
31
32
|
2. 写前只需读 `omc-config-draft-review`(人审门)与 `omc-five-piece-flow`(发现→草稿→权限→执行→回读);`omc-business-configuration` 按命中的能力分节读(见 `next` 的 `readSections`),不要整篇预取。
|
|
32
33
|
3. 环境名以 `omc doctor` 的「环境=」或 `.omc-env` 为准;工具不确定先用默认 `describe`/`--example`,只有单个工具缺形状才用 `--full`;`describe` 带 `exampleHint`/`recipeHint` 时优先 `--example`。
|
|
33
34
|
4. 只有工具不在 `next` 命中能力内、或要看 purpose/枚举时,才补一次 `commands --json --compact --lane <lane>`。非显然形状(规则图、流程模板、表单布局、RESTFUL)才单独 `describe --example`。
|
|
@@ -75,7 +75,7 @@ Writes:
|
|
|
75
75
|
- Forms: `form.draft`, `form.publish`
|
|
76
76
|
- Rules: `rule.save`, `rule.enable`, `rule.disable`, `rule.delete`
|
|
77
77
|
- Workflow templates: `workflow.create`, `workflow.update`, `workflow.publish`, `workflow.bindRule`, `workflow.delete`
|
|
78
|
-
- Online JS: 本 CLI 只**发布/回读**(`onlinejs.compose`,平台模板保真);脚本**编写**不在 CLI 范围——遵循当前项目自带的在线 JS 编写规范(若有),否则向用户/设计者索取已定稿 `source`。后端的在线开发(Java
|
|
78
|
+
- Online JS: 本 CLI 只**发布/回读**(`onlinejs.compose`,平台模板保真);脚本**编写**不在 CLI 范围——遵循当前项目自带的在线 JS 编写规范(若有),否则向用户/设计者索取已定稿 `source`。后端的在线开发(Java 源码)是独立 `programming` lane:`programming.get` 取模板/草稿 → 改 → `programming.save` → `programming.compile` → `programming.publish`(发布即把规则切编码模式并生效;运行时只执行 published 最新版,草稿保存不生效)
|
|
79
79
|
- M2 data: `data.save`, `data.submit`, `data.delete`
|
|
80
80
|
- B2 services: `service.register`, `service.delete`
|
|
81
81
|
- List views: `listview.create`, `listview.configure`, `listview.delete`
|