How to retrieve task details with TWSearch

TWSearch

The JavaScript object of type TWSearch can be used to perform a search. It has three primary methods:
·         execute()
·         executeForProcessInstances()
·         executeForTasks()
The TWSearch object has a number of properties that are used to govern the data queried for and returned.
TWSearch.columns
The columns of data to be returned.
TWSearch.conditions
The queries to be executed (of type TWSearchCondition).
A call to TWSearch using the execute() method can return a TWSearchResults object.

Scenario:
User wants to get details about a task details to display on coaches. If you know the instance name and you would like to fetch details like who is holding the task, who assigned this task, if its open or closed, the task subject, priority etc.
Solution:
I have taken the business Object taskDetails as output variable of type BPM_Task.
BPM_Task has the following variables I have taken:
  taskId (String)
  businessData(String)
  assignedUser (String)
  receivedFromUser (String)
  closedByUser (String)
  assignedGroup (String)
  status (String)
  subject (String)
  priority (String)
  receivedDate (Date)
  receivedDateString (String)
  dueDate (Date)
  dueDateString (String)
  readDate (Date)
  readDateString (String)
  closeDate (Date)
  closeDateString (String)
  instanceId (String)

and input based on your search criteria it may be status, task id, instance id, priority so on..

The following are the codes for different search criteria:

Based on instanceName:
Here we got the requirement to search based on different instances generated from different business data. For this first I added + “tw.local.variable” in the instance name tab option in overview tab of the process. So that to differentiate the different instance name according to business data.
Solution Scripts:
var twSearch = new TWSearch();

var input20 = new TWSearchColumn();
input20.type = TWSearchColumn.Types.ProcessInstance
input20.name = TWSearchColumn.ProcessColumns.Name;

var taskId = new TWSearchColumn();
taskId.type = TWSearchColumn.Types.Task;
taskId.name = TWSearchColumn.TaskColumns.ID;

var taskAssignedToUser = new TWSearchColumn();
taskAssignedToUser.type = TWSearchColumn.Types.Task;
taskAssignedToUser.name = TWSearchColumn.TaskColumns.AssignedToUser;

var taskReceivedFromUser = new TWSearchColumn();
taskReceivedFromUser.type = TWSearchColumn.Types.Task;
taskReceivedFromUser.name = TWSearchColumn.TaskColumns.ReceivedFrom;
//Defining the columns of data that you want to retrieve//

var taskClosedByUser = new TWSearchColumn();
taskClosedByUser.type = TWSearchColumn.Types.Task;
taskClosedByUser.name = TWSearchColumn.TaskColumns.ClosedBy;

var taskAssignedToRole = new TWSearchColumn();
taskAssignedToRole.type = TWSearchColumn.Types.Task;
taskAssignedToRole.name = TWSearchColumn.TaskColumns.AssignedToRole;

var taskStatus = new TWSearchColumn();
taskStatus.type = TWSearchColumn.Types.Task;
taskStatus.name = TWSearchColumn.TaskColumns.Status;

var taskSubject = new TWSearchColumn();
taskSubject.type = TWSearchColumn.Types.Task;
taskSubject.name = TWSearchColumn.TaskColumns.Subject;

var taskPriority = new TWSearchColumn();
taskPriority.type = TWSearchColumn.Types.Task;
taskPriority.name = TWSearchColumn.TaskColumns.Priority;

var taskReceivedDate = new TWSearchColumn();
taskReceivedDate.type = TWSearchColumn.Types.Task;
taskReceivedDate.name = TWSearchColumn.TaskColumns.ReceivedDate;

var taskDueDate = new TWSearchColumn();
taskDueDate.type = TWSearchColumn.Types.Task;
taskDueDate.name = TWSearchColumn.TaskColumns.DueDate;

var taskReadDate = new TWSearchColumn();
taskReadDate.type = TWSearchColumn.Types.Task;
taskReadDate.name = TWSearchColumn.TaskColumns.ReadDate;

