Umumnya initiate task dilakukan melalui bpm workspace atau melalui web service atau melalui BPM API.
Berikut langkah-langkah untuk melakukan inisialisasi initiate task menggunakan BPM API
2. Gunakan oracle.bpm.client.BPMServiceClientFactory untuk mendapatkan service instance BPM
public static BPMServiceClientFactory getServiceClientFactory(String username, String password, String url) { Mapproperties = new HashMap (); properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.CLIENT_TYPE, WorkflowServiceClientFactory.REMOTE_CLIENT); properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_PROVIDER_URL, url); properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_SECURITY_PRINCIPAL, username); properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_SECURITY_CREDENTIALS, password); return BPMServiceClientFactory.getInstance(properties, null, null); }
3. Marshalling object JAXB ke dokumen XML (org.w3c.dom.Element)
public static Element marshallJaxbElementInitiateTask(Object obj) throws JAXBException, ParserConfigurationException, Exception { JAXBContext context = JAXBContext.newInstance(obj.getClass()); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); Document document = createDocument(); Element payload = createPayloadElement(document); marshaller.marshal(obj, document); Element elt = document.getDocumentElement(); payload.appendChild(elt); return payload; }
4. Lalu inisialisasi task dengan mengirim dokumen XML disertai ProjectName, ProcessName dan Version
public String initiateTask(String projectName, String processName, String version, Element payload) throws WorkflowException, Exception { // Get the authentication context IBPMContext ctx = processUtils_.getBPMContext(); // Check that current user is authorized to init the process String processDN = processUtils_.getInitableProcessDN(ctx, projectName, version, processName); if (processDN == null) { System.out.println("Process is not initable. Check deployment and privileges [user:" + ctx.getUser() + "][process:" + projectName + "/" + processName + "/" + version + "]"); return null; } // InstanceManagmentService supports process instance services including initiating a process IInstanceManagementService instanceSvc = processUtils_.getBPMServiceClient().getInstanceManagementService(); // Creates process and returns the task associated with the initiator human task in the process Task task = instanceSvc.createProcessInstanceTask(ctx, processDN); String taskId = task.getSystemAttributes().getTaskId(); int taskNumber = task.getSystemAttributes().getTaskNumber(); System.out.println("Initiator task [taskNumber:" + taskNumber + "][taskId:" + taskId + "]"); // Returned task is "sparse", re-fetch to be able to update it with payload and outcome task = processUtils_.getHwfServiceClient().getTaskQueryService().getTaskDetailsById(ctx, taskId); // Set the payload on the task task.setPayloadAsElement(payload); // HWF TaskService is used to update task ITaskService taskSvc = processUtils_.getHwfServiceClient().getTaskService(); // Update the task task = taskSvc.updateTask(ctx, task); // Update the outcome. For initiator task the "SUBMIT" outcome is the default and completes the activity taskSvc.updateTaskOutcome(ctx, task, ProcessUtils.INIT_TASK_SUBMIT_OUTCOME); System.out.println("Process Instance Id : " + task.getProcessInfo().getInstanceId()); return task.getProcessInfo().getInstanceId(); }
5. Berikut potongan code pada fungsi mainnya
public static void main(String[] args) { BPMServiceClientFactory cf = ProcessUtils.getServiceClientFactory("weblogic","welcome1","t3://localhost:7001"); ProcessUtils processUtils = new ProcessUtils(cf); String projectName = "Leave"; String processName = "LeaveProcess"; String version = "1.0"; TaskClient client = new TaskClient(processUtils); try { //create payload object CutiRequest inputType = new CutiRequest(); inputType.setApprovalId(100); inputType.setDocs("fileLocatiom"); inputType.setEmpID(100); inputType.setEmpNumber("empNumber"); inputType.setFullName("fullName"); inputType.setLocation("location"); inputType.setRemark("renark"); inputType.setTelNo("telNo"); SubmitLeaveTaskPayloadType obj = new SubmitLeaveTaskPayloadType(); obj.setCutiRequest(inputType); //create payload as jaxb element Element payload = ProcessUtils.marshallJaxbElementInitiateTask(obj); String processInstanceId = client.initiateTask(projectName, processName, version, payload); System.out.println(processInstanceId); } catch (WorkflowException e) { e.printStackTrace(); } catch (JAXBException e) { e.printStackTrace(); } catch (ParserConfigurationException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } }
Code ini terinspirasi dari java.net.
Semoga bermanfaat. Cheers!!!
No comments:
Post a Comment