liferay-workflow-jbpm 动态task实例

公司需求开发,测试,部署,内容更新的流程管理.用到动态分配任务。
流程定义文件如下:
<?xml version="1.0"?>

<process-definition name="demand-management">

<!-- Event Logging -->


<!-- Swimlanes -->

<swimlane name="tester" >
<assignment class="com.liferay.jbpm.handler.IdentityAssignmentHandler" config-type="field">
<type>user</type>
<companyId>10113</companyId>
<id>10045</id>
</assignment>
</swimlane >


<swimlane name="requestor" >
<assignment class="com.liferay.jbpm.handler.IdentityAssignmentHandler" config-type="field">
<type>user</type>
<companyId>10113</companyId>
<id>10045</id>
</assignment>
</swimlane >

<swimlane name="approver">
<assignment class="com.liferay.jbpm.handler.IdentityAssignmentHandler" config-type="field">
<type>user</type>
<companyId>10113</companyId>
<id>10045</id>
</assignment>
</swimlane>



<!-- Nodes -->
<!-- 流程开始-->
<start-state name="add-Demand">
<task swimlane="tester">
<controller>
<variable name="text:demand-name" access="read,write,required" />
<variable name="textarea:demand-comments" access="read,write,required" />
<variable name="date:demand-start-date" access="read,write,required" />
</controller>
</task>
<transition name="add-Demand" to="manager-manage" />
</start-state>

<!-- 经理审核需求-->
<task-node name="manager-manage">
<task swimlane="tester">
<controller>
<variable name="textarea:why-testfaling" access="read,required" />
<variable name="text:demand-name" access="read,required" />
<variable name="textarea:demand-comments" access="read,required" />
<variable name="date:demand-start-date" access="read,required" />
</controller>
</task>
<transition name="approve-demand" to="manager-assign-task" />
<transition name="reject-demand" to="back-Demand" />
<transition name="exit-demand" to="end" />
</task-node>

<!-- 填写分配任务-->
<task-node name="manager-assign-task">
<task swimlane="tester">
<controller>
<variable name="text:task-name" access="read,write,required" />
<variable name="textarea:task-comments" access="read,write,required" />
<variable name="radio:assign-to-user1:yes,no" access="read,write,required" />
<variable name="radio:assign-to-user2:yes,no" access="read,write,required" />
<variable name="radio:assign-to-user3:yes,no" access="read,write,required" />
</controller>
</task>
<transition name="assign-task-submit" to="dynamic-create-task" />
</task-node>

<!-- 动态生成任务实例-->
<task-node name="dynamic-create-task" signal="last-wait" create-tasks="false">
<task swimlane="requestor">
<controller>
<variable name="text:task-name" access="read,required" />
<variable name="textarea:task-comments" access="read,required" />

<variable name="radio:assign-to-user1:yes,no" access="read,required" />
<variable name="radio:assign-to-user2:yes,no" access="read,required" />
<variable name="radio:assign-to-user3:yes,no" access="read,required" />

</controller>
</task>
<!-- 动态分配任务调用外部动作 -->
<event type="node-enter">
<action name="createInstance"
class="com.liferay.jbpm.handler.CreateTasksAction">
</action>
</event>
<transition name="task-finished" to="manager-checkup-task" />
</task-node>

<!--添加返回原因-->
<task-node name="back-Demand">
<task swimlane="tester">
<controller>

<variable name="text:demand-name" access="read,required" />
<variable name="textarea:demand-comments" access="read,required" />
<variable name="date:back-demand-date" access="read,write,required" />
<variable name="textarea:why-reject" access="read,write,required" />
</controller>
</task>
<transition name="back-demand-submit" to="back-Demand-resubmit" />
</task-node>



<!--返回修改需求-->
<task-node name="back-Demand-resubmit">
<task swimlane="tester">
<controller>
<variable name="textarea:why-reject" access="read,required" />
<variable name="date:back-demand-date" access="read,required" />
<variable name="text:demand-name" access="read,write,required" />
<variable name="textarea:demand-comments" access="read,write,required" />
<variable name="date:demand-start-date" access="read,write,required" />

</controller>
</task>
<transition name="modify-demand-resubmit" to="manager-manage" />
</task-node>


<!-- 经理审核任务-->
<task-node name="manager-checkup-task">
<task swimlane="tester">
<controller>
<variable name="text:task-name" access="read,write,required" />
<variable name="textarea:task-comments" access="read,write,required" />
<variable name="date:task-end-date" access="read,write,required" />

</controller>
</task>
<transition name="all-task-finished" to="test-manage" />
</task-node>



<!---测试已经开发完成的任务-->
<task-node name="test-manage">
<task swimlane="tester">
<controller>
<variable name="text:task-name" access="read,required" />
<variable name="textarea:task-comments" access="read,required" />
<variable name="date:test-end-date" access="read,wrire,quired" />
</controller>
</task>
<transition name="test-finish" to="deploy-manage" />
<transition name="test-failing" to="failing-modify" />
</task-node>

<!-- 测试失败-->
<task-node name="failing-modify">

<task swimlane="tester">
<controller>
<variable name="text:task-name" access="read,required" />
<variable name="textarea:task-comments" access="read,required" />
<variable name="date:test-end-date" access="read,quired" />
<variable name="textarea:why-testfaling" access="read,write,required" />

</controller>
</task>
<transition name="failing-modify-submit" to="manager-manage" />
</task-node>

<!-- 填写失败原因-->
<task-node name="deploy-manage">
<task swimlane="tester">
<controller>
<variable name="text:task-name" access="read,required" />
<variable name="textarea:task-comments" access="read,required" />
<variable name="date:deploy-end-date" access="read,write,required" />
</controller>
</task>
<transition name="deploy-submit" to="end" />
</task-node>
<!-- 流程结束-->
<end-state name="end" />
</process-definition>


