Name

global.NodeRuleRegistry

Description

No description available

Script

var NodeRuleRegistry = {
  
  create : function createRegistry(defaultHandler) {
  	
  	var customRules = {};
  	var defaultRules = [{
  		name : "Same scope required",
  		takes : "node",
  		rule : function(node) {
  			if (node.getValue("sys_scope") != node.getValue("topic_goal.sys_scope"))
  				return false;
  		},
  		error : "The node's scope must be in the same scope as the goal it is part of."
  	},
  	{
  		name : "Only one child",
  		takes : "node",
  		rule : function(node) {
  			if (node.getRecordClassName() == "sys_cb_outcome")
  				return true;
  			
  			var parent = node.getValue("parent");
  			var siblings = new GlideRecord("sys_cb_node");
  				siblings.addQuery("parent", parent);
  				siblings.addQuery("topic_goal", node.getValue("topic_goal"));
  				siblings.addQuery("sys_id", "!=", node.getValue("sys_id"));
  				siblings.query();
  			
  			return siblings.hasNext();
  		},
  		error: "Another record already has this parent. Each record can only be the parent of one other record. Please choose a different parent and resubmit."
  	}];
  	
  	function getRulesByKey(key) {
  		if (!customRules[key])
  			return defaultRules;
  		
  		return customRules[key];
  	}

  	function addRule(key, rule) {
  		if (customRules[key])
  			customRules[key] = rule;
  		else
  			customRules[key]= [rule];
  	}
  	
  	return {
  		registerRule : function(key, rule) {
  			addRule(key, rule);
  		},
  		
  		rulesForKey : function(key) {
  			return getRulesByKey(key);
  		}
  	}
  }	
};

Sys ID

b1195502b3140300f7d1a13816a8dcb9

Offical Documentation

Official Docs: