Name
sn_nb_action.GroupByRecommendation
Description
Implements extension point sn_nb_action.GroupingStrategy
Script
var GroupByRecommendation = Class.create();
GroupByRecommendation.prototype = {
initialize: function(ruleContextGR) {
if(NextBestActionUtil.isValidRecord(ruleContextGR))
this.groups = this.getAllGroups(ruleContextGR.getUniqueValue());
},
getId: function(){
return "2cd6cdab9766111016c576d917890dce"; // sys id of corresponding grouping strategy record
},
groupRecommendations: function(recommendationsArray) {
var groupedRecommendations = [];
if (gs.nil(this.groups) || Object.keys(this.groups).length <= 0) {
this.addAllToDefaultGroup(recommendationsArray);
groupedRecommendations.push(this.defaultGroup);
return groupedRecommendations;
}
for (var i in recommendationsArray) {
if (!gs.nil(recommendationsArray[i]) && (gs.nil(recommendationsArray[i].actionGroups) || recommendationsArray[i].actionGroups.length <= 0)) {
this.addToDefaultGroup(recommendationsArray[i]);
continue;
}
var recommendationGroups = recommendationsArray[i].actionGroups.split(",");
var j = 0;
while (j < recommendationGroups.length) {
var recommendationGroup = recommendationGroups[j];
j += 1;
if (gs.nil(recommendationGroup) || gs.nil(this.groups[recommendationGroup])) {
this.addToDefaultGroup(recommendationsArray[i]);
continue;
}
if (gs.nil(this.groups[recommendationGroup].actions)) this.groups[recommendationGroup].actions = [];
this.groups[recommendationGroup].actions.push(recommendationsArray[i]);
}
}
for (var g in this.groups) {
if (!this.groups.hasOwnProperty(g) ||
gs.nil(this.groups[g].actions) ||
this.groups[g].actions.length <= 0
) continue;
groupedRecommendations.push(this.groups[g]);
}
if (!gs.nil(this.defaultGroup) && !gs.nil(this.defaultGroup.actions) && this.defaultGroup.actions.length > 0)
groupedRecommendations.push(this.defaultGroup);
groupedRecommendations.sort(this.sortGroupsByOrderAsc);
return groupedRecommendations;
},
getAllGroups: function(ruleContext) {
var groupsGR = new GlideRecord(sn_nb_action.Constants.TBL_CONTEXT_GROUP);
groupsGR.addActiveQuery();
groupsGR.addQuery("context", ruleContext);
groupsGR.query();
var groups = {};
while (groupsGR.next()) {
var isDefaultGroup = groupsGR.getValue("default");
if('1' === isDefaultGroup){
this.initializeDefaultGroup(groupsGR);
continue;
}
var sysId = groupsGR.getUniqueValue();
groups[sysId] = {
name: groupsGR.name.getDisplayValue(),
order: groupsGR.getValue("order"),
actions: []
};
}
return groups;
},
initializeDefaultGroup: function(defaultGroupGr) {
this.defaultGroup = {
name: defaultGroupGr.name.getDisplayValue(),
order: defaultGroupGr.getValue("order"),
actions: []
};
},
addAllToDefaultGroup: function(recommendationArray) {
if (gs.nil(recommendationArray) || recommendationArray.length <= 0) return;
if (gs.nil(this.defaultGroup)) return;
for (var i in recommendationArray) {
this.addToDefaultGroup(recommendationArray[i]);
}
},
addToDefaultGroup: function(recommendationObject) {
if (gs.nil(this.defaultGroup)) return;
if (gs.nil(this.defaultGroup.actions)) this.defaultGroup.actions = [];
this.defaultGroup.actions.push(recommendationObject);
},
sortGroupsByOrderAsc: function(group1, group2){
return group1.order - group2.order;
},
type: 'GroupByRecommendation'
};
Sys ID
0ec03c639726111016c576d917890d41