- 浏览: 118562 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
liguocai2009:
liguocai2009 写道经过我我的测试,600万的数据, ...
Oracle row_number() over()解析函数高效实现分页 -
liguocai2009:
经过我我的测试,600万的数据,row_number()耗时4 ...
Oracle row_number() over()解析函数高效实现分页 -
学会做人:
lbs1988 写道扯淡 谁说row_number() ove ...
Oracle row_number() over()解析函数高效实现分页 -
lbs1988:
扯淡 谁说row_number() over 效率高 他们效率 ...
Oracle row_number() over()解析函数高效实现分页 -
id0096:
没觉得效率高到哪里去...用180W条数据测试,很多情况下没有 ...
Oracle row_number() over()解析函数高效实现分页
package net.sweet.service.impl;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import net.sweet.dao.JbpmObjectUtilsDAO;
import net.sweet.jbpm.form.item.Item;
import net.sweet.jbpm.variable.VariableKey;
import net.sweet.log.level.Logger;
import net.sweet.service.DataBaseProber;
import net.sweet.service.WorkflowDriver;
import net.sweet.util.Constants;
import net.sweet.util.comparator.TaskInstanceComparator;
import org.jbpm.JbpmContext;
import org.jbpm.JbpmException;
import org.jbpm.context.exe.variableinstance.StringInstance;
import org.jbpm.db.GraphSession;
import org.jbpm.db.TaskMgmtSession;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ProcessInstance;
import org.jbpm.graph.exe.Token;
import org.jbpm.taskmgmt.def.Task;
import org.jbpm.taskmgmt.exe.TaskInstance;
import org.jbpm.taskmgmt.exe.TaskMgmtInstance;
import org.springframework.transaction.annotation.Transactional;
import org.springmodules.workflow.jbpm31.JbpmCallback;
import org.springmodules.workflow.jbpm31.JbpmTemplate;
@SuppressWarnings("unchecked")
public class JbpmWorkflowDriver implements WorkflowDriver {
private JbpmTemplate jbpmTemplate;
private DataBaseProber dataBaseProber;
private JbpmObjectUtilsDAO jbpmObjectUtilsDao;
public void setJbpmObjectUtilsDao(JbpmObjectUtilsDAO jbpmObjectUtilsDao) {
this.jbpmObjectUtilsDao = jbpmObjectUtilsDao;
}
public void setJbpmTemplate(JbpmTemplate jbpmTemplate) {
this.jbpmTemplate = jbpmTemplate;
}
public void setDataBaseProber(DataBaseProber dataBaseProber) {
this.dataBaseProber = dataBaseProber;
}
/**
* 返回当前系统所有流程定义
*/
@Transactional(readOnly = true)
public List<?> listAllProcessDefinition() {
return (List<?>) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
Logger.debug("go into listAllProcessDefinition");
return jbpmContext.getGraphSession()
.findAllProcessDefinitions();
}
});
}
/**
* 开始流程实例,并设置流程发起者
*/
@Transactional
public Long startProcessInstance(final Long processDefinitionId,
final String username) {
return (Long) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
GraphSession graphSession = jbpmContext.getGraphSession();
ProcessDefinition processDefinition = graphSession
// .findLatestProcessDefinition("Approve");
.loadProcessDefinition(processDefinitionId);
ProcessInstance processInstance = new ProcessInstance(
processDefinition);
// 设置流程发起人
processInstance.getContextInstance().setVariable(
VariableKey.PROCESS_STARTER.name(), username);
processInstance.signal();
TaskInstance taskInstance = (TaskInstance) processInstance
.getTaskMgmtInstance().getTaskInstances().iterator()
.next();
// taskInstance.getComments()
Logger.debug("Task name is :" + taskInstance.getName());
taskInstance.setActorId(username);
taskInstance.setVariable(VariableKey.PROCESS_STARTER.name(),
username);
/*
* taskInstance.setDescription("This is a [" + username + "]
* '制单' task");
*/
taskInstance.setDueDate(Constants.TASK_DUE_DATE);
// taskInstance.end();
// Save the process instance along with the task instance
jbpmContext.save(processInstance);
return processInstance.getId();
}
});
}
/**
* 根据流程定义名字开启流程实例
*/
@Transactional
public Long startProcessInstance(final String processDefinitionName,
final String username) {
return (Long) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
GraphSession graphSession = jbpmContext.getGraphSession();
ProcessDefinition processDefinition = graphSession
.findLatestProcessDefinition(processDefinitionName);
ProcessInstance processInstance = new ProcessInstance(
processDefinition);
// 设置流程发起人
processInstance.getContextInstance().setVariable(
VariableKey.PROCESS_STARTER.name(), username);
processInstance.signal();
/*
* TaskInstance taskInstance = (TaskInstance) processInstance
* .getTaskMgmtInstance().getTaskInstances().iterator() .next();
* taskInstance.setActorId(username);
*/
// taskInstance.setVariable(VariableKey.PROCESS_STARTER.name(),
// username);
// taskInstance.end();
// Save the process instance along with the task instance
jbpmContext.save(processInstance);
return processInstance.getId();
}
});
}
/**
* 根据流程实例获得当前流程的当前任务实例
*/
@Transactional(readOnly = true)
public TaskInstance getCurrentTaskInstance(final Long processInstanceId) {
return (TaskInstance) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
ProcessInstance processInstance = jbpmContext
.loadProcessInstance(processInstanceId);
return processInstance.getTaskMgmtInstance().getTaskInstances()
.iterator().next();
}
});
}
/**
* 保存流程实例
*/
@Transactional
public void saveProcessInstance(final Long processInstanceId) {
jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
ProcessInstance processInstance = jbpmContext
.loadProcessInstance(processInstanceId);
jbpmContext.save(processInstance);
return null;
}
});
}
/**
* 根据流程实例获得当前流程的当前任务实例
*/
@Transactional(readOnly = true)
public Task getCurrentTask(final Long processInstanceId) {
return (Task) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
ProcessInstance processInstance = jbpmContext
.loadProcessInstance(processInstanceId);
return ((TaskInstance) processInstance.getTaskMgmtInstance()
.getTaskInstances().iterator().next()).getTask();
}
});
}
/**
* 取得当前任务实例所在的实例管理上下文中所有任务实例
*
* @param taskInstanceId
* @return
*/
@Transactional(readOnly = true)
public Collection getAllTaskInstances(final Long taskInstanceId) {
return (Collection) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
TaskInstance task = jbpmContext.getTaskInstance(taskInstanceId);
List sortList = new ArrayList();
sortList.addAll(task.getTaskMgmtInstance().getTaskInstances());
Collections.sort(sortList, new TaskInstanceComparator());
return sortList;
}
});
}
/**
* 完成任务实例,并保存流程实例变量
*/
@Transactional
public void endTaskInstance(final Long taskInstanceId,
final Map formParams, final String opinion, final String transition) {
jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
TaskInstance task = jbpmContext.getTaskInstance(taskInstanceId);
Set keySet = formParams.keySet();
for (Iterator iterator = keySet.iterator(); iterator.hasNext();) {
String key = (String) iterator.next();
if (key.startsWith(Item.ITEM_PREFIX)
&& !key
.endsWith(Item.FILE_PARAMETER_APPEND_POSTFIX)) {// 判断需要保存在流程实例中的变量
String value = getValue(((String[]) formParams.get(key)));
if (!isLargeString(value))// 判断是否为长字符串,如果是,则以byte[]形式保存,否则直接保存字符串
task.getContextInstance().setVariable(key, value);
else
task.getContextInstance().setVariable(key,
value.getBytes());
}
}
// task.setVariable("opinion", opinion);
task.setVariableLocally(VariableKey.TASK_OPINION.name(),
opinion);
// task.getVariablesLocally()
// task.addComment(new Comment(opinion));
task.end(transition);
// task.getPooledActors();
jbpmContext.save(task);
return null;
}
});
}
/**
* 完成任务实例
*/
@Transactional
public void endTaskInstance(final Long taskInstanceId,
final String opinion, final String transition,
final String taskProcessPerson) {
jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
TaskInstance task = jbpmContext.getTaskInstance(taskInstanceId);
task.setVariableLocally(VariableKey.TASK_OPINION.name(),
opinion);
task.setVariableLocally(VariableKey.TASK_PROCESS_PERSON.name(),
taskProcessPerson);
task.end(transition);
jbpmContext.save(task);
return null;
}
});
}
/**
* 判断当前字符串是否属于长字符串,具体参照标准为‘jbpm_variableinstance’表中的‘STRINGVALUE_’字段长度
*
* @param str
* @return
*/
private boolean isLargeString(String str) {
if (str.length() >= dataBaseProber.getFieldPrecision(
"jbpm_variableinstance", "STRINGVALUE_"))
return true;
return false;
}
/**
* 将字符数组的空间值循环构成字符串
*
* @param values
* @return
*/
private String getValue(String[] values) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < values.length; i++) {
sb.append(values[i]);
if (i != values.length - 1)
sb.append(Item.MUTIPUL_VALUE_SPLIT);
}
return sb.toString();
}
/**
* 完成任务,并结束任务
*/
/*
* @Transactional public void doTaskWithTaskEnd(final Long
* processInstanceId, final String transition) { jbpmTemplate.execute(new
* JbpmCallback() { public Object doInJbpm(JbpmContext jbpmContext) throws
* JbpmException { ProcessInstance processInstance = jbpmContext
* .loadProcessInstance(processInstanceId); TaskInstance task =
* (TaskInstance) processInstance
* .getTaskMgmtInstance().getTaskInstances().iterator() .next();
* task.end(transition); jbpmContext.save(processInstance); return null; }
* }); }
*/
/**
* 根据参与者名称获得当前所有非池任务实例
*/
@SuppressWarnings("unchecked")
@Transactional
public List<Object> getTaskList(final String username) {
return (List<Object>) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
/*
* ProcessInstance processInstance = jbpmContext
* .loadProcessInstance(processInstanceId);
*/
TaskMgmtSession taskMgmtSession = new TaskMgmtSession(
jbpmContext.getSession());
// return taskMgmtSession.findPooledTaskInstances(username);
return taskMgmtSession.findTaskInstances(username);
}
});
}
/**
* 根据参与者名称获得当前所有池任务实例
*/
@SuppressWarnings("unchecked")
@Transactional
public List<Object> getPooledTaskList(final String username) {
return (List<Object>) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
TaskMgmtSession taskMgmtSession = new TaskMgmtSession(
jbpmContext.getSession());
return taskMgmtSession.findPooledTaskInstances(username);
}
});
}
/**
* 结束任务,并跳转到指定节点
*/
@Transactional
public void endTask(final Long taskInstanceId, final String transition) {
jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
TaskInstance taskInstance = jbpmContext
.getTaskInstance(taskInstanceId);
taskInstance.end(transition);
return null;
}
});
}
/**
* 判断流程实例是否结束
*/
@Transactional(readOnly = true)
public Boolean isFinish(final Long processInstanceId) {
return (Boolean) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
ProcessInstance processInstance = jbpmContext
.loadProcessInstance(processInstanceId);
return processInstance.hasEnded();
}
});
}
/**
* 获得当前任务节点的所有可能流向
*/
@Transactional(readOnly = true)
public List<?> getTransitionByTaskNode(final Long taskInstanceId) {
return (List<?>) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
TaskInstance ti = jbpmContext.getTaskInstance(taskInstanceId);
Logger.debug(ti.getContextInstance().getVariables());
List<?> transitions = ti.getTask().getTaskNode()
.getLeavingTransitionsList();
return transitions;
}
});
}
/**
* 获得当前任务实例对应的任务节点名称
*/
@Transactional(readOnly = true)
public String getTaskNodeName(final Long taskInstanceId) {
return (String) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
TaskInstance ti = jbpmContext.getTaskInstance(taskInstanceId);
Logger.debug(ti.getContextInstance().getVariables());
return ti.getTask().getTaskNode().getName();
}
});
}
/**
* 获得流程实例信息
*/
@Transactional(readOnly = true)
public ProcessInstance getProcessInstance(final Long processInstanceId) {
return (ProcessInstance) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
return jbpmContext.getProcessInstance(processInstanceId);
}
});
}
/**
* 获得流程实例变量集合
*/
@Transactional(readOnly = true)
public Map<String, String> getProcessInstanceVariables(
final Long processInstanceId) {
return (Map<String, String>) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
return jbpmContext.getProcessInstance(processInstanceId)
.getContextInstance().getVariables();
}
});
}
/**
* 获得任务实例信息
*/
@Transactional(readOnly = true)
public TaskInstance getTaskInstance(final Long taskInstanceId) {
return (TaskInstance) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
return jbpmContext.getTaskInstance(taskInstanceId);
}
});
}
/**
* 根据流程定义,获得所有流程实例
*/
@Transactional(readOnly = true)
public List<?> getProcessInstances(final Long processDefinitionId) {
return (List<?>) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
return jbpmContext.getGraphSession().findProcessInstances(
processDefinitionId);
}
});
}
/**
* 根据流程实例得到当前所有任务实例
*/
@Transactional(readOnly = true)
public Collection<?> getTaskInstances(final Long processInstanceId) {
return (Collection<?>) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
ProcessInstance processInstance = jbpmContext
.loadProcessInstance(processInstanceId);
List sortList = new ArrayList();
sortList.addAll(processInstance.getTaskMgmtInstance()
.getTaskInstances());
Collections.sort(sortList, new TaskInstanceComparator());
return sortList;
}
});
}
/**
* 根据流程定义ID获得流程定义名称
*
* @param processDefinitionId
* @return
*/
@Transactional(readOnly = true)
public String getProcessDefinitionName(final Long processDefinitionId) {
return (String) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
return jbpmContext.getGraphSession().getProcessDefinition(
processDefinitionId).getName();
}
});
}
/**
* 根据流程定义获得任务列表
*
* @param processDefinitionId
* @return
*/
@Transactional(readOnly = true)
public Map findTaskNode(final Long processDefinitionId) {
return (Map) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
return jbpmContext.getGraphSession().getProcessDefinition(
processDefinitionId).getTaskMgmtDefinition().getTasks();
}
});
}
/**
* 根据任务实例获得当前流程定义
*
* @param processDefinitionId
* @return
*/
@Transactional(readOnly = true)
public ProcessDefinition findProcessDefinition(final Long taskInstanceId) {
return (ProcessDefinition) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
return jbpmContext.getTaskInstance(taskInstanceId)
.getContextInstance().getProcessInstance()
.getProcessDefinition();
}
});
}
/**
* 获得流程实例中的变量值
*
* @param processInstanceId
* @param key
* @return
*/
@Transactional(readOnly = true)
public Object getVariable(final Long processInstanceId, final String key) {
return jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
return jbpmContext.loadProcessInstance(processInstanceId)
.getContextInstance().getVariable(key);
}
});
}
/**
* 根据任务实例标识得到流程实例的变量值
*
* @param processInsanceId
* @param key
* 变量key
* @param value
* 变量值
*/
@Transactional(readOnly = true)
public Object getVariableByTaskInstance(final Long taskInstanceId,
final String key) {
return jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
return jbpmContext.loadTaskInstance(taskInstanceId)
.getContextInstance().getVariable(key);
}
});
}
/**
* 向流程实例中保存流程变量
*
* @param processInsanceId
* @param key
* 变量key
* @param value
* 变量值
*/
@Transactional
public void insertVariable(final Long processInstanceId, final String key,
final Object value) {
jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
jbpmContext.loadProcessInstance(processInstanceId)
.getContextInstance().setVariable(key, value);
return null;
}
});
}
/**
* 获得令牌实例对象
*
* @param tokenInstanceId
* @return
*/
@Transactional(readOnly = true)
public Token getTokenInstance(final Long tokenInstanceId) {
return (Token) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
return jbpmContext.loadToken(tokenInstanceId);
}
});
}
/**
* 根据流程定义名字开启流程实例并停留在开始节点手动往下流转
*/
@Transactional
public Long startProcessInstanceNoSignal(
final String processDefinitionName, final String username) {
return (Long) jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
GraphSession graphSession = jbpmContext.getGraphSession();
ProcessDefinition processDefinition = graphSession
.findLatestProcessDefinition(processDefinitionName);
ProcessInstance processInstance = new ProcessInstance(
processDefinition);
// 设置流程发起人
processInstance.getContextInstance().setVariable(
VariableKey.PROCESS_STARTER.name(), username);
/*
* TaskInstance taskInstance = (TaskInstance) processInstance
* .getTaskMgmtInstance().getTaskInstances().iterator() .next();
* taskInstance.setActorId(username);
*/
// taskInstance.setVariable(VariableKey.PROCESS_STARTER.name(),
// username);
// taskInstance.end();
// Save the process instance along with the task instance
jbpmContext.save(processInstance);
return processInstance.getId();
}
});
}
/**
* 根据流程实例结束掉这个实例中所有未完成的任务
*
* @param processInsanceId
*/
@Transactional
public void endUnfinishedTasksByProcessInstanceId(
final Long processInstanceId) {
jbpmTemplate.execute(new JbpmCallback() {
public Object doInJbpm(JbpmContext jbpmContext)
throws JbpmException {
TaskMgmtInstance tmi = jbpmContext.loadProcessInstance(
processInstanceId).getTaskMgmtInstance();
Collection<TaskInstance> taskInstanceCollection = tmi
.getTaskInstances();
for (TaskInstance taskInstance : taskInstanceCollection) {
// 如果任务实例没有结束就结束掉该任务
if (!taskInstance.hasEnded()) {
taskInstance.end();
jbpmContext.save(taskInstance);
}
}
return null;
}
});
}
/**
* 得到流程发起者的所有流程实例
*
* @param processStarter
* @return
*/
@Transactional
public List getProcessInstances(String processStarter,
String processDefinitionName, Boolean hasEnded) {
String hql = "FROM StringInstance WHERE name = ? AND value = ? "
+ "AND processInstance.processDefinition.name = ? ";
if (hasEnded != null) {
if (hasEnded)
hql = hql + "AND processInstance.end IS NOT NULL ";
else
hql = hql + "AND processInstance.end IS NULL ";
}
List list = jbpmObjectUtilsDao.find(hql, new Object[] {
VariableKey.PROCESS_STARTER.name(), processStarter,
processDefinitionName });
List processInstances = new ArrayList();
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
StringInstance si = (StringInstance) iterator.next();
processInstances.add(this.getProcessInstance(si
.getProcessInstance().getId()));
}
return processInstances;
}
}
评论
一个是将变量放到上下文实例中;另一个是将变量放到任务实例中!
如果是放到任务实例当中,取 变量也必须先得到该任务实例,再从中去变量!
至于你为什么流转时数据库会无数据:
是和你的事务有关的,如:<property name="transactionAttributes">
<props>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="upd*">PROPAGATION_REQUIRED</prop>
<prop key="modify*">PROPAGATION_REQUIRED</prop>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="save*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="del*">PROPAGATION_REQUIRED</prop>
<prop key="submit*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_REQUIRED, readOnly</prop>
</props>
</property>
这是你spring里的配置事务的,如果你的service里的方法名不是以你配置中的为开
头,就无法的往数据库里插入数据.
如你service里的方法名为:public void submitToWorkflow(String userId, String gongdId, String transitionName),所以你的spring配置文件里必须配置<prop key="submit*">PROPAGATION_REQUIRED</prop>,.
相关推荐
这个是自己把一些jbpm的封装,比较不错啊
jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍jbpm介绍
jbpm jbpm4.3.jar DDDDDDDD
\jbpm简介\jbpm简介\jbpm简介\jbpm简介\jbpm简介
jbpm 数据库jbpm 数据库jbpm 数据库jbpm 数据库jbpm 数据库
jbpm使用案例,非常不错,大家都来看看吧。
jbpm应用开发指面(胡奇) jbpm4.3表结构和表字段说明 [jBPM开发指南].高杰.文字版 jBPM5_用户手册-中文版
本文件从JBPM的原理、实现方法、实例等方面详细讲解了JBPM的原理,包括以下内容: 1、JBPM特色: 3 2、流程图的组成: 3 2.1流转 (TRANSITION) 3 2.2活动 (ACTIVITY) 3 3、所用到的表: 4 3.1资源库与运行时表结构:...
通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...
jbpm4源码jbpm4源码jbpm4源码
JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM采购申请系统——08_JBPM流程节点.7z JBPM...
jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库jbpm创建数据库
JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS JBPM4 SSH EXTJS JBPM SSH EXTJS 希望对大家有帮助。
JBPM开发指南JBPM开发指南JBPM开发指南
JBPM_DELEGATION JBPM_DELEGATION FK_DELEGATION_PRCD PROCESSDEFINITION_ 一个流程可能存在很多的流程代理类 JBPM_PROCESSINSTANCE JBPM_PROCESSINSTANCE FK_PROCIN_PROCDEF PROCESSDEFINITION_ 一个流程模板可能...
1.6 JBPM_DELEGATION:流程代理类表(用于实例化jbpm中的action类) 6 1.7 JBPM_TASK:流程任务表 6 1.8 JBPM_TASKCONTROLLER:流程任务控制器 7 1.9 JBPM_VARIABLEACCESS:流程变量表 7 1.10 JBPM_MODULEDEFINITION...
jBPM源码分析jBPM源码分析jBPM源码分析jBPM源码分析
jBpm是一个灵活可扩展的工作流管理系统。作为jBpm运行时server输入的业务流程使用简单强大的语言表达并打包在流程档案中
jbpm学习资料,jBPM-jPDL学习笔记,很详细。。。。。。。。。。。jbpm教程
JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z JBPM采购申请系统——06_JBPM版本控制及Token对象.7z ...