Name

global.cxs_SearchServerAJAX

Description

Checks that the search context is configured.

Script

var cxs_SearchServerAJAX = Class.create();

cxs_SearchServerAJAX.prototype = Object.extendsObject(AbstractAjaxProcessor, {
  isConfigured: function() {
  	var serverId = this.getParameter("sysparm_server_id");

  	var scc = new GlideRecordSecure('cxs_context_config');
      scc.addQuery('cxs_searcher_config', "IN", serverId);
      scc.query();

      return scc.hasNext();
  },

  getFirstAction: function(){
  	var paramsJSON = this.getParameter('sysparm_params_obj');
  	var paramsObj = new global.JSON().decode(paramsJSON);
  	if (!paramsObj['resource_id'])
  		return;

  	var sau = new SNC.SearchActionUtils();
  	sau.loadRecords(paramsObj['current_table'], paramsObj['current_id'], paramsObj['result_table'], paramsObj['result_id']);
  	var actionGr = sau.getFirstAction_Platform(paramsObj['table_config_id'], paramsObj['resource_id']);
  	var result = '';
  	if (actionGr && actionGr.isValidRecord()) {
  		var actionObj = {
  			actionId: actionGr.search_ui_action.action_id.getValue(),
  			actionValue: actionGr.action_value.getValue(),
  			actionLabel: actionGr.action_label.getValue(),
  			restAPI: actionGr.search_ui_action.rest_api ? actionGr.rest_api.getValue() : ''
  		};
  		result = new global.JSON().encode(actionObj);
  	}
  	return result;
  },

  ajaxFunction_getResources: function(){
  	var searchContextId = this.getParameter('sysparm_context_id');
  	var displayDropdown = this.getParameter('sysparm_display_dropdown');

  	return new global.JSON().encode(this.getResources(searchContextId, displayDropdown));
  },

  getResources: function(searchContextId, displayDropdown) {
  	var answer = {};

  	// var searchContextId = this.getParameter('sysparm_context_id');
  	// var displayDropdown = this.getParameter('sysparm_display_dropdown');
  	var searcherId = "";
  	var searchOnTab = false;
  	var searcherText = "";
  	var defSearcherResource = "all";

  	var searchContextGr = new GlideRecord("cxs_context_config");
  	searchContextGr.get(searchContextId);
  	if (searchContextGr) {
  		searcherId = searchContextGr.getValue("cxs_searcher_config");
  		defSearcherResource = searchContextGr.getValue("default_searcher_resource");
  		searchOnTab = searchContextGr.getValue("search_on_tab") === "1";
  		searcherText = (searchContextGr.getDisplayValue("searcher_text")) ? searchContextGr.getDisplayValue("searcher_text") : gs.getMessage("Default Sources");
  	}

  	answer.searcherText = searcherText;
  	answer.searchOnTab = searchOnTab;

  	if (displayDropdown) {
  		answer.additionalSearchResources = (searchOnTab) ? this._getAdditionalSearchResources(searchContextId) : [];

  		var defAdditional = answer.additionalSearchResources.some(function(resource) {
  			return resource.defaultSearch;
  		});

  		answer.searchResources = this._getSearchResources(searcherId);
  		if (!defAdditional && defSearcherResource !== "all")
  			answer.searchResources.forEach(function(resource) {
  				if (resource.id === defSearcherResource)
  					resource.defaultSearch = true;
  			});
  	}

  	answer.displayDropdown = (displayDropdown && (answer.searchResources.length + answer.additionalSearchResources.length > 1)) ? true : false;
  	return answer;
  },

  _getSearchResources: function(searcherId) {
  	var searchResources = [];

  	if (!searcherId)
  		return searchResources;

  	var resourceGr = new GlideRecord("cxs_search_res_config");
  	resourceGr.addQuery("cxs_searcher_config", searcherId);
  	resourceGr.addActiveQuery();
  	resourceGr.orderBy("order");
  	resourceGr.query();

  	var labelMap = {pinned: gs.getMessage("Pinned Articles"), catalog: gs.getMessage("Catalog Items"), knowledge: gs.getMessage("Knowledge Articles"), social: gs.getMessage("Questions"), community_question: gs.getMessage("Community Question"), community_answer: gs.getMessage("Community Answer"), community_blog: gs.getMessage("Community Blogs")};

  	while (resourceGr.next()) {
  		var name = resourceGr.name.getDisplayValue();
  		searchResources.push({
  			label: resourceGr.label.getDisplayValue() ? resourceGr.label.getDisplayValue() : ((name in labelMap) ? labelMap[name] : name),
  			id: resourceGr.getUniqueValue()
  		});
  	}

  	return searchResources;
  },

  _getAdditionalSearchResources: function(searchContextId) {
  	var addtlSearchResources = [];

  	var addtlResourceGr = new GlideRecord("cxs_res_context_config");
  	addtlResourceGr.addQuery("cxs_context_config", searchContextId);
  	addtlResourceGr.addNotNullQuery("cxs_search_res_config.resource_type");
  	addtlResourceGr.addQuery("cxs_search_res_config.active", true);
  	addtlResourceGr.addActiveQuery();
  	addtlResourceGr.addEncodedQuery("cxs_search_res_config.recommendation!=true^ORcxs_search_res_config.recommendationISEMPTY");
  	addtlResourceGr.orderByDesc("default_search");
  	addtlResourceGr.orderBy("order");
  	addtlResourceGr.query();
  	while (addtlResourceGr.next()) {
  		addtlSearchResources.push({
  			label: addtlResourceGr.cxs_search_res_config.label.getDisplayValue() ? addtlResourceGr.cxs_search_res_config.label.getDisplayValue() : addtlResourceGr.cxs_search_res_config.name.getDisplayValue(),
  			id: addtlResourceGr.getValue("cxs_search_res_config"),
  			defaultSearch: addtlResourceGr.getValue("default_search") === "1"
  		});
  	}
  	return addtlSearchResources;
  },

  type: 'cxs_SearchServerAJAX'
});

Sys ID

a8aec941ef11210066fc36caa5c0fb02

Offical Documentation

Official Docs: