---
name: kd-coding-standards
description: 金蝶编码规范 - 命名、魔值、循环DB调用、异常处理、三标识
alwaysApply: false
---

# 金蝶编码规范

## 命名规范

- 类名：PascalCase（如 `BillEditHandler`）
- 方法名：camelCase（如 `beforeBindData`）
- 常量：UPPER_SNAKE_CASE（如 `MAX_RETRY_COUNT`）
- 业务常量应定义为类常量，不内联

## 魔值检查

- 禁止魔数：数字应定义为命名常量
- 禁止魔字符串：字符串字面量应定义为常量（除日志消息、注解值、通用字符串外）
- 允许的数字：0, 1, -1, 100, 1000 等通用值

## 循环 DB 调用

- 禁止在循环内执行数据库查询
- 应批量查询后在循环内处理

## 异常处理

- catch 块不能为空（至少记录日志）
- 禁止 catch Exception 后不做处理
- 业务异常应有明确的错误信息
- 苍穹日志：`kd.bos.logging.Log`；禁止 slf4j/MDC、printStackTrace、System.out

## 平台冲突（常见幻觉）

- 禁止跨族 API：Cosmic=`kd.bos.*`，企业版=`Kingdee.BOS.*`
- 禁止幻觉 API：`setReadOnly`、`queryAll`、`getView().refresh`、`getEntryCount`、`addRow`/`deleteRow`、`getEntry()` 等
- **正确**：UI 禁用用 `getView().setEnable(false, key)`（**合法**，不是幻觉）
- **正确**：基础资料优先 `BusinessDataServiceHelper.loadFromCache`（**存在**）
- **正确**：分录用 `getEntryRowCount` / `createNewEntryRow` / `deleteEntryRow` / `getEntryRowEntity`（**存在**）
- **正确（OpenAPI）**：保存报文参数 **`IsAutoSubmitAndAudit` 存在**；禁止 `true`，**必须 `false`**
- 禁止 `new Thread` / `Executors`（用 ThreadPools）
- 禁止插件里 Spring 注入注解
- 禁止直查 `t_meta_*` 元数据表（业务运行时）
- QFilter 比较符用 QCP 枚举，禁止字符串 `"="`

## 企业版三标识（仅企业版 / 标准版）

- 产品线为 enterprise 时：Key / PropertyName / FieldName 分层。
- 真源：`skills/_shared/three-identifiers.md`；取证：`skills/_shared/metadata-db-query.md`。
- 旗舰 / 苍穹 / 星瀚：不套该分层；按 `ok-cosmic` 字段 key。

## 生命周期


- 禁止在构造函数中调用虚方法
- 禁止在 init 之前访问服务
- **苍穹表单【强制】**：禁止在 `initialize()` 中注册控件事件或 setVisible/setEnable；监听 → `registerListener`；UI 状态 → `afterBindData`
- 正确使用 @Override 注解

## 事务

- 禁止嵌套事务
- 事务方法应有明确的回滚条件