var taskCloseDate = new TWSearchColumn();
taskCloseDate.type = TWSearchColumn.Types.Task;
taskCloseDate.name = TWSearchColumn.TaskColumns.ClosedDate;

var instanceId = new TWSearchColumn();
instanceId.type = TWSearchColumn.Types.ProcessInstance;
instanceId.name = TWSearchColumn.ProcessInstanceColumns.ID;

var businessData= new TWSearchColumn();
businessData.type= TWSearchColumn.Types.BusinessData;
businessData.name="input2" ;

//MAking to array to return list //

twSearch.columns = new Array(input20, taskId, taskAssignedToUser, taskReceivedFromUser, taskClosedByUser, taskAssignedToRole, taskStatus, taskSubject, taskPriority, taskReceivedDate, taskDueDate, taskReadDate, taskCloseDate, instanceId,businessData);

// Defining the filtering conditions that you wish applied to a column//

var searchCondition = new TWSearchCondition();
searchCondition.column = input20;
searchCondition.operator = TWSearchCondition.Operations.Contains;
searchCondition.value = "Process";


twSearch.conditions = new Array(searchCondition);

//Define the sort order for the returned records//

twSearch.organizedBy = TWSearch.OrganizeByTypes.Task;

//Execute the search//

var results = twSearch.execute();

//Parsing the rows of the results into a list of Local variables//

if(results && results.rows && results.rows.length >= 1) {
tw.local.taskDetails = new tw.object.listOf.BPM_Task();
for (var i=0;i<results.rows.length;i++){
    var row = results.rows[i];
   
  
     tw.local.taskDetails[i]= new tw.object.BPM_Task();
    tw.local.taskDetails[i].input2 = row.values[0].toString();
    tw.local.taskDetails[i].taskId = row.values[1].toString();
    tw.local.taskDetails[i].assignedUser = row.values[2]?row.values[2].toString():null;
    tw.local.taskDetails[i].receivedFromUser = row.values[3]?row.values[3].toString():null;
    tw.local.taskDetails[i].closedByUser = row.values[4]?row.values[4].toString():null;
    tw.local.taskDetails[i].assignedGroup = row.values[5]?row.values[5].toString():null;
    tw.local.taskDetails[i].status = row.values[6]?row.values[6].toString():null;
    tw.local.taskDetails[i].subject = row.values[7]?row.values[7].toString():null;
    tw.local.taskDetails[i].priority = row.values[8]?row.values[8].toString():null;
    tw.local.taskDetails[i].receivedDate = row.values[9]?row.values[9]:null;
    tw.local.taskDetails[i].receivedDateString = tw.local.taskDetails.receivedDate?tw.local.taskDetails.receivedDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails[i].dueDate = row.values[10]?row.values[10]:null;
    tw.local.taskDetails[i].dueDateString = tw.local.taskDetails.dueDate?tw.local.taskDetails.dueDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails[i].readDate = row.values[11]?row.values[11]:null;
    tw.local.taskDetails[i].readDateString = tw.local.taskDetails.readDate?tw.local.taskDetails.readDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails[i].closeDate = row.values[12]?row.values[12]:null;
    tw.local.taskDetails[i].closeDateString = tw.local.taskDetails.closeDate?tw.local.taskDetails.closeDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails[i].instanceId = row.values[13]?row.values[13].toString():null;
    tw.local.taskDetails[i].businessData=row.values[14]?row.values[14].toString():null;
    }
    }


Based on Priority:

var twSearch = new TWSearch();

var input20 = new TWSearchColumn();
input20.type = TWSearchColumn.Types.ProcessInstance
input20.name = TWSearchColumn.ProcessColumns.Name;

var taskId = new TWSearchColumn();
taskId.type = TWSearchColumn.Types.Task;
taskId.name = TWSearchColumn.TaskColumns.ID;

var taskAssignedToUser = new TWSearchColumn();
taskAssignedToUser.type = TWSearchColumn.Types.Task;
taskAssignedToUser.name = TWSearchColumn.TaskColumns.AssignedToUser;

var taskReceivedFromUser = new TWSearchColumn();
taskReceivedFromUser.type = TWSearchColumn.Types.Task;
taskReceivedFromUser.name = TWSearchColumn.TaskColumns.ReceivedFrom;

var taskClosedByUser = new TWSearchColumn();
taskClosedByUser.type = TWSearchColumn.Types.Task;
taskClosedByUser.name = TWSearchColumn.TaskColumns.ClosedBy;

var taskAssignedToRole = new TWSearchColumn();
taskAssignedToRole.type = TWSearchColumn.Types.Task;
taskAssignedToRole.name = TWSearchColumn.TaskColumns.AssignedToRole;

var taskStatus = new TWSearchColumn();
taskStatus.type = TWSearchColumn.Types.Task;
taskStatus.name = TWSearchColumn.TaskColumns.Status;

var taskSubject = new TWSearchColumn();
taskSubject.type = TWSearchColumn.Types.Task;
taskSubject.name = TWSearchColumn.TaskColumns.Subject;

var taskPriority = new TWSearchColumn();
taskPriority.type = TWSearchColumn.Types.Task;
taskPriority.name = TWSearchColumn.TaskColumns.Priority;

var taskReceivedDate = new TWSearchColumn();
taskReceivedDate.type = TWSearchColumn.Types.Task;
taskReceivedDate.name = TWSearchColumn.TaskColumns.ReceivedDate;

var taskDueDate = new TWSearchColumn();
taskDueDate.type = TWSearchColumn.Types.Task;
taskDueDate.name = TWSearchColumn.TaskColumns.DueDate;

var taskReadDate = new TWSearchColumn();
taskReadDate.type = TWSearchColumn.Types.Task;
taskReadDate.name = TWSearchColumn.TaskColumns.ReadDate;

var taskCloseDate = new TWSearchColumn();
taskCloseDate.type = TWSearchColumn.Types.Task;
taskCloseDate.name = TWSearchColumn.TaskColumns.ClosedDate;

var instanceId = new TWSearchColumn();
instanceId.type = TWSearchColumn.Types.ProcessInstance;
instanceId.name = TWSearchColumn.ProcessInstanceColumns.ID;

var businessData= new TWSearchColumn();
businessData.type= TWSearchColumn.Types.BusinessData;
businessData.name="input2" ;

twSearch.columns = new Array(input20, taskId, taskAssignedToUser, taskReceivedFromUser, taskClosedByUser, taskAssignedToRole, taskStatus, taskSubject, taskPriority, taskReceivedDate, taskDueDate, taskReadDate, taskCloseDate, instanceId,businessData);

var searchCondition = new TWSearchCondition();
searchCondition.column = taskPriority;
searchCondition.operator = TWSearchCondition.Operations.Contains;
searchCondition.value = "High";

twSearch.conditions = new Array(searchCondition);

twSearch.organizedBy = TWSearch.OrganizeByTypes.Task;

var results = twSearch.execute();

if(results && results.rows && results.rows.length >= 1) {
tw.local.taskDetails = new tw.object.listOf.BPM_Task();
for (var i=0;i<results.rows.length;i++){
    var row = results.rows[i];
   
  
     tw.local.taskDetails[i]= new tw.object.BPM_Task();
    tw.local.taskDetails[i].input2 = row.values[0].toString();
    tw.local.taskDetails[i].taskId = row.values[1].toString();
    tw.local.taskDetails[i].assignedUser = row.values[2]?row.values[2].toString():null;
    tw.local.taskDetails[i].receivedFromUser = row.values[3]?row.values[3].toString():null;
    tw.local.taskDetails[i].closedByUser = row.values[4]?row.values[4].toString():null;
    tw.local.taskDetails[i].assignedGroup = row.values[5]?row.values[5].toString():null;
    tw.local.taskDetails[i].status = row.values[6]?row.values[6].toString():null;
    tw.local.taskDetails[i].subject = row.values[7]?row.values[7].toString():null;
    tw.local.taskDetails[i].priority = row.values[8]?row.values[8].toString():null;
    tw.local.taskDetails[i].receivedDate = row.values[9]?row.values[9]:null;
    tw.local.taskDetails[i].receivedDateString = tw.local.taskDetails.receivedDate?tw.local.taskDetails.receivedDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails[i].dueDate = row.values[10]?row.values[10]:null;
    tw.local.taskDetails[i].dueDateString = tw.local.taskDetails.dueDate?tw.local.taskDetails.dueDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails[i].readDate = row.values[11]?row.values[11]:null;
    tw.local.taskDetails[i].readDateString = tw.local.taskDetails.readDate?tw.local.taskDetails.readDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails[i].closeDate = row.values[12]?row.values[12]:null;
    tw.local.taskDetails[i].closeDateString = tw.local.taskDetails.closeDate?tw.local.taskDetails.closeDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails[i].instanceId = row.values[13]?row.values[13].toString():null;
    tw.local.taskDetails[i].businessData=row.values[14]?row.values[14].toString():null;
    }
    }

Based on Status:

  var twSearch = new TWSearch();

var input20 = new TWSearchColumn();
input20.type = TWSearchColumn.Types.ProcessInstance
input20.name = TWSearchColumn.ProcessColumns.Name;

var taskId = new TWSearchColumn();
taskId.type = TWSearchColumn.Types.Task;
taskId.name = TWSearchColumn.TaskColumns.ID;

var taskAssignedToUser = new TWSearchColumn();
taskAssignedToUser.type = TWSearchColumn.Types.Task;
taskAssignedToUser.name = TWSearchColumn.TaskColumns.AssignedToUser;

var taskReceivedFromUser = new TWSearchColumn();
taskReceivedFromUser.type = TWSearchColumn.Types.Task;
taskReceivedFromUser.name = TWSearchColumn.TaskColumns.ReceivedFrom;

var taskClosedByUser = new TWSearchColumn();
taskClosedByUser.type = TWSearchColumn.Types.Task;
taskClosedByUser.name = TWSearchColumn.TaskColumns.ClosedBy;

var taskAssignedToRole = new TWSearchColumn();
taskAssignedToRole.type = TWSearchColumn.Types.Task;
taskAssignedToRole.name = TWSearchColumn.TaskColumns.AssignedToRole;

var taskStatus = new TWSearchColumn();
taskStatus.type = TWSearchColumn.Types.Task;
taskStatus.name = TWSearchColumn.TaskColumns.Status;

var taskSubject = new TWSearchColumn();
taskSubject.type = TWSearchColumn.Types.Task;
taskSubject.name = TWSearchColumn.TaskColumns.Subject;

var taskPriority = new TWSearchColumn();
taskPriority.type = TWSearchColumn.Types.Task;
taskPriority.name = TWSearchColumn.TaskColumns.Priority;

var taskReceivedDate = new TWSearchColumn();
taskReceivedDate.type = TWSearchColumn.Types.Task;
taskReceivedDate.name = TWSearchColumn.TaskColumns.ReceivedDate;

var taskDueDate = new TWSearchColumn();
taskDueDate.type = TWSearchColumn.Types.Task;
taskDueDate.name = TWSearchColumn.TaskColumns.DueDate;

var taskReadDate = new TWSearchColumn();
taskReadDate.type = TWSearchColumn.Types.Task;
taskReadDate.name = TWSearchColumn.TaskColumns.ReadDate;

var taskCloseDate = new TWSearchColumn();
taskCloseDate.type = TWSearchColumn.Types.Task;
taskCloseDate.name = TWSearchColumn.TaskColumns.ClosedDate;

var instanceId = new TWSearchColumn();
instanceId.type = TWSearchColumn.Types.ProcessInstance;
instanceId.name = TWSearchColumn.ProcessInstanceColumns.ID;

var businessData= new TWSearchColumn();
businessData.type= TWSearchColumn.Types.BusinessData;
businessData.name="input2" ;

twSearch.columns = new Array(input20, taskId, taskAssignedToUser, taskReceivedFromUser, taskClosedByUser, taskAssignedToRole, taskStatus, taskSubject, taskPriority, taskReceivedDate, taskDueDate, taskReadDate, taskCloseDate, instanceId,businessData);

var searchCondition = new TWSearchCondition();
searchCondition.column = taskStatus;
searchCondition.operator = TWSearchCondition.Operations.Contains;
searchCondition.value = tw.local.status;

twSearch.conditions = new Array(searchCondition);

twSearch.organizedBy = TWSearch.OrganizeByTypes.Task;

var results = twSearch.execute();

if(results && results.rows && results.rows.length >= 1) {
tw.local.taskDetails = new tw.object.listOf.BPM_Task();
for (var i=0;i<results.rows.length;i++){
    var row = results.rows[i];
   
  
     tw.local.taskDetails[i]= new tw.object.BPM_Task();
    tw.local.taskDetails[i].input2 = row.values[0]?row.values[1].toString():null;
    tw.local.taskDetails[i].taskId = row.values[1].toString();
    tw.local.taskDetails[i].assignedUser = row.values[2]?row.values[2].toString():null;
    tw.local.taskDetails[i].receivedFromUser = row.values[3]?row.values[3].toString():null;
    tw.local.taskDetails[i].closedByUser = row.values[4]?row.values[4].toString():null;
    tw.local.taskDetails[i].assignedGroup = row.values[5]?row.values[5].toString():null;
    tw.local.taskDetails[i].status = row.values[6]?row.values[6].toString():null;
    tw.local.taskDetails[i].subject = row.values[7]?row.values[7].toString():null;
    tw.local.taskDetails[i].priority = row.values[8]?row.values[8].toString():null;
    tw.local.taskDetails[i].receivedDate = row.values[9]?row.values[9]:null;
    tw.local.taskDetails[i].receivedDateString = tw.local.taskDetails.receivedDate?tw.local.taskDetails.receivedDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails[i].dueDate = row.values[10]?row.values[10]:null;
    tw.local.taskDetails[i].dueDateString = tw.local.taskDetails.dueDate?tw.local.taskDetails.dueDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails[i].readDate = row.values[11]?row.values[11]:null;
    tw.local.taskDetails[i].readDateString = tw.local.taskDetails.readDate?tw.local.taskDetails.readDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails[i].closeDate = row.values[12]?row.values[12]:null;
    tw.local.taskDetails[i].closeDateString = tw.local.taskDetails.closeDate?tw.local.taskDetails.closeDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails[i].instanceId = row.values[13]?row.values[13].toString():null;
    tw.local.taskDetails[i].businessData=row.values[14]?row.values[14].toString():null;
    }
    }

The following is the one of the output results which shows the values from search:


Based on Task Id:
var twSearch = new TWSearch();

var taskId = new TWSearchColumn();
taskId.type = TWSearchColumn.Types.Task;
taskId.name = TWSearchColumn.TaskColumns.ID;

var taskAssignedToUser = new TWSearchColumn();
taskAssignedToUser.type = TWSearchColumn.Types.Task;
taskAssignedToUser.name = TWSearchColumn.TaskColumns.AssignedToUser;

var taskReceivedFromUser = new TWSearchColumn();
taskReceivedFromUser.type = TWSearchColumn.Types.Task;
taskReceivedFromUser.name = TWSearchColumn.TaskColumns.ReceivedFrom;

var taskClosedByUser = new TWSearchColumn();
taskClosedByUser.type = TWSearchColumn.Types.Task;
taskClosedByUser.name = TWSearchColumn.TaskColumns.ClosedBy;

var taskAssignedToRole = new TWSearchColumn();
taskAssignedToRole.type = TWSearchColumn.Types.Task;
taskAssignedToRole.name = TWSearchColumn.TaskColumns.AssignedToRole;

