Files
change_code/docs/使用手册.md
T
2026-09-22 15:15:22 +08:00

21 KiB
Raw Blame History

Uft30ChangeCode 使用手册

文档信息 内容
软件名称 Uft30ChangeCode(UF20 → UFT3 转码工具)
手册版本 V1.6.0
更新日期 2026-09-14
适用对象 使用本工具进行代码转码的开发/维护人员

1. 软件简介

Uft30ChangeCode 是一款桌面端 UF20 → UFT3 代码转码工具,主要提供:

  • 业务转码:全量转码(LS_ 功能清单式整体转码)与按需转码(非 LS 功能,支持单文件/递归两种模式)两个工作台;
  • 代码检索:查看功能的调用链路(向上调用方、向下被调),支持导出调用文件与链路文本;
  • 功能查询:检索 UF20 / UFT3 功能元数据,支持多关键词批量查询(逗号/空格分隔);UF20 查询结果可双击/右键一键加入转码清单,UFT3 仅用于查询核对;
  • 数据映射:维护 UF20 → UFT3 的表替换、函数替换对照表;
  • 元数据更新:解析 UF20/UFT3 源码,建立功能索引缓存(首次使用前必须执行)。

2. 运行环境

项目 要求
操作系统 Windows 10/11(64 位)
运行库 Qt 6.6.2 运行库(随部署包提供)
磁盘权限 对安装目录及源码目录具有读写权限

3. 安装与启动

  1. 将部署包解压到任意目录(建议路径不含中文与空格);
  2. 确认目录下包含 Uft30ChangeCode.exe 与 uf2touft3\config\ 配置目录;
  3. 双击 Uft30ChangeCode.exe 启动,主界面左侧为功能导航栏。

首次使用必读:请先在底部"设置"中配置 UFT30/UF20 项目环境路径(见 §5.5),再到"元数据更新"页执行一次元数据更新(见 §5.1)。否则各页面的"是否存在"判断与功能查询均不可用。

4. 界面总览

启动后左侧导航栏包含以下页面:

导航项 用途
功能转码 → 业务转码 全量转码与按需转码工作台(页内 Tab 切换)
功能转码 → 代码检索 功能调用链路查询与导出
功能查询 → UF20功能查询 检索 UF20 功能(支持批量关键词),双击/右键一键加入转码清单
功能查询 → UFT3功能查询 检索 UFT3 功能元数据(仅查询核对,不加入清单)
数据映射 → 表替换 维护 UF20 → UFT3 表名映射
数据映射 → 函数替换 维护 UF20 → UFT3 函数名映射
元数据更新 解析源码、构建/刷新元数据缓存
设置(底部) 项目环境路径与主题配置
帮助 / 关于(底部) 在线帮助、版本信息

5. 功能操作详解

5.1 元数据更新(首次使用必做)

前提:元数据更新按"设置"页配置的项目环境路径扫描源码,请先完成 §5.5 的路径配置。

操作步骤:

  1. 左侧导航进入 元数据更新;
  2. 页面分为 UFT30更新范围 与 UF20更新范围 两个卡片,勾选需要更新的元数据项(默认全选):
    • UFT30:数据类型、标准字段、表结构、接口数据;
    • UF20:数据类型、标准字段、标准错误号、接口数据、常量、菜单功能、模块、表结构;
  3. 可用 全选 / 全不选 按钮快速调整勾选范围;
  4. 点击 更新UFT30 或 更新UF20,页面显示进度与当前处理项;
  5. 等待完成提示后,再使用其他功能页面。

选项说明:

  • 增量快速跳过:增量更新先对比源码目录整体修改时间,源码无任何变化时秒级完成,不再逐文件重复扫描;
  • 强制全量更新(进度条右上角复选框):默认增量更新,仅重新处理有变化的文件;勾选后将重新扫描并解析全部接口文件、重建增量缓存,耗时较久,勾选时需二次确认;
  • 源码变更后请重新执行更新,保证索引与实际代码一致;
  • 更新过程在后台线程执行,界面不会卡死。

5.2 功能转码

5.2.1 业务转码

业务转码页顶部通过 Tab 切换 全量转码 / 按需转码 两个工作台。

