工做流JBPM

jbpm3

共分爲12種節點

1.node節點:若是該節點沒有定義ACTION,則流轉到該節點時不會停留,會繼續往下走,若是定義ACTION,執行完ACTION後會停在該節點上,調用 token.signal後繼續流轉
node節點支持事件 node-enter,node-leave
2.state 節點 調用 token.signal後繼續流轉,不然會停下
3.tasknode 節點 該節點中能夠建立多個任務 task 一個task產生一個任務實例沒定義task會自動流轉 state 節點只能建立一個task

TaskMgmtInstance tmg = pi.getTaskMgmtInstance(); TaskInstance startTask = tmg.createStartTaskInstance();


任務實例生命週期 建立--開始--完成 取消--掛起

 

    任務實例   掛起   表taskinstance    issuspended = true   掛起後不能操做  查詢不到node

                                      isopen = true     是否關閉  關閉後不能操做 查詢不到數據庫



action 當節點往下走的時候觸發當前的節點的action

若是一個節點有多個任務,調用signal 會隨機進入一個tasknode 根據流程實例獲取token 根據token獲取node,根據node獲取 levaingTranstaion, 可執行的Transtaion列表

流程節點條件判斷有三種方式1.在transtation 中定義變量,2在decode中定義表達式,在hadler中返回transtation ,3 繼承 JbpmVariableResolver(推薦)



jbpm 本身解析流程實例變量 繼承 JbpmVariableResolver 目的 不能寫那麼多個handler

查詢單獨非配給本身的私有任務列表 context.getTaskMgmtSession.findTaskInstances(actorid);
查詢所屬組的任務實例 context.getTaskMgmtSession.findPooledTaskInstance(actorid);
兩個集合要合併 才能查看該人的全部任務

查詢還沒有結束的任務實例
Collection taskInstances = executionContext.getTaskMgmtInstance().getUnfinishedTasks(tonke);


會籤

<task-node name = "審批" create-tasks="no" signal = "first" end-tasks="yes">
<event type="node-enter">

<action class="">

</action>
<task name="審批">

</task>

<task name="審批">
<event type = "task-end"> 在每一個任務實例被結束的時候
<action class="tActionHandler">
</action>
<event>
</task>


end-tasks="yes"     有一我的審批經過後繼續流轉,其餘人的任務都變成已完成



TaskMgmtInstance tmi = executionContext.getTaskMgmtInstance();
TaskNode tasknode = (TaskNode )executionContext.getNode();

Task task = tasknode.getTasks().iterator.next();
for(){
TaskInstance ti = tmi.createTaskInstance(task,executionContext);
ti.setActorId(username);

}


//----------------
Conllection allTaskInstances = tmi.getTaskInstances();//獲取當前流程實例下的全部任務實例

//獲取當前流程實例當前Token 的未完成的任務實例
Conllection unfinishedTasks = tmi.getUnfinishedTasks(currentToken);



利用變量表達式實現自由節點,本身解釋變量JbpmVariableResolver





        //獲取配置文件對象
        JbpmConfiguration configuration = JbpmConfiguration.getInstance();
        //根據配置文件對象獲取jbpm上下文
        JbpmContext context = configuration.createJbpmContext();
        //根據上下文對象獲取與jbpm表打交道的GraphSession
        GraphSession graphSession = context.getGraphSession();
        //根據GraphSession獲取流程定義對象
        ProcessDefinition processDefinition = graphSession.findLatestProcessDefinition("sqj");
        //根據流程模板建立流程實例
        ProcessInstance instance = processDefinition.createProcessInstance();
        //流程實例ID
        System.out.println(instance.getId());
        //根據流程實例獲取流程實例上下文對象
        
        ContextInstance contextInstance = instance.getContextInstance();
        contextInstance.setVariable("username", "張小三");
        //根據流程實例獲取任務管理器
        TaskMgmtInstance taskMgmtInstance = instance.getTaskMgmtInstance();
        
        //在開始節點中建立任務setActorId設置用戶,不能在handler中設置,在handler中設置不上
        context.setActorId("張小三");
        //SecurityHelper.getAuthenticatedActorId();
        //手動進入開始任務
        TaskInstance taskInstance = taskMgmtInstance.createStartTaskInstance();
        //任務實例ID
        System.out.println(taskInstance.getId());
        //往當前任務實例中添加任務實例參數
        taskInstance.setVariable("nextname", "李四");
        //結束任務向下流轉
        //taskInstance.setActorId("張小三");
        taskInstance.end("李四審批");
        context.close();
 
 
        UserHandler


        //獲取當前token
        Token token = executionContext.getToken();
        //根據當前token獲取節點
        Node node = token.getNode();
        System.out.println(node.getName());
        if(node.getName().equals("開始")){
            String tusername = (String) executionContext.getVariable("username");
            System.out.println(tusername);
            assignable.setActorId(tusername);
            //獲取當前的流程實例
            //TaskInstance taskInstance = executionContext.getTaskInstance();
            //taskInstance.setActorId(tusername);
        }else{
            String tusername = (String) executionContext.getVariable("nextname");
            System.out.println(tusername);
            //獲取當前的流程實例
            TaskInstance taskInstance = executionContext.getTaskInstance();
            taskInstance.setActorId(tusername);
            assignable.setActorId(tusername);
        }

 















