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
字段文档章节顺序(固定)
- 定位 → 2. 系统参数 → 3. 计算逻辑 → 4. 数据来源汇总
- T2 接口 → 6. UFT 链路 → 7. 特殊说明 → 8. 关联字段 → 9. 源码索引
前台四节(1–4)必须排在 T2/UFT 之前。
每次分析后更新
fields/{BindingProperty}.md— 字段正文(模板见_templates/field-logic.md)- 同页
_page.md— 接口清单、已文档化字段表 HOET字段说明.md— 按菜单路径追加索引行_reference/system-parameters.md— 新出现的 tsys_parameter
详细规范:reference-docs.md
Phase 1:HOET 溯源
1.1 菜单路径 → 页面
- 在
Bin\Config\Menus.xml按zh_CN逐级匹配菜单路径 - 取
DllName+ClassName(如...View.StkTypeView) - 在
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:
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 搜索:
# 主键: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 字段 → 内存表
- 从 LF 代码提取
@<table>.<field> - 打开
uftstructure\<module>\<table>.uftstructure看字段定义与索引 - 查
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 命令
# 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
注意事项
- 功能号一致:HOET
FunctionNo= UFT.uftservice的objectId(如均为931006) - 多 SDK 项目:优先查
HOET.UF3.SDK(93xxxx),再查HOET.SDK/HOET.UFT.SDK - 字段可能在多个表:同一 wire 字段可能存在于
as_stktype、as_stkcode、td_exchargfo等,以 LF 实际引用为准 - Converter 显示:UI 值可能经
HOET.Institutional.Controls.Converts字典转换,溯源以 Binding 属性为准 - 无计算逻辑:很多查询字段是表字段直读,报告应明确标注"直读,无计算"
延伸阅读
- 字段文档书写规范:reference-docs.md
- HOET 项目结构与 SDK 细节:reference-hoet.md
- UFT 五层架构与 DSL 指令:reference-uft.md
- 完整端到端示例:examples.md