Name
global.RibbonDataUtil
Description
No description available
Script
var RibbonDataUtil = Class.create();
RibbonDataUtil.prototype = {
initialize: function() {
},
getCustomer360Data: function(table, sysId, primaryUser, primaryFields, secondaryUser, secondaryFields, tertiaryUser, tertiaryFields) {
var results = [];
var gr = new GlideRecord(table);
gr.get(sysId);
if (!gr.canRead()) return results;
this._addUserFieldsDataToResults(results, primaryUser, gr, primaryFields);
if (results.length == 0) this._addUserFieldsDataToResults(results, secondaryUser, gr, secondaryFields);
if (results.length == 0) this._addUserFieldsDataToResults(results, tertiaryUser, gr, tertiaryFields);
return results;
},
_constructFieldList: function(parentRecord, userRecord, userFields) {
var fields = [];
var userFieldsArray = userFields.split(",");
if (userFieldsArray.indexOf("first_name") < 0)
userFieldsArray.push("first_name");
if (userFieldsArray.indexOf("last_name") < 0)
userFieldsArray.push("last_name");
if (userFieldsArray.indexOf("title") < 0)
userFieldsArray.push("title");
if (userRecord.getElement("vip") && userFieldsArray.indexOf("vip") < 0)
userFieldsArray.push("vip");
for (var i = 0; i < userFieldsArray.length; i++) {
var field = userFieldsArray[i];
var fieldDetails = {};
fieldDetails["value"] = userRecord.getElement(field).getValue();
if (field == "time_zone" && !userRecord.getElement(field).getValue()) {
fieldDetails["displayValue"] = GlideUser.getSysTimeZone();
} else
fieldDetails["displayValue"] = userRecord.getElement(field).getDisplayValue();
fieldDetails["type"] = userRecord.getElement(field).getED().getInternalType();
fieldDetails["label"] = userRecord.getElement(field).getED().getLabel();
fieldDetails["name"] = field;
fields.push(fieldDetails);
}
return fields;
},
_getAccountDetails: function(record, userType) {
if (!this._shouldFetchAccountDetails(record, userType))
return null;
var accountInfo = {};
if (!gs.nil(record.account)) {
var accountRecord = record.account.getRefRecord();
if (!accountRecord.canRead()) return accountInfo;
accountInfo.id = accountRecord.sys_id + '';
accountInfo.name = accountRecord.name + '';
if (accountRecord.active_escalation) {
accountInfo.activeEscalation = {};
var escalationRecord = accountRecord.active_escalation.getRefRecord();
if (!escalationRecord.canRead() || gs.nil(escalationRecord)) return accountInfo;
accountInfo.activeEscalation.id = escalationRecord.sys_id + '';
accountInfo.activeEscalation.number = escalationRecord.number + '';
accountInfo.activeEscalation.state = {};
accountInfo.activeEscalation.state.value = escalationRecord.getValue('state');
accountInfo.activeEscalation.state.displayValue = escalationRecord.getDisplayValue('state');
}
}
return accountInfo;
},
_shouldFetchAccountDetails: function(record, userType) {
if (record.getTableName() == "sn_customerservice_case" && (userType == 'contact' || userType == 'partner_contact'))
return true;
if (record.getTableName() == "customer_account" && userType == "primary_contact")
return true;
if (record.getTableName() == "customer_contact")
return true;
return false;
},
_addUserFieldsDataToResults: function(results, user, gr, relatedFields) {
if (!gs.nil(user) && !gs.nil(gr.getElement(user))) {
var fields = [];
var userRecord = gr.getElement(user).getRefRecord();
if (userRecord && userRecord.canRead()) {
fields = this._constructFieldList(gr, userRecord, relatedFields);
var item = {
"userType": user,
"userTypeLabel": gr.getElement(user).getED().getLabel(),
"avatar": GlideAvatarFinder.getAvatarPath(userRecord.sys_id + ''),
"hasValue": !gs.nil(user),
"fields": fields,
"accountDetails": this._getAccountDetails(gr, user)
};
results.push(item);
}
}
},
getTimelineData: function(table, sysId) {
var timelineEntries = [];
var ngStream = new GlideNGStreamAPI().getFormStreamData(table, sysId, null);
var entries = ngStream.entries();
var usersActiveOnRecord = [];
for (var i = 0; i < entries.size(); i++) {
var timelineEntry = {};
var entry = entries.get(i);
timelineEntry.sysCreatedOn = entry.sys_created_on();
timelineEntry.sysCreatedOnAdjusted = entry.sys_created_on_adjusted();
timelineEntry.sysCreatedBy = entry.sys_created_by();
timelineEntry.presenceUserId = entry.presence_user_id() + '';
timelineEntry.type = entry.type();
timelineEntry.initials = entry.initials();
if (usersActiveOnRecord.indexOf(timelineEntry.presenceUserId) < 0)
usersActiveOnRecord.push(timelineEntry.presenceUserId);
if (entry.type() == "JOURNAL") {
var journal = entry.journal();
var journalEntry = {};
if (journal.field_name() != "comments")
continue;
journalEntry.fieldName = journal.field_name();
journalEntry.fieldLabel = journal.field_label();
journalEntry.newValue = journal.new_value();
journalEntry.sysId = journal.sys_id();
timelineEntry.journalEntry = journalEntry;
} else if (entry.type() == "AUDIT") {
var auditValues = entry.audit();
var auditEntries = [];
for (var j = 0; j < auditValues.size(); j++) {
var auditValue = auditValues.get(j);
var auditEntry = {};
auditEntry.fieldName = auditValue.field_name();
auditEntry.fieldLabel = auditValue.field_label();
auditEntry.newValue = auditValue.new_value();
auditEntry.oldValue = auditValue.old_value();
auditEntries.push(auditEntry);
}
timelineEntry.auditEntries = auditEntries;
}
timelineEntries.push(timelineEntry);
}
return {timelineEntries: timelineEntries, usersActiveOnRecord: usersActiveOnRecord};
},
getRSConfig: function (table) {
var rsConfig = null;
var tableHierarchy = GlideDBObjectManager.getTables(table).toArray().concat();
var rsConfigRecord = new GlideRecord("sys_resolutionshaper_config");
if (!rsConfigRecord.canRead()) return null;
rsConfigRecord.addQuery("table", "IN", tableHierarchy);
rsConfigRecord.query();
while (rsConfigRecord.next()) {
if (rsConfig == null || tableHierarchy.indexOf(rsConfigRecord.table + '') < tableHierarchy.indexOf(rsConfig.table)) {
rsConfig = {};
rsConfig.table = rsConfigRecord.table + '';
rsConfig.requestorStates = rsConfigRecord.requestor_states + '';
rsConfig.newState = rsConfigRecord.new_state + '';
rsConfig.closedState = rsConfigRecord.closed_state + '';
rsConfig.fulfillerLabel = rsConfigRecord.fullfiller_label + '';
rsConfig.callerLabel = rsConfigRecord.caller_label + '';
rsConfig.requestLabel = rsConfigRecord.request_label + '';
}
}
return rsConfig;
},
type: 'RibbonDataUtil'
};
Sys ID
1b689668b703011058db2c43ae11a9f4