public
static void main(String[] args) { //建立流程模板 ProcessDefinition processDefinition = ProcessDefinition.parseXmlResource("helloword/processdefinition.xml"); //建立流程實例 ProcessInstance processInstance = new ProcessInstance(processDefinition); //獲取一個流程實例的上下文對象 //ContextInstance contextInstance = processInstance.getContextInstance(); //上下文對象存放臨時流程變量和獲取同名會覆蓋 //contextInstance.setTransientVariable("", ""); //contextInstance.addVariables(variables); //根據流程實例建立開始節點的任務實例 //TaskInstance taskInstance = processInstance.getTaskMgmtInstance().createStartTaskInstance(); //向任務實例當中寫入先關變量 //taskInstance.setVariable("money_count", ""); //結束任務實例流程的Token就進入下一節點 //taskInstance.end(); //流程節點 Token token = processInstance.getRootToken(); Node node = token.getNode(); //node節點不會觸發 System.out.println(node.getName()); //節點向下流轉一步 token.signal(); System.out.println(node.getName()); //判斷是否結束 //token.getProcessInstance().hasEnded(); //單例,線程安全,配置文件對象 JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance(); //主要做用建立jbpmContext上下文對象//發佈流程到數據庫 JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext(); //從當前線程中獲取上下文對象 //JbpmContext jbpmContext1 = jbpmConfiguration.getCurrentJbpmContext(); //建立數據庫表 從新調用會從新建立 //jbpmConfiguration.createSchema(); //刪除數據庫表 //jbpmConfiguration.dropSchema(); //獲取系統裏的任務調度服務對象 //jbpmConfiguration.getJobExecutor(); //開始系統的任務調度服務 //jbpmConfiguration.startJobExecutor(); //jbpmContext.getTaskList(); //根據當前人ID獲取任務列表 jbpmContext.getTaskList(""); //根據任務ID獲取任務節點 TaskInstance instance = jbpmContext.getTaskInstance(11); instance.end("贊成"); //根據最新的流程名稱獲取流程模板 //ProcessDefinition lastDefinition = jbpmContext.getGraphSession().findLatestProcessDefinition("helloword"); }
//發佈流程模板
        String path = "E:/work/hello.zip";
        
        JbpmContext context = JbpmConfiguration.getInstance().createJbpmContext();
        
        InputStream inputStream = new FileInputStream(new File(path));
        
        ZipInputStream zipInputStream = new ZipInputStream(inputStream);
        
        ProcessDefinition processDefinition = ProcessDefinition.parseParZipInputStream(zipInputStream);
        context.deployProcessDefinition(processDefinition);
        
        zipInputStream.close();
        inputStream.close();
        context.close();

 

        //建立JBPM數據庫表
    public static void createDB(){
        //JbpmConfiguration configuration = JbpmConfiguration.getInstance();
        JbpmConfiguration configuration = JbpmConfiguration.getInstance("hibernate.cfg.xml");
        //configuration.createSchema();
    }
    
    
    /**
     * 部署流程文件
     * @param path
     */
    public static void depFlow(String path){
        //String path = "E:/liucheng/qingjia.zip";
        JbpmContext context = null;
        InputStream inputStream = null;
         ZipInputStream zipInputStream = null;
        try {
            context = JbpmConfiguration.getInstance().createJbpmContext();
            inputStream = new FileInputStream(new File(path));
            zipInputStream = new ZipInputStream(inputStream);
            ProcessDefinition processDefinition = ProcessDefinition.parseParZipInputStream(zipInputStream);
            context.deployProcessDefinition(processDefinition);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
             try {
                zipInputStream.close();
                inputStream.close();
                context.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
                
        }
        
    }
    
    
    /**
     * 開啓流程
     * @param flowName
     */
    public static void startFlow(String flowName){
        JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
        JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
        GraphSession graphSession = jbpmContext.getGraphSession();
        ProcessDefinition processDefinition = graphSession.findLatestProcessDefinition(flowName);
        ProcessInstance processInstance = new ProcessInstance(processDefinition);
        ContextInstance contextInstance = processInstance.getContextInstance();
        contextInstance.createVariable("name", "張三");
        processInstance.signal();
        
    }
    
    public static void startFlow2(String flowName){
        JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
        JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
        GraphSession graphSession = jbpmContext.getGraphSession();
        ProcessDefinition processDefinition = graphSession.findLatestProcessDefinition(flowName);
        ProcessInstance pi = processDefinition.createProcessInstance();
        TaskMgmtInstance tmg = pi.getTaskMgmtInstance();
        TaskInstance startTask = tmg.createStartTaskInstance();
        startTask.setVariableLocally("JitTaskVar", "");
        startTask.end();
    }
    
    
    
    /**
     * 獲取最新的全部流程模板
     * @return
     */
    public static List<ProcessDefinition> getAllLastProcessDefinitions(){
        JbpmConfiguration jbpmConfiguration = JbpmConfiguration.getInstance();
        JbpmContext jbpmContext = jbpmConfiguration.createJbpmContext();
        GraphSession graphSession = jbpmContext.getGraphSession();
        List<ProcessDefinition> processDefinitions = graphSession.findLatestProcessDefinitions();
        for (ProcessDefinition processDefinition : processDefinitions) {
            System.out.println("流程ID:   "+processDefinition.getId()+"流程版本:    "+processDefinition.getVersion()+"  流程名稱"+processDefinition.getName());
        }
        jbpmContext.close();
        return processDefinitions;
    }
    
    /**
     * 獲取當前人的任務列表
     * @param actorId
     * @return
     */
    public static List<Task> getAllTask(String actorId){
        JbpmConfiguration configuration = JbpmConfiguration.getInstance();
        JbpmContext context = configuration.createJbpmContext();
        TaskMgmtSession mgmtSession = context.getTaskMgmtSession();
        List<Task> tasks = mgmtSession.findTaskInstances(actorId);
        context.close();
        return tasks;
    }
    
    /**
     * 獲取全部的流程版本
     * @return
     */
    public static List<ProcessDefinition> getAllDefinitions(){
        JbpmConfiguration configuration = JbpmConfiguration.getInstance();
        JbpmContext context = configuration.createJbpmContext();
        GraphSession graphSession = context.getGraphSession();
        List<ProcessDefinition> definitions = graphSession.findAllProcessDefinitions();
        for (ProcessDefinition processDefinition : definitions) {
            System.out.println("流程ID:   "+processDefinition.getId()+"流程版本:    "+processDefinition.getVersion()+"  流程名稱"+processDefinition.getName());
        }
        context.close();
        return definitions;
    }
    
    
    /**
     * 獲取當前流程的全部版本
     * @return
     */
    public static List<ProcessDefinition> getAllDefinitions(String defName){
        JbpmConfiguration configuration = JbpmConfiguration.getInstance();
        JbpmContext context = configuration.createJbpmContext();
        GraphSession graphSession = context.getGraphSession();
        List<ProcessDefinition> definitions = graphSession.findAllProcessDefinitionVersions(defName);
        for (ProcessDefinition processDefinition : definitions) {
            System.out.println("流程ID:   "+processDefinition.getId()+"流程版本:    "+processDefinition.getVersion()+"  流程名稱"+processDefinition.getName());
        }
        context.close();
        return definitions;
    }
相關文章
相關標籤/搜索