Name

global.AgileBoardEpicUtil

Description

No description available

Script

var AgileBoardEpicUtil = Class.create();
AgileBoardEpicUtil.prototype = {
  initialize: function() {
      this.EPIC_FILTER_SORT_FIELD = "short_description";
      this.SORT_ORDER = "ASC"; // Keep "ASC" for ascending order and "DSC" for descending order.
  },

  getSortField: function(tableName, fieldName) {
      var gr = new GlideRecord(tableName);
      if (!gr.isValidField(fieldName)) {
          this.EPIC_FILTER_SORT_FIELD = "short_description";
      }
  },

  getEpicsWithTotal: function(storyFilterId, limit, offset) {
      var epicData;
      var epics;
      var epicFilter;
      var filterQuery;
      var agFilter = new GlideRecord('backlog_definition');
      var epicIds = [];

      agFilter.get(storyFilterId);
      filterQuery = agFilter.getValue('filter');

      if (JSUtil.notNil(storyFilterId) && JSUtil.notNil(filterQuery)) {
          epicFilter = new GlideAggregate('rm_story');
          epicFilter.addNotNullQuery('epic.sys_id');
  		this.getSortField("rm_epic",this.EPIC_FILTER_SORT_FIELD);
          var sortField = "epic." + this.EPIC_FILTER_SORT_FIELD;
          if (this.SORT_ORDER === "ASC") {
              epicFilter.orderBy(sortField);
          } else if (this.SORT_ORDER === "DSC") {
              epicFilter.orderByDesc(sortField);
          }
          epicFilter.addEncodedQuery(filterQuery);
          epicFilter.groupBy('epic');
          epicFilter.chooseWindow(offset, limit - 1, true);
          epicFilter.query();

          while (epicFilter.next()) {
              epicIds.push(epicFilter.getValue('epic'));
          }

      } else {
          epicFilter = new GlideRecord('rm_epic');
  		this.getSortField("rm_epic",this.EPIC_FILTER_SORT_FIELD);
          if (this.SORT_ORDER === "ASC") {
              epicFilter.orderBy(this.EPIC_FILTER_SORT_FIELD);
          } else if (this.SORT_ORDER === "DSC") {
              epicFilter.orderByDesc(this.EPIC_FILTER_SORT_FIELD);
          }
          epicFilter.chooseWindow(0, limit - 1, true);
          epicFilter.query();
          while (epicFilter.next()) {
              epicIds.push(epicFilter.getValue('sys_id'));
          }
      }
      epics = this.getFilterData("rm_epic", epicIds, this.EPIC_FILTER_SORT_FIELD, this.SORT_ORDER);

      return {
          epics: epics,
          total: epicFilter.getRowCount()
      };
  },

  getFilterData: function(filterTable, filterRecIds, sortField, sortOrder) {
      var filterRecData;
      var filterData = [];
      var filterRecGr = new GlideRecord(filterTable);

      filterRecGr.addQuery('sys_id', 'IN', filterRecIds.join(','));
      if (sortOrder === "ASC") {
          filterRecGr.orderBy(sortField);
      } else if (sortOrder === "DSC") {
          filterRecGr.orderByDesc(sortField);
      }
      filterRecGr.query();

      while (filterRecGr.next()) {
          filterRecData = {};

          filterRecData.sys_id = filterRecGr.getValue('sys_id');
          filterRecData.short_description = filterRecGr.getValue('short_description');
          filterRecData.totalStoryCount = filterRecGr.getValue('total_story_count');
          filterRecData.completedStoryPoints = filterRecGr.getValue('completed_count');
          filterRecData.totalStoryPoints = filterRecGr.getValue('total_estimate');
          filterRecData.percentCompleteByEstimate = filterRecGr.getValue('percent_complete_by_estimate');

          filterData.push(filterRecData);
      }

      return filterData;
  },

  type: 'AgileBoardEpicUtil'
};

Sys ID

1736745753b33200d044ddeeff7b1227

Offical Documentation

Official Docs: