動作(zuò)節點
動作(zuò)節點可(kě)以與一個(gè)實現了com.bstek.urule.model.flow.FlowAction接口并配置到Spring中的Bean綁定,這樣在運行(xíng)時(shí),規則流執行(xíng)到這個(gè)動作(zuò)節點時(shí)就會(huì)執行(xíng)與之綁定的FlowAction實現類,動作(zuò)節點屬性如下表所示:
屬性名稱 | 數(shù)據類型 | 描述 |
---|---|---|
節點名稱 | String | 設置當前節點名稱 |
事件bean | String | 一實現了com.bstek.urule.model.flow.NodeEvent接口配置在Spring中bean的id,一旦配置在流程進入及離開(kāi)該節點時(shí)會(huì)觸發這個(gè)實現類 |
動作(zuò)bean | String | 一個(gè)實現了com.bstek.urule.model.flow.FlowAction接口并配置到Spring中的Bean的ID。 |
FlowAction接口源碼如下所示:
package com.bstek.urule.model.flow;
import com.bstek.urule.model.flow.ins.FlowContext;
import com.bstek.urule.model.flow.ins.FlowInstance;
/**
* @author Jacky.gao
* @since 2015年2月28日
*/
public interface FlowAction {
/**
* @param node 當前節點對象
* @param context 規則流上(shàng)下文件對象
* @param instance 當前規則流實例對象
*/
void execute(ActionNode node,FlowContext context,FlowInstance instance);
}
有(yǒu)了動作(zuò)節點,那(nà)麽在規則流中就可(kě)以執行(xíng)具體(tǐ)的Java類中的方法,因為(wèi)該Java類是配置在Spring上(shàng)下文中的,所以類中可(kě)訪問Spring環境所有(yǒu)信息,這樣就可(kě)以做(zuò)一些(xiē)更為(wèi)複雜的業務操作(zuò)。
動作(zuò)節點出入連接線如下表所示:
流入的連接線數(shù)量 | 流出的連接線數(shù)量 |
---|---|
1~n | 0~1 |
在代碼中獲取工作(zuò)區(qū)中的變量或者參數(shù)數(shù)據
KnowledgeSession ks = (KnowledgeSession) flowContext.getWorkingMemory();
Map<String,Object> factMap = ks.getFactManager().getFactMap();
//取工作(zuò)區(qū)中變量
User user = (User) factMap.get("com.bstek.urule.sample.pojo.User");
//如果變量不存在對應的java pojo類,用GeneralEntity
GeneralEntity cust = (GeneralEntity) factMap.get("com.bstek.urule.sample.pojo.Cust");
//取工作(zuò)區(qū)中參數(shù)
double total = (double) ks.getParameter("total");
在代碼中往工作(zuò)區(qū)中添加變量或者參數(shù)數(shù)據
//如果需要往工作(zuò)區(qū)中添加變量數(shù)據
GeneralEntity newUser = new GeneralEntity("com.bstek.urule.sample.pojo.User");
ks.getFactManager().getFactMap().put("com.bstek.urule.sample.pojo.User",newUser);
//如果需要往工作(zuò)區(qū)中添加參數(shù)數(shù)據
ks.getParameters().put("totalScore", 100);