Oracle-BPM(十)

代码下载: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;
    }
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值