任务互斥:任一 Tab 转换期间,另一 Tab 的"开始转换"按钮被禁用并提示等待,避免并发冲突。

5.2.1.1 全量转码

说明:全量转码仅支持 LS_ 开头的功能("内存交易"改造范围),按清单对功能进行整体转码。清单保存在 cust.json 的 convert.dir 节点(见 §6.1)。

表格列:UF20函数名 | 是否存在 | 操作(行尾编辑按钮)。

  • "是否存在"显示 否:说明元数据未更新或该功能在 UF20 元数据中检索不到(见 §7 FAQ);
  • 每次显示页面时自动刷新"是否存在"列。

操作步骤:

  1. 切到 全量转码 Tab;
  2. 点击 添加,弹窗内每行输入一个 LS_ 函数名(支持批量粘贴);输入非 LS 函数将被拒绝,并提示切换到"按需转码";
  3. 也可在 UF20功能查询 中双击或右键选中 LS_ 功能直接加入(见 §5.3.1);
  4. 点击行尾编辑按钮可修改函数名;删除选中 / 清空列表(二次确认)维护清单;
  5. 点击 开始转换,进度条与状态文字显示转换进度;转换中按钮变为 停止转换,可随时点击终止任务。

清单同步:手工编辑 cust.json 保存后约 0.3 秒内界面自动刷新(文件监视 + 防抖),程序与手工编辑双向同步。

5.2.1.2 按需转码

说明:按需转码针对非 LS 功能转码,支持单文件转码与递归转码两种模式,转码范围不包含核心文件、module 模块文件。

  • 非递归模式:仅对目标文件本身执行转码,不会处理该文件内调用的函数;
  • 递归模式:转码目标文件的同时,自动对文件中所调用的关联函数一并完成转码。

添加功能(三种方式):

  • 方式一(推荐):进入 UF20功能查询,双击或右键目标非 LS 函数(支持多选后右键批量加入)→ 弹窗提示"已将 N 个功能加入按需转码";
  • 方式二:按需转码 Tab 点击 添加,弹窗内每行输入一个函数短名(如 AS_xxx);误带 .service_design 等后缀会自动剥离;新增功能递归模式默认 否;若输入 LS_ 开头函数仅给出提示(建议放入全量转码),不会拦截;
  • 方式三:手工编辑配置文件 cust_nonls.json(见 §6.2),保存后程序自动检测并刷新界面。

表格列:UF20函数名 | 是否存在 | 是否递归 | 操作(行尾编辑按钮)。

  • LS_ 开头的函数名以橙色字体显示提醒(不拦截)。

设置递归模式:

  1. 在目标行的 是否递归 下拉框选择 否(单文件)或 是(递归);
  2. 选择后立即写入 cust_nonls.json 并生效,无需额外点击。

执行转码: 点击 开始转换,进度显示与停止方式同全量转码;任务互斥规则相同。

清单同步:外部编辑保存后约 0.3 秒内界面自动刷新,支持程序内修改与外部文件修改双向同步。

5.2.2 代码检索

说明:代码检索用于查看功能的调用链路——该功能调用了哪些下游函数、被哪些上游功能调用,用于转码前评估影响范围、转码后核对结果。

页面顶部 Tab 切换 转码业务 / 非转码业务 两种模式,两种模式各自维护检索路径与索引,互不干扰。

通用操作:

  1. 代码检索路径:选择需要分析的代码目录(默认 bin\uf2touft3\change_code),点 浏览 更改;
  2. 首次显示页面会自动构建索引(优先读取缓存,秒级加载);若手动更改过路径,需点 刷新索引 重新加载;
  3. 索引构建在后台线程执行,期间显示进度框,完成后写入缓存;
  4. 每次转码任务完成后,程序会自动静默刷新索引;
  5. 检索路径按模式持久化保存,下次启动自动恢复(见 §6.3)。

