Sitemap
P8 Hub🍁

P8 Hub🍁

Hi there! 👋 We cover topics on BPM, ECM, IBM BAW, FileNet, Case Manager, and more. If you find this content useful, be sure to follow! ✨

Search BAW Processes and Tasks with TWSearch Query

3 min readJan 20, 2025

--

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:

  1. Define Columns: Specify the data fields you want to retrieve.
  2. Set Filters: Apply filters to narrow down results based on specific column values.
  3. Specify Sort Order: Determine the order in which the results should be sorted.
  4. Organize Results: Decide how to group or structure the retrieved data.
  5. 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.

Press enter or click to view image in full size
P8Hub Process

Configuring Variables

  1. Open the process that contains the variables you want to configure.
  2. Navigate to the Variables tab.
  3. 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.
  4. If the variable is complex, ensure you check the box for each parameter you want to make available.
  5. In the Alias text box, enter a name for the variable. This alias will be used when performing searches.
Press enter or click to view image in full size
Exposed variables
Press enter or click to view image in full size
Request form

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.

Press enter or click to view image in full size
Variables of Search P8Hub Request service flow

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++;
}

}
Press enter or click to view image in full size
Search P8Hub Requests Service

When testing the service using the debugger, this was the result:

Data retrieved after Debugging

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.

--

--

P8 Hub🍁
P8 Hub🍁