Name
global.UpdateSetPublisher
Description
This Script UpdateSetPublisher is developed as part of Pattern Export functionality We are exporting only changed data Example 1. var publisher = new UpdateSetPublisher( My Test UpdateSet name ); 2. var publisher = new UpdateSetPublisher(); // Use the current UpdateSet //Pass single table with one or multiple records var gr = GlideRecord( sa_pattern ); gr.query(); publisher.publishSingle(gr); //Pass single table with one or multiple records var gr1 = GlideRecord( sa_pattern ); gr1.query(); var gr2 = GlideRecord( sa_pattern_extension ); gr2.query(); publisher.publishMultiple( gr1, gr2 );
Script
var UpdateSetPublisher = Class.create();
UpdateSetPublisher.prototype = {
initialize: function(newUpdateSetName, logger) {
this.updateSetName = newUpdateSetName;
this.logger = logger;
this.api = new UpdateSetAPI();
if (newUpdateSetName !== null && newUpdateSetName !== undefined) {
this.originUpdateSetId = this.api.getCurrentUpdateSetID();
this.api.insertUpdateSetAsCurrent(newUpdateSetName);
this.logger.log('UpdateSet: ' + newUpdateSetName + ' set as current');
}
this.isForcePublish = false;
this.manager = new GlideUpdateManager2();
this.countOfPublishedRecords = 0;
this.updateSetId = this.api.getCurrentUpdateSetID();
this.updateSetArray = {};
this.updateSetArray['global'] = this.updateSetId;
},
complete: function() {
this.api.completeUpdateSet(this.updateSetId);
},
accomplish: function() {
if (this.originUpdateSetId !== undefined) {
/* Restore the previous UpdateSet to be a current*/
new GlideUpdateSet().set(this.originUpdateSetId);
this.logger.log('Original UpdateSet is set to current');
} else
this.logger.error('Failed to set original UpdateSet as current');
},
getUpdateSetId: function() {
return this.updateSetId;
},
publishMultiple: function(tables, skipLog, isReference, aRef, bRef) {
for (var currentTableIndex in tables) {
var currentTable = tables[currentTableIndex];
this.publishSingle(currentTable, skipLog, isReference, aRef, bRef);
}
},
publishSingle: function(table, skipLog, isReference, aRef, bRef) {
this._publish(table, skipLog, isReference, aRef, bRef);
},
_publish: function(gr, skipLog, isReference, aRef, bRef) {
if (gr === null)
return;
var tableName = gr.getTableName();
while (gr.next()) {
if (!this._isRecordExist(gr) && !this.isForcePublish) {
this.manager.saveRecord(gr);
if (skipLog === undefined || (skipLog !== undefined && skipLog === false)) {
if (isReference === undefined || (isReference !== undefined && isReference === false))
this.logger.log('Exporting record: [' + tableName + '] ' + gr.getDisplayValue());
else
this.logger.log('Exporting record: [' + tableName + '] Reference: ' + gr.getElement(aRef).getDisplayValue() + '->' + gr.getElement(bRef).getDisplayValue());
}
this.countOfPublishedRecords++;
}
}
},
_isRecordExist: function(gr) {
var upGr = new GlideRecord('sys_update_xml');
upGr.addQuery('name', gr.getTableName() + '_' + gr.sys_id);
upGr.addQuery('update_set', this.updateSetId);
upGr.query();
return upGr.hasNext();
},
getCountOfPublishedRecords: function() {
return this.countOfPublishedRecords;
},
__publish: function(gr) {
var upGr = new GlideRecord('sys_update_xml');
upGr.addQuery('name', this.manager.getUpdateName(gr));
upGr.addQuery('update_set', this.updateSetId);
upGr.query();
if (upGr.hasNext())
return;
upGr.initialize();
upGr.setValue('category', 'customer');
upGr.setValue('name', this.manager.getUpdateName(gr));
upGr.setValue('update_domain', 'global');
var targetName;
if (gr.name)
targetName = gr.name;
else
targetName = gr.sys_id;
upGr.setValue('target_name', targetName);
upGr.setValue('update_set', updateSetId);
upGr.setValue('payload', gs.unloadRecordToXML(gr, false));
upGr.setValue('action', 'INSERT_OR_UPDATE');
var descriptor = GlideTableDescriptor.get(gr.getTableName());
upGr.setValue('type', descriptor.getLabel());
upGr.insert();
},
splitUpdateSetScopes: function() {
var updatesetGr = new GlideRecord('sys_update_xml');
updatesetGr.addQuery('update_set', this.updateSetId);
updatesetGr.query();
while (updatesetGr.next()) {
var application = updatesetGr.application;
if (application == 'global')
continue;
this.createUpdateSetIfNotExist(this.updateSetName, application);
updatesetGr.setValue('update_set', this.updateSetArray[application]);
updatesetGr.update();
}
},
createUpdateSetIfNotExist: function(name, appId) {
if (gs.nil(this.updateSetArray[appId])) {
var gr = new GlideRecord('sys_update_set');
gr.initialize();
gr.name = name + '_' + appId;
gr.application = appId;
gr.parent = this.updateSetArray['global'];
var sysID = gr.insert();
this.updateSetArray[appId] = sysID;
}
},
type: 'UpdateSetPublisher'
};
/*Static function for delete */
UpdateSetPublisher.deleteAllUpdateSets = function(baseUpdatesetSysId) {
var updateSetList = [];
var ugr = new GlideRecord("sys_remote_update_set");
ugr.addQuery("sys_id", baseUpdatesetSysId);
ugr.query();
if (ugr.next()) {
//remote_sys_id and remote_base_sys_id provide the necessary references to parent and child update sets in the batch.
updateSetList.push(ugr.remote_sys_id);
updateSetList.push(ugr.remote_base_update_set);
}
var gr = new GlideRecord('sys_update_xml');
gr.addQuery('update_set', updateSetList);
gr.setWorkflow(false);
gr.deleteMultiple();
var gr2 = new GlideRecord('sys_remote_update_set');
gr2.addQuery('remote_base_update_set', updateSetList);
gr2.query();
gr2.setWorkflow(false);
gr2.deleteMultiple();
var gr3 = new GlideRecord('sys_update_set');
gr3.addQuery('base_update_set', updateSetList);
gr3.query();
gr3.setWorkflow(false);
gr3.deleteMultiple();
};
Sys ID
d2633059934203008a2e35bb357ffbf7