Assessment is not populating when State is Submitted on Demand
Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
3 hours ago - last edited 3 hours ago
Hello @all
I have requirement where assessment should populate on state is submitted,
I have modified OOB script,
Script include = DemandUtils
/**
* JavaScript utility functions for Demand Management
*
*/
var DemandUtil = Class.create();
DemandUtil.prototype = {
checkIfAssessmentExists : function(current) {
var gr = new GlideRecord('asmt_assessment_instance_question');
gr.addEncodedQuery('source_id=' + current.demand.sys_id + '^instance.user.sys_id=' + current.stakeholder.user.sys_id + '^instance.state!=canceled');
gr.query();
if (gr.next())
return true;
return false;
},
// -----------------------------
// Create assessments for first submit of a demand
// -----------------------------
createAssessmentsForFirstSubmit: function(demandGr) {
if (!demandGr || !demandGr.isValidRecord())
return;
// 1️⃣ Ensure at least one stakeholder exists
var stakeholderGR = new GlideRecord('dmn_m2m_demand_stakeholder');
stakeholderGR.addQuery('demand', demandGr.sys_id);
stakeholderGR.query();
if (!stakeholderGR.hasNext()) {
stakeholderGR.initialize();
stakeholderGR.demand = demandGr.sys_id;
stakeholderGR.stakeholder = gs.getUserID(); // auto-assign submitter
stakeholderGR.assessment = true;
stakeholderGR.insert();
}
// 2️⃣ Create assessments
this.createAssessments(demandGr);
// 3️⃣ Link latest assessment group to demand (Live Feed)
var ai = new GlideRecord('asmt_assessment_instance');
ai.addQuery('source_id', demandGr.sys_id);
ai.orderByDesc('sys_created_on');
ai.setLimit(1);
ai.query();
if (ai.next()) {
this.setAssessmentDetails(ai.assessment_group, demandGr.sys_id, demandGr.sys_class_name);
}
gs.info('Live Feed group linked for first submit demand: ' + demandGr.sys_id);
},
checkAndUpdateDemandIfAssessmentsComplete : function(instanceSysId) {
var gr = new GlideRecord('asmt_assessment_instance_question');
gr.addQuery('instance', instanceSysId);
gr.query();
if (gr.next()) {
var questionGR = new GlideAggregate('asmt_assessment_instance_question');
questionGR.addQuery('source_id', gr.getValue('source_id'));
questionGR.groupBy('instance');
questionGR.query();
while (questionGR.next()) {
if (!(questionGR.instance.state == 'complete' || questionGR.instance.state == 'canceled'))
return false;
}
// All assessments completed
var demandGR = new GlideRecord('dmn_demand');
if (demandGR.get(gr.getValue('source_id')) && demandGR.state == 3) {
demandGR.state = -4;
demandGR.update();
// if (demandGR.get(gr.getValue('source_id')) &&
// (demandGR.state == 3 || demandGR.state == 2)) {
// demandGR.state = -4; // Qualified
// demandGR.update();
}
return true;
}
return false;
},
populateScores : function(demandGr) {
var groupGr = new GlideRecord("asmt_category_result");
groupGr.addQuery("metric_type", "0556fa9a8f12110040f82ab2f0f923f8");
groupGr.addQuery("source_id", demandGr.sys_id);
groupGr.orderByDesc("sys_created_on");
groupGr.query();
var assessmentGroup;
if (groupGr.next())
assessmentGroup = groupGr.getValue('assessment_group');
if (!gs.nil(assessmentGroup)){
var gr = new GlideAggregate("asmt_category_result");
gr.addQuery("metric_type", "0556fa9a8f12110040f82ab2f0f923f8");
gr.addQuery("source_id", demandGr.sys_id);
gr.addQuery('assessment_group',assessmentGroup);
gr.addAggregate('AVG', 'rating');
gr.groupBy('category');
gr.query();
var demand = new GlideRecord("dmn_demand");
demand.get(demandGr.sys_id);
while(gr.next()){
var scoreValue = gr.getAggregate('AVG', 'rating');
var asmtCategory = gr.getValue('category');
if(asmtCategory == "07f328108f32110040f82ab2f0f9236c")
demand.setValue("score_size", scoreValue);
else if(asmtCategory == "99b63e9a8f12110040f82ab2f0f923b3")
demand.setValue("score_value", scoreValue);
else if(asmtCategory == "84a3c7da8f12110040f82ab2f0f92368")
demand.setValue("score_risk", scoreValue);
else if(asmtCategory == "1a3107da8f12110040f82ab2f0f9233b")
demand.setValue("score_strategic_allignment", scoreValue);
else if(asmtCategory == "cb8e72da8f12110040f82ab2f0f9230c")
demand.setValue("score_cost", scoreValue);
}
demand.update();
}
},
updateAssessmentScore : function(demandGr) {
var gr = new GlideRecord('asmt_category_result');
gr.addQuery('source_id', demandGr.sys_id);
gr.addQuery('metric_type', '0556fa9a8f12110040f82ab2f0f923f8');
gr.orderByDesc('sys_created_on');
gr.query();
if (gr.getRowCount() >= 1) {
gr.next();
var assessmentDetails = (new SNC.AssessmentCreation()).createAssessments('0556fa9a8f12110040f82ab2f0f923f8', demandGr.sys_id, gs.getUser().getRecord().getValue("sys_id"), false, gr.getValue('assessment_group'), false, "", "", true);
if ( demandGr.state != 1 && demandGr.state != 2 && demandGr.state != 3)// Till screening scores will not be populated.
// if ( demandGr.state != 1 && demandGr.state != 2 )// Till screening scores will not be populated.
this.populateScores(demandGr);
}
},
setAssessmentDetails: function(assessmentGroupId, demandId, demandClass) {
if (assessmentGroupId) {
var asmtInstances = new GlideRecord('asmt_assessment_instance');
asmtInstances.addQuery('assessment_group', assessmentGroupId);
asmtInstances.query();
asmtInstances.setValue('trigger_id', demandId);
asmtInstances.setValue('trigger_table', demandClass);
asmtInstances.setValue('task_id', demandId);
asmtInstances.setWorkflow(false);
asmtInstances.updateMultiple();
} else {
gs.warn('Unable to fetch assessment group details, demand assessment trigger details are not set');
}
},
createAssessments : function(demandGr){
var gr = new GlideRecord('dmn_m2m_demand_stakeholder');
var encodedQuery = "demand=" + demandGr.sys_id + "^assessment=yes";
gr.addEncodedQuery(encodedQuery, true);
gr.query();
var userIds = "";
while (gr.next()) {
if (!JSUtil.nil(userIds))
userIds += ",";
userIds += gr.stakeholder.user.sys_id;
}
if (!JSUtil.nil(userIds)) {
//create assessments for the list of users
this.createAssessmentInternal('0556fa9a8f12110040f82ab2f0f923f8', demandGr.sys_id, userIds, false, "",false,"","",!demandGr.assessment_required, demandGr.sys_class_name);
// this.createAssessmentInternal('0556fa9a8f12110040f82ab2f0f923f8', demandGr.sys_id, userIds, false, "",false,"","",false, demandGr.sys_class_name);
}
else
this.createAssessmentInternal('0556fa9a8f12110040f82ab2f0f923f8', demandGr.sys_id, gs.getUser().getRecord().getValue("sys_id"), false, "", false, "", "", !demandGr.assessment_required, demandGr.sys_class_name);
// this.createAssessmentInternal('0556fa9a8f12110040f82ab2f0f923f8', demandGr.sys_id, gs.getUser().getRecord().getValue("sys_id"), false, "", false, "", "", false, demandGr.sys_class_name);
},
createAssessmentInternal: function(type, sourceId, userIds, urlEntry, isxistingGroup, isPreview, conditionId, recordId, skipAssessments, triggerTable) {
// var assessmentDetails = (new SNC.AssessmentCreation()).createAssessments(type, sourceId, userIds, urlEntry, isxistingGroup, isPreview, conditionId, recordId, skipAssessments);
// this.setAssessmentDetails(assessmentDetails.split(',')[2], sourceId, triggerTable);
var assessmentDetails = (new SNC.AssessmentCreation())
.createAssessments(type, sourceId, userIds, urlEntry, isxistingGroup, isPreview, conditionId, recordId, skipAssessments);
if (!gs.nil(assessmentDetails)) {
var parts = assessmentDetails.split(',');
if (parts.length >= 3) {
var assessmentGroupId = parts[2];
// 🔥 THIS IS WHAT YOU WERE MISSING
this.setAssessmentDetails(
assessmentGroupId,
sourceId,
triggerTable || 'dmn_demand'
);
}
}
},
QualifyDemandIfAssessmentNotRequired : function(demandGr) {
if (!demandGr.assessment_required){
demandGr.state = -4;
demandGr.update();
}
},
assignedToRefQual: function(taskGr) {
var users = [];
var demandRole = SNC.PPMConfig.getDemandRole('user', taskGr.getValue('sys_class_name'));
var projectRole = SNC.PPMConfig.getProjectRole('user', taskGr.getValue('sys_class_name'));
var demandRoleId = this.roleId(demandRole);
var projectRoleId = this.roleId(projectRole);
var userHasRole = new GlideRecord('sys_user_has_role');
var subQuery = userHasRole.addQuery('role', demandRoleId);
if (projectRoleId != null) {
subQuery.addOrCondition('role', projectRoleId);
}
userHasRole.query();
while (userHasRole.next()) {
users.push(userHasRole.getValue('user'));
}
var returnValue = "sys_idIN" + users.join(",");
return returnValue;
},
roleId: function(roleName) {
var gr = new GlideRecord("sys_user_role");
gr.get("name", roleName);
return gr.getValue("sys_id");
},
type : 'DemandUtil'
};
DemandUtil.getDemandRole = function(suffix, tableName /* Stripped table name */){
var role = 'it_demand_'+suffix;
if(GlidePluginManager.isActive('com.snc.project_management_v3')){
role = SNC.PPMConfig.getDemandRole(suffix,tableName);
}
return role;
};
DemandUtil.getDemandWorkbenchId = function(sysClassName, sysId) {
var workbenchId;
var gr = new GlideRecord("bubble_chart_workbench");
// Default to the base table when both parameters are not sent
if (gs.nil(sysClassName) && gs.nil(sysId))
sysClassName = 'dmn_demand';
if (!gs.nil(sysClassName)) {
/* Get TeamSpace specific demand table name */
var demandTable = SNC.PPMConfig.getDemandTable(sysClassName);
gr.addQuery("table", demandTable);
}
if (!gs.nil(sysId))
gr.addQuery('sys_id', sysId);
else
gr.addQuery("isdefault", true);
gr.query();
if (gr.next()) {
var dmnGr = new GlideRecord(gr.getValue("table"));
if(dmnGr.canRead())
workbenchId = gr.getValue("sys_id");
}
return workbenchId;
};
DemandUtil.isValidWorkbenchParams = function(sysClassName, workbenchId) {
return JSUtil.notNil(DemandUtil.getDemandWorkbenchId(sysClassName, workbenchId));
};
DemandUtil.isValidStakeHolder = function(demand) {
var gr = new GlideRecord('dmn_m2m_demand_stakeholder');
gr.addQuery('stakeholder.user', gs.getUserID());
gr.addQuery('demand',demand);
gr.setLimit(1);
gr.query();
var answer = gr.getRowCount() > 0;
return answer;
};
DemandUtil.getDemandURL = function(sysId) {
var url = new GlideURL('dmn_demand.do');
url.set('sys_id', sysId);
return gs.getProperty('glide.servlet.uri') + url;
};
DemandUtil.checkAndCloseDemand = function(sysId){
if (JSUtil.nil(sysId))
return;
var gr = new GlideRecord('dmn_demand');
gr.get(sysId);
if (gr.isValidRecord() && gr.getValue('close_demand') == 'on_closing_project' && gr.getValue('state') != '9'){
gr.setValue('state', '9');
gr.update();
}
};
DemandUtil.checkAndCloseDemandForProjects = function(topTaskSysId){
var gr = new GlideRecord('dmn_demand');
gr.addEncodedQuery("state!=9^close_demand=on_closing_project^project.top_task="+topTaskSysId);
gr.query();
while (gr.next()){
gr.setValue('state', '9');
gr.update();
}
};
DemandUtil.checkAndCloseDemandForProjectIds = function(sysIds){
var gr = new GlideRecord('dmn_demand');
gr.addEncodedQuery("state!=9^close_demand=on_closing_project^projectIN"+sysIds);
gr.query();
while (gr.next()){
gr.setValue('state', '9');
gr.update();
}
};
DemandUtil.getCloseDemandOption = function(current){
if (JSUtil.nil(current.type))
return 'on_creating_project';
};
DemandUtil.getProjectCalculationDefault = function(current){
if (current.type == 'project')
return 'automatic';
};
Business rule - Create Ondemand assessment
However, it is not working as expected. Could you please help me review this or suggest what might be missing?
Thank you!
0 REPLIES 0