转码业务模式:

  • 左侧显示 业务转码函数列表(与全量转码清单 cust.json 的 convert.dir 同步);
  • 双击左侧函数 → 右侧树显示调用链路(向上:哪些上游功能调用了它;向下:它调用了哪些下游函数);该模式仅支持从列表双击查询,不提供手动输入检索行;
  • 树列为:函数名、目录、模块;当前查询行蓝色高亮;
  • 原代码已支持 行绿色高亮(该函数无需转码,行前带 UFT3 功能号前缀);其他标记:[未找到]、[循环调用]、[层级截断];
  • 点 导出调用文件:将链路上所有需转码文件按原目录结构复制到 <检索路径>\function_output\<查询函数名>\,并生成链路文本 _call_chain.txt;
  • 树标题行右侧 全部展开 / 全部折叠 按钮控制树展示层级,列宽自适应内容且可拖拽调整。

非转码业务模式:

该模式通过页面顶部输入行检索,支持两种检索方式(下拉框切换):

  • 按函数名检索:输入函数名(如 LS_xxx / LF_xxx,也支持带功能号前缀的 功能号-函数名 格式),回车或点 查询链路 直接查询;
  • 按功能号检索:输入 UFT3 功能号,程序先通过 UFT3 功能元数据将功能号解析为对应函数(英文名),再查询调用链路。前提是元数据已更新(见 §5.1),否则提示"功能数据未加载";功能号不存在时提示"未找到功能号对应函数"。

查询成功后调用链路显示在右侧树中,展示规则(列、高亮、状态标记)与转码业务模式一致。

  • 点 导出调用链路:仅导出 _call_chain.txt 链路文本到 <检索路径>\function_output\<查询函数名>\(不复制源文件)。

5.3 功能查询

5.3.1 UF20 功能查询

操作步骤:

  1. 进入 UF20功能查询 页;
  2. 左侧下拉选择检索字段:函数名 / 功能号,输入关键字回车或点搜索图标;
    • 批量查询:多个关键词用逗号、分号或空格分隔(中英文均可),如 LS_证券参数, LS_股票名单;各关键词命中结果取并集展示;
    • 单个关键词可命中同一功能的多个字段,结果按"函数名+功能号"自动去重;
  3. 搜索框内可切换精确匹配(默认模糊匹配);
  4. 查看结果列表,列:函数名、英文名、功能号;
  5. 双击或右键选中行一键加入转码工作台:LS_ 开头功能 → 全量转码;其它功能 → 按需转码;
    • 支持 Ctrl/Shift 多选后一次加入;右键行不在选区内时仅加入该行;
    • 加入结果只弹一个提示框("全量转码"、"按需转码"字样加粗):同时包含两类功能时显示"已将 N 个功能加入全量转码,已将 M 个功能加入按需转码";重复添加的功能自动跳过并在提示中注明;全部已存在时提示"均已在转码列表中"。

查询提示:查询反馈显示在页面底部提示栏(颜色随日间/夜间主题自动适配),不弹对话框打断操作——输入为空提示"请输入查询内容";无匹配结果提示"⚠️ 未找到匹配的功能";查询成功后显示"已查询 X 个业务功能函数(M 个无匹配)"并接默认操作提示。

5.3.2 UFT3 功能查询

  • 界面与 UF20 功能查询一致(函数名 / 功能号检索、批量关键词、精确匹配),结果列为 函数名、英文名、功能号,查询提示同样在页面底部提示栏反馈;
  • 仅用于查询核对 UFT3 功能元数据,双击/右键不加入转码清单;
  • 代码检索中"原代码已支持"行前的功能号即来自 UFT3 元数据。

5.4 数据映射

说明:数据映射维护 UF20 → UFT3 的替换对照表与不转码清单,转码引擎按映射替换代码中的表名 / 函数名,清单内的功能函数名则跳过替换。各页数据均保存在 cust.json(见 §6.1);界面修改后点 保存 写盘生效,外部编辑 cust.json 保存后界面自动刷新(程序自身保存后的 2 秒内暂停文件监控,此间的外部修改需再次保存文件才会被检测到)。

5.4.1 表替换

维护 UF20 表名 → UFT3 表名的映射。

操作步骤:

  1. 进入 数据映射 → 表替换;
  2. 顶部搜索框实时过滤两列内容(不区分大小写);
  3. 双击单元格直接修改;
  4. 点 添加 弹窗输入 UF20 / UFT3 表名(UF20 表名必填且不可重复);
  5. 删除选中 需二次确认(支持多选);
  6. 修改后点 保存 生效。

5.4.2 函数替换

维护 UF20 函数名 → UFT3 函数名的映射,操作方式与表替换完全相同。