其中流转到开发经理审核时,采用了项目经理可以动态将需求划分成不同的子任务,等待所有任务完成后在重新审阅后,统一流转到下一个节点。动态创建任务的CreateTaskAction 如下:
/**
* Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/

package com.liferay.jbpm.handler;

import com.liferay.client.soap.portal.model.UserSoap;
import com.liferay.portal.kernel.log.Log;
import com.liferay.portal.kernel.log.LogFactoryUtil;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.StringUtil;

import org.jbpm.context.exe.ContextInstance;
import org.jbpm.graph.def.ActionHandler;
import org.jbpm.graph.def.ProcessDefinition;
import org.jbpm.graph.exe.ExecutionContext;
import org.jbpm.graph.exe.Token;
import org.jbpm.graph.node.TaskNode;
import org.jbpm.taskmgmt.def.Swimlane;
import org.jbpm.taskmgmt.def.Task;
import org.jbpm.taskmgmt.def.TaskMgmtDefinition;
import org.jbpm.taskmgmt.exe.SwimlaneInstance;
import org.jbpm.taskmgmt.exe.TaskMgmtInstance;

/**
* <a href="NotifyRequestorActionHandler.java.html"><b><i>View Source</i></b>
* </a>
*
* @author Charles May
*
*/
public class CreateTasksAction implements ActionHandler {


private static final long serialVersionUID = 1L;

/* public void execute(ExecutionContext executionContext) throws Exception {
Token token = executionContext.getToken();
TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();

TaskNode taskNode = (TaskNode) executionContext.getNode();
Task task= taskNode.getTask("manager-assign");
tmi.createTaskInstance(task, token)
.setPooledActors(new String[]{"10045"});
tmi.createTaskInstance(task, token)
.setPooledActors(new String[]{"10045"});

}
}*/



public void execute(ExecutionContext executionContext) {

ProcessDefinition definition = executionContext.getProcessDefinition();

TaskMgmtDefinition taskMgmtDefinition =
definition.getTaskMgmtDefinition();
TaskMgmtInstance taskMgmtInstance =
executionContext.getTaskMgmtInstance();

Swimlane requestorSwimlane =
taskMgmtDefinition.getSwimlane("requestor");
SwimlaneInstance requestorSwimlaneInstance =
taskMgmtInstance.getInitializedSwimlaneInstance(
executionContext, requestorSwimlane);

String userId = getDedicatedUserId(); // requestorSwimlaneInstance.getActorId();

//my test code
Token token = executionContext.getToken();
TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();

TaskNode taskNode = (TaskNode) executionContext.getNode();
Task task= taskNode.getTask("dynamic-create-task");
//ActorId is UserId in liferay's userTable
//tmi.createTaskInstance(task, token).setActorId("10145");
// tmi.createTaskInstance(task, token).setActorId("14145");
// tmi.createTaskInstance(task, token).setActorId("14154");
//<variable name="radio:assign-to-user1:yes,no" access="read,write,required" />
//<variable name="radio:assign-to-user2:yes,no" access="read,write,required" />
//<variable name="radio:assign-to-user3:yes,no" access="read,write,required" />

//test code2
ContextInstance contextInstance = executionContext.getContextInstance();
String radio1 = (String)contextInstance.getVariable("radio:assign-to-user1:yes,no");
String radio2 = (String)contextInstance.getVariable("radio:assign-to-user2:yes,no");
String radio3 = (String)contextInstance.getVariable("radio:assign-to-user3:yes,no");

String checkBox1 = (String)contextInstance.getVariable("checkbox:assign-to-user1:yes");
String checkBox2 = (String)contextInstance.getVariable("checkbox:assign-to-user2:yes");
String checkBox3 = (String)contextInstance.getVariable("checkbox:assign-to-user3:yes");

if (radio1!= null && radio1.equals("yes")) {
tmi.createTaskInstance(task, token).setActorId("14145");
}
if (radio2!= null && radio2.equals("yes")) {
tmi.createTaskInstance(task, token).setActorId("14154");
}
if (radio3!= null && radio3.equals("yes")) {
tmi.createTaskInstance(task, token).setActorId("10145");
}



//Radio test assign task
/*if (taskRadio!= null && taskRadio.equals("assign-to-user1")) {
tmi.createTaskInstance(task, token).setActorId("14145");
}else if (taskRadio!= null && taskRadio.equals("assign-to-user2")) {
tmi.createTaskInstance(task, token).setActorId("14154");
}
else {
tmi.createTaskInstance(task, token).setActorId("10145");
}*/
//checkBox assign task
/* if (checkBox1 != null && checkBox1.equals("true")) {
tmi.createTaskInstance(task, token).setActorId("14145");
}
if (checkBox2 != null && checkBox2.equals("true")) {
tmi.createTaskInstance(task, token).setActorId("14154");
}
if (checkBox3 != null && checkBox3.equals("true")) {
tmi.createTaskInstance(task, token).setActorId("10145");
}

System.out.println("checkBox1======================================:"+checkBox1);
System.out.println("checkBox2======================================:"+checkBox2);
System.out.println("checkBox3======================================:"+checkBox2);*/

executionContext.getJbpmContext().getSession().saveOrUpdate(tmi);

// .setPooledActors(new String[]{"10145"});
// tmi.createTaskInstance(task, token)
// .setPooledActors(new String[]{"14145"});
// tmi.createTaskInstance(task, token)
// .setPooledActors(new String[]{"14154"});


// executionContext.leaveNode();
}

private String getDedicatedUserId() {
String userId = "10145";
return userId;
}

private static Log _log =
LogFactoryUtil.getLog(CreateTasksAction.class);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值