代码下载:git
BPM节点更新
例子(一):
package com.ui.bpm;
import com.proxy.bpm.query.TaskQueryService;
import com.proxy.bpm.query.TaskQueryService_Service;
import com.proxy.bpm.query.WorkflowErrorMessage;
import com.proxy.bpm.service.StaleObjectFaultMessage;
import com.proxy.bpm.service.TaskServiceContextTaskBaseType;
import com.proxy.bpm.service.TaskService_Service;
import oracle.adf.share.logging.ADFLogger;
import oracle.bpel.services.workflow.common.model.CredentialType;
import oracle.bpel.services.workflow.common.model.WorkflowContextType;
import oracle.bpel.services.workflow.task.model.Task;
import com.proxy.bpm.service.TaskService_Service;
import com.proxy.bpm.service.TaskService;
import com.proxy.bpm.service.UpdateTaskOutcomeType;
import oracle.bpel.services.workflow.query.model.TaskDetailsByIdRequestType;
public class Test5 {
//日志
private static ADFLogger logger=ADFLogger.createADFLogger(Test5.class);
public Test5() {
super();
}
/**
* 流程更新TaskService
*/
//参照XML
/* <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tas=http://xmlns.oracle.com/bpel/workflow/taskService xmlns:com=http://xmlns.oracle.com/bpel/workflow/common xmlns:task=http://xmlns.oracle.com/bpel/workflow/task xmlns:tas1="http://xmlns.oracle.com/bpel/workflow/TaskEvidenceService">
<soapenv:Header/>
<soapenv:Body>
<tas:updateTaskOutcome>
<com:workflowContext>
<com:credential>
<com:login>humantask</com:login>
<com:password>Welcome01</com:password>
</com:credential>
</com:workflowContext>
<tas:taskId>3e80842f-75c9-4e3d-b441-a7f339df4109</tas:taskId>
<tas:outcome>OK</tas:outcome>
</tas:updateTaskOutcome>
</soapenv:Body>
</soapenv:Envelope>
*/
public static void updateWorkflow() throws WorkflowErrorMessage,
StaleObjectFaultMessage {
//启动一个TaskService服务
TaskService_Service taskService_Service = new TaskService_Service();
TaskService taskService = taskService_Service.getTaskServicePort();
//登陆验证启动一个taskQueryService服务
TaskQueryService_Service taskQueryService_Service = new TaskQueryService_Service();
TaskQueryService taskQueryService = taskQueryService_Service.getTaskQueryServicePort();
//UpdateTaskOutcomeType
UpdateTaskOutcomeType updateTaskOutcomeType = new UpdateTaskOutcomeType();
//登录验证
WorkflowContextType workflowContextType = new WorkflowContextType();
CredentialType credentialType = new CredentialType();
credentialType.setLogin("weblogic");
credentialType.setPassword("xxx");
try {
workflowContextType = taskQueryService.authenticate(credentialType);
} catch (WorkflowErrorMessage e) {
e.printStackTrace();
}
//根据taskId查询相关task
TaskDetailsByIdRequestType taskDetailsByIdRequestType = new TaskDetailsByIdRequestType();
taskDetailsByIdRequestType.setTaskId("3e80842f-75c9-4e3d-b441-a7f339df4109");
taskDetailsByIdRequestType.setWorkflowContext(workflowContextType);
Task task;
try {
task = taskQueryService.getTaskDetailsById(taskDetailsByIdRequestType);
} catch (WorkflowErrorMessage e) {
e.printStackTrace();
}
//update
updateTaskOutcomeType.setOutcome("OK");
updateTaskOutcomeType.setTaskId(task.getSystemAttributes().getTaskId());
updateTaskOutcomeType.setTask(task);
updateTaskOutcomeType.setWorkflowContext(workflowContextType);
//
Task task_update;
task_update = taskService.updateTaskOutcome(updateTaskOutcomeType)
}
}
例子(二):
package com.ui.bpm;
import com.proxy.bpm.query.TaskQueryService;
import com.proxy.bpm.query.TaskQueryService_Service;
import com.proxy.bpm.query.WorkflowErrorMessage;
import com.proxy.bpm.service.TaskServiceContextTaskBaseType;
import com.proxy.bpm.service.TaskService_Service;
import com.proxy.bpm.service.UpdateTaskOutcomeType;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import oracle.adf.share.logging.ADFLogger;
import oracle.bpel.services.workflow.common.model.CredentialType;
import oracle.bpel.services.workflow.common.model.WorkflowContextType;
import oracle.bpel.services.workflow.query.model.TaskDetailsByIdRequestType;
import oracle.bpel.services.workflow.task.model.Task;
public class Test1 {
//记录日志ADFLogger
// ADF日志级别
// 1. SEVERE 严重的错误,导致系统中止。期望这类信息能立即显示在状态控制台上
// 2. WARNING 潜在问题的级别,它是不符合预期的状态但还不至于成为“错误”,例如使用了废弃的API等等。期望这类信息能立即显示在状态控制台上
// 3. INFO 运行时产生的有意义的一些信息,主要用于报告消息的目的。期望这类信息能立即显示在状态控制台上
// 4. CONFIG 静态配置消息,用来输出一些系统配置信息。期望这类信息仅被写入日志文件中
// 5. FINE 指示提供跟踪信息,简单输出一些跟踪信息。期望这类信息仅被写入日志文件中
// 6. FINER 指示提供一条相当详细的跟踪消息。期望这类信息仅被写入日志文件中
// 7. FINEST 指示提供一条最详细的跟踪消息。期望这类信息仅被写入日志文件中
private static ADFLogger logger = ADFLogger.createADFLogger(Test1.class);
//【一般流程的基本操作】
//对于BPM Server的使用者认证、人工查询、人工单内容变更所需要的service
//-------TaskService_Service/TaskService-----任务服务
//-------TaskQueryService_Service/taskQueryService-----任务查询
//*************之后就是各种各种的type了*******【参考XML】
//【从网上某处看来的,借鉴一下】
//一、初始化BPM Server连接。
//二、认证使用者。
//三、启动流程。
//四、查询task,填写相关信息,完成task
//注:通过authenticate()认证,连入BPM Server,通过queryTask()查询办事项,通过getTaskDetailByID()取出详细的pLayload资料,
// 接下来根据设计时所设置的outcome,调用updateTaskOutcome()将其review的结果指定APPROVE或者REJECT
//1、新建一个任务服务对象:TaskService_Service
public static TaskService_Service taskService_Service = new TaskService_Service();
//2、得到一个任务服务实例:TaskService
public static com.mgear.proxy.bpm.service.TaskService taskService = taskService_Service.getTaskServicePort();
public Test1() {
super();
}
/**
* function Test1
* 作用:更新流程
* 参数:动态数据Map
* return Boolean
* */
public static boolean updateFlow(Map map){
//新建一个原始任务服务运行环境对象:TaskServiceContextTaskBaseType
TaskServiceContextTaskBaseType baseType = new TaskServiceContextTaskBaseType();
//3、新建一个任务服务查询对象:TaskQueryService_Service
TaskQueryService_Service taskQueryService_Service = new TaskQueryService_Service();
//4、得到一个任务服务查询实例:TaskQueryService
TaskQueryService taskQueryService = taskQueryService_Service.getTaskQueryServicePort();
//定义一个Boolean
Boolean bool = true;
try{
//通过taskid得到当前的task
/*public static Task getTaskById(Map map){
* Task task =null;
* String taskid = map.get("TASKID").toString();
* //新建一个任务Task查询【通过Request参数taskid得到任务Task的详细数据】
* TaskDetailsByIdRequestType rType = new TaskDetailsByIdRequestType();
* //设置Task查询的taskid【当前任务的taskid】
* rType.setTaskId(taskid);
* //设置Task查询的流程运行环境:参数:那个操作者的操作领域【已登陆验证】
* rType.setWorkflowContext(cxt(taskQueryService, map));
* try{
* //查询得到当前Task
* task = taskQueryService.getTaskDetailsById(rType);
* }catch(WorkflowErrorMessage e){
*
* return task;
*
* }
}*/
Task task = TaskService.getTaskById(map);
//如果task不为空,执行
if(task != null){
TaskDetailsByIdRequestType detail = new TaskDetailsByIdRequestType();
detail.setTaskId(task.getSystemAttributes().getTaskId());
detail.setWorkflowContext(cxt(taskQueryService,map));
Task newTask = taskQueryService.getTaskDetailsById(detail);
//设置新Task的各种参数 getSystemMessageAttributes()页面得到的数据使用该函数----区别于getSystemAttributes()系统属性
newTask.getSystemMessageAttributes().setTextAttribute3(map.get("USERS").toString());
newTask.getSystemMessageAttributes().setTextAttribute6(map.get("SENDUSER").toString());
newTask.getSystemMessageAttributes().setTextAttribute7(map.get("SBSJ").toString());
newTask.getSystemMessageAttributes().setTextAttribute10(map.get("XYJDDM").toString());
newTask.getSystemMessageAttributes().setTextAttribute5(map.get("XYJDZT").toString());
baseType.setTask(newTask);//设置新流程task
baseType.setWorkflowContext(cxt(taskQueryService,map));//设置流程运行环境,这一步估计是为了确保是那个人来操作【有权限】
Task newTask2 = null;
newTask2 = taskService.updateTask(baseType);//更新task
UpdateTaskOutcomeType ott = new UpdateTaskOutcomeType();//更新task之后输出的东西【四个参数】
ott.setOutcome(map.get("OUTCOME").toString());//outcome,确定流程下一步走向哪里
ott.setTask(newTask);
ott.setTaskId(newTask.getSystemAttributes().getTaskId());
ott.setWorkflowContext(cxt(taskQueryService,map));
Task task1 = null;
task1 = taskService.updateTaskOutcome(ott);//更新输出
}
else{
bool = false;
}
}catch(Exception e){
bool=false;
logger.severe("WorkFlowUpdate_exception", e);
}
return bool;
}
//操作者登陆、验证、取得运行环境【有效的状态下】
public static WorkflowContextType cxt(TaskQueryService taskQueryService,Map m) throws WorkflowErrorMessage{
//登陆的凭证
CredentialType ct = new CredentialType();
//取得用户名/密码
ct.setLogin(m.get("CLR").toString());
ct.setPassword(m.get("PWD").toString());
//定义一个流程运行环境
WorkflowContextType context = null;
//验证
context = taskQueryService.authenticate(ct);]
return context;
}
}
package com.jeqo.htweb.view;
import com.oracle.xmlns.bpel.workflow.task.Humantask1PayloadType;
import com.oracle.xmlns.bpel.workflow.taskqueryservice.TaskQueryService;
import com.oracle.xmlns.bpel.workflow.taskqueryservice.TaskQueryService_Service;
import com.oracle.xmlns.bpel.workflow.taskqueryservice.WorkflowErrorMessage;
import com.oracle.xmlns.bpel.workflow.taskservice.StaleObjectFaultMessage;
import com.oracle.xmlns.bpel.workflow.taskservice.TaskService;
import com.oracle.xmlns.bpel.workflow.taskservice.TaskServiceContextTaskBaseType;
import com.oracle.xmlns.bpel.workflow.taskservice.TaskService_Service;
import com.oracle.xmlns.bpel.workflow.taskservice.UpdateTaskOutcomeType;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import oracle.bpel.services.workflow.common.model.WorkflowContextType;
import oracle.bpel.services.workflow.query.model.TaskDetailsByIdRequestType;
import oracle.bpel.services.workflow.query.model.WorkflowContextRequestType;
import oracle.bpel.services.workflow.task.model.Task;
import org.w3c.dom.Node;
/**
*
* @author Jorge Quilcate
*/
@ManagedBean
@ViewScoped
public class ApprovalTaskBean {
private Task task;
private Humantask1PayloadType payload;
private WorkflowContextType workflowContext;
private JAXBElement<Humantask1PayloadType> payloadObject;
@PostConstruct
public void init() {
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
String taskId = request.getParameter("bpmWorklistTaskId");
String context = request.getParameter("bpmWorklistContext");
System.out.println("Task ID: " + taskId);
System.out.println("Context: " + context);
TaskQueryService_Service taskQueryServiceClient = new TaskQueryService_Service();
TaskQueryService taskQueryService = taskQueryServiceClient.getTaskQueryServicePort();
try {
WorkflowContextRequestType getWorkflowContextRequest = new WorkflowContextRequestType();
getWorkflowContextRequest.setToken(context);
workflowContext = taskQueryService.getWorkflowContext(getWorkflowContextRequest);
TaskDetailsByIdRequestType getTaskDetailsByIdRequest = new TaskDetailsByIdRequestType();
getTaskDetailsByIdRequest.setTaskId(taskId);
getTaskDetailsByIdRequest.setWorkflowContext(workflowContext);
task = taskQueryService.getTaskDetailsById(getTaskDetailsByIdRequest);
Node payloadNode = (Node) task.getPayload();
JAXBContext jaxbContext = JAXBContext.newInstance("com.oracle.xmlns.bpel.workflow.task");
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
payloadObject = (JAXBElement<Humantask1PayloadType>) unmarshaller.unmarshal(payloadNode, Humantask1PayloadType.class);
payload = payloadObject.getValue();
} catch (WorkflowErrorMessage | JAXBException ex) {
Logger.getLogger(ApprovalTaskBean.class.getName()).log(Level.SEVERE, null, ex);
}
}
public String approve() {
try {
payloadObject.setValue(payload);
JAXBContext jaxbContext = JAXBContext.newInstance("com.oracle.xmlns.bpel.workflow.task");
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.marshal(payloadObject, (Node) task.getPayload());
TaskService_Service taskServiceClient = new TaskService_Service();
TaskService taskService = taskServiceClient.getTaskServicePort();
TaskServiceContextTaskBaseType updateTaskRequest = new TaskServiceContextTaskBaseType();
updateTaskRequest.setTask(task);
updateTaskRequest.setWorkflowContext(workflowContext);
task = taskService.updateTask(updateTaskRequest);
UpdateTaskOutcomeType updateTaskOutcomeRequest = new UpdateTaskOutcomeType();
updateTaskOutcomeRequest.setOutcome("APPROVE");
updateTaskOutcomeRequest.setTask(task);
updateTaskOutcomeRequest.setWorkflowContext(workflowContext);
taskService.updateTaskOutcome(updateTaskOutcomeRequest);
} catch (StaleObjectFaultMessage | com.oracle.xmlns.bpel.workflow.taskservice.WorkflowErrorMessage | JAXBException ex) {
Logger.getLogger(ApprovalTaskBean.class.getName()).log(Level.SEVERE, null, ex);
}
return "completed";
}
public String reject() {
return "completed";
}
public Humantask1PayloadType getPayload() {
return payload;
}
public void setPayload(Humantask1PayloadType payload) {
this.payload = payload;
}
}