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