5.4.3 不转码功能函数

维护不参与函数名替换的功能函数清单,对应 cust.json 顶层键 noChangeFullNameCode(字符串数组)。转码时,清单内的功能函数名保持原样,不做 UF20 → UFT3 全名替换。

操作步骤:

  1. 进入 数据映射 → 不转码功能函数;
  2. 顶部搜索框实时过滤条目(不区分大小写);
  3. 双击单元格直接修改;
  4. 点 添加 弹窗输入功能函数名(必填,重复时保存被拦截提示);
  5. 删除选中 需二次确认(支持多选);
  6. 修改后点 保存 生效;保存按原文件顶层键顺序写回 cust.json,不影响其它配置。

典型用途:某功能在 UFT3 中名称未变化、或不希望被批量替换时,将其加入本清单即可跳过替换。

5.5 系统设置(底部"设置")

环境配置:

配置项 说明
UFT30项目环境路径 UFT30 项目根目录
UF20项目环境路径 UF20 项目根目录
UF20账户项目环境路径 UF20 账户项目根目录
UF20清算项目环境路径 UF20 清算参数项目目录,供清算相关元数据处理使用
转码生成路径 转码结果输出目录
  • 路径保存在 config\config.ini 的 [projectPath] 节,供元数据更新与转码引擎使用;
  • 保存时程序自动同步维护 uft30pub = <UFT30路径>\upub\dev_codes;
  • 保存与恢复默认均保留 config.ini 中的手工注释、空行与键顺序,只更新对应配置项的值(程序运行期间手工编辑的配置也不会被保存动作覆盖,仅界面显式修改过的项以界面为准);
  • 元数据更新(§5.1)按这些路径扫描源码,首次使用必须先配置。

系统配置:

  • 主题模式:日间模式 / 夜间模式,即时切换。

按钮:

  • 保存设置:写盘生效;
  • 恢复默认:清空全部路径与主题并恢复默认(二次确认)。

6. 配置文件说明

6.1 cust.json

  • 路径:bin\uf2touft3\config\cust.json
  • 作用:一个文件承载四类配置——全量转码清单、表替换映射、函数替换映射、不转码功能函数清单。
节点 结构 用途
convert.dir 数组,元素为 "函数名.service_design" 全量转码清单
tableCompareUf2_Uf3 对象 {UF20表名: UFT3表名} 表替换映射
functionReplace 对象 {UF20函数名: UFT3函数名} 函数替换映射
noChangeFullNameCode 字符串数组 不转码功能函数清单,转码时跳过这些函数名的替换

手工编辑示例(以实际文件结构为准):

{
    "convert": {
        "dir": [
            "LS_CustQry.service_design",
            "LS_AcctChk.service_design"
        ]
    },
    "tableCompareUf2_Uf3": {
        "UF20表A": "UFT3表A"
    },
    "functionReplace": {
        "UF20函数1": "UFT3函数1"
    },
    "noChangeFullNameCode": [
        "AF_NoChange1",
        "LF_NoChange2"
    ]
}

编辑注意:

  • 程序内修改(全量转码 / 表替换 / 函数替换 / 不转码功能函数页)会自动写回该文件;
  • 手工编辑保存后各页面自动检测并刷新;
  • 全量转码清单函数名可省略 .service_design 后缀展示,dir 为数组结构,程序保存时保留文件其余内容与格式。

6.2 cust_nonls.json(按需转码清单)

  • 路径:bin\uf2touft3\config\cust_nonls.json
  • 作用:保存按需转码功能清单及每项的递归标志,供界面与转码引擎共用。
节点 结构 说明
convert.dir 对象 {功能名: 0 或 -1} 0 = 否(单文件转码),-1 = 是(递归转码)
convert.dir["*"] 引擎兜底键 非清单功能,界面不展示、保存时自动保留
convert.ext 后缀数组 引擎识别的功能文件后缀,程序保存时自动维护

手工编辑示例(以实际文件结构为准):

{
    "convert": {
        "dir": {
            "*": -1,
            "AS_CustQry": 0,
            "LF_AcctChk": -1
        },
        "ext": [
            ".service_design",
            ".function_design",
            ".aservice_design",
            ".procedure_design",
            ".afunction_design"
        ]
    }
}

