Name

global.BacklogMetaDataService

Description

No description available

Script

var BacklogMetaDataService = Class.create();

BacklogMetaDataService.getPreferredBacklogFilterId = function(userId) {

  if (JSUtil.nil(userId))
  	userId = gs.getUserID();
  var user = GlideUser.getUserByID(userId);
  var filterId = user.getPreference("com.snc.agile_board.lastSelectedBacklog") || '' ;
  var gr = new GlideRecord('backlog_definition');
  if (JSUtil.notNil(filterId)) {
  	gr.addQuery('shared_with_groups', 'DYNAMIC', 'd6435e965f510100a9ad2572f2b47744').addOrCondition('owner', userId).addOrCondition('shared_with', 'CONTAINS', userId);			
      gr.addQuery('sys_id', filterId);
      gr.query();
      if (!gr.next())
  		filterId = '';
  }
  
  if (JSUtil.nil(filterId)) {
  	gr = new GlideRecord('backlog_definition');
  	gr.addQuery('shared_with_groups', 'DYNAMIC', 'd6435e965f510100a9ad2572f2b47744').addOrCondition('owner', userId).addOrCondition('shared_with', 'CONTAINS', userId);
  	gr.addQuery('table', 'rm_story');
  	gr.orderByDesc('sys_updated_on');
  	gr.setLimit(1);
  	gr.query();
  	if (gr.next())
  		filterId = gr.getValue('sys_id');
  }
  user.setPreference("com.snc.agile_board.lastSelectedBacklog", filterId);

  if (gr.isValidRecord())
  	return gr.getValue('sys_id');

  return null;
};

BacklogMetaDataService.query = {
  nonStoryFilter: 'original_task.sys_class_name!=rm_story^active=true^sprintISEMPTY^original_task.active=true^backlog_definition=',
  storyFilter: AgileBoardMetaDataCommonUtil.isMultiTaskActive() ? 'original_task.sys_class_name=rm_story' : 'sys_class_name=rm_story'
};

BacklogMetaDataService.buildQuery = function(filterId, backlogQuery) {
  var metricQuery = '';

  return BacklogMetaDataService.buildMetricQuery(filterId, backlogQuery, metricQuery);
};

BacklogMetaDataService.buildMetricQuery = function(backlogId, backlogQuery, metricQuery) {
  var nonStoryPart = '', storyPart = '';
  var filters = backlogQuery.split('^NQ');
  var query = this.query;

  if (AgileBoardMetaDataCommonUtil.isMultiTaskActive())
  	nonStoryPart = query.nonStoryFilter + backlogId + metricQuery + '^NQ';

  storyPart += filters.map(function(filter) {
  	return query.storyFilter + metricQuery + '^' + filter;
  }).join('^NQ');

  var combinedQuery = nonStoryPart + storyPart;

  return combinedQuery;
};

BacklogMetaDataService.getMetricCount = function(query) {
  var count = 0;
  var gr = new GlideAggregate('rm_story');
  gr.addEncodedQuery(query);
  gr.addAggregate('COUNT');
  gr.query();
  if (gr.next())
      count = gr.getAggregate('COUNT');
  return count;
};

BacklogMetaDataService.getMetrics = function(backlogId){
  var  backlogQuery = '';
  var isMultiTaskActive = AgileBoardMetaDataCommonUtil.isMultiTaskActive();
  if (JSUtil.notNil(backlogId) && backlogId !== 'null') {
  	var gr = new GlideRecord('backlog_definition');
  	if (gr.get(backlogId))
  		backlogQuery = gr.getValue('filter');
  }
  if (JSUtil.nil(backlogQuery))
  	backlogQuery = '';

  var allStoriesQuery = '';
  var unsizedStoriesQuery = 'story_pointsISEMPTY^ORstory_points=0';
  var noACStroiesQery = 'acceptance_criteriaISEMPTY';
  var metrics = [{
      name: isMultiTaskActive ? gs.getMessage('Records in total') : gs.getMessage('Stories in total'),
      query: allStoriesQuery,
      count: this.getMetricCount(this.buildMetricQuery(backlogId, backlogQuery, allStoriesQuery))
  }, {
      name: gs.getMessage('No story points'),
      query: unsizedStoriesQuery,
      count: this.getMetricCount(this.buildMetricQuery(backlogId, backlogQuery, '^' + unsizedStoriesQuery))
  }, {
      name: gs.getMessage('No acceptance criteria'),
      query: noACStroiesQery,
      count: this.getMetricCount(this.buildMetricQuery(backlogId, backlogQuery, '^' + noACStroiesQery))
  }];
  return metrics;
};

BacklogMetaDataService.getBacklogMetaData = function() {
  var epicGr = new GlideRecord('rm_epic');
  var themeGr = new GlideRecord('scrum_theme');
  var storyGr = new GlideRecord('rm_story');
  var isMultiTaskActive = AgileBoardMetaDataCommonUtil.isMultiTaskActive();
  var searchFilterFields = ['short_description', 'number'];
  if(isMultiTaskActive)
  	searchFilterFields.push('original_task.number');
  var metadata = {
      backlogPageSize: parseInt(gs.getUser().getPreference('rowcount')),
      canWrite: storyGr.canWrite(),
  	canCreateStory: storyGr.canCreate(),
  	canCreateEpic: epicGr.canCreate(),
  	canCreateTheme: themeGr.canCreate(),
  	showStoryContextMenu: storyGr.canWrite(),
  	showEpicFilter: true,
  	epicsLimit: 10,
  	triageLimit: 20,
  	filterType: "checkbox",
  	config: {
  		epic_filter: AgileBoardMetaDataCommonUtil.getBooleanPreference('backlog.config.epic_filter', true)
  	},
  	listConfig: AgileBoardMetaDataCommonUtil.getBacklogListConfig(),
  	transformField: isMultiTaskActive ? 'original_task.number' : 'number',
  	isMultiTaskActive: isMultiTaskActive,
  	defaultQuery: this.query,
  	view: 'scrum',
  	listView: isMultiTaskActive ? 'unified_agile_board' : 'agile_board',
  	backlogTable: 'rm_story',
  	searchFilter: searchFilterFields,
  	searchPlaceHolder: gs.getMessage('Search')
  };

  return metadata;
};

Sys ID

06c571b75bd2030036c32c1cf0f91a03

Offical Documentation

Official Docs: