Name

sn_cs_builder.NodeList

Description

No description available

Script

var NodeList = Class.create();
NodeList.prototype = {
  initialize: function() {
  	
  },
  
  getNodeForTopicGoal : function getNodeForTopicGoal(topic, goal, node) {
  	var nodeObj = {};
  	
  	if (!topic || !goal || !node)
  		return nodeObj;
  	
  	var goalGR = new GlideRecordSecure("sys_cb_goal");
  	goalGR.addQuery("topic", topic);
  	goalGR.addQuery("sys_id", goal);
  	goalGR.query();
  	
  	if (!goalGR.hasNext())
  		return nodeObj;
  	
  	var nodeGR = new GlideRecordSecure("sys_cb_node");
  	nodeGR.addQuery("topic_goal", goal);
  	nodeGR.addQuery("sys_id", node);
  	nodeGR.query();
  	
  	if (nodeGR.next())
  		nodeObj = this._getNodeObject(nodeGR);
  	
  	return nodeObj;
  },
  
  getNodesForTopicGoal: function getNodesForTopicGoal(/* String sys_id */topic, goal) {
  	var nodes = [];
  	
  	if (!goal)
  		return nodes;
  	
  	var goalGR = new GlideRecordSecure("sys_cb_goal");
  	goalGR.addQuery("topic", topic);
  	goalGR.addQuery("sys_id", goal);
  	goalGR.query();
  	
  	if (!goalGR.hasNext())
  		return nodes;
  	
  	var nodeGR = new GlideRecordSecure("sys_cb_node");
  	nodeGR.addQuery("topic_goal", goal);
  	nodeGR.query();
  	
  	while (nodeGR.next())
  		nodes.push(this._getNodeObject(nodeGR));
  	
  	return nodes;
  },
  
  _getNodeObject: function _getNodeObject(/* GlideRecord node */nodeGR) {
  	var node = {};
  	if (!nodeGR || !nodeGR.isValidRecord() || !nodeGR.canRead())
  		return node;
  	
  	node.sys_id = nodeGR.getValue("sys_id");
  	node.parents = [nodeGR.getValue("parent")];
  	
  	if (nodeGR.getRecordClassName() == "sys_cb_collector") {
  		//re-query to get the parents
  		var mergeGR = new GlideRecordSecure("sys_cb_collector");
  		mergeGR.get(nodeGR.getValue("sys_id"));
  		node.parents = (mergeGR.getValue("parent_nodes") || []).split(",");
  	}
  	
  	node.table = nodeGR.getRecordClassName();
  	node.name = nodeGR.getValue("name");
  	node.descendants = this._getNodeDescendants(nodeGR);
  	
  	if (nodeGR.getRecordClassName() == "sys_cb_decision") {
  		var decisionNode = new GlideRecordSecure("sys_cb_decision");
  		decisionNode.get(nodeGR.getValue("sys_id"));
  		node.decision_type = decisionNode.getValue("type") || "manual";
  	}
  		
  	
  	return node;
  },
  
  _getNodeDescendants: function _getNodeDescendants(/* GlideRecord node */ nodeGR) {
  	var nodes = [];
  	
  	if (!nodeGR || !nodeGR.isValidRecord())
  		return nodes;
  	
  	var parent_id = nodeGR.getValue("sys_id");
  	var topic_goal = nodeGR.getValue("topic_goal");
  	
  	var desGR = new GlideRecordSecure("sys_cb_node");
  	desGR.addQuery("parent", parent_id);
  	desGR.addQuery("topic_goal", topic_goal);
  	//merges have multiple parents in a glidelist
  	desGR.addQuery("sys_class_name", "!=", "sys_cb_collector");
  	desGR.query();
  	
  	while (desGR.next())
  		nodes.push({
  			table : desGR.getRecordClassName(),
  			sys_id : desGR.getValue("sys_id")
  		});
  	
  	var mergeGR = new GlideRecordSecure("sys_cb_collector");
  	mergeGR.addQuery("parent_nodes", "CONTAINS", parent_id);
  	mergeGR.addQuery("topic_goal", topic_goal);
  	mergeGR.query();
  	
  	while (mergeGR.next())
  		nodes.push({
  			table : "sys_cb_collector",
  			sys_id : mergeGR.getValue("sys_id")
  		});
  	
  	return nodes;
  },
  
  type: 'NodeList'
};

Sys ID

66646decb3233200f7d1a13816a8dc2f

Offical Documentation

Official Docs: