客户化开发概述
Epicor ERP 提供了强大的定制开发能力,允许在不修改标准代码的前提下对系统进行扩展。所有的客户化修改都存储在数据库中,与标准代码分离,这保证了版本升级时的兼容性。
主要的定制开发方式包括:
- UI 定制:表单布局调整、字段显隐、标签修改
- 字段定制:添加 UD(User Defined)字段到标准表
- Dashboard 定制:创建自定义分析页面和跟踪面板
- 代码定制:通过 Form Event 和 BPM 注入 C# 逻辑
表单定制基础
进入定制模式
在任意 Epicor 标准界面中,点击菜单栏的「定制」按钮(或快捷键 Ctrl+D),即可进入定制模式。界面会切换到编辑状态,左侧出现工具箱(Toolbox)。
常用定制操作
- 添加标签:从工具箱拖拽 Label 控件到表单
- 添加字段绑定:将文本框、数值框等控件绑定到 EpiDataView 的字段
- 添加按钮:创建按钮并绑定点击事件处理程序
- 调整布局:修改控件的位置、大小、可见性
- 添加选项卡:在现有选项卡组中增加新的 Tab 页面
添加 UD 字段
当标准字段无法满足业务需求时,可以通过以下步骤添加自定义字段:
1. 进入「公司 → 用户自定义字段维护」
2. 选择目标表(如 OrderHed、Part 等)
3. 点击「添加字段」
4. 设置字段名(以 "UD_" 或 "Character01" 等前缀命名)
5. 选择数据类型(字符、数值、日期等)
6. 设置字段长度和默认值
UD 字段命名要有业务含义。Epicor 提供了两类 UD 字段:系统预留的(如 Character01-50)和用户自定义命名的。推荐使用自定义命名以提高可读性,但在高频率查询场景下,使用系统预留字段性能略优。
Form Event 编程
通过 Form Event 可以在界面事件中注入 C# 代码:
// 示例:在销售订单行数量变更时自动计算交货日期
private void OrderDtl_OrderQty_ValueChanged(object sender, EventArgs e)
{
var edv = (EpiDataView)oTrans.EpiDataViews["OrderDtl"];
var qty = Convert.ToDecimal(edv.dataView[edv.Row]["OrderQty"]);
var partNum = edv.dataView[edv.Row]["PartNum"].ToString();
// 简化逻辑:根据数量和物料估算交货天数
int leadDays = qty > 1000 ? 30 : (qty > 100 ? 14 : 7);
edv.dataView[edv.Row]["RequestDate"] =
DateTime.Today.AddDays(leadDays);
edv.Notify(new EpiNotifyArgs(oTrans, edv.Row, edv.Column));
}
Dashboard 开发
Dashboard 是 Epicor 中最灵活的分析展示工具,支持以下组件类型:
追踪面板(Tracker)
以指标卡片形式展示关键数据,适合管理层监控核心 KPI:
- 本月销售额 vs 目标
- 逾期订单数量
- 库存周转天数
- 待审批采购申请数
网格面板(Grid)
以表格形式展示详细数据,可关联 BAQ 作为数据源,支持排序、筛选、分组和导出 Excel。
图表面板(Chart)
支持柱状图、折线图、饼图、仪表盘等多种图表类型。可配置数据系列、坐标轴和样式。
Dashboard 面板中的 BAQ 查询是实时执行的。如果查询较复杂,考虑设置刷新间隔(Refresh Interval)来避免频繁查询对数据库造成压力。
升级兼容性注意事项
- 客户化代码中尽量使用 Epicor 提供的 API,避免直接引用内部类名
- 版本升级前导出所有客户化包(Customization Export),做好备份
- 升级后在测试环境逐一验证客户化功能是否正常
- 使用 Epicor 的 Extended Properties 维护客户化文档
- 避免在关键业务流程中过度依赖客户化逻辑
总结
掌握 Form 定制和 Dashboard 开发是 Epicor 实施顾问和开发人员的必备技能。通过合理的客户化开发,可以让 ERP 更贴合企业实际业务需求,同时保持系统的可维护性和升级兼容性。