Monday, June 3, 2013

Oracle BPM 11.1.1.7 ps6 custom integration

3 years since my last post. Moving on, now I'm doing some Oracle stuff. Oracle BPM (Business Process Management) is an incredibly expensive, somewhat competent, moderately usable system which sits on its SOA stack, in its contrived Fusion Middleware layer. We're using it to build executable workflows for the complex processes which govern Universities. But we can't use the default view layers for our students for a whole bunch of reasons. So, since the students mostly need to see progress, we're going with our own custom view layer. BPM is service driven, so this shouldn't present a giant problem. There are two main elements going forward (not counting all the fancy dan javascript and whatever): 1) A Model which encompasses all the service calls into the Oracle provided client API, and 2) A bunch of forms which will generate payloads to add into the tasks so that the engine can process them and proceed. Model:
 package code.model{  
  import scala.collection.JavaConversions._  
  import oracle.bpel.services.workflow.client._  
  import oracle.bpel.services.workflow.query._  
  import java.util.HashMap  
  import IWorkflowServiceClientConstants._  
  class Worklist(host:String,username:String,password:String, protocol:String = "SOAP"){  
   val client = protocol match {  
    case "SOAP" =>  
     val properties = new HashMap[CONNECTION_PROPERTY,java.lang.String]()  
     properties.put(CONNECTION_PROPERTY.SOAP_END_POINT_ROOT, "https://%s".format(host))  
     WorkflowServiceClientFactory.getWorkflowServiceClient(WorkflowServiceClientFactory.SOAP_CLIENT, properties, null)  
   }  
   def tasks ={  
    val queryService = client.getTaskQueryService  
    val workflowContext = queryService.authenticate(username,password.toCharArray,null)  
    val queryColumns = List("TASKID","TASKNUMBER","TITLE","OUTCOME")  
    val optionalInfo = List(ITaskQueryService.OptionalInfo.PAYLOAD)  
    queryService.queryTasks(workflowContext,  
     queryColumns,  
     optionalInfo,  
     ITaskQueryService.AssignmentFilter.MY_AND_GROUP,  
     null, //No keywords  
     null, //No custom predicate  
     null, //No special ordering  
     0,  //Do not page the query result  
     0)  
   }  
  }  
 }  
I'm including full import trails because Scala is really touchy about versions and I'd like people to be able to follow along if they need to. Like, you know, me in two years. The second thing is going to be working out the payloads. I know they're going to be XSDs sitting somewhere in or around my metadata repository. I just haven't worked out where yet.

No comments:

Post a Comment