Search BAW Processes and Tasks with TWSearch Query
You can use a JavaScript TWSearch object to get data from process and task instances. It lets you choose which details to retrieve, set filters, and organize or sort the results.
Structure of a TWSearch Query
A TWSearch query involves the following steps:
- Define Columns: Specify the data fields you want to retrieve.
- Set Filters: Apply filters to narrow down results based on specific column values.
- Specify Sort Order: Determine the order in which the results should be sorted.
- Organize Results: Decide how to group or structure the retrieved data.
- Run the Query: Execute the search and convert the results into a list of complex variables.
Here, I have created a simple solution to demonstrate how the TWSearch functionality works.
Configuring Variables
- Open the process that contains the variables you want to configure.
- Navigate to the Variables tab.
- For each variable you want to search or display in the Process Portal task list check the Visible in Process Portal option in the Details section.
- If the variable is complex, ensure you check the box for each parameter you want to make available.
- In the Alias text box, enter a name for the variable. This alias will be used when performing searches.
Next, I created a new service flow named Search P8Hub Requests, which includes a server script to implement TWSearch.
Get P8 Hub🍁’s stories in your inbox
Join Medium for free to get updates from this writer.
In this example, there are two columns of type BusinessData, using PH_RequestNumber and PH_RequestorName as the search column names. I also created a few private variables to implement specific conditions based on the requirements.
TWSearchColumns — colInstanceID, colInstanceName, colRequestNumber, colRequestorName, colProcessInstStatus.
TWSearchConditions — CondInstanceName, condRequestorName, condRequestNumber, condProcessInstStatus.
var search = new TWSearch();
//###############################Instance data columns####################################
var colInstanceID = new TWSearchColumn();
colInstanceID.type = TWSearchColumn.Types.ProcessInstance;
colInstanceID.name = TWSearchColumn.ProcessInstanceColumns.ID;
var colInstanceName = new TWSearchColumn();
colInstanceName.type = TWSearchColumn.Types.ProcessInstance;
colInstanceName.name = TWSearchColumn.ProcessInstanceColumns.Name;
var colRequestNumber = new TWSearchColumn();
colRequestNumber.type = TWSearchColumn.Types.BusinessData;
colRequestNumber.name = "PH_RequestNumber";
var colRequestorName = new TWSearchColumn();
colRequestorName.type = TWSearchColumn.Types.BusinessData;
colRequestorName.name = "PH_RequestorName";
var colProcessInstStatus = new TWSearchColumn();
colProcessInstStatus.type = TWSearchColumn.Types.ProcessInstance;
colProcessInstStatus.name = TWSearchColumn.ProcessInstanceColumns.Status;
//###############################Instance data columns####################################
search.columns = new Array(colInstanceID, colInstanceName, colRequestNumber, colRequestorName, colProcessInstStatus);
//###############################Instance data columns####################################
var condInstanceName = new TWSearchCondition;
condInstanceName.column = colInstanceName;
condInstanceName.operator = TWSearchCondition.Operations.StartsWith;
condInstanceName.value = "P8Hub Process:";
var conditions = new Array(condInstanceName);
if (tw.local.requestorName) {
var condRequestorName = new TWSearchCondition;
condRequestorName.column = colRequestorName;
condRequestorName.operator = TWSearchCondition.Operations.Contains;
condRequestorName.value = tw.local.requestorName.trim();
conditions.push(condRequestorName);
}
if (tw.local.requestNumber) {
var condRequestNumber = new TWSearchCondition;
condRequestNumber.column = colRequestNumber;
condRequestNumber.operator = TWSearchCondition.Operations.Contains;
condRequestNumber.value = tw.local.requestNumber.trim();
conditions.push(condRequestNumber);
}
if (tw.local.status) {
var condProcessInstStatus = new TWSearchCondition;
condProcessInstStatus.column = colProcessInstStatus;
condProcessInstStatus.operator = TWSearchCondition.Operations.Contains;
condProcessInstStatus.value = tw.local.status.trim();
conditions.push(condProcessInstStatus);
}
search.conditions = conditions;
var result = search.execute();
tw.local.p8Requests = [];
var obj = {};
var x = 0;
for (var i = 0; i < result.rows.length; i++) {
if (result.rows[i].values[2] && result.rows[i].values[3]) {
obj.pid = result.rows[i].values[0].toString();
obj.instanceName = result.rows[i].values[1];
obj.requestNumber = result.rows[i].values[2];
obj.requestorName = result.rows[i].values[3];
obj.status = result.rows[i].values[4];
tw.local.p8Requests[x] = obj;
x++;
}
}When testing the service using the debugger, this was the result:
As shown here, we can retrieve data from process and task instances using JavaScript TWSearch objects and this data can be used to generate custom reports.







