Name
global.SubscriptionUtil
Description
Utility class to support subscription notifications
Script
gs.include("PrototypeServer");
var SubscriptionUtil = Class.create();
/*
This isn't a generic subscription class, this can only be used to subscribe and unsubscribe cmdb_ci notifications.
*/
SubscriptionUtil.prototype = {
initialize: function() {
this.isLegacy = gs.getProperty("glide.notification.use_legacy_subscription_model") != "false";
},
isSubscribed: function(cmdb_ci) {
return this._getSubscriptionRecord(cmdb_ci).hasNext();
},
subscribe: function(cmdb_ci) {
if (this.isLegacy)
return this._subscribeNotifMessage(cmdb_ci);
else {
return this._subscribe(cmdb_ci);
}
},
_subscribe: function(cmdb_ci) {
var gr = new GlideRecord("sys_notif_subscription");
gr.user = gs.getUserID();
gr.name = "Subscription to " + cmdb_ci.name;
gr.devices = this._getPrimaryEmail();
gr.notification = this._getCIAffected();
gr.affected_record = cmdb_ci.sys_id;
gr.affected_table = "cmdb_ci";
return gr.insert();
},
_subscribeNotifMessage: function(cmdb_ci) {
var gr = new GlideRecord('cmn_notif_message');
gr.user = gs.getUserID();
gr.configuration_item = cmdb_ci.sys_id;
gr.device = this._getPrimaryEmail();
gr.notification = this._getCIAffected();
return gr.insert();
},
unsubscribe : function(cmdb_ci) {
var gr = this._getSubscriptionRecord(cmdb_ci);
if (gr.next())
gr.deleteRecord();
},
_getCIAffected : function() {
var gr = new GlideRecord('sysevent_email_action');
gr.addQuery('event_name', 'ci.affected');
gr.query();
if (gr.next())
return gr.sys_id + '';
return '';
},
_getSubscriptionRecord: function( cmdb_ci) {
if (this.isLegacy)
return this._getNotifMessageSubscriptionRecord(cmdb_ci);
else
return this._getNotifSubscriptionRecord(cmdb_ci);
},
_getNotifSubscriptionRecord: function(cmdb_ci) {
var gr = new GlideRecord("sys_notif_subscription");
gr.addQuery("user", gs.getUserID());
gr.addQuery("affected_record", cmdb_ci.sys_id);
gr.query();
return gr;
},
_getNotifMessageSubscriptionRecord: function(cmdb_ci) {
var gr = new GlideRecord('cmn_notif_message');
gr.addQuery('user', gs.getUserID());
gr.addQuery('configuration_item', cmdb_ci.sys_id);
gr.query();
return gr;
},
_getPrimaryEmail : function() {
var user_id = gs.getUserID();
var gr = new GlideRecord('cmn_notif_device');
gr.addQuery('user', user_id);
gr.addQuery('primary_email', true);
gr.query();
if (gr.next())
return gr.sys_id + '';
gr.initialize();
gr.user = user_id;
gr.name = gs.getMessage('Primary email');
gr.primary_email = true;
gr.type = 'Email';
gr.email_address = gs.getUser().getEmail();
return gr.insert();
}
}
Sys ID
224cf3e0c0a80006005cce13cc2d95c6