Name

global.InstanceCloneUtil

Description

No description available

Script

var InstanceCloneUtil = Class.create();
InstanceCloneUtil.prototype = {
  initialize: function() {
  },

  type: 'InstanceCloneUtil'
};

InstanceCloneUtil.generateRecurringClones = function(parentCloneRec) {
  if(gs.nil(parentCloneRec)) 
  	return;

  var cloneFrequency = parentCloneRec.getValue('clone_frequency');
  if(gs.nil(cloneFrequency) || parentCloneRec.getValue('recurring') == 0) 
  	return;
  
  var cloneCount = 1;
  var maxOccurrences = parentCloneRec.getValue('occurrences');
  var cloneRequestedTime = parentCloneRec.getValue('scheduled');
  if(gs.nil(cloneRequestedTime)) 
  	cloneRequestedTime = new GlideDateTime();

  var cloneScheduledTime = new GlideDateTime(cloneRequestedTime);

  if(gs.nil(maxOccurrences) || maxOccurrences == 1) 
  	return;

  var upperBoundForMaxOccurrences = 50;// Never allow more than upperBoundForMaxOccurrences clones to be scheduled via recurring

  while(cloneCount < maxOccurrences && cloneCount <= upperBoundForMaxOccurrences) {

  	if(cloneFrequency == 1) 
  		cloneScheduledTime.addDaysUTC(7);
  	else if(cloneFrequency == 2) 
  		cloneScheduledTime.addDaysUTC(14);
  	else if(cloneFrequency == 3) 
  		cloneScheduledTime.addMonthsUTC(1);
  	
  	var parentCloneGr = new GlideRecord('clone_instance');
  	parentCloneGr.addQuery('sys_id', parentCloneRec.getValue('sys_id'));
  	parentCloneGr.query();
  	
  	if(parentCloneGr.next()) {
  		parentCloneGr.setValue('scheduled', cloneScheduledTime);
  		parentCloneGr.setValue('parent', parentCloneRec.getValue('sys_id'));
  		parentCloneGr.setValue('clone_id', '');
  		parentCloneGr.setValue('clone_frequency', '');
  		parentCloneGr.insert();
  	}
  	
  	cloneCount ++;
  }
  
  parentCloneRec.setValue('parent', parentCloneRec.getValue('sys_id'));
  parentCloneRec.setWorkflow(false);
  parentCloneRec.update();
};

InstanceCloneUtil.getOptionsJson = function(defaultOptions) {
  var options = {};

  if(gs.nil(defaultOptions)) 
  	return '';

  for(var key in defaultOptions) {
  	var label = defaultOptions[key];
  	var value = defaultOptions[key];
  	options[label] = value;
  }

  return options;
};

InstanceCloneUtil.getRecurringCloneEndDate = function(cloneRequestedTime, cloneFrequency, maxOccurrences) {
  if(gs.nil(cloneFrequency) || gs.nil(maxOccurrences)) 
  	return;

  if(gs.nil(cloneRequestedTime)) 
  	cloneRequestedTime = new GlideDateTime();

  var currentScheduledDate = new GlideDateTime(cloneRequestedTime),
  	multiplier = maxOccurrences - 1;
  
  if(maxOccurrences <= 1)
  	return currentScheduledDate.getDate().getDisplayValue();

  if(cloneFrequency == 1) 
  	currentScheduledDate.addDaysUTC(7 * multiplier);
  else if(cloneFrequency == 2) 
  	currentScheduledDate.addDaysUTC(14 * multiplier);
  else if (cloneFrequency == 3) 
  	currentScheduledDate.addMonthsUTC(multiplier);

  return currentScheduledDate.getDate().getDisplayValue();
};

Sys ID

7d48846573003300b39f84c2c4f6a79f

Offical Documentation

Official Docs: