jbpm sql使用动态参数方法

在jbpm4中如何配置sql活动使用动态参数呢?

我们使用JBPM4的例子为例,查看修改的方法:

流程定义文件:

 

代码
<? xml version="1.0" encoding="UTF-8" ?>

< process  name ="Sql"  xmlns ="http://jbpm.org/4.4/jpdl" >

  
< start  g ="16,20,48,48" >
    
< transition  to ="get task names"   />
  
</ start >

  
< sql  name ="get task names"
       var
="tasknames with i"
       g
="96,16,126,52" >
    
< query >
      select NAME_
      from JBPM4_TASK
      where NAME_ like :name
    
</ query >
    
< parameters >
        
< object  name ="name"  expr ="#{name}"   />
        
<!--  
        <string name="name" value="%i%" /> 
         
-->
      
    
</ parameters >
    
< transition  to ="count tasks"   />
  
</ sql >

  
< sql  name ="count tasks"
       var
="tasks"
       unique
="true"
       g
="254,16,92,52" >
    
< query >
      select count(*)
      from JBPM4_TASK
    
</ query >
    
< transition  to ="wait"   />
  
</ sql >

  
< state  name ="wait"  g ="378,18,94,48" />

</ process >

 

<string name="name" value="%i%" /> 
修改为  <object name="name" expr="#{name}" />

这样我们就可以从外部传入参数。

下面为JAVA调用的示例。

 

代码
/*
 * JBoss, Home of Professional Open Source
 * Copyright 2005, JBoss Inc., and individual contributors as indicated
 * by the @authors tag. See the copyright.txt in the distribution for a
 * full listing of individual contributors.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: 
http://www.fsf.org .
 
*/
package  org.jbpm.examples.sql;

import  java.util.Collection;
import  java.util.HashMap;
import  java.util.HashSet;
import  java.util.Map;
import  java.util.Set;

import  org.jbpm.api.Execution;
import  org.jbpm.api.task.Task;
import  org.jbpm.examples.java.Hand;
import  org.jbpm.test.JbpmTestCase;


/**
 * 
@author  Tom Baeyens
 
*/
public   class  SqlTest  extends  JbpmTestCase {

  String deploymentId;

  String taskLaundryId;
  String taskDishesId;
  String taskIronId;
  
  
protected   void  setUp()  throws  Exception {
    
super .setUp();
    
    deploymentId 
=  repositoryService.createDeployment()
        .addResourceFromClasspath(
" org/jbpm/examples/sql/process.jpdl.xml " )
        .deploy();
    
    
//  add task laundry
    Task task  =  taskService.newTask();
    task.setName(
" laundry " );
    taskLaundryId 
=  taskService.saveTask(task);
    
    
//  add task dishes
    task  =  taskService.newTask();
    task.setName(
" dishes " );
    taskDishesId 
=  taskService.saveTask(task);
    
    
//  add task iron
    task  =  taskService.newTask();
    task.setName(
" iron " );
    taskIronId 
=  taskService.saveTask(task);
  }

  
protected   void  tearDown()  throws  Exception {
    repositoryService.deleteDeploymentCascade(deploymentId);
    
    taskService.deleteTaskCascade(taskLaundryId);
    taskService.deleteTaskCascade(taskDishesId);
    taskService.deleteTaskCascade(taskIronId);
    
    
super .tearDown();
  }

  
public   void  testSql() {
      Map
< String, Object >  variables  =   new  HashMap < String, Object > ();
        variables.put(
" name " " %i% " );
    Execution execution 
=  executionService.startProcessInstanceByKey( " Sql " ,variables);
    String executionId 
=  execution.getId();
    
    Set
< String >  expectedTaskNames  =   new  HashSet < String > ();
    expectedTaskNames.add(
" dishes " );
    expectedTaskNames.add(
" iron " );
    Collection
< String >  taskNames  =  (Collection < String > ) executionService.getVariable(executionId,  " tasknames with i " );
    taskNames 
=   new  HashSet < String > (taskNames);
    
    assertEquals(expectedTaskNames, taskNames);
    
    Object activities 
=  executionService.getVariable(executionId,  " tasks " );
    assertEquals(
" 3 " , activities.toString());
  }
}

 

这里是修改过后的代码:

Map<String, Object> variables = new HashMap<String, Object>();
        variables.put(
"name""%i%");
    Execution execution 
= executionService.startProcessInstanceByKey("Sql",variables);
我们传入name变量,进行计算了。

你可能感兴趣的:(jbpm)