The following sample shows how to use the Web API to enable a process participant to complete a task by checking it in.
package teamworks.samples.scenarios;
import teamworks.samples.client.ClientUtilities;
import com.lombardisoftware.webapi.ComplexValue;
import com.lombardisoftware.webapi.ExternalActivity;
import com.lombardisoftware.webapi.ExternalActivityData;
import com.lombardisoftware.webapi.Parameter;
import com.lombardisoftware.webapi.SavedSearch;
import com.lombardisoftware.webapi.Task;
import com.lombardisoftware.webapi.Variable;
import com.lombardisoftware.webapi.WebAPI;
/**
* This scenario illustrate how a task can be completed (checked in). In order
* for this scenario to work, you must import the "Expense Approval" sample,
* create (start) an instance, and complete the "Create Expense Report" task
* using a Teamworks coach.
*
*/
public class Checkin extends Scenario {
public void testScenario() throws Exception {
// Create a new WebAPI client stub
WebAPI webAPI = getWebAPIFactory().newWebAPI();
// Retrieve the saved searches visible to this user
SavedSearch[] savedSearches = webAPI.getSavedSearches();
// Find the Inbox saved search
SavedSearch savedSearch = ClientUtilities.findByName(
savedSearches, "Inbox");
// Get the tasks for the saved search
Task[] tasks = webAPI.getTasksForSavedSearch(savedSearch.getId());
// Find a task for the "Approve or Reject Expense Report" activity
// which is implemented using an external activity
Task task = ClientUtilities.findByProperty(
tasks, "activityName", "Approve or Reject Expense Report");
if (task == null) {
System.out.println("No matching task found. Start a Expense Approval Process instance,");
System.out.println("and complete the Create Expense Report task before running this scenario.");
return;
}
// Get the external activity definition.
// This can be used to ensure that the inputs and outputs expected by
// the client are the same as those provided by the external activity
// used in the process.
ExternalActivity externalActivity = task.getAttachedExternalActivity().getExternalActivity();
// Find the ExpenseReportIn input parameter
Parameter inputParameter = ClientUtilities.findByName(
externalActivity.getInputParameters(),
"ExpenseReportIn");
System.out.println("Found ExpenseReportIn input parameter: " + inputParameter);
// Find the DecisionOut output parameter
Parameter outputParameter = ClientUtilities.findByName(
externalActivity.getOutputParameters(),
"DecisionOut");
System.out.println("Found DecisionOut output parameter: " + outputParameter);
// TODO: Illustrate using custom properties
// Retrieve the external activity data - this contains the actual variable values
ExternalActivityData data = task.getAttachedExternalActivity().getData();
// Find the input variable for the expense report
Variable inputVariable = ClientUtilities.findByName(
data.getVariables(),
"ExpenseReportIn");
// Get its value. Since this is a complex type, it must be
// unwrapped and converted into a DOM element for use by the client
String inputXml = ClientUtilities.toXMLString((ComplexValue) inputVariable.getValue());
System.out.println("Approve or Reject Expense Report:");
System.out.println(inputXml);
// Normally, the user would perform some work in the UI to enter
// their decision. Here we will do it directly.
String outputXml = "<Decision xmlns=\"urn:teamworks.samples.expenseapproval\">" +
"<Decision>Approved</Decision>" +
"<Reason>This expense was within limits set by company policy</Reason>" +
"</Decision>";
System.out.println();
System.out.println("Decision:");
System.out.println(outputXml);
Variable outputVariable = new Variable("DecisionOut", ClientUtilities.toComplexValue(outputXml));
// Checkin (complete) the task
webAPI.completeTask(task.getId(), new Variable[] {outputVariable});
}
}