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
Post a Comment