`

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 中文使用教程

    2. **灵活的规则格式**:除了传统的`.drl`规则文件,Drools还支持XML、Excel等格式的规则定义,极大地提高了规则的灵活性和可维护性。 3. **KIE框架**:Drools6引入了KIE框架,简化了规则引擎的调用和管理过程,...

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

    8. **集成到项目**:文档会提供将Drools集成到Java项目中的步骤,包括依赖添加、规则库的构建、以及如何在代码中使用Drools API。 9. **优化与性能**:Drools提供了多种性能优化手段,如规则排序、并行执行等。这...

    drools决策表模版.xls

    drools决策表模版

    Drools4.0官方使用手册中文

    总之,《Drools 4.0官方使用手册中文》是一份全面且实用的教程,对于希望在Java环境中应用规则引擎的开发者,尤其是那些对Drools感兴趣的读者,它是必不可少的参考资料。通过学习,你可以掌握规则引擎的精髓,提升你...

    Drools使用手册.mht

    5. **决策表(Decision Tables)**:Drools支持使用Excel或CSV格式的决策表来编写规则,这使得非技术人员也能参与规则的制定。手册会说明如何创建和使用决策表。 6. **事件处理**:Drools提供对事件驱动编程的支持...

    droolsdemo跟exceldemo写法

    总的来说,droolsdemo和exceldemo提供了关于如何在实际项目中使用Drools和KIE平台的宝贵示例,涵盖了从规则定义、转换、加载到执行的整个生命周期。这对于学习和理解Drools如何处理业务逻辑和决策,以及如何与其他...

    Drools规则引擎使用demo

    Drools是一款强大的规则引擎,由Red ...通过这个"Drools规则引擎使用demo",你可以学习如何配置、加载规则,以及如何在Java应用程序中使用Drools进行规则的执行和事实的管理。这将为你构建智能决策系统提供坚实的基础。

    规则引擎Drools 中文使用指南

    - **Excel**:支持使用Excel表格定义规则,便于非技术人员使用。 #### 七、Drools HelloWorld 示例 以下是一个简单的Drools HelloWorld示例,展示了如何定义和执行一条简单的规则: ```java // 定义规则文件hello...

    drools决策表示例Excel文件

    drools决策表示例Excel文件

    规则引擎Drools在J2EE项目开发中的应用

    4. **决策表**:Drools支持使用Excel或CSV格式的决策表来定义规则,这种方式对非技术人员更加友好,便于规则的维护和审查。 5. **融合JBOSS BRMS**:Drools是JBoss Business Automation的一部分,与BRMS(Business ...

    5.6drools基础包

    3. **Drools决策表(Decision Tables)**: Drools支持使用Excel或CSV格式的决策表来编写规则,这种方式使得非程序员也能参与到规则的制定中,提高了业务规则的可维护性和可理解性。 4. **Drools流程(Drools Flow)...

    规则引擎drools实例

    3. **Drools 工作流程**:首先,开发者使用Drools提供的DSL编写规则,然后将规则加载到规则引擎中。接着,通过Facts(事实)对象将业务数据输入到引擎。引擎会根据这些事实和已加载的规则进行推理,最后触发相应的...

    Drools4Demo 示例 非常不错

    Drools4Demo 是一个基于Drools规则引擎的演示项目,它展示了如何在实际应用中使用Drools进行业务规则管理和决策。Drools是一个强大的开源规则引擎,由JBOSS公司开发,现属于Red Hat公司的一部分。它提供了一个灵活、...

    drools指南-2018

    5. **决策表(Decision Tables)**:Drools支持使用Excel或CSV格式的决策表来编写规则,使得非技术人员也能理解和维护规则。 6. **流程(Processes)**:除了规则引擎,Drools还提供了工作流引擎,可以定义和执行...

    Drools5规则引擎开发教程.zip

    5. **决策表(Decision Table)**:Drools支持使用Excel或CSV格式的决策表来编写规则,这使得非技术人员也能参与到业务规则的定义中,提高了规则的可读性和维护性。 6. **事件处理(Event Processing)**:Drools5...

    Drools7 demo

    如果你在使用过程中遇到任何问题,这个示例项目将为你提供参考,帮助你更好地理解和应用Drools7的功能。通过研究这个示例,你可以学习如何创建、加载和执行规则,以及如何利用Drools7的新特性来解决实际的业务挑战。

    Drools规则引擎开发实例+源码

    在" Drools规则引擎开发案例 "中,你可能会学到如何设置和配置Drools环境,创建并加载规则文件,以及如何在Java应用程序中使用Drools API来操作规则。你还会看到如何插入事实,触发规则执行,以及如何查看和分析执行...

    drools 开发所需要的程序包集合

    开发者只需要将这些库添加到项目的类路径中,就可以开始使用Drools进行业务逻辑的编程和决策管理。为了更好地使用这些库,开发者需要熟悉Drools的API,理解DRL语言,并了解如何组织和管理规则文件。同时,了解如何与...

    drools6学习例子

    Drools 是一个强大的规则引擎,它允许开发人员在Java应用程序中使用声明式的方式来处理复杂的业务逻辑。Drools 6是其第六个主要版本,带来了许多改进和新特性,使得它更加适合大型企业级应用。这个"drools6学习例子...

Global site tag (gtag.js) - Google Analytics