编辑注意:

  • 保持 JSON 格式合法(逗号、引号完整);若格式非法,程序将保留内存中的现有清单并在日志中记录警告;
  • 兼容旧版 dir 为数组的格式(无递归标志,一律按"否"加载);
  • 外部编辑保存后约 0.3 秒内界面自动刷新;程序自身写入该文件时不会触发重复刷新,可放心与手工编辑混用。

6.3 config.ini 与 change_code.ini

  • bin\uf2touft3\config\config.ini:[projectPath] 节保存设置页的项目环境路径(uft30 / uf20 / ufAcct20 / UftdbSett / createPath / uft30pub),供元数据更新与转码引擎使用;
  • bin\uf2touft3\config\change_code.ini:程序私有配置(与 config.ini 分离,避免程序更新时被覆盖):
    • [log] 节:日志配置(file:日志基础文件名,默认 change_code.log,输出到 exe 目录 logs\ 下,文件名带当天日期前缀);
    • codeSearch 节:代码检索两种模式的检索路径持久化。

7. 常见问题(FAQ)

7.1 元数据与索引问题

Q1:全量转码/按需转码页"是否存在"列全部显示"否"? A:元数据缓存未就绪。请先确认"设置"页项目环境路径配置正确,再到"元数据更新"页执行一次更新并等待完成。

Q2:首次打开页面"是否存在"显示"否",重开程序后变正常? A:已知问题——首次打开时索引尚未加载完成。规避方法:执行元数据更新后再进入转码页面;后续版本将实现索引就绪后自动刷新。

7.2 业务转码问题

Q3:全量转码"添加"时提示函数无法加入? A:全量转码仅支持 LS_ 开头的功能。非 LS 功能请切到业务转码的"按需转码"Tab 添加。

Q4:递归模式选"是"后转码范围包含核心文件吗? A:不包含。按需转码(无论是否递归)均不处理核心文件、module 模块文件。

Q5:切换"是否递归"后需要保存吗? A:不需要,下拉选择后立即写入 cust_nonls.json 并生效。

7.3 代码检索、清单与转码执行问题

Q6:双击/右键 UF20 功能查询中的函数加入了哪个清单? A:按功能名自动分流——LS_ 开头加入"全量转码",其它功能加入"按需转码";可 Ctrl/Shift 多选后批量加入,结果合并为一个提示框(重复项自动跳过)。UFT3 功能查询仅用于核对,不加入清单。

Q7:手工修改 cust_nonls.json / cust.json 后界面没刷新? A:界面刷新有约 0.3 秒防抖延迟;若长时间未刷新,检查 JSON 格式是否合法、文件是否保存在 bin\uf2touft3\config\ 目录下。

Q8:代码检索双击函数提示"请先刷新索引"? A:手动更改过检索路径后需点"刷新索引"重新加载;首次显示页面通常会自动构建索引。

Q9:点击"开始转换"后提示任务失败? A:多为转码引擎 bin\uf2touft3\uf2touft3.exe 缺失、被杀毒软件隔离或被占用导致启动失败(程序会立即提示并恢复界面,不会卡死)。确认引擎文件存在后重试。

Q10:进度条走到后段却提示"转换失败(N 个文件转换失败)"? A:个别功能文件转码失败时,程序会如实提示失败而不会误报"转换完成",进度条停留在当前位置。请到 exe 目录 logs\ 下查看当天的日志,定位失败文件(日志含 FAIL 行与失败汇总)后重试。

8. 日志与问题反馈

8.1 日志

  • 程序运行日志输出到 exe 目录 logs\ 下(文件名带日期前缀,基础名可在 config\change_code.ini 的 [log] 节配置,默认 change_code.log);
  • 转码过程中若出现文件转换失败,日志会记录 FAIL 行与失败汇总,界面提示"转换失败(N 个文件转换失败)",请结合日志定位问题;
  • 配置保存/加载失败、索引刷新失败等异常均会写入警告日志。

8.2 问题反馈

  • 反馈问题时请提供:操作步骤、界面提示内容、日志文件,以及 cust.json / cust_nonls.json 当前内容。

配套文档:《详细设计文档》(docs/详细设计文档.md),含系统架构图与各模块流程图。