To update a BPM task programmatically one can leverage BPM APIs. Here is a short example to update an acquired by field.
Find tasknumber, for this you need to issue a select query against WFTASK table.
E.g, let's find latest task for a given instance Id:
select taskNumber, acquiredBy from wftask
where compositeInstanceId=(instance Id)
order by taskNumber desc;
The java code itself. To have this working to you have to complete the prerequisite steps.
I forgot to mention, that this is tested with BPM 11.1.1.7.8.
package home.generic;
import java.util.HashMap;
import java.util.Map;
import oracle.bpel.services.workflow.StaleObjectException;
import oracle.bpel.services.workflow.WorkflowException;
import oracle.bpel.services.workflow.client.IWorkflowServiceClient;
import oracle.bpel.services.workflow.client.IWorkflowServiceClientConstants;
import oracle.bpel.services.workflow.client.WorkflowServiceClientFactory;
import oracle.bpel.services.workflow.query.ITaskQueryService;
import oracle.bpel.services.workflow.task.ITaskService;
import oracle.bpel.services.workflow.task.model.SystemAttributesType;
import oracle.bpel.services.workflow.task.model.Task;
import oracle.bpel.services.workflow.verification.IWorkflowContext;
public class UpdateTaskAssignees {
public static void main(String[] args) throws WorkflowException,
StaleObjectException {
String userid = "username";
String password = "password";
String serverUrl =
"t3://localhost:8001"; // host:port of the soa server
Map connProperties =
new HashMap();
connProperties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.CLIENT_TYPE,
WorkflowServiceClientFactory.REMOTE_CLIENT);
connProperties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_PROVIDER_URL,
serverUrl);
connProperties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
IWorkflowServiceClient wfSvcClient =
WorkflowServiceClientFactory.getWorkflowServiceClient(connProperties,
null, null);
IWorkflowContext ctx =
wfSvcClient.getTaskQueryService().authenticate(userid,
password.toCharArray(),
"jazn.com");
ITaskQueryService querySvc = wfSvcClient.getTaskQueryService();
ITaskService taskSvc = wfSvcClient.getTaskService();
// Get task by its tasknumber
Task currentTask = querySvc.getTaskDetailsByNumber(ctx, 239120);
SystemAttributesType types = currentTask.getSystemAttributes();
System.out.println("Currently task is acquired by: " +
types.getAcquiredBy());
types.setAcquiredBy("new_login");
currentTask.setSystemAttributes(types);
taskSvc.updateTask(ctx, currentTask);
}
}
Find tasknumber, for this you need to issue a select query against WFTASK table.
E.g, let's find latest task for a given instance Id:
select taskNumber, acquiredBy from wftask
where compositeInstanceId=(instance Id)
order by taskNumber desc;
The java code itself. To have this working to you have to complete the prerequisite steps.
I forgot to mention, that this is tested with BPM 11.1.1.7.8.
package home.generic;
import java.util.HashMap;
import java.util.Map;
import oracle.bpel.services.workflow.StaleObjectException;
import oracle.bpel.services.workflow.WorkflowException;
import oracle.bpel.services.workflow.client.IWorkflowServiceClient;
import oracle.bpel.services.workflow.client.IWorkflowServiceClientConstants;
import oracle.bpel.services.workflow.client.WorkflowServiceClientFactory;
import oracle.bpel.services.workflow.query.ITaskQueryService;
import oracle.bpel.services.workflow.task.ITaskService;
import oracle.bpel.services.workflow.task.model.SystemAttributesType;
import oracle.bpel.services.workflow.task.model.Task;
import oracle.bpel.services.workflow.verification.IWorkflowContext;
public class UpdateTaskAssignees {
public static void main(String[] args) throws WorkflowException,
StaleObjectException {
String userid = "username";
String password = "password";
String serverUrl =
"t3://localhost:8001"; // host:port of the soa server
Map
new HashMap
connProperties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.CLIENT_TYPE,
WorkflowServiceClientFactory.REMOTE_CLIENT);
connProperties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_PROVIDER_URL,
serverUrl);
connProperties.put(IWorkflowServiceClientConstants.CONNECTION_PROPERTY.EJB_INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
IWorkflowServiceClient wfSvcClient =
WorkflowServiceClientFactory.getWorkflowServiceClient(connProperties,
null, null);
IWorkflowContext ctx =
wfSvcClient.getTaskQueryService().authenticate(userid,
password.toCharArray(),
"jazn.com");
ITaskQueryService querySvc = wfSvcClient.getTaskQueryService();
ITaskService taskSvc = wfSvcClient.getTaskService();
// Get task by its tasknumber
Task currentTask = querySvc.getTaskDetailsByNumber(ctx, 239120);
SystemAttributesType types = currentTask.getSystemAttributes();
System.out.println("Currently task is acquired by: " +
types.getAcquiredBy());
types.setAcquiredBy("new_login");
currentTask.setSystemAttributes(types);
taskSvc.updateTask(ctx, currentTask);
}
}
No comments:
Post a Comment