var taskStatus = new TWSearchColumn();
taskStatus.type = TWSearchColumn.Types.Task;
taskStatus.name = TWSearchColumn.TaskColumns.Status;

var taskSubject = new TWSearchColumn();
taskSubject.type = TWSearchColumn.Types.Task;
taskSubject.name = TWSearchColumn.TaskColumns.Subject;

var taskPriority = new TWSearchColumn();
taskPriority.type = TWSearchColumn.Types.Task;
taskPriority.name = TWSearchColumn.TaskColumns.Priority;

var taskReceivedDate = new TWSearchColumn();
taskReceivedDate.type = TWSearchColumn.Types.Task;
taskReceivedDate.name = TWSearchColumn.TaskColumns.ReceivedDate;

var taskDueDate = new TWSearchColumn();
taskDueDate.type = TWSearchColumn.Types.Task;
taskDueDate.name = TWSearchColumn.TaskColumns.DueDate;

var taskReadDate = new TWSearchColumn();
taskReadDate.type = TWSearchColumn.Types.Task;
taskReadDate.name = TWSearchColumn.TaskColumns.ReadDate;

var taskCloseDate = new TWSearchColumn();
taskCloseDate.type = TWSearchColumn.Types.Task;
taskCloseDate.name = TWSearchColumn.TaskColumns.ClosedDate;

var instanceId = new TWSearchColumn();
instanceId.type = TWSearchColumn.Types.ProcessInstance;
instanceId.name = TWSearchColumn.ProcessInstanceColumns.ID;

twSearch.columns = new Array(taskId, taskAssignedToUser, taskReceivedFromUser, taskClosedByUser, taskAssignedToRole, taskStatus, taskSubject, taskPriority, taskReceivedDate, taskDueDate, taskReadDate, taskCloseDate, instanceId);

var searchCondition = new TWSearchCondition();
searchCondition.column = taskId;
searchCondition.operator = TWSearchCondition.Operations.Equals;
searchCondition.value = tw.local.taskId;

twSearch.conditions = new Array(searchCondition);

twSearch.organizedBy = TWSearch.OrganizeByTypes.Task;

var results = twSearch.execute();

if(results && results.rows && results.rows.length == 1) {
    var row = results.rows[0];
   
    tw.local.taskDetails = new tw.object.BPM_Task();
    tw.local.taskDetails.taskId = row.values[0].toString();
    tw.local.taskDetails.assignedUser = row.values[1]?row.values[1].toString():null;
    tw.local.taskDetails.receivedFromUser = row.values[2]?row.values[2].toString():null;
    tw.local.taskDetails.closedByUser = row.values[3]?row.values[3].toString():null;
    tw.local.taskDetails.assignedGroup = row.values[4]?row.values[4].toString():null;
    tw.local.taskDetails.status = row.values[5]?row.values[5].toString():null;
    tw.local.taskDetails.subject = row.values[6]?row.values[6].toString():null;
    tw.local.taskDetails.priority = row.values[7]?row.values[7].toString():null;
    tw.local.taskDetails.receivedDate = row.values[8]?row.values[8]:null;
    tw.local.taskDetails.receivedDateString = tw.local.taskDetails.receivedDate?tw.local.taskDetails.receivedDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails.dueDate = row.values[9]?row.values[9]:null;
    tw.local.taskDetails.dueDateString = tw.local.taskDetails.dueDate?tw.local.taskDetails.dueDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails.readDate = row.values[10]?row.values[10]:null;
    tw.local.taskDetails.readDateString = tw.local.taskDetails.readDate?tw.local.taskDetails.readDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails.closeDate = row.values[11]?row.values[11]:null;
    tw.local.taskDetails.closeDateString = tw.local.taskDetails.closeDate?tw.local.taskDetails.closeDate.format('MM/dd/yy hh:mm:ss aaa'):null;
    tw.local.taskDetails.instanceId = row.values[12]?row.values[12].toString():null;
}

Comments