复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

            规则引擎Drools(3)Activiti整合Drools

 制订业务

  • 金卡7折
  • 银卡8折

测试规则

设计流程

Activiti整合Drools,drl文件部署,要注意三点如下:

1在activiti.cxf.xml中加入下标签

复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

2.在JAVA部署时将我们要部署的drl文件进行部署,如下

复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

 

3. 匹配参数要JAVA 中JUEL注入

复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

 

测试流程图;

复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

 

测试

1.1 新建 activiti.cxf.xml(加Drools有效标签,祥见上上图), 流程图sale.bpmn

复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

1.2 新建sale.drl,并修改sale.bpmn,给匹配销售规则节点加输入参数,和匹配结果结果参数(是个数组)

复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

1.3  再新建相关的类其他,

1.4整个过程如下:

项目结构如下:

复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

注意事项:将 Activiti整合Drools,drl文件部署,要注意三点如下都弄好后

复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

 

根据流程图:执行SaleMain的main方法 我们部署完 bpmn,drl文件后,流程先走到录入销售信息,然后执行如下代码

  // 完成第一个任务并设置销售参数

        Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();

        // 设置参数

        Map<String, Object> vars = new HashMap<String, Object>();

        Member m = new Member();

        m.setIdentity("gold");

        m.setAmount(100);

        vars.put("member", m);

        System.out.println("当前节点任务名"+task.getName());//当前节点任务名录入销售信息

        //在跳到下一个节点即匹配销售规则节点节点前设置好参数 member JUEL

        taskService.complete(task.getId(), vars);

       /*

        因为流程bpmndrl是同时加入流程的.addClasspathResource("sale.bpmn").addClasspathResource("sale.drl").deploy();

        所以在进入 匹配销售规则节点时

        会按照我们juel注入的参数member对象,按照sale.bpmn activiti:ruleVariablesInput="${member}" 自动根据sale.drl进行匹配

        并将匹配新的对象(因为sale.drl配置规则打折后更新了对象)放入 sale.bpmn 设置的数组参数  activiti:resultVariable="members" 中

       

        然后会自动执行Service Task对应的自定义类com.xiangshuai.act.c27.OutputDelegate

         @Override

    public void execute(DelegateExecution exe) {

        System.out.println("结果输出类");

        List<Member> members = (List<Member>)exe.getVariable("members");

        for(Member m : members) {

            System.out.println("客户身份:" + m.getIdentity() + ", 消费金额:" + m.getAmount() + ", 优惠后金额:" + m.getResult());

        }

    }

 

        */

 

 

总测试类:

SaleMain.java

package com.xiangshuai.act.c27;

 

import java.util.HashMap;

import java.util.List;

import java.util.Map;

 

import org.activiti.engine.ProcessEngine;

import org.activiti.engine.ProcessEngines;

import org.activiti.engine.RepositoryService;

import org.activiti.engine.RuntimeService;

import org.activiti.engine.TaskService;

import org.activiti.engine.delegate.DelegateExecution;

import org.activiti.engine.repository.Deployment;

import org.activiti.engine.repository.ProcessDefinition;

import org.activiti.engine.runtime.ProcessInstance;

import org.activiti.engine.task.Task;

 

/**

 * @author lqx

 * 文件在 E:\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

  或 我的网盘\我的笔记\学习文档子目录压缩\框架\工作流引擎\Activiti6.0\window\复习步骤24-28 规则引擎Drools(3)Activiti整合Drools

 *

 */

public class SaleMain {

 

    public static void main(String[] args) {

        ProcessEngine engine = ProcessEngines.getDefaultProcessEngine();

        // 存储服务

        RepositoryService rs = engine.getRepositoryService();

        // 运行时服务

        RuntimeService runService = engine.getRuntimeService();

        // 任务服务

        TaskService taskService = engine.getTaskService();

        Deployment dep = rs.createDeployment()

                .addClasspathResource("sale.bpmn")

                .addClasspathResource("sale.drl").deploy();

        ProcessDefinition pd = rs.createProcessDefinitionQuery()

                .deploymentId(dep.getId()).singleResult();

        ProcessInstance pi = runService.startProcessInstanceById(pd.getId());

       

        // 完成第一个任务并设置销售参数

        Task task = taskService.createTaskQuery().processInstanceId(pi.getId()).singleResult();

        // 设置参数

        Map<String, Object> vars = new HashMap<String, Object>();

        Member m = new Member();

        m.setIdentity("gold");

        m.setAmount(100);

        vars.put("member", m);

        System.out.println("当前节点任务名"+task.getName());//当前节点任务名录入销售信息

        //在跳到下一个节点即匹配销售规则节点节点前设置好参数 member JUEL

        taskService.complete(task.getId(), vars);

       /*

        因为流程bpmndrl是同时加入流程的.addClasspathResource("sale.bpmn").addClasspathResource("sale.drl").deploy();

        所以在进入 匹配销售规则节点时

        会按照我们juel注入的参数member对象,按照sale.bpmn activiti:ruleVariablesInput="${member}" 自动根据sale.drl进行匹配

        并将匹配新的对象(因为sale.drl配置规则打折后更新了对象)放入 sale.bpmn 设置的数组参数  activiti:resultVariable="members" 中

       

        然后会自动执行Service Task对应的自定义类com.xiangshuai.act.c27.OutputDelegate

         @Override

    public void execute(DelegateExecution exe) {

        System.out.println("结果输出类");

        List<Member> members = (List<Member>)exe.getVariable("members");

        for(Member m : members) {

            System.out.println("客户身份:" + m.getIdentity() + ", 消费金额:" + m.getAmount() + ", 优惠后金额:" + m.getResult());

        }

    }

 

        */

    }

 

}

 

上一篇:Udacity DRL DQN


下一篇:Drools.D.4:规则语言参考