Name

global.SimpleRollupHandler

Description

No description available

Script

var SimpleRollupHandler = Class.create();
SimpleRollupHandler.prototype = {

  initialize: function() {
  },

  handle: function(childRecord, parentTable, parentNavigator, rollupColumn, isAverage) {
      var rollupStructureLoader = new RollupStructureLoader();
      var parentSysId = childRecord.getValue(parentNavigator);
      var rollupStructure = rollupStructureLoader.loadStructure(childRecord, 
              rollupColumn, parentNavigator, parentSysId);
      this.updateParent(parentTable, parentSysId, 
              rollupStructure, childRecord.getTableName(), rollupColumn, isAverage);
  },

  updateParent: function(parentTable, parentSysId, rollupStructure, childTable, rollupColumn, isAverage) {
      var dictionaryHelper = new DictionaryHelper();
      var element = dictionaryHelper.getElement(childTable, rollupColumn);
      var value = this.aggregateValueByType(rollupStructure, rollupColumn, element, isAverage);
      if( null != value) {
          var parentTaskRecord = new GlideRecord(parentTable);
          //gs.info("Updating Parent Table: " + parentTable + " for Sys Id: " + parentSysId + 
              // " For Rollup Column: " + rollupColumn + " with value : " + value);
          if( parentTaskRecord.get(parentSysId) ) {
              parentTaskRecord.setValue(rollupColumn, value);
              parentTaskRecord.update();
              parentTaskRecord.get(parentSysId); // re-get the record and 
              //gs.info( "Updated: " + parentTaskRecord.getValue("sys_id") + " ->  " + rollupColumn + " -> " + value);    
          }
      }
  },

  aggregateValueByType: function(rollupStructure, childField, element, isAverage) {
      if(element && rollupStructure) {
          var aggregationHelper = new AggregationHelper();
          if("integer".equals(element) || "long".equals(element)) {
              return aggregationHelper.aggregateInteger(rollupStructure, childField);
          } else if("glide_duration".equals(element)) {
              return aggregationHelper.aggregateDuration(rollupStructure, childField);
          } else {
              // aggregate it as float
              return aggregationHelper.aggregateFloat(rollupStructure, childField, isAverage);
          }
      }
  },

  type: 'SimpleRollupHandler'
};

Sys ID

ed6925619f230200598a5bb0657fcfb4

Offical Documentation

Official Docs: