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