Maximo’s NextGenREST OSLC API(s) are very powerful but they don’t provide the capability to handle SQL Conditions associated with Actions or Nodes. For example- A manual Input node in the workflow can have multiple actions available and they are to be shown on the basis of SQL Expressions then OSLC API returns all options when making API call w/o evaluating the SQL expression.
To handle this, another feature to call automation script using OSLC API can be used to return the response with a flag having true or false information. In the script below, let us assume we have a workflow on the PR object and we need to evaluate SQL conditions associated with a manual input node.
From Postman make a GET call for each action:
GET<servername:port>/maximo/oslc/script/<scriptname>?ownerid<x>&actionid=<y>&wfactionid=<z>
& response of this script shall return true or false based on SQL condition evaluation for that particular MBO. All actions returning true shall be shown to users while false shall remain hidden.
load("nashorn:mozilla_compat.js");
importClass(Packages.psdi.server.MXServer);
importClass(Packages.psdi.common.parse.ParserService);
importClass(Packages.psdi.mbo.SqlFormat);
// Pass ownerid, actionid and wfactionid from OSLC API Call as Query parameter
var response = {};
var responseBody;
var prid = request.getQueryParam("ownerid");
var actionid= request.getQueryParam("actionid");
var wfactionid= request.getQueryParam("wfactionid");
var userInfo = MXServer.getMXServer().getSystemUserInfo();
var sqf = new SqlFormat(userInfo, "actionid=:1 and wfactionid=:2 ");
sqf.setObject(1, "WFACTION", "actionid", actionid);
sqf.setObject(2, "WFACTION", "wfactionid", wfactionid);
var wfactionSet = MXServer.getMXServer().getMboSet("WFACTION", userInfo);
wfactionSet.setWhere(sqf.format());
wfactionSet.reset();
var wfactionMbo = wfactionSet.getMbo(0)
var sql=wfactionMbo.getString("condition")
if(sql.length>0)
{
var sqf1 = new SqlFormat(userInfo, "prid=:1");
sqf1.setObject(1, "PR", "prid", prid);
var prSet = MXServer.getMXServer().getMboSet("PR", userInfo);
prSet.setWhere(sqf1.format());
prSet.reset();
if(prSet.isEmpty())
{
response.available=true;
}
else
{
var prMbo = prSet.getMbo(0)
// Call Parser Service method to pass the SQL Condition and MBO to get the true or false after SQL Condition is evalauted.
var parServ=MXServer.getMXServer().lookup("PARSER");
var avalbl = parServ.getBoolean(sql,prMbo);
// Add variable available in response object and set it to boolean returned when there is SQL associated.
response.available=avalbl;
}
}
//Return the API response in form of JSON String
responseBody = JSON.stringify(response);
Author
Principal Solutions Architect