Epicor BPM(业务流程管理)实战指南

← 返回首页

什么是 BPM

BPM(Business Process Management)是 Epicor ERP 中实现业务自动化规则的核心机制。通过 BPM,你可以在数据创建、修改、删除等关键节点上自动执行校验、计算、通知等操作,而无需修改底层代码。

典型的应用场景包括:

BPM 的基本组成

一个完整的 BPM 由以下部分组成:

  1. 触发器(Trigger):定义何时触发 BPM,支持的触发时机包括:
    • Before(数据变更前)—— 适合做数据校验
    • After(数据变更后)—— 适合做后续处理
    • In-Transaction(事务中)—— 适合关联数据查询
    • Method Directive(方法调用时)—— 拦截特定方法
  2. 条件(Condition):可选的筛选条件,只有满足条件时才执行
  3. 方法指令(Method Directive):具体的执行动作,支持赋值、调用函数、执行内联 C# 代码等

实战案例:销售订单行折扣校验

需求:当销售员在订单行输入超过 30% 的折扣时,自动发出警告邮件给销售主管。

步骤 1:创建 Method Directive

进入 系统管理 → 业务流程管理 → 方法指令维护,选择 SalesOrder.Update 方法,新建一个 Directive:

方法名:SalesOrder.Update
触发时机:In-Transaction
条件:ttOrderDtl.DiscountPercent > 30

步骤 2:添加方法指令

在 Directive 下添加以下方法指令:

  1. Set Variable:将订单号、行号、客户名赋给临时变量
  2. Invoke BO Method:调用邮件发送方法
    BO: Epicor.Mfg.Core.Session
    方法: SendMail
    参数:
      To = "sales-manager@company.com"
      Subject = "大额折扣审批提醒 - " + 订单号
      Body = "订单 {0} 的第 {1} 行折扣为 {2}%,请及时审批"
BPM 中使用内联 C# 代码时,注意 Epicor 会对其进行编译缓存。修改代码后需要在服务器端清除缓存或重启 AppServer 才能生效。

高级技巧:使用 ABL(Advanced Business Logic)

对于复杂的业务逻辑,可以使用内联 C# 代码(Custom Code)。BPM 的 Custom Code 中可以直接访问以下对象:

// 获取当前 BPM 上下文
var ds = (SalesOrderDataSet) this.DataSet;

// 遍历订单行
foreach (var row in ds.OrderDtl.Where(r => r.Added() || r.Updated()))
{
    if (row.DiscountPercent > 30)
    {
        // 自定义处理逻辑
        CallContext.Current.ExceptionManager.AddBLException(
            $"订单行 {row.LineNum} 折扣 {row.DiscountPercent}% 超过限制,需要审批");
    }
}

调试与排查

BPM 调试的常用方法:

最佳实践