jbpm 5学習資料

7101 ワード

http://blog.csdn.net/howareyoutodaysoft/article/details/8062743
jbpm 5応用錦集
1 jbpm 5知識庫をロードする
        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
                .newKnowledgeBuilder();
        kbuilder.add(
                ResourceFactory.newClassPathResource("HumanTestUser.bpmn"),
                ResourceType.BPMN2);
        KnowledgeBase kbase = kbuilder.newKnowledgeBase(); 
2 jbpm 5作成セッション
      
StatefulKnowledgeSession sSession= kbase.newStatefulKnowledgeSession();
3 jbpm 5登録人工サービス
       HornetQHTWorkItemHandler sHumanTaskHandler = new HornetQHTWorkItemHandler(sSession);
        sSession.getWorkItemManager().registerWorkItemHandler("Human Task",
                sHumanTaskHandler);

        SyncTaskServiceWrapper sTaskService = new SyncTaskServiceWrapper(new AsyncHornetQTaskClient(
                "HumanTaskExample-testClient"));
        sTaskService.connect("127.0.0.1", 5445);
4 jbpm 5起動フロー
           //          
            Map<String, Object> params = new HashMap<String, Object>();
            params.put("user", username);
            sSession.startProcess("defaultPackage.HumanTestUser", params);
5 jbpm 5ユーザ名から現在必要な人工タスクを取得する
            List<TaskSummary> taskes = sTaskService
                    .getTasksAssignedAsPotentialOwner(username, "en-UK");
            for (TaskSummary task : taskes) {
                //       
                task.getName();
               //     ID
                task.getId();
            }
6 jbpm 5人工タスクのパラメータを取得します。
         //    ID    
        Task task = sTaskService.getTask(taskInfo.getTaskID());
        if (task != null)
        {
            //            taskInfo ,taskInfo                
            taskInfo.setTaskName(task.getNames().get(0).getText());
            //   task   
            Object input = null;
            long contentId = task.getTaskData().getDocumentContentId();
            if (contentId != -1)
            {
                //         
                Content content = sTaskService.getContent(contentId);
                input = ContentMarshallerHelper.unmarshall(task.getTaskData().getDocumentType(), content.getContent(),
                        sHumanTaskHandler.getMarshallerContext(), null);
                //       Map<String,Object>,        HttpServletRequest 
                HttpServletRequest request = ServletActionContext.getRequest();
                if (input instanceof Map<?, ?>)
                {
                    Map<?, ?> map = (Map<?, ?>) input;
                    for (Object obj : map.keySet())
                    {
                        request.setAttribute(obj.toString(), map.get(obj).toString());
                        System.out.println("key: " + obj.toString() + "   value: " + map.get(obj).toString());
                    }
                }
            }
        }
7 jbpm 5から人工的な任務を完成します。
           HttpServletRequest request = ServletActionContext.getRequest();
            String username = (String) request.getSession().getAttribute("username");
            if (taskInfo != null)
            {
                //  taskID        
                Task task = sTaskService.getTask(taskInfo.getTaskID());
                //      
                sTaskService.start(task.getId(), username);
                //                  
                Map<String, Object> results = new HashMap<String, Object>();
                for (Object key : request.getParameterMap().keySet())
                {
                    results.put(key.toString(), request.getParameter(key.toString()));
                }
                ContentData contentData = ContentMarshallerHelper.marshal(results,
                        sHumanTaskHandler.getMarshallerContext(), null);
                //      
                sTaskService.complete(task.getId(), username, contentData);
            }
8 jbpm 5フローチャートグラフィックスモニタ
           Collection<ProcessInstance> processes = sSession.getProcessInstances();
        //           ,          
        if (processes.size() == 0)
        {
            //          request 
            HttpServletRequest request = ServletActionContext.getRequest();
            request.setAttribute("x", "582");
            request.setAttribute("y", "92");
            request.setAttribute("width", "48");
            request.setAttribute("height", "48");
            return Action.SUCCESS;
        }
        //           
        ProcessInstance process = processes.iterator().next();
        if (process instanceof RuleFlowProcessInstance)
        {            
            RuleFlowProcessInstance instance = (RuleFlowProcessInstance) process;
            //           ,       request 
            for (NodeInstance node : instance.getNodeInstances())
            {
                Map<String, Object> data = node.getNode().getMetaData();
                HttpServletRequest request = ServletActionContext.getRequest();
                request.setAttribute("x", data.get("x").toString());
                request.setAttribute("y", data.get("y").toString());
                request.setAttribute("width", data.get("width").toString());
                request.setAttribute("height", data.get("height").toString());
            }
        }
   jspページのコードは以下の通りです。
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Sign On</title>
</head>

<body>
    <!--           -->
    <img src="../example/apply/HumanTestUser-image.png"
        style="position: absolute; left: 0px; top: 0px;">
        <!--           -->
    <s:div
        style="position: absolute; border: 2px solid red; left: %{#request.x}px; top: %{#request.y}px; width: %{#request.width}px; height: %{#request.height}px;"></s:div>
</body>
</html>