This topic applies only to the IBM Business Automation Workflow Advanced
configuration.

Developing a plug-in using the StaffQueryResultPostProcessorPlugin interface

Draft comment:
This topic only applies to BAW, and is located in the BAW repository. Last updated on 2025-03-13 12:15
The StaffQueryResultPostProcessorPlugin interface allows you to modify the people query results. This interface does not offer the performance optimizations that are available in the StaffQueryResultPostProcessorPlugin2 interface.
You must implement all four methods that are defined in the interface. Each method receives context information about a different type of invocation.
Task instance
For task instances, you must implement the following method for the following task roles: Administrator, Reader, Potential Starter, Potential Owner, and Editor.
   public StaffQueryResult processStaffQueryResult(StaffQueryResult originalStaffQueryResult,
                                                   Task             task,
                                                   int              role,
                                                   Map              context);
Escalation instance (for a task instance)
For escalations of task instances, you must implement the following method for the escalation role Escalation Receiver.
   public StaffQueryResult processStaffQueryResult(StaffQueryResult originalStaffQueryResult,
                                                   Escalation       escalation,
                                                   Task             task,
                                                   int              role,
                                                   Map              context);
Task template
For task templates, you must implement the following method for the task template roles Potential Instance Creator, Administrator, and Reader.
   public StaffQueryResult processStaffQueryResult(StaffQueryResult originalStaffQueryResult,
                                                   TaskTemplate     template,
                                                   int              role,
                                                   Map              context);
Application component
For any application components that have no modeled Potential Instance Creator specification, you must implement the following method.
    public StaffQueryResult processStaffQueryResult(StaffQueryResult     originalStaffQueryResult,
                                                   ApplicationComponent applicationComponent,
                                                   int                  role,
                                                   Map                  context);
Note: If you want to call the HumanTaskManagerService interface from this class, do not call a method that updates the task that produced the event. This action might result in inconsistent task data in the database.

Parameters

The originalStaffQueryResult parameter is of type StaffQueryResult. It contains information about the user entries that are retrieved during people resolution, for example, by accessing the virtual member manager people directory.
The context parameter is of type Map. The following code snippets show how to access specific information in the context.
People assignment criteria definition
To access this information proceed as follows:
Map pacAsMap = (Map) context.get("HTM_VERB");

// to retrieve the name of the people assignment criteria (PAC)
String pacName = (String) pacAsMap.get("HTM_VERB_NAME"); 

// to retrieve the PAC parameter names
Set paramNames = pacAsMap.keySet();

// to retrieve the value of a specific parameter
String paramValue = (String) pacAsMap.get(paramName);
Where paramName is the name of a parameter that you want the value of.
Replacement variables specified as people assignment criteria parameter values
To access this information proceed as follows:
Object replVarObj = context.get(replVarName);
if (replVarObj instanceof String) 
	    String replVarValue = (String) replVarObj;
if (replVarObj instanceof String[])
	    String[] replVarValues = (String[]) replVarObj;
Where replVarName is the name of a replacement variable that you want the value of.
List of users that have been explicitly excluded by people resolution
To access this information proceed as follows:
String[] removedUserIDs = (String[]) context.get("HTM_REMOVED_USERS");

Example: StaffQueryResultPostProcessorPlugin implementation

The following example illustrates shows how you might change the Editor role of a task called SpecialTask.
import java.util.Collection;
import java.util.Locale;
import java.util.Map;
import com.ibm.task.api.ApplicationComponent;
import com.ibm.task.api.Escalation;
import com.ibm.task.api.EscalationTemplate;
import com.ibm.task.api.Task;
import com.ibm.task.api.TaskTemplate;
import com.ibm.task.spi.StaffQueryResult;
import com.ibm.task.spi.StaffQueryResultFactory;
import com.ibm.task.spi.StaffQueryResultPostProcessorPlugin;
import com.ibm.task.spi.UserData;

public class MyStaffResultProcessor implements StaffQueryResultPostProcessorPlugin
{
    public StaffQueryResult processStaffQueryResult(StaffQueryResult     originalStaffQueryResult,
                                                    ApplicationComponent applicationComponent,
                                                    int                  role,
                                                    Map                  context)
    { return(originalStaffQueryResult); }
 
    public StaffQueryResult processStaffQueryResult(StaffQueryResult originalStaffQueryResult,
                                                    Escalation       escalation,
                                                    Task             task,
                                                    int              role,
                                                    Map              context)
    { return(originalStaffQueryResult); } 
 
    public StaffQueryResult processStaffQueryResult(StaffQueryResult   originalStaffQueryResult,
                                                    EscalationTemplate template,
                                                    int                role,
                                                    Map                context)
     { return(originalStaffQueryResult); } 
 
    public StaffQueryResult processStaffQueryResult(StaffQueryResult originalStaffQueryResult,
                                                    Task             task,
                                                    int              role,
                                                    Map              context)
    {
       StaffQueryResult        newStaffQueryResult = originalStaffQueryResult;
       StaffQueryResultFactory staffResultFactory  = StaffQueryResultFactory.newInstance();
 
       if (role           == com.ibm.task.api.WorkItem.REASON_EDITOR &&
           task.getName() != null                                    &&
           task.getName().equals("SpecialTask"))
       {
          Map      userDataMap;
          UserData userDataObj; 
 
          // get the user data map from passed staff query result and clear 
          // the map. Then add a new Editor (new UserData instance)
          userDataMap = newStaffQueryResult.getUserDataMap();
          userDataMap.clear();
          
          userDataObj = staffResultFactory.newUserData("MyEditor", 
                                                       new Locale("en-US"), 
                                                       "MyEditor@company.com");
          userDataMap.put(userDataObj.getUserName(), userDataObj);
       }
       return(newStaffQueryResult);
    }
 
    public StaffQueryResult processStaffQueryResult(StaffQueryResult originalStaffQueryResult,
                                                    TaskTemplate     template,
                                                    int              role,
                                                    Map              context)
    { return(originalStaffQueryResult); }
 } // end of class MyStaffResultProcessor

For more information about this interface, see the Javadoc.