Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
开发团队
Flowable Engine
提交
a6e334d6
F
Flowable Engine
项目概览
开发团队
/
Flowable Engine
通知
9
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Flowable Engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a6e334d6
编写于
3月 07, 2011
作者:
F
frederikheremans
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ACT-672 querying tasks based on process-instance variable value
上级
263c5ddb
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
141 addition
and
6 deletion
+141
-6
modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskQueryImpl.java
...src/main/java/org/activiti/engine/impl/TaskQueryImpl.java
+8
-3
modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskQueryVariableValue.java
...java/org/activiti/engine/impl/TaskQueryVariableValue.java
+36
-0
modules/activiti-engine/src/main/java/org/activiti/engine/task/TaskQuery.java
...ine/src/main/java/org/activiti/engine/task/TaskQuery.java
+7
-1
modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/task.mapping.xml
...rc/main/resources/org/activiti/db/ibatis/task.mapping.xml
+12
-1
modules/activiti-engine/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java
...java/org/activiti/engine/test/api/task/TaskQueryTest.java
+61
-1
modules/activiti-engine/src/test/resources/org/activiti/engine/test/api/task/TaskQueryTest.testProcessVariableValueEquals.bpmn20.xml
...k/TaskQueryTest.testProcessVariableValueEquals.bpmn20.xml
+17
-0
未找到文件。
modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskQueryImpl.java
浏览文件 @
a6e334d6
...
...
@@ -52,7 +52,7 @@ public class TaskQueryImpl extends AbstractQuery<TaskQuery, Task> implements Tas
protected
String
processDefinitionKey
;
protected
String
processDefinitionId
;
protected
String
processDefinitionName
;
protected
List
<
QueryVariableValue
>
variables
=
new
ArrayList
<
QueryVariableValue
>();
protected
List
<
TaskQueryVariableValue
>
variables
=
new
ArrayList
<
Task
QueryVariableValue
>();
public
TaskQueryImpl
(
CommandContext
commandContext
)
{
super
(
commandContext
);
...
...
@@ -178,7 +178,12 @@ public class TaskQueryImpl extends AbstractQuery<TaskQuery, Task> implements Tas
}
public
TaskQuery
taskVariableValueEquals
(
String
variableName
,
Object
variableValue
)
{
variables
.
add
(
new
QueryVariableValue
(
variableName
,
variableValue
,
QueryOperator
.
EQUALS
));
variables
.
add
(
new
TaskQueryVariableValue
(
variableName
,
variableValue
,
QueryOperator
.
EQUALS
,
true
));
return
this
;
}
public
TaskQuery
processVariableValueEquals
(
String
variableName
,
Object
variableValue
)
{
variables
.
add
(
new
TaskQueryVariableValue
(
variableName
,
variableValue
,
QueryOperator
.
EQUALS
,
false
));
return
this
;
}
...
...
@@ -330,7 +335,7 @@ public class TaskQueryImpl extends AbstractQuery<TaskQuery, Task> implements Tas
public
String
getKeyLike
()
{
return
keyLike
;
}
public
List
<
QueryVariableValue
>
getVariables
()
{
public
List
<
Task
QueryVariableValue
>
getVariables
()
{
return
variables
;
}
public
String
getProcessDefinitionKey
()
{
...
...
modules/activiti-engine/src/main/java/org/activiti/engine/impl/TaskQueryVariableValue.java
0 → 100644
浏览文件 @
a6e334d6
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
org.activiti.engine.impl
;
/**
* Represents a variable value used in a task query.
*
* @author Frederik Heremans
*/
public
class
TaskQueryVariableValue
extends
QueryVariableValue
{
protected
boolean
taskVariable
;
public
TaskQueryVariableValue
(
String
name
,
Object
value
,
QueryOperator
operator
,
boolean
isTaskVariable
)
{
super
(
name
,
value
,
operator
);
this
.
taskVariable
=
isTaskVariable
;
}
public
boolean
isTaskVariable
()
{
return
taskVariable
;
}
}
modules/activiti-engine/src/main/java/org/activiti/engine/task/TaskQuery.java
浏览文件 @
a6e334d6
...
...
@@ -89,11 +89,17 @@ public interface TaskQuery extends Query<TaskQuery, Task>{
TaskQuery
taskDefinitionKeyLike
(
String
keyLike
);
/**
* Only select tasks w
it
h have a local task variable with the given name
* Only select tasks w
hic
h have a local task variable with the given name
* set to the given value.
*/
TaskQuery
taskVariableValueEquals
(
String
variableName
,
Object
variableValue
);
/**
* Only select tasks which have are part of a process that have a variable
* with the given name set to the given value.
*/
TaskQuery
processVariableValueEquals
(
String
variableName
,
Object
variableValue
);
/**
* Only select tasks which are part of a process instance which have the given
* process definition key.
...
...
modules/activiti-engine/src/main/resources/org/activiti/db/ibatis/task.mapping.xml
浏览文件 @
a6e334d6
...
...
@@ -110,7 +110,14 @@
inner join ACT_RU_IDENTITYLINK I on I.TASK_ID_ = T.ID_
</if>
<foreach
collection=
"variables"
index=
"index"
item=
"var"
>
inner join ACT_RU_VARIABLE A${index} on T.ID_ = A${index}.TASK_ID_
<choose>
<when
test=
"var.taskVariable"
>
inner join ACT_RU_VARIABLE A${index} on T.ID_ = A${index}.TASK_ID_
</when>
<otherwise>
inner join ACT_RU_VARIABLE A${index} on T.PROC_INST_ID_ = A${index}.PROC_INST_ID_
</otherwise>
</choose>
</foreach>
<if
test=
"processDefinitionKey != null || processDefinitionName != null"
>
inner join ACT_RE_PROCDEF D on T.PROC_DEF_ID_ = D.ID_
...
...
@@ -191,6 +198,10 @@
)
</if>
<foreach
item=
"var"
collection=
"variables"
index=
"index"
>
<if
test=
"!var.taskVariable"
>
<!-- When process instance variable is queried for, taskId should be null -->
and A${index}.TASK_ID_ is null
</if>
and A${index}.NAME_= #{var.name}
<if
test=
"!var.type.equals('null')"
>
and A${index}.TYPE_ = #{var.type}
...
...
modules/activiti-engine/src/test/java/org/activiti/engine/test/api/task/TaskQueryTest.java
浏览文件 @
a6e334d6
...
...
@@ -425,7 +425,7 @@ public class TaskQueryTest extends PluggableActivitiTestCase {
assertEquals
(
1
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"dateVar"
,
date
).
count
());
assertEquals
(
1
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"nullVar"
,
null
).
count
());
// Test query for other values on exi
x
ting variables
// Test query for other values on exi
s
ting variables
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"longVar"
,
999L
).
count
());
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"shortVar"
,
(
short
)
999
).
count
());
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"integerVar"
,
999
).
count
());
...
...
@@ -437,6 +437,66 @@ public class TaskQueryTest extends PluggableActivitiTestCase {
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"nullVar"
,
"999"
).
count
());
}
@Deployment
public
void
testProcessVariableValueEquals
()
throws
Exception
{
Map
<
String
,
Object
>
variables
=
new
HashMap
<
String
,
Object
>();
variables
.
put
(
"longVar"
,
928374L
);
variables
.
put
(
"shortVar"
,
(
short
)
123
);
variables
.
put
(
"integerVar"
,
1234
);
variables
.
put
(
"stringVar"
,
"stringValue"
);
variables
.
put
(
"booleanVar"
,
true
);
Date
date
=
Calendar
.
getInstance
().
getTime
();
variables
.
put
(
"dateVar"
,
date
);
variables
.
put
(
"nullVar"
,
null
);
// Start process-instance with all types of variables
ProcessInstance
processInstance
=
runtimeService
.
startProcessInstanceByKey
(
"oneTaskProcess"
,
variables
);
// Test query matches
assertEquals
(
1
,
taskService
.
createTaskQuery
().
processVariableValueEquals
(
"longVar"
,
928374L
).
count
());
assertEquals
(
1
,
taskService
.
createTaskQuery
().
processVariableValueEquals
(
"shortVar"
,
(
short
)
123
).
count
());
assertEquals
(
1
,
taskService
.
createTaskQuery
().
processVariableValueEquals
(
"integerVar"
,
1234
).
count
());
assertEquals
(
1
,
taskService
.
createTaskQuery
().
processVariableValueEquals
(
"stringVar"
,
"stringValue"
).
count
());
assertEquals
(
1
,
taskService
.
createTaskQuery
().
processVariableValueEquals
(
"booleanVar"
,
true
).
count
());
assertEquals
(
1
,
taskService
.
createTaskQuery
().
processVariableValueEquals
(
"dateVar"
,
date
).
count
());
assertEquals
(
1
,
taskService
.
createTaskQuery
().
processVariableValueEquals
(
"nullVar"
,
null
).
count
());
// Test query for other values on existing variables
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"longVar"
,
999L
).
count
());
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"shortVar"
,
(
short
)
999
).
count
());
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"integerVar"
,
999
).
count
());
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"stringVar"
,
"999"
).
count
());
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"booleanVar"
,
false
).
count
());
Calendar
otherDate
=
Calendar
.
getInstance
();
otherDate
.
add
(
Calendar
.
YEAR
,
1
);
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"dateVar"
,
otherDate
.
getTime
()).
count
());
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"nullVar"
,
"999"
).
count
());
// Test querying for task variables don't match the process-variables
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"longVar"
,
928374L
).
count
());
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"shortVar"
,
(
short
)
123
).
count
());
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"integerVar"
,
1234
).
count
());
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"stringVar"
,
"stringValue"
).
count
());
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"booleanVar"
,
true
).
count
());
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"dateVar"
,
date
).
count
());
assertEquals
(
0
,
taskService
.
createTaskQuery
().
taskVariableValueEquals
(
"nullVar"
,
null
).
count
());
// Test combination of task-variable and process-variable
Task
task
=
taskService
.
createTaskQuery
().
processInstanceId
(
processInstance
.
getId
()).
singleResult
();
taskService
.
setVariableLocal
(
task
.
getId
(),
"taskVar"
,
"theValue"
);
taskService
.
setVariableLocal
(
task
.
getId
(),
"longVar"
,
928374L
);
assertEquals
(
1
,
taskService
.
createTaskQuery
()
.
processVariableValueEquals
(
"longVar"
,
928374L
)
.
taskVariableValueEquals
(
"taskVar"
,
"theValue"
)
.
count
());
assertEquals
(
1
,
taskService
.
createTaskQuery
()
.
processVariableValueEquals
(
"longVar"
,
928374L
)
.
taskVariableValueEquals
(
"longVar"
,
928374L
)
.
count
());
}
@Deployment
(
resources
={
"org/activiti/engine/test/api/task/TaskQueryTest.testProcessDefinition.bpmn20.xml"
})
public
void
testProcessDefinitionId
()
throws
Exception
{
ProcessInstance
processInstance
=
runtimeService
.
startProcessInstanceByKey
(
"oneTaskProcess"
);
...
...
modules/activiti-engine/src/test/resources/org/activiti/engine/test/api/task/TaskQueryTest.testProcessVariableValueEquals.bpmn20.xml
0 → 100644
浏览文件 @
a6e334d6
<?xml version="1.0" encoding="UTF-8"?>
<definitions
xmlns=
"http://www.omg.org/spec/BPMN/20100524/MODEL"
xmlns:activiti=
"http://activiti.org/bpmn"
targetNamespace=
"Examples"
>
<process
id=
"oneTaskProcess"
name=
"The One Task Process"
>
<startEvent
id=
"theStart"
/>
<sequenceFlow
id=
"flow1"
sourceRef=
"theStart"
targetRef=
"theTask"
/>
<userTask
id=
"theTask"
name=
"my task"
/>
<sequenceFlow
id=
"flow2"
sourceRef=
"theTask"
targetRef=
"theEnd"
/>
<endEvent
id=
"theEnd"
/>
</process>
</definitions>
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录