Name
global.VATopicsHelper
Description
Common helper functions used in the example topics
Script
var VATopicsHelper = Class.create();
VATopicsHelper.prototype = {
initialize: function() {},
getTableRecords: function(tblName, encQuery) {
var records = [];
var grCnt = new GlideRecord(tblName);
if (encQuery != '')
grCnt.addEncodedQuery(encQuery);
grCnt.query();
while (grCnt.next())
records.push(grCnt.getUniqueValue());
return records;
},
getUserOpenTicketsMessage: function(user, incQuery, hrQuery, reqQuery, portalName, userLanguage) {
this.portalName = portalName;
if (gs.nil(userLanguage))
userLanguage = vaContext.getRequesterLang();
var ints = this.getTableRecords('incident', incQuery);
var reqs = this.getTableRecords('sc_request', reqQuery);
var intCnt = ints.length;
var reqCnt = reqs.length;
var hrCnt = 0;
var hrCases = [];
if (!GlidePluginManager.isActive('com.sn_hr_core'))
hrCnt = -1;
else {
try { //try catch, so any cross scope error for HR doesnt interrupt the flow
hrCases = this.getTableRecords('sn_hr_core_case', hrQuery);
hrCnt = hrCases.length;
} catch (e) {
gs.info("There was an error processing HR cases:" + e);
}
}
var msg = '';
var incUrl = this._getSPUrl('incident', incQuery, ints);
var hrUrl = this._getSPUrl('sn_hr_core_case', hrQuery, hrCases);
var reqUrl = this._getSPUrl('sc_request', reqQuery, reqs);
var incLabel = (intCnt > 1) ? gs.getMessageLang('Incidents', userLanguage) : gs.getMessageLang('Incident', userLanguage);
var hrLabel = (hrCnt > 1) ? gs.getMessageLang('HR Cases', userLanguage) : gs.getMessageLang('HR Case', userLanguage);
var reqLabel = (reqCnt > 1) ? gs.getMessageLang('Requests', userLanguage) : gs.getMessageLang('Request', userLanguage);
var tickets = [];
if (intCnt > 0) {
tickets.push(incUrl);
tickets.push(intCnt.toFixed());
tickets.push(incLabel);
}
if (hrCnt > 0) {
tickets.push(hrUrl);
tickets.push(hrCnt.toFixed());
tickets.push(hrLabel);
}
if (reqCnt > 0) {
tickets.push(reqUrl);
tickets.push(reqCnt.toFixed());
tickets.push(reqLabel);
}
if (tickets.length == 0)
return '';
var cnt = (tickets.length / 3);
switch (cnt) {
case 1:
msg += gs.getMessageLang('ITSMVA_DynamicGreeting_1', userLanguage, tickets);
break;
case 2:
msg += gs.getMessageLang('ITSMVA_DynamicGreeting_2', userLanguage, tickets);
break;
case 3:
msg += gs.getMessageLang('ITSMVA_DynamicGreeting_3', userLanguage, tickets);
break;
}
return msg;
},
_getSPUrl: function(table, filter, records) {
var baseURL = gs.getProperty('glide.servlet.uri');
var link = baseURL + this.portalName + '?id=list&table=' + table + '&filter=' + filter;
if (records.length == 1)
link = baseURL + this.portalName + '?id=form&table=' + table + '&sys_id=' + records.join();
return link;
},
getOutages: function(outageTbl, encQuery, limit, userLanguage) {
var message = '';
if (!limit) limit = 3;
if (gs.nil(userLanguage))
userLanguage = vaContext.getRequesterLang();
var grOutage = new GlideRecord(outageTbl);
grOutage.addEncodedQuery(encQuery);
if (limit > 0)
grOutage.setLimit(limit);
grOutage.orderByDesc('begin');
grOutage.query();
message += (grOutage.getRowCount() > 0) ? gs.getMessageLang('Service degradations I am currently aware of ', userLanguage) : '';
while (grOutage.next()) {
var msg = '<li>';
var type = grOutage.getDisplayValue('type');
var name = grOutage.getDisplayValue('cmdb_ci');
var start_time = new GlideDateTime(grOutage.getValue('begin'));
var end_time = grOutage.getValue('end');
msg += gs.getMessageLang('{0} of {1} that began at {2}.', userLanguage, [type, name, start_time.getDisplayValue()]);
if (end_time != '') {
msg += gs.getMessageLang(' The {0} is expected to end at {1}.', userLanguage, [type, (new GlideDateTime(end_time)).getDisplayValue()]);
}
msg += '</li>';
message += msg;
}
return message;
},
outagesInfo: function(outageTbl, encQuery, limit, userLanguage) {
var message = [];
if (gs.nil(userLanguage))
userLanguage = vaContext.getRequesterLanguage();
if (!limit) limit = 3;
var grOutage = new GlideRecord(outageTbl);
grOutage.addEncodedQuery(encQuery);
if (limit > 0)
grOutage.setLimit(limit);
grOutage.orderByDesc('begin');
grOutage.query();
if (grOutage.getRowCount() > 0) {
message.push(gs.getMessageLang('Service degradations I am currently aware of \n\n', userLanguage));
}
while (grOutage.next()) {
var type = grOutage.getDisplayValue('type');
var name = grOutage.getDisplayValue('cmdb_ci');
var start_time = new GlideDateTime(grOutage.getValue('begin'));
var end_time = grOutage.getValue('end');
message.push("- ");
message.push(gs.getMessageLang('{0} of {1} that began at {2}.', userLanguage, [type, name, start_time.getDisplayValue()]));
if (end_time != '') {
message.push(gs.getMessageLang(' The {0} is expected to end at {1}.', userLanguage, [type, (new GlideDateTime(end_time)).getDisplayValue()]));
}
message.push("\n\n");
}
return message.join('');
},
openTicketsInfo: function(deviceType, userLanguage, portalName) {
var tables = [];
var portal_pages = [];
if (gs.nil(userLanguage))
userLanguage = vaContext.getRequesterLang();
if (gs.nil(portalName))
portalName = vaVars.portalName;
var records = this.getMyRequestSysIds(tables, portal_pages, deviceType);
var recordsCount = records.length;
var baseURL = gs.getProperty('glide.servlet.uri');
var link = baseURL + portalName + '?id=my_requests';
var reqLabel = (recordsCount > 1) ? gs.getMessageLang('Open Issues', userLanguage) : gs.getMessageLang('Open Issue', userLanguage);
return gs.getMessageLang("You currently have [**{0} {1}**]({2})", userLanguage, [recordsCount.toFixed(), reqLabel, link]);
},
getMyRequestSysIds: function(tables, portal_pages, deviceType) {
var ids = [];
var rq_filter = new GlideRecord('request_filter');
rq_filter.addActiveQuery();
if (gs.nil(deviceType))
deviceType = vaContext.deviceType;
if (deviceType == 'android' || deviceType == 'ios') {
// 100 Implies Mobile
if (rq_filter.isValidField('applies_to'))
rq_filter.addQuery('applies_to', 100);
} else {
// 1 Implies Service portal and 10 Implies Desktop/Service Portal
if (rq_filter.isValidField('applies_to'))
rq_filter.addQuery('applies_to', 1).addOrCondition('applies_to', 10);
}
rq_filter.query();
while (rq_filter.next()) {
var tableName = rq_filter.table_name;
if (rq_filter.isValidField('table'))
tableName = rq_filter.table;
var gr = new GlideRecord(tableName);
gr.addQuery(rq_filter.filter);
gr.addActiveQuery();
gr.query();
while (gr.next()) {
ids.push(gr.sys_id.toString());
tables.push(rq_filter.table.toString());
portal_pages.push(rq_filter.portal_page.id.toString());
}
}
return ids;
},
openTicketsStatus: function(deviceType, userLanguage, portalName) {
var statusMsg = [];
if (gs.nil(userLanguage))
userLanguage = vaContext.getRequesterLang();
if (gs.nil(portalName))
portalName = vaVars.portalName;
var baseURL = gs.getProperty('glide.servlet.uri');
var tables = [];
var portal_pages = [];
var records = this.getMyRequestSysIds(tables, portal_pages, deviceType);
var recordsCount = records.length;
for (var i = 0; i < recordsCount; i++) {
var statusLink = baseURL + portalName + '?id=' + portal_pages[i] + '&table=' + tables[i] + '&sys_id=' + records[i];
var statusGr = new GlideRecord(tables[i]);
statusGr.get(records[i]);
var statusRecordNumber = statusGr.number;
var statusRecordShortDescription = statusGr.short_description;
var statusRecordState = statusGr.state.getDisplayValue();
if (tables[i] == 'sc_request') {
var requestedItem = new GlideRecord('sc_req_item');
requestedItem.addQuery('request', statusGr.sys_id);
requestedItem.query();
if (requestedItem.next()) {
statusRecordState = requestedItem.stage.getDisplayValue();
}
}
if (statusRecordShortDescription != '') {
statusMsg.push(gs.getMessageLang("[**{0}**]({1}) : **{2}** status is **{3}**", userLanguage, [statusRecordNumber, statusLink, statusRecordShortDescription, statusRecordState]));
} else {
statusMsg.push(gs.getMessageLang("[**{0}**]({1}) status is **{2}**", userLanguage, [statusRecordNumber, statusLink, statusRecordState]));
}
}
return statusMsg.join('\n');
},
openTicketsCount: function(deviceType) {
var tables = [];
var portal_pages = [];
var records = this.getMyRequestSysIds(tables, portal_pages, deviceType);
return records.length;
},
type: 'VATopicsHelper'
};
Sys ID
e1bc2f8653170010c839ddeeff7b12f9