# 业务扩展开发
二次开发灵活可配
百序支持线上业务扩展开发,开发后可实时生效,无需部署。
# 在线开发
百序后端可支持在线开发,通过配置拦截器,并编写在线代码的形式实现
- 菜单路径-【模型管理】-【对象管理】
# 配置拦截器
- 找到之前创建的元对象:t_bs_offer
- 点击‘编辑’按钮
- 配置“业务拦截器”为:com.baixu.onmeta.TbsOfferTriggerEx
- 点击‘确定’按钮保存
# 在线代码
在线代码可通过拦截器形式,针对需要处理的业务进行拦截处理。
示例代码说明:
针对t_bs_offer表单的数据,在新增时通过addBefore方法,和修改时通过updateBefore方法,会对数据进行模拟业务逻辑处理,业务逻辑为:报销金额必须大于等于100元。
其中changeProofToOne方法,是文档中【在线按钮】章节会涉及到的方法,方法会将数据的报销凭证改为“纸质发票”。
点击‘在线开发’开发按钮,进入界面
将以下的示例代码粘贴
点击‘验证’按钮
点击‘保存’按钮
示例代码如下:
package com.baixu.onmeta;
import java.math.BigDecimal;
import com.baixu.base.aop.BaixuAop;
import com.baixu.base.util.BxUtil;
import com.baixu.base.aop.MetaTrigger;
import com.baixu.db.base.Bx;
import com.jfinal.plugin.activerecord.*;
import cn.hutool.core.util.*;
import com.baixu.db.json.Json;
import java.util.*;
import com.baixu.base.dto.Res;
/**
* 报销申请单(t_bs_offer)测试业务开发
*/
public class TbsOfferTriggerEx extends MetaTrigger {
/**
* 新增前处理
* 报销金额必须大于等于100元
*/
@Override
public String addBefore(BaixuAop ac) throws Exception {
// 如果父类处理失败,直接返回
String res = super.updateBefore(ac);
if (!StrUtil.isBlank(res)) {
return res;
}
String check = check(ac.record);
if(StrUtil.isNotBlank(check)) {
return check;
}
//如果没有任何意外,返回空值
return "";
}
/**
* 更新前处理
* 报销金额必须大于等于100元
*/
@Override
public String updateBefore(BaixuAop ac) throws Exception {
// 如果父类处理失败,直接返回
String res = super.updateBefore(ac);
if (!StrUtil.isBlank(res)) {
return res;
}
String check = check(ac.record);
if(StrUtil.isNotBlank(check)) {
return check;
}
//如果没有任何意外,返回空值
return "";
}
/**
* 在线按钮时,调用方法
* 将报销凭证改为纸质发票
*/
public void changeProofToOne(BaixuAop ac, Map<String, Object> req) throws Exception {
Integer id = Integer.valueOf(req.get("id").toString());
String sql = "update t_bs_offer set proof = ? where id = ?";
Bx.update(sql,"1",id);
ac.res = Res.success("已改为纸质发票");
}
//测试业务在线开发-校验
private String check(Record form){
BigDecimal value = form.getBigDecimal("value");
if(value.compareTo(new BigDecimal(100)) < 0) {
return "报销金额必须大于等于100元。";
}
return "";
}
}
# 验证
- 点击系统右上角用户名称左侧的“应用“图标,切换到业务视图
- 菜单路径-【财务信息】-【报销信息】
- 点击‘新增’或‘编辑’按钮
- 输入如下信息后,发现当报销金额小于100时,业务逻辑会进行拦截
- 当报销金额大于等于100时,业务逻辑则会通过
- 验证通过
# 在线按钮
菜单中可以创建一个自定义按钮,接着编写脚本,可以通过按钮进行业务修改等操作,无需部署,即使生效。
- 菜单路径-【系统配置】-【菜单管理】
# 添加按钮
- 找到我们之前创建的菜单-【财务信息】-【报销信息】
- 在其右侧点击‘新增’按钮
- 输入如下信息后点击‘确定’按钮
- 此时菜单中会出现我们创建的“改为纸质发票”按钮
# 在线脚本
在线脚本,会调用我们之前在后端在线代码中,所创建的changeProofToOne方法,该方法会将数据的报销凭证改为“纸质发票”。
- 点击‘业务开发’开发按钮,进入界面
- 将以下的示例代码粘贴
- 点击‘保存’按钮
- 示例代码如下:
# 验证
- 点击系统右上角用户名称左侧的“应用“图标,切换到业务视图
- 菜单路径-【财务信息】-【报销信息】
- 会出现我们刚才创建的【改为纸质发票】按钮
- 此时选中刚才我们创建的记录
- 点击‘改为纸质发票’按钮
- 会发现所选数据的“报销凭证”已经变为了“纸质发票”
- 验证通过