Name
global.cxs_RPConfig
Description
Configures the Record Producer Configuration cxs_rp_config table and manipulates contextual search on record producers.
Script
var cxs_RPConfig = Class.create();
cxs_RPConfig.prototype = {
EXCLUDE_FIELDS_FROM_OBJECT: {
"sys_created_by": true,
"sys_created_on": true,
"sys_domain": true,
"sys_mod_count": true,
"sys_updated_by": true,
"sys_updated_on": true,
"sys_package": true,
"sys_update_name": true
},
RP_MACRO: "cxs_rp_search",
initialize: function(gr) {
this._gr = gr;
this._gru = new GlideRecordUtil();
},
setName: function(configName) {
if (!this._gr || !this._gr.getUniqueValue())
return false;
if (configName) {
this._gr.name = configName;
return true;
}
this._gr.name = this._gr.sc_cat_item.getDisplayValue();
return true;
},
isDuplicate: function() {
if (!this._gr)
return false;
// If this record is being updated and sc_cat_item has not changed
// we don't need to check if we're creating a duplicate
if (!this._gr.isNewRecord() && (!this._gr.sc_cat_item.changes() && !this._gr.active.changes()))
return false;
// Search for an existing record that matches the one we're trying to create/update
var rpConfigGr = new GlideRecord("cxs_rp_config");
rpConfigGr.addQuery("sys_id", "!=", this._gr.getUniqueValue());
rpConfigGr.addQuery("sc_cat_item", this._gr.sc_cat_item);
rpConfigGr.addActiveQuery();
rpConfigGr.query();
return rpConfigGr.hasNext();
},
getVariableIds: function() {
var sysIds = [];
if (!this._gr)
return sysIds;
var variableGr = new GlideRecord("item_option_new");
variableGr.addQuery("sys_id", "IN", this.getCatItemVariableIds());
variableGr.query();
while (variableGr.next())
sysIds.push(variableGr.getUniqueValue());
return sysIds;
},
getCatItemVariableIds: function() {
var sysIds = [];
if (!this._gr)
return sysIds;
var catItemId = this._gr.sc_cat_item + "";
if (!catItemId)
return sysIds;
var catItemGr = new GlideRecord("sc_cat_item");
if (!catItemGr.get(catItemId))
return sysIds;
var searchableTypes = new cxs_RPVarTypes().getTypeMap();
var catItemObj = GlideappCatalogItem.get(catItemId);
var varsGr = catItemObj.getStandaloneVariables();
while (varsGr.next())
if (searchableTypes[varsGr.type])
sysIds.push(varsGr.getUniqueValue());
return sysIds;
},
getRPConfigObject: function() {
var rpConfig = {};
this._gru.populateFromGR(rpConfig, this._gr, this.EXCLUDE_FIELDS_FROM_OBJECT);
rpConfig.resultsHeaderText = this._gr.getDisplayValue("results_header_text");
rpConfig.configURL = this._gr.getLink(true);
rpConfig.configDisplayValue = this._gr.getDisplayValue();
rpConfig.search_field = {};
this._gru.populateFromGR(rpConfig.search_field, this._gr.search_variable.getRefRecord(), this.EXCLUDE_FIELDS_FROM_OBJECT);
return rpConfig;
},
isOnRecordProducer: function() {
var varGr = new GlideRecord("item_option_new");
varGr.addQuery("cat_item", this._gr.sc_cat_item);
varGr.addQuery("macro.name", this.RP_MACRO);
varGr.query();
return varGr.hasNext();
},
addToRecordProducer: function() {
if (this.isOnRecordProducer())
return false;
var maxVarOrderGa = new GlideAggregate("item_option_new");
maxVarOrderGa.addQuery("cat_item", this._gr.sc_cat_item);
maxVarOrderGa.addAggregate("MAX", "order");
maxVarOrderGa.groupBy("cat_item");
maxVarOrderGa.query();
var order = 100;
if (maxVarOrderGa.next())
order = (maxVarOrderGa.getAggregate("MAX", "order") - 0) + 100;
var varGr = new GlideRecord("item_option_new");
if (!varGr.canCreate())
return false;
varGr.type = 14; // Macro
varGr.cat_item = this._gr.sc_cat_item;
varGr.macro.setDisplayValue(this.RP_MACRO);
varGr.display_title = false;
varGr.question_text = "Contextual Search Results";
varGr.name = "contextual_search_results";
varGr.order = order;
varGr.insert();
return true;
},
removeFromRecordProducer: function() {
if (!this.isOnRecordProducer())
return false;
var varGr = new GlideRecord("item_option_new");
if (!varGr.canDelete())
return false;
varGr.addQuery("cat_item", this._gr.sc_cat_item);
varGr.addQuery("macro.name", this.RP_MACRO);
varGr.query();
if (varGr.next())
return varGr.deleteRecord();
return false;
},
deleteFilterConfigs: function() {
var isActive = GlidePluginManager.isActive('com.snc.contextual_search.dynamic_filters');
if (!isActive || !this._gr || !this._gr.getUniqueValue())
return false;
var filterConfigGr = new GlideRecord("cxs_rp_filter_config");
if (!filterConfigGr.canDelete())
return false;
filterConfigGr.addQuery("cxs_rp_config", this._gr.getUniqueValue());
filterConfigGr.deleteMultiple();
return true;
},
type: 'cxs_RPConfig'
}
Sys ID
7b30b50eeb2021003623666cd206fe7d