# Hoet Expert

> 跨 HOET 客户端与 UFT 后台的字段溯源分析：根据功能菜单路径和字段名称，在 HOET_Institutional 中定位 T2 功能号、接口入参/回参字段；再在 FastTrade3.0 中追踪该接口与回参字段的计算逻辑及 内存表字段来源；分析完成后按菜单路径写入 docs 字段文档。在用户提及 Hoet Expert、HOET 字段溯源、 菜单字段分析、功能号追踪、T2 接口回参、UFT 计算逻辑、数据库表字段来源、字段文档更新时使用。

- Skill: `yangchen91/hoet-expert` (Agent Skill, multi-file: 5 files)
- Install (CLI): `npx skillmds@latest add yangchen91/hoet-expert`
- Raw SKILL.md: https://api.skillmd.com/api/skills/yangchen91/hoet-expert/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: YangChen91 (https://skillmd.com/u/yangchen91)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/yangchen91/hoet-expert

---


# Hoet Expert

跨项目字段溯源：HOET 前端 → T2 接口 → UFT 后台逻辑 → 内存表字段。

## 代码库路径

| 项目 | 路径 | 技术栈 |
|------|------|--------|
| HOET 客户端 | `D:\git_code\ufg-hoet\HOET_Institutional` | C# WPF + T2 RPC |
| HOET 运行时配置 | `D:\git_code\ufg-hoet\Bin\Config` | Menus.xml 等 |
| UFT 后台 | `D:\git_code\UFT\FastTrade3.0` | UFT XML DSL（LS/LF/AS/RF） |

**重要**：HOET 的"接口"是 **T2 功能号**（6 位数字，如 `931006`），不是 HTTP REST。

---

## 工作流程

用户提供：**功能菜单路径** + **字段名称**（中文标签或属性名）。

```
Phase 1: HOET 溯源（菜单 + 字段 → 功能号 + 回参）
Phase 2: UFT 溯源（功能号 + 回参 → 计算逻辑 + 表字段）
```

复制此清单并跟踪进度：

```
- [ ] Phase 1.1  菜单路径 → View / ViewModel
- [ ] Phase 1.2  字段 → XAML Binding → Model 属性
- [ ] Phase 1.3  ViewModel → Request_N / Command_N
- [ ] Phase 1.4  功能号 + Response 回参 wire 字段
- [ ] Phase 2.1  功能号 → LS_*.uftservice
- [ ] Phase 2.2  LS → LF_*.uftfunction
- [ ] Phase 2.3  回参字段计算逻辑
- [ ] Phase 2.4  内存表字段（uftstructure）
- [ ] Phase 3    按菜单路径更新 docs 字段文档
```

---

## Phase 3：写入文档（分析完成后必做）

文档根目录：`D:\Cursor_WorkSpace\Obsidian_Vault\02_Areas\Hoet字段说明\`

### 存放路径

| 菜单来源 | 文档顶层 |
|----------|----------|
| `Menus.xml`（主程序） | `shell/{插件}/{页面key}/fields/` |
| `WicketMenu.xml`（交易面板） | `wicket/{分组}/{页面key}/fields/` |

示例：`交易面板 → 客户查询 → 成本价` → `wicket/Query/MiniClient/fields/CostPrice.md`

### 字段文档章节顺序（固定）

1. **定位** → 2. **系统参数** → 3. **计算逻辑** → 4. **数据来源汇总**
5. T2 接口 → 6. UFT 链路 → 7. 特殊说明 → 8. 关联字段 → 9. 源码索引

前台四节（1–4）必须排在 T2/UFT 之前。

### 每次分析后更新

1. `fields/{BindingProperty}.md` — 字段正文（模板见 `_templates/field-logic.md`）
2. 同页 `_page.md` — 接口清单、已文档化字段表
3. `HOET字段说明.md` — 按菜单路径追加索引行
4. `_reference/system-parameters.md` — 新出现的 tsys_parameter

详细规范：[reference-docs.md](reference-docs.md)

---

## Phase 1：HOET 溯源

### 1.1 菜单路径 → 页面

1. 在 `Bin\Config\Menus.xml` 按 `zh_CN` 逐级匹配菜单路径
2. 取 `DllName` + `ClassName`（如 `...View.StkTypeView`）
3. 在 `HOET.Institutional.Plugins.*` 找到对应 View / ViewModel

运行时菜单也可能来自 API `110104`（`MenuService.InitMenusFromUC`），本地 XML 是主要锚点。

### 1.2 字段 → 绑定属性

| 输入类型 | 追踪方式 |
|----------|----------|
| 中文标签 | `HOET.Institutional.Language\Language_HOET\HOET_Institutional_zh_CN.xaml` 搜标签 → 得 resource key → 在 View `.xaml` 找 `DynamicResource` / 列头 |
| 属性名 | 直接在 View `.xaml` 搜 `Binding="{Binding Xxx}"` |

### 1.3 ViewModel → 功能号

在 ViewModel 中搜 `Request_` / `Command_` / `Execute` / `ExecuteSync`：

```csharp
var req = new Request_931006();
var o = DomainContext.Uf3ApiHandler.Execute(req);
QueryList = o.Info_931006_List.CastToModel<Info_931006, StkTypeModel>();
```

SDK 调用链（`HOET.UF3.SDK`）：

| 文件 | 内容 |
|------|------|
| `Request\Request_N.cs` | `FunctionNo = N`，`InitParams` 入参 wire 字段 |
| `Response\Response_N.cs` | `Parser()` 解包，`snake_case` → PascalCase |
| `Model\Info_N.cs` | 回参 DTO |
| `Command\CommandManager.cs` | 异步封装 |

其他 SDK：`HOET.SDK`（12xxxx）、`HOET.UFT.SDK`（622xxx）。

### 1.4 命名映射

```
UI 标签 → XAML Binding → *Model 属性 → Info_N 属性 → Response Parser wire 字段
PascalCase                          snake_case
FundBackN                      fund_back_n
```

`CastToModel`（`HOET.Institutional.Core\Utility\Extensions.cs`）按属性名自动映射。

---

## Phase 2：UFT 溯源

### 2.1 功能号 → 服务入口

在 `D:\git_code\UFT\FastTrade3.0` 搜索：

```bash
# 主键：objectId = HOET 功能号
rg 'objectId="931006"' uftbusiness/

# 备选：description 存旧版功能号
rg 'description="931006"' uftbusiness/
```

入口文件：`uftbusiness\<module>\LS_*.uftservice`

### 2.2 服务 → 逻辑函数

读 `.uftservice` 的 `<code>` 块，提取 `[LF_...]` 中文名，定位 `LF_*.uftfunction`：

```
LS_ENTRUSTSET_QUERY_STOCK_TYPE.uftservice
  objectId="931006"
  <code>[LF_交易基本设置_查询_证券类别]</code>
    ↓
LF_ENTRUSTSET_QUERY_STOCK_TYPE.uftfunction
```

### 2.3 回参字段 → 计算逻辑

在 `.uftfunction` 的 `<code>` 中搜字段名：

| 模式 | 含义 |
|------|------|
| `@table.field` | 直接读内存表 |
| `@field = 表达式` | 内联计算 |
| `[手工打包体][...@table.field,...]` | 回参组装 |
| `[尾部插入组件][comp][field=val,...]` | 组件列表输出 |
| `[AS_...]` / `[RF_...]` / `[LF_...]` | 子调用 |

列表型回参查 `metadata\component.xml` 中组件定义。

### 2.4 字段 → 内存表

1. 从 LF 代码提取 `@<table>.<field>`
2. 打开 `uftstructure\<module>\<table>.uftstructure` 看字段定义与索引
3. 查 `uftbusiness\<module>\module.xml` 的 `referstructures` 确认模块引用

**表前缀**：`as_*` 参数/证券、`td_*` 交易/风控、`ac_*` 账户、`tsys_*` 系统配置。

### 2.5 读写路径区分

- **查询 API**：LF 遍历/读取表 → 打包回参（如 `fund_back_n` 直接来自 `as_stktype`）
- **计算 API**：LF 计算后 `[插入记录]`/`[修改记录]` 写表，查询 API 再读

---

## 输出

- **对话回复**：精简溯源结论（调用链 + 关键公式）
- **持久化文档**：写入 `D:\Cursor_WorkSpace\Obsidian_Vault\02_Areas\Hoet字段说明\...\fields\{BindingProperty}.md`，章节顺序见 Phase 3

---

## 常用 Grep 命令

```bash
# HOET：菜单
rg 'zh_CN="证券类别"' D:/git_code/ufg-hoet/Bin/Config/Menus.xml

# HOET：字段绑定
rg 'FundBackN' D:/git_code/ufg-hoet/HOET_Institutional/HOET.Institutional.Plugins.Manage

# HOET：功能号
rg 'Request_931006|Command_931006' D:/git_code/ufg-hoet/HOET_Institutional

# HOET：wire 字段
rg 'fund_back_n' D:/git_code/ufg-hoet/HOET_Institutional/HOET.UF3.SDK

# UFT：功能号入口
rg 'objectId="931006"' D:/git_code/UFT/FastTrade3.0/uftbusiness

# UFT：字段逻辑
rg 'fund_back_n' D:/git_code/UFT/FastTrade3.0/uftbusiness
rg 'fund_back_n' D:/git_code/UFT/FastTrade3.0/uftstructure
```

---

## 注意事项

1. **功能号一致**：HOET `FunctionNo` = UFT `.uftservice` 的 `objectId`（如均为 `931006`）
2. **多 SDK 项目**：优先查 `HOET.UF3.SDK`（93xxxx），再查 `HOET.SDK` / `HOET.UFT.SDK`
3. **字段可能在多个表**：同一 wire 字段可能存在于 `as_stktype`、`as_stkcode`、`td_exchargfo` 等，以 LF 实际引用为准
4. **Converter 显示**：UI 值可能经 `HOET.Institutional.Controls.Converts` 字典转换，溯源以 Binding 属性为准
5. **无计算逻辑**：很多查询字段是表字段直读，报告应明确标注"直读，无计算"

---

## 延伸阅读

- 字段文档书写规范：[reference-docs.md](reference-docs.md)
- HOET 项目结构与 SDK 细节：[reference-hoet.md](reference-hoet.md)
- UFT 五层架构与 DSL 指令：[reference-uft.md](reference-uft.md)
- 完整端到端示例：[examples.md](examples.md)

