Name

sn_nb_action.NBAActionInputPillParser

Description

No description available

Script

var NBAActionInputPillParser = Class.create();
NBAActionInputPillParser.prototype = {
  initialize: function() {
  	this.CONTEXT_EXPR_START = "{{vp_context";
  	this.FLOW_OUTPUT_EXPR_START = "{{vp_flow_outputs";
  	this.EXPR_END = "}}";
  },
  
  parseActionInputsPill: function(actionInputsGlideVar,flowOutputsObj,contextGr) {
  	var actionInputValues = {};
  	for(var actionInputName in actionInputsGlideVar){
  		if (actionInputName != "sys_meta" && actionInputName != "sys_id") {
  			var parameterizedInputValue = actionInputsGlideVar[actionInputName].getDisplayValue();
  			var parsedInputValue = this.getParsedInputValue(parameterizedInputValue,flowOutputsObj,contextGr);
  			
  			//The following check is satisfied when the glidevar values are static
  			if(parsedInputValue === parameterizedInputValue){
  				if(!gs.nil(actionInputsGlideVar[actionInputName].sys_id))
  					parsedInputValue = actionInputsGlideVar[actionInputName].getRefRecord();
  				else
  					parsedInputValue = actionInputsGlideVar[actionInputName];
  			}
  			actionInputValues[actionInputName] = parsedInputValue;
  		}
  	}
  	return actionInputValues;
  },
  
  getParsedInputValue: function(parameterizedInputValue,flowOutputsObj,contextGr){
  	var parsedInputValue = parameterizedInputValue;
  	var pattern = /(\{{[a-z0-9_.-?]*}})/gi;
  	var results =  parameterizedInputValue.match(pattern);
  	var returnValue;
  	if(!gs.nil(results)){
  		for(var i = 0;i<results.length;i++){
  			var result = results[i];
  			if(result.indexOf(this.CONTEXT_EXPR_START) != -1)
  				returnValue = this.getParsedInputFromContext(result,contextGr,parsedInputValue);
  			
  			else if(result.indexOf(this.FLOW_OUTPUT_EXPR_START) != -1)
  				returnValue = this.getParsedInputFromFlowOutputs(result,flowOutputsObj,parsedInputValue);
  			
  			parsedInputValue = this.getFinalParsedInputValue(result,returnValue,parsedInputValue,parameterizedInputValue);
  		}
  	}
  	return parsedInputValue;
  },
  
  getFinalParsedInputValue:function(result,returnValue,parsedInputValue,parameterizedInputValue){
  	if(result.length < parameterizedInputValue.length){
  		if(sn_nb_action.NextBestActionUtil.isValidRecord(returnValue) && !gs.nil(returnValue.getTableName())){
  			return parsedInputValue.replace(result,returnValue.getDisplayValue());
  		}
  		else{
  			return parsedInputValue.replace(result,returnValue);
  		}
  	}
  	return returnValue;
  },
  					
  getParsedInputFromContext: function(pillExpr,contextGr,parsedInputValue){
  		if(pillExpr.length == this.CONTEXT_EXPR_START.length + this.EXPR_END.length){
  				return contextGr;
  		}
  		else{
  			var pillvariable = pillExpr.substring(this.CONTEXT_EXPR_START.length + 1, pillExpr.lastIndexOf(this.EXPR_END));
  			var replaceValue = this.getReplaceValueFromGr(contextGr,pillvariable);
  			var parsedInput = gs.nil(replaceValue)? Constants.STRING_WHITESPACE : replaceValue;
  			return parsedInput;
  		}
  },
  
  getParsedInputFromFlowOutputs: function(pillExpr,flowOutputsObj,parsedInputValue){
  	var pillvariable = pillExpr.substring(this.FLOW_OUTPUT_EXPR_START.length + 1, pillExpr.lastIndexOf(this.EXPR_END));
  	var variables = pillvariable.split(".");
  	if(variables.length > 1){
  		if(flowOutputsObj[variables[0]] != '' && !gs.nil(flowOutputsObj[variables[0]].isValidRecord())){
  			var lookupStr = pillvariable.substring(variables[0].length + 1);
  			var replaceValue = this.getReplaceValueFromGr(flowOutputsObj[variables[0]],lookupStr);
  			var parsedInput = gs.nil(replaceValue)? Constants.STRING_WHITESPACE : replaceValue;
  			return parsedInput;
  		}
  		else if(flowOutputsObj[variables[0]] == '')
  			return Constants.STRING_WHITESPACE;
  	}else if((flowOutputsObj[pillvariable] instanceof GlideRecord) && flowOutputsObj[pillvariable].hasNext()){
  		var outputList = [];
  		while(flowOutputsObj[pillvariable].next()){
  			var gr = new GlideRecord(flowOutputsObj[pillvariable].getTableName());
  			gr.get(flowOutputsObj[pillvariable].sys_id);
  			outputList.push(gr);
  		}
  		return outputList;
  	}else if(flowOutputsObj[pillvariable] == '')
  		return Constants.STRING_WHITESPACE;
  	else
  		return flowOutputsObj[pillvariable];
  	
  },
  
  //For resolving the reference fields
  getReplaceValueFromGr: function(gr,lookupStr){
  	var replaceValue = gr.getElement(lookupStr).getRefRecord();
  	if(gs.nil(replaceValue)){
  		replaceValue = gr.getDisplayValue(lookupStr);
  		return replaceValue;
  	}
  	else if(replaceValue.isValidRecord()){
  		return replaceValue;
  	}
  	return null;
  },
  
  //Parser logic for Flow inputs in Input generator table
  
  parseFlowInputsPill: function(flowInputsGlideVar,contextGr) {
  	var flowInputValues = {};
  	for(var flowInputName in flowInputsGlideVar){
  		if (flowInputName != "sys_meta" && flowInputName != "sys_id") {
  			var parameterizedInputValue = flowInputsGlideVar[flowInputName].getDisplayValue();
  			var parsedInputValue = this.getParsedInputValue(parameterizedInputValue,{},contextGr);
  			
  			//The following check is satisfied when the glidevar values are static
  			if(parsedInputValue === parameterizedInputValue){
  				if(!gs.nil(flowInputsGlideVar[flowInputName].sys_id))
  					parsedInputValue = flowInputsGlideVar[flowInputName].getRefRecord();
  				else
  					parsedInputValue = flowInputsGlideVar[flowInputName];
  			}
  			flowInputValues[flowInputName] = parsedInputValue;
  		}
  	}
  	return flowInputValues;
  },
  

  type: 'NBAActionInputPillParser'
};

Sys ID

7e7c3da453222010df5dddeeff7b12a2

Offical Documentation

Official Docs: