鼎捷T100二次开发实战指南:从环境搭建到命名规范全解析
1. 开发环境准备与基础概念
鼎捷T100作为企业级ERP系统,其二次开发环境与传统软件开发有显著差异。初次接触的开发者在配置环境时往往会遇到各种"水土不服"的情况。我们先从最基础的开发工具链开始:
必备工具清单:
r.t工具:T100专用的表格管理工具,用于创建和维护数据表结构- Genero开发套件:T100前端界面的主要开发工具
- 4GL编译器:用于编译业务逻辑代码
- T100 SDK:包含各类API接口和开发文档
安装完成后,建议先运行环境检查命令:
# 检查工具链完整性 t100env check --all # 验证数据库连接 dbconn test --profile default开发目录结构遵循严格的规范:
/$ERP/ ├── src/ # 源代码目录 ├── cfg/ # 配置文件 ├── lib/ # 共享库 ├── temp/ # 临时文件 └── log/ # 运行日志2. 模块化开发实践
2.1 模块创建规范
T100采用模块化架构设计,每个功能模块都有明确的边界。创建新模块时,需要遵循以下步骤:
确定模块类型:
- 标准模块:
AIM、AXM等前缀 - 客制模块:
UC开头表示用户定制 - 行业模块:包含行业代码后缀
- 标准模块:
模块注册: 在
azzi900系统表中注册新模块,示例SQL:INSERT INTO azzi900 (mod_code, mod_name, mod_type, create_date) VALUES ('uc01', '客制采购模块', 'U', CURRENT_DATE);目录初始化:
t100mod create --code uc01 --name "Custom Purchase"
2.2 模块依赖管理
跨模块调用需要特别注意版本兼容性。推荐使用依赖声明文件mod.dep:
[requires] aim = 2.5.+ axm = 1.8.0 [excludes] axmr = 3.0.0-beta3. 数据表设计详解
3.1 标准表结构设计
T100的表命名遵循严格的编码规则,核心格式为:
[模块代码(2位)][流水号(2位)]_t示例表创建流程:
- 使用
r.t工具创建表结构 - 定义字段命名规范:
[表名(不含_t)][字段类型][流水号(3位)] - 设置必要审计字段:
ALTER TABLE uc01aa_t ADD COLUMN crtid VARCHAR(10), ADD COLUMN crtdt DATETIME, ADD COLUMN modid VARCHAR(10), ADD COLUMN moddt DATETIME;
常用字段类型对照表:
| T100类型 | SQL类型 | 说明 |
|---|---|---|
| TX30 | VARCHAR(30) | 定长文本 |
| AMT15 | DECIMAL(15,2) | 金额类型 |
| DT | DATE | 日期类型 |
| TM | TIME | 时间类型 |
3.2 客制字段处理
当需要扩展标准表时,必须使用特定前缀:
ua:标准表的客制字段ud:弹性字段uc:全新客制表字段
错误示例:
-- 错误:直接修改标准字段 ALTER TABLE imaa_t MODIFY COLUMN imaa001 VARCHAR(50);正确做法:
-- 添加客制字段 ALTER TABLE imaa_t ADD COLUMN imaaua001 VARCHAR(50);4. 程序开发规范
4.1 作业程序命名体系
T100程序命名包含丰富的信息:
[模块(3位)][类型(1位)][流水号(3位)][_行业代码(可选)]程序类型标识符:
- I:基础数据维护
- T:事务处理
- P:批处理作业
- Q:查询界面
- R:报表程序
示例程序结构:
FUNCTION uci100_main() DEFINE l_count INTEGER CALL uci100_initialize() WHILE TRUE CALL uci100_process() LET l_count = l_count + 1 END WHILE END FUNCTION4.2 函数开发要点
命名规范:
[程序名]_[动作类型]()常用动作类型:
_insert数据新增_update数据修改_query数据查询
变量作用域标记:
DEFINE g_config RECORD -- 全局变量 key VARCHAR(20), value VARCHAR(100) END RECORD FUNCTION demo() DEFINE l_temp INTEGER -- 局部变量 DEFINE p_input VARCHAR -- 参数变量 END FUNCTION异常处理模板:
TRY -- 业务逻辑 CATCH CALL cl_err(SQLCA.SQLCODE, SQLCA.SQLERRM) ROLLBACK WORK END TRY
5. 实战案例:采购订单扩展
5.1 需求场景
在标准采购模块(PMM)基础上扩展:
- 增加供应商评估字段
- 添加审批工作流
- 定制报表输出
5.2 实施步骤
创建客制表:
CREATE TABLE uc01aa_t ( uc01aa001 TX30, -- 订单编号 uc01aa002 AMT15, -- 评估分数 uc01aa003 DT, -- 评估日期 crtid TX10, -- 创建人 crtdt DT -- 创建时间 );扩展标准程序:
# 在pmmi100程序中扩展 FUNCTION pmmi100_after_save() -- 写入评估数据 INSERT INTO uc01aa_t VALUES ( pmmi100.po_no, pmmi100.eval_score, CURRENT DATE, globals.user_id, CURRENT DATETIME ); END FUNCTION定制报表开发:
REPORT uc01r100(po_no) DEFINE po_no VARCHAR(30) SELECT * FROM uc01aa_t WHERE uc01aa001 = po_no OUTPUT TO PRINTER FORMAT COLUMN 1: uc01aa001 COLUMN 2: uc01aa002 USING "##.##" END FORMAT END REPORT
6. 调试与优化技巧
6.1 常见问题排查
字段类型冲突:
注意:T100对字段类型有严格校验,特别是金额和日期字段
命名规范错误:
# 使用lint工具检查命名 t100lint check-naming src/uc01/性能优化建议:
- 避免在循环中执行SQL查询
- 使用
PREPARE语句复用查询计划 - 批量操作使用
BEGIN WORK/COMMIT WORK
6.2 调试工具使用
日志输出:
CALL cl_debug(1, "当前订单号:" || l_po_no)交互式调试:
t100debug attach --pid 12345SQL跟踪:
SET DEBUG ON; -- 执行操作 SET DEBUG OFF;
在实际项目中,我们发现最常出现问题的环节是字段命名规范和类型转换。特别是在对接第三方系统时,建议先建立数据映射表,明确每个字段的对应关系和转换规则。