Tuesday, November 12, 2013

#285 Updating BPM task priority via Java API

Scenario:










I deploy this simple process

I then map the roles as follows -






Then I create a ws proxy to programmatically instantiate a BPM instance.
Essentially, what's covered in post #283.













I add the necessary code to the ...PortClient


















Test - check em to see that an instance has been created.






































Now we need to update this from priority 3 to 1.

First I use the API to query the current tasks for jcooper -

Method: getTaskDetails()

-----------------------------------------------------------------

    public String getTaskdetails(String user, String pwd) {
        System.out.println("getTaskdetails()");
        Map properties = new HashMap();
        properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_PROVIDER_URL,
                       "t3://localhost:7001");
        properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_SECURITY_CREDENTIALS,
                       pwd);
        properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_SECURITY_PRINCIPAL,
                       user);

        try {
            //Create JAVA WorflowServiceClient
            IWorkflowServiceClient wfSvcClient =
                WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory.REMOTE_CLIENT,
                                                                      properties,
                                                                      null);

            //Get the task query service
            ITaskQueryService querySvc = wfSvcClient.getTaskQueryService();
            //Login as jcooper
            IWorkflowContext ctx =
                querySvc.authenticate(user, pwd.toCharArray(), null);
            //Set up list of columns to query
            List queryColumns = new ArrayList();
            queryColumns.add("TASKID");
            queryColumns.add("TASKNUMBER");
            queryColumns.add("TITLE");
            queryColumns.add("OUTCOME");
            //Query a list of tasks assigned to jcooper
            List tasks =
                querySvc.queryTasks(ctx, queryColumns, null, //Do not query additional info
                    ITaskQueryService.AssignmentFilter.MY_AND_GROUP, null, //No keywords
                    null, //No custom predicate
                    null, //No special ordering
                    0, //Do not page the query result
                    0);
            //Get the task service
            ITaskService taskSvc = wfSvcClient.getTaskService();
            //Loop over the tasks, outputting task information, and approving any
            //tasks whose outcome has not been set...
            System.out.println("getTaskdetails() nr of Tasks = " +
                               tasks.size());


            for (int i = 0; i < tasks.size(); i++) {
                System.out.println("In task loop...");
                Task task = (Task)tasks.get(i);
                int taskNumber = task.getSystemAttributes().getTaskNumber();
                String title = task.getTitle();
                String taskId = task.getSystemAttributes().getTaskId();
                String outcome = task.getSystemAttributes().getOutcome();
                int priority = task.getPriority();
                int taskNr = task.getSystemAttributes().getTaskNumber();
                String taskDefId =
                    task.getSystemAttributes().getTaskDefinitionId();
                System.out.println("In task loop... title/taskDefId = " +
                                   title + " / " + taskDefId);
                // Change priority from 3 to 1 for SimpleApprove

                System.out.println("Task #" + taskNumber + " (" + title +
                                   ") is " + outcome + " has priority " +
                                   priority + " Id = " + taskId + " taskNr= " +
                                   taskNr);
            }
        } catch (Exception e) {
            //Handle any exceptions raised here...
            System.out.println("Caught workflow exception: " + e.getMessage());
        }

        return "done";
    }

----------------------------------------------------------------------
This produces the following output -















Task 206277 is the one we just created.
TaskId is - 98f2fcc8-b3d1-4d65-a837-fb2e747763b4

Now I want to update this task to priority 1 -
So essentially I use the query service again, adding a predicate for the taskId -









I then use the updatePriority() method as shown below.




Test -














full method code -

    public String updateTaskPriority4Task(String myTaskId, int newPriority) {
        System.out.println("updateTaskPriority()");
        Map properties = new HashMap();
        properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_PROVIDER_URL,
                       "t3://localhost:7001");
        properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_SECURITY_CREDENTIALS,
                       "welcome1");
        properties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_SECURITY_PRINCIPAL,
                       "weblogic");

        try {
            //Create JAVA WorkflowServiceClient
            IWorkflowServiceClient wfSvcClient =
                WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory.REMOTE_CLIENT,
                                                                      properties,
                                                                      null);

            //Get the task query service
            ITaskQueryService querySvc = wfSvcClient.getTaskQueryService();
            //Login as jcooper
            IWorkflowContext ctx =
                querySvc.authenticate("jcooper", "welcome1".toCharArray(),
                                      null);
            //Set up list of columns to query
            List queryColumns = new ArrayList();
            queryColumns.add("TASKID");
            queryColumns.add("TASKNUMBER");
            queryColumns.add("TITLE");
            queryColumns.add("OUTCOME");
            Predicate pred = new Predicate(TableConstants.WFTASK_TASKID_COLUMN,
            Predicate.OP_EQ, myTaskId);
            //Query a list of tasks assigned to jcooper
            List tasks =
                querySvc.queryTasks(ctx, queryColumns, null, //Do not query additional info
                    ITaskQueryService.AssignmentFilter.MY_AND_GROUP, null, //No keywords
                    pred, //No custom predicate
                    null, //No special ordering
                    0, //Do not page the query result
                    0);
            //Get the task service
            ITaskService taskSvc = wfSvcClient.getTaskService();
            taskSvc.updatePriority(ctx, myTaskId, ITaskService.UpdatePriorityType.UPDATE, newPriority);

        } catch (Exception e) {
            //Handle any exceptions raised here...
            System.out.println("Caught workflow exception: " + e.getMessage());
        }

        return "done";
    }

---------------------------------------------------

Project Libraries -






























No comments: