Approvals skipped due to to invalid rule syntax in flow designer error logs

Harsha Pandey
Tera Expert

Hi,

 @Chuck Tomasi @Mike Reading @Ankur Bawiskar 

My second level approval got skipped and I can find this error in logs 

Flow Designer: Operation((SC) Change - Normal - Authorize_v1.Branch$1.1f76e11c87bf09d4605d32a73cbb3526.If$1.5b76e11c87bf09d4605d32a73cbb352c.6776251c87bf09d4605d32a73cbb35b4.5df22d920b10030085c083eb37673a04.Create Approvals) skipped due to invalid rule syntax:

Below is my flow designer and we are using a custom action here with scripted rule in ask for approval.

1st level approval at Assess state which would be Primary Service Offering change group.
2nd level approval as per below screenshot at Authorize state which is Cis Approval group in Impacted Service related list with class as service offering.(TSO APV group).

SC get offering approval group is the custom action with below script:

(function execute(inputs, outputs) {

  var grChange = inputs.change_request;
  var groupIDs = [];
  var arrUtil = new ArrayUtil();

  
  var grOffering = new GlideRecord('task_cmdb_ci_service')
  grOffering.addQuery('task', grChange.sys_id.toString());
  grOffering.addQuery('cmdb_ci_service.sys_class_name', 'service_offering');
  grOffering.addQuery('cmdb_ci_service.change_control', '!=', '');
  grOffering.groupBy('cmdb_ci_service.change_control');
  grOffering.query();
  while(grOffering.next()){
    var grmember = new GlideRecord('sys_user_grmember');
    grmember.addQuery('group', grOffering.cmdb_ci_service.change_control);
    grmember.addQuery('user.active', true);
    grmember.query();
    if(grmember.hasNext()){
      groupIDs.push(''+grOffering.cmdb_ci_service.change_control.sys_id.toString());
    }
    
  }
  groupIDs = arrUtil.unique(groupIDs); // remove duplicates
  outputs.group_ids = groupIDs.toString();
})(inputs, outputs);

 

find_real_file.png

find_real_file.png

Thanks,

Harsha

6 REPLIES 6

Hi Mahendra,

I have shared my scripted action used in the flow in my post. Below is my approval rule script.

/*
**Access Flow/Action data using the fd_data object. Script must return a value.
**example: var shortDesc = fd_data.trigger.current.short_description;
**return shortDesc;
*/
var appGroupIdS = fd_data.flow_var.approval_group_ids;
var builder2 = new ApprovalRuleBuilder(true);
var groupIDs =[];

if(appGroupIdS){
if(appGroupIdS.indexOf(',') != -1){
groupIDs = appGroupIdS.split(',');
}
elseif(appGroupIdS.length >0 ){
groupIDs.push(''+ appGroupIdS);
}

 
builder2.addRuleSet(ApprovalRuleBuilder.RULESET_APPROVES);// apply rule set (apporoval)
builder2.addRule(ApprovalRuleBuilder.RULE_NUMBER,1); // first line item is an add rule, subsequently addAndRule ( rule is #1 approver per group needs to approve)
builder2.addGroups([''+groupIDs[0]]); // add group 0
 
// for loop for the subsequent items
for (var i = 1; i < groupIDs.length; i++) {
    
builder2.addAndRule(ApprovalRuleBuilder.RULE_NUMBER,1);
builder2.addGroups([''+groupIDs[i]]);
}

builder2.addRuleSet(ApprovalRuleBuilder.RULESET_REJECTS)// new rule set (reject)
builder2.addRule(ApprovalRuleBuilder.RULE_ANY) // anyone rejects ( from all the groups)
builder2.addGroups(groupIDs);
}
return builder2.getApprovalRules();


Hi Mahendra,

 

Did you get sometime to look into this? Your help would be much appreciated.

Thanks,

Harsha