6. Use OsWorkflow's API
Interface selection
OsWorkflow provides multiple implementations of the com.opensymphony.workflow.workflow interface, you can use them directly in your program.
(1) BasicWorkflow
BasicWorkflow does not support transaction processing, but it is possible to support transactions by overcrowding BasicWorkflow, which has been achieved in your persistence. BasicWorkflow is created in the following manner:
Workflow WF = New BasicWorkflow (UserName);
UserName is the username of the current request.
(2) EJBWORKFLOW
EJBWORKFlow uses EJB containers to manage transactions. This is configured in the ejb-jar.xml file. It is built like this:
Workflow wf = new ejbworkflow ();
You don't need to specify the username here because once the user is authorized, it automatically loads the username from the EJB container.
(3) OFBIZWORKFLOW
The only different parts of OFBIZWORKFLOW and BasicWorkflow are to support transaction processing through OFBIZ.
2. Create a new workflow
The following briefly describes how to create a new workflow with an OSWORKFLOW API. First, you should create a file that defines a workflow. Then, your program must know the value of the initialization step to perform the initialization of the process instance. Before you initialize a workflow, you have to create it, this, you can get the reference to this workflow. Below is routine code:
Workflow WF = New BasicWorkflow (UserName);
HashMap INPUTS = New hashMap ();
Inputs.put ("DOCTITLE", Request.getParameter ("Title");
Wf.initialize ("WorkflowName", 1, Inputs);
Note: Under normal circumstances, you should use a reference to a Workflow type, and should not be a reference to BasicWorkflow.
3. Executive action
In OSWORKFLOW, it is very simple to perform an action:
Workflow WF = New BasicWorkflow (UserName);
HashMap INPUTS = New hashMap ();
Inputs.put ("DOCTITLE", Request.getParameter ("Title");
Long id = long.parselong (Request.GetParameter ("WorkflowID"));
Wf.doAction (ID, 1, INPUTS);
4. Query
In OSWORKFLOW 2.6, a new ExpressionQuery API is introduced.
Note: Not all Workflow storage supports query. Currently, all Hibernate, JDBC and memory storage support queries. However, Hibernate stores not supporting the mixed type query (for example: a query of the query information of a history and current step). To perform a query, create a WorkflowExpressionQuery object and call the query method in the WorkflowExpressionQuery object.
Below is an example of a query:
// Get All Workflow Entry ID's for Which the Owner IS 'Testuser'new WorkflowExpressionQuery
New FieldExpression (FieldExpression.Owner, // Check the Owner Field
FieldExpression.current_steps, // Look in The Current Steps Context
FieldExpression.equals, // check equality
"Testuser"); // the equality value is 'testuser'
// Get All Workflow Entry ID's That Have the name 'myworkflow'
New WorkflowExpressionQuery
New FieldExpression (FieldExpression.name, // Check The Name Field
FieldExpression.Entry, // Look in The Entries Context
FieldExpression.equals, // check equality
'myworkflow')) // Equality value is 'myworkflow'
Here is an example of nested query:
// Get All finished Workflow Entries Where The Current Owner IS 'Testuser'
Expression Queryleft = New FieldExpression
FieldExpression.Owner,
FieldExpression.current_steps,
FieldExpression.equals, 'Testuser');
Expression Queryright = New FieldExpression
FieldExpression.status,
FieldExpression.current_steps,
FieldExpression.equals,
"Finished",
True);
WorkflowExpressionQuery Query = New WorkflowExpressionQuery
New NestedExpression (new expression [] {queryft, queryright},
NestedExpression.and));
.
// Get All Workflow Entries That Were finished in the Past
// OR are currently marked finished = new fieldExpression
FieldExpression.finish_date,
FieldExpression.history_steps,
FieldExpression.lt, new date ());
Expression Queryright = New FieldExpression
FieldExpression.status,
FieldExpression.current_steps,
FieldExpression.equals, "finished");
WorkflowExpressionQuery Query = New WorkflowExpressionQuery
New NestedExpression (new expression [] {queryft, queryright},
NestedExpression.or);