# 企业版插件形态选型

> 适用范围：星空企业版 / 标准版。苍穹 / 星瀚 / 旗舰见 `ok-cosmic`。  
> **任意业务场景**先归「生命周期位」，再选基类；完整通用契约见 `api-surface-contract.md`。

## 1. 生命周期位 → 基类 / 事件族

| 生命周期位 | 基类族 | 事件族 | 避免 |
|------------|--------|--------|------|
| 界面录入联动 | `AbstractBillPlugIn` | `DataChanged` | 操作事务里做录入联动 |
| 界面打开后 UI | `AbstractBillPlugIn` | `AfterBindData` | 绑定前乱改 UI |
| 界面保存前校验 | `AbstractBillPlugIn` | `BeforeDoOperation`(Save) 或 `BeforeSave` | 表单类 `BeforeExecuteOperationTransaction`；主路径 `OnValidate` |
| 操作服务（审核/提交/无界面/接口同路径） | 操作插件 | 事务前/中事件（见 Operation 手册） | 以 `View` 为唯一失败路径 |
| 列表勾选 / 工具栏 | `AbstractListPlugIn` | **仅** List 手册 API 面 | 自创列表方法名 |
| 下推 / 转换 | Convert 手册基类 | Convert 手册 | `AfterBindData` 冒充转换 |
| 外部推单 | OpenAPI 辅助 | 报文与开关 | 表单插件当集成入口 |

口语归类：保存/卡单（有界面）→ 表单保存族；审核/接口也要拦 → 操作族；列表勾几行 → 列表族。

## 2. 字段：只认访问位（任意字段）

| 访问位 | 层 |
|--------|-----|
| GetValue / SetValue / Field.Key / FieldKeys.Add | **Key** |
| `entity` / `billObj` / `entry` / `DataEntity` 索引 | **PropertyName** |
| SQL 列 | **FieldName** |

禁止按字段名口算换层。见 `three-identifiers.md`、`api-surface-contract.md` §2。

## 3. API 面

选定插件类型后，**只使用**该类型 `assets/*Plugin.md` 与 Template 中出现的成员。  
snippets 为面内示例，不替代矩阵。列表/表单/操作各自面内禁止项见对应手册。

## 4. 交付注释

```text
// product=enterprise
// lifecycle=form-save|form-ui|list|operation|convert|openapi
// access: GetValue=Key, DataEntity=PropertyName, SQL=FieldName
// fields: … source=metadata|assumption
```
