规则引擎
易对接使用规则引擎完成报销单(付款单,借款单等)到财务凭证的转换,以下是规则引擎的使用说明:
规则引擎是基于Java语言开发的,假设用户已经具备基础的Java语言知识
简单示例
规则示例:
rule:01;header.type=='报销单'&&item.typeName=='办公用品'
:vitem.accountCode='6602.01/';citem.accountCode='1002.01'
这个规则实现了一个简单的报销单到凭证的转换需求:
如果单据是报销单,费用类型为办公用品,则设置凭证借方科目代码为6602.01,贷方科目代码为1002.01
通过这个简单示例,可以 对规则引擎的使用方法有初步了解:
- 使用"rule:"开始规则定义
- 之后是优先级定义(数值越小,优先级越高)
- ";"到":"之间是条件部分,说明规则执行需要满足的条件
- ":"之后部分是规则内容,描述执行的详细内容
- header,item,vitem,citem是规则执行时由外部环境提供的数据对象
规则介绍
条件
以下是常用的运算符:
符号 | 作用 | 举例 |
---|---|---|
== | 判断是否相等 | header.type=="报销单" |
>,<,>=,<= | 数值大小判断 | item.amount>10000 |
&& | 并且关系,两个条件必须同时满足 | header.type=="报销单"&&item.amount>10000 |
|| | 或者关系,两个条件满足其中一个即可 | header.type=="报销单"||header.type=="付款单" |
规则内容
- 更新数据
vitem.accountCode='1002'
- 多条语句使用";''间隔
- 访问对象属性
规则引擎中有一个上下文对象item,类型定义如下:
public class BillItem implements Cloneable {
private String typeName;
public String getTypeName() {
return this.typeName;
}
public void setTypeName(String typeName) {
this.typeName = typeName;
}
}
在规则语句中访问属性:
vitem.originAccountName=item.typeName
- 访问对象方法
在规则语句中,可以调用上下文对象的方法,例如:
vitem.originAccountName=item.typeName.substring(0,4)
item.typeName的类型是Java中的String,可以调用String的方法substring(取字符号串的部分内容)
- 规则优先级
规则执行时,如果有多条规则同时满足执行条件,按照以下方式执行:
- 优先级高的先执行,低优先级的后执行
- 优先级相同,条件相同的多条规则,只执行第一条