`

drools中使用excel

 
阅读更多
    • 在drools中如果使用规则表
          典型的用法就是根据excel创建KnowledgeBase,然后将它丢给session执行,执行的参数和结果都在params里面
    package com.xxx.yyyy;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.util.Arrays;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Map;
    
    import junit.framework.Assert;
    
    import org.drools.KnowledgeBase;
    import org.drools.KnowledgeBaseFactory;
    import org.drools.builder.DecisionTableConfiguration;
    import org.drools.builder.DecisionTableInputType;
    import org.drools.builder.KnowledgeBuilder;
    import org.drools.builder.KnowledgeBuilderFactory;
    import org.drools.builder.ResourceType;
    import org.drools.definition.KnowledgePackage;
    import org.drools.io.ResourceFactory;
    import org.drools.runtime.StatelessKnowledgeSession;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.junit.runners.Parameterized;
    import org.junit.runners.Parameterized.Parameters;
    
    @RunWith(Parameterized.class)  
    public class IsP4PTest{
    	 private IsP4P param;  
    	 private String extected;  
    	      
    	 public IsP4PTest(IsP4P param,String extected) {  
    	        this.param = param;  
    	        this.extected = extected;  
    	 }  
    	    
    	public static class IsP4P {
    		private String productLine;
    		private String productType;
    		private String playType;
    		
    		public IsP4P(String productLine,String productType,String playType){
    			this.productLine =  productLine;
    		    this.productType = productType;
    		    this.playType = playType;
    		}
    		
    		public Map<String,Object> getParams(){
    			Map<String,Object> params = new HashMap<String,Object>();
    			
    			params.put("productLine", productLine);
    			params.put("productType", productType);
    			params.put("playType", playType);
    			
    			return params;
    		}
    	} 
    	
    	public void testExcel(String fileName, Map<String, Object> params)
    			throws Exception {
    		System.out.println("---------------begin------------------------");
    		
    		DecisionTableConfiguration dtableconfiguration = KnowledgeBuilderFactory
    				.newDecisionTableConfiguration();
    		dtableconfiguration.setInputType(DecisionTableInputType.XLS);
    		final KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
    				.newKnowledgeBuilder();
    		File file = new File("D:\\iwork-space\\rule\\src\\test\\resources\\"
    				+ fileName);
    		InputStream is = new FileInputStream(file);
    
    		// InputStream is = new ClassPathResource(fileName).getInputStream();
    		kbuilder.add(ResourceFactory.newInputStreamResource(is,"UTF-8"),
    				ResourceType.DTABLE);
    		if (kbuilder.hasErrors()) {
    			System.out.println(kbuilder.getErrors().toString());
    		}
    		Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
    		KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
    		kbase.addKnowledgePackages(pkgs);
    
    		StatelessKnowledgeSession ksession = kbase
    				.newStatelessKnowledgeSession();
    		ksession.execute(Arrays.asList(new Object[] {params}));
    		
    		System.out.println("---------------end------------------------");
    	}
          
        @Parameters  
        public static Collection<?> contructData(){  
            return Arrays.asList(new Object[][]{  
                    {new IsP4P("aa","true","null"),"true"},  
                    {new IsP4P("bb","true","null"),"true"},  
                    {new IsP4P("cc","true","aa"),"false"},  
                    {new IsP4P("dd","false","bb"),"other"}  
            });  
        }  
        
        @Test
        public void testP4P() throws Exception{
        	Map<String,Object> params = new HashMap<String,Object>();
        	params.putAll(param.getParams());
        	testExcel("ka/isP4P.xls", params);
            Assert.assertEquals(extected, params.get("isP4P"));  
        }  
    }
    
     
  • 什么时候考虑使用规则表
  如果规则可以表示成 templates+data(模板+数据),可以考虑使用 decision tables。在决策表的每一行,采集数据和模板一起生成规则。使用基于决策表的SpreadsheetAPIDrools-decisiontables模块中。只有一个类:SpreadsheetCompiler. 这个类可以操作各种格式的Spreadsheet,并生成DRL规则(然后就可以常规的方式使用)。
 
  • 一个典型的规则表的格式

     
 
  1. RuleSet关键字是必须的,名字是可选的
  2. Import语句非常像java的import,如果有多个import,用逗号隔开
  3. RuleTable关键字也是必须的,它指示了后面将会有一批rule,ruletable的名称将会作为以后生成rule的前缀
  4. 条件如果不写的话默认就是==, 比如上面的contract.get("productLine"),其实就是contract.get("productLine") == $param, 如果有多个参数可以使用$1,$2,比如我们经常用到的一个区间数据,这个占位符就派上用场了
  5. 所有的关键字都是忽略大小写的
  6. 默认情况下规则引擎只解析第一个sheet的规则
  • 规则区域所支持的关键字
Keyword Value Usage
RuleSet The package name for the generated DRL file. Optional, the default is rule_table.(默认值是rule_table) Must be First entry.
Sequential "true" or "false". If "true", then salience is used to ensure that rules fire from the top down.(规则触发是从上朝下,如果是false就是乱序) Optional, at most once. If omitted, no firing order is imposed.
Import A comma-separated list of Java classes to import.(逗号隔开) Optional, may be used repeatedly.
Variables Declarations of DRL globals, i.e., a type followed by a variable name. Multiple global definitions must be separated with a comma. 全局变量定义,多个用逗号隔开 Optional, may be used repeatedly.
Functions One or more function definitions, according to DRL syntax. Optional, may be used repeatedly.
Queries One or more query definitions, according to DRL syntax. Optional, may be used repeatedly.
        需要特别注意的是这些关键字只能出现一次!
 
  • Rule Table的头部所支持的关键字
Keyword Initial Value Usage
NAME N Provides the name for the rule generated from that row. The default is constructed from the text following the RuleTable tag and the row number. At most one column
DESCRIPTION I A text, resulting in a comment within the generated rule. At most one column
CONDITION C Code snippet and interpolated values for constructing a constraint within a pattern in a condition. At least one per rule table
ACTION A Code snippet and interpolated values for constructing an action for the consequence of the rule. At least one per rule table
METADATA @ Code snippet and interpolated values for constructing a metadata entry for the rule. Optional, any number of columns
  • 将excel编译成规则文件

   

package com.xxx.yyy;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

import org.drools.decisiontable.InputType;
import org.drools.decisiontable.SpreadsheetCompiler;
import org.junit.Test;

public class SpreadsheetCompilerTest {
	@Test
	public void compile() throws FileNotFoundException{
		File file = new File("D:\\iwork-space\\rule\\src\\test\\resources\\ka\\isP4P.xls");
		InputStream is = new FileInputStream(file);
		
		SpreadsheetCompiler converter = new SpreadsheetCompiler();
		String drl = converter.compile(is, InputType.XLS); //--------exception here-------- 
		System.out.println("\n\n" + drl);
	}
}

        编译后的结果如下:

      

  这个地方注意一点,==和equals是相同的,!= 和 !equals是相同的

 

     // Similar to: java.util.Objects.equals(person.getFirstName(), "John")
     // so (because "John" is not null) similar to:
     // "John".equals(person.getFirstName())
     Person( firstName == "John" )
 
     The != operator has null-safe !equals() semantics:
     // Similar to: !java.util.Objects.equals(person.getFirstName(), "John")
      Person( firstName != "John" )

 

 
 
 
 
 
 
分享到:
评论

相关推荐

    drools使用excel实例

    规则引擎一般是一下情况使用 1.为提高效率,管理流程必须自动化,即使现代商业规则异常复杂。 2.市场要求业务规则经常变化,IT系统必须依据业务规则的变化快速、低成本的更新。 3.为了快速、低成本的更新,业务人员...

    规则引擎Drools 中文使用教程

    Drools中文使用教程 Drools(JBoss Rules )具有一个易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已...

    drools决策表模版.xls

    drools决策表模版

    drools drools drools drools drools

    drools drools drools drools drools

    规则引擎Drools使用手册(中文)

    规则引擎Drools使用手册(中文),对于学习和研究Drools技术很有帮助的~~

    Drools4.0使用手册中文

    jboss的Drools规则引擎使用说明

    drools calendar 使用demo

    drools calendar 使用demo

    Drools4中文使用手册

    Drools是一个Java语言版本的基于Charles...对于其它实现,Drools通过使用Schema定义XML提供Declarative Programming和足够程度的扩展性来匹配其它领域的编程语言。领域标准语言(DSLs)包含XML元素和属性来描述问题域。

    drools安装与配置

    drools

    drools7.25中文文档+drools技术指南.zip

    drools最新版本学习资料,里面系统的介绍了drools规则引擎的简介以及集成到项目的教程内容。欢迎下载,收集不易,欢迎点赞。

    drools的使用.pdf

    drools的使用说明,包含示例和自定义规则

    Drools7.25中文文档.7z

    Drools7.25中文文档:包括workbench與kie-server的安裝,如何調用kie-server以及集成workbench到自己的應用中.

    Drools7_PDF教程 Drools中文文档 内容全面.zip

    Drools7_PDF教程 Drools中文文档 内容全面。...1. 内容更加全面,更多细节,更多知识点全部在新版本中有所体现,并且会附上小编做的例子 ,更多内容不断更新中 2. 目前国内最全的Drools中文文档。也是目前国内唯一一本

    drools使用的jar包

    drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行官方drools-distribution-7.7.0.Final drools使用的jar包,运行...

    Drools4.0官方使用手册中文.doc

    A.I.(Artificial Intelligence)是一个关注于“使计算机像人类一样思考“的广泛的研究领域,包括Neural Networks(神经...Drools是一个使用基于规则的方法实现的专家系统的规则引擎,更准确的说属于产生式规则系统。

    drools决策表示例Excel文件

    drools决策表示例Excel文件

    Drools6 和 Drools7技术指南-中文文档.zip

    Drools开发最全中文版技术指南。 Drools开发最全中文版技术指南,介绍了常见的drools如何进行开发,注意是:中文版中文版中文版! drools 中文文档 规则引擎 drools6 drools7 Java

    Drools4.0官方使用手册中文

    Drools5规则引擎开发教程.pdf 博文链接:https://haroldxie.iteye.com/blog/1167148

    drools使用语法

    drools5.0使用帮助文档,包括规则调用的库,类 ,接口,方法

    drools 7.1中文文档pdf完整版本

    drools中文文档pdf完整版本,drools 新版本功能,技术开发细节及api说明

Global site tag (gtag.js) - Google Analytics