Name
global.ScrumTeam
Description
Provides common utility methods related to scrum team
Script
var ScrumTeam = Class.create();
ScrumTeam.prototype = {
initialize: function(gr) {
this.gr = gr;
this.sprints = [];
this.agileGroupTypeSysId = '1bff3b1493030200ea933007f67ffb6d';
},
sysId: function() {
return this.gr.getValue('sys_id');
},
convertToGroup: function() {
var group = new GlideRecord('sys_user_group');
var groupExists = group.get('name', this.gr.show_name);
var groupId;
this.sprints = [];
if (groupExists) {
groupId = group.getValue('sys_id');
this._updateGroupType(group);
} else
groupId = this._createGroup();
if (!JSUtil.nil(groupId)) {
this._syncTeamMembers(groupId);
var tableUtils = new TableUtils("pm_project_task");
if(tableUtils.tableExists())
this._updateGroupInRecords('pm_project_task', 'scrum_team',groupId);
this._updateGroupInRecords('rm_sprint', 'release_team', groupId);
this._updateGroupInRecords('rm_story', 'team', groupId);
this._updateGroupInStoriesOfSprints(groupId);
this._createM2MReleaseGroup(this.gr.release, groupId);
return true;
}
return false;
},
_updateGroupInRecords: function(table, teamColumn, groupId) {
var rec = new GlideRecord(table);
rec.addQuery(teamColumn, this.sysId());
rec.query();
while (rec.next()) {
if (rec.assignment_group.nil()) {
rec.setValue('assignment_group', groupId);
rec.update();
if (table == 'rm_sprint')
this.sprints.push(rec.getValue('sys_id'));
}
}
},
//For cases where team is not populated on Story, get the assignment_group from sprint
_updateGroupInStoriesOfSprints: function(groupId) {
var rec = new GlideRecord('rm_story');
rec.addQuery('sprint','IN',this.sprints.join(','));
rec.addNullQuery('team');
rec.addNullQuery('assignment_group');
rec.query();
while (rec.next()) {
rec.setValue('assignment_group', groupId);
rec.update();
}
},
_createM2MReleaseGroup: function(releaseId, groupId) {
var rec = new GlideRecord('m2m_release_group');
rec.addQuery('release',releaseId);
rec.addQuery('group',groupId);
rec.query();
if (!rec.next()) {
rec.initialize();
rec.setValue('release',releaseId);
rec.setValue('group',groupId);
rec.insert();
}
},
_createGroup: function() {
var group = new GlideRecord('sys_user_group');
group.initialize();
group.setValue('name', this.gr.show_name);
group.setValue('description', this.gr.team_name.short_description);
group.setValue('points', this.gr.points);
group.setValue('manager', this.gr.manager);
group.setValue('type', this.agileGroupTypeSysId);
group.setValue('sys_domain', this.gr.getValue('sys_domain'));
return group.insert();
},
_getGroupMemberSysIds: function(groupId) {
var sysIds = [];
var grMember = new GlideRecord('sys_user_grmember');
grMember.addQuery('group', groupId);
grMember.query();
while (grMember.next()) {
sysIds.push(grMember.getValue('user'));
}
return sysIds;
},
_updateGroupType: function(group) {
if (JSUtil.nil(group))
return;
var typeStr = group.getValue('type');
var typeArr = JSUtil.nil(typeStr) ? [] : typeStr.split(',');
if (typeArr.indexOf(this.agileGroupTypeSysId) < 0) {
typeArr.push(this.agileGroupTypeSysId);
group.setValue('type', typeArr.join(','));
group.update();
}
},
_syncTeamMembers: function(groupId) {
var grMember;
var groupMemberSysIds = this._getGroupMemberSysIds(groupId);
var teamMembers = new GlideRecord('scrum_pp_team_member');
teamMembers.addActiveQuery();
teamMembers.addQuery('team', this.sysId());
teamMembers.addQuery('name', 'NOT IN', groupMemberSysIds.join(','));
teamMembers.addQuery('sys_class_name','scrum_pp_team_member');
teamMembers.query();
while (teamMembers.next()) {
grMember = new GlideRecord('sys_user_grmember');
grMember.initialize();
grMember.setValue('group',groupId);
grMember.setValue('user',teamMembers.name);
if (grMember.isValidField('points') && teamMembers.isValidField('default_sprint_points'))
grMember.setValue('points',teamMembers.getValue('default_sprint_points'));
if (grMember.isValidField('scrum_role') && teamMembers.isValidField('scrum_role'))
grMember.setValue('scrum_role',teamMembers.getValue('scrum_role'));
grMember.insert();
}
var releaseTeamMembers = new GlideRecord('scrum_pp_release_team_member');
releaseTeamMembers.addActiveQuery();
releaseTeamMembers.addQuery('team', this.sysId());
releaseTeamMembers.addQuery('name', 'NOT IN', groupMemberSysIds.join(','));
releaseTeamMembers.query();
while (releaseTeamMembers.next()) {
grMember = new GlideRecord('sys_user_grmember');
grMember.initialize();
grMember.setValue('group', groupId);
grMember.setValue('user', releaseTeamMembers.name);
if (grMember.isValidField('points') && releaseTeamMembers.isValidField('default_sprint_points'))
grMember.setValue('points', releaseTeamMembers.getValue('default_sprint_points'));
if (grMember.isValidField('scrum_role') && releaseTeamMembers.isValidField('scrum_role'))
grMember.setValue('scrum_role', releaseTeamMembers.getValue('scrum_role'));
grMember.insert();
}
},
type: 'ScrumTeam'
};
Sys ID
fe23480693330200ea933007f67ffb59