How to create sequential task in std_change_proposal

VR17
Tera Contributor

Hi Team ,

 

How we can create sequential change task in std_change_proposal ,Right now  order of Task is different still all tasks created at the same time.

7 REPLIES 7

Nicole Disbro
Tera Expert

I think I am a little closer but I am not the best coder to adjust this script to grab the task in order:

 

There is a business rule on Change Request table called: Create Standard Change Tasks.

This BR calls the StdChangeUtils script include which is joined to the Script include StdChangeUtilsSNC. Within 

StdChangeUtilsSNC script include there is this script to create change tasks starting at line 511:
 
createChangeTasks: function(changeGr) {
        if (!changeGr || changeGr.std_change_producer_version.nil())
            return;

        var versionGr = new GlideRecord(this.TABLE_NAME_VERSION);
        if (!versionGr.get(changeGr.getValue('std_change_producer_version')))
            return;

        var proposalGr = new GlideRecord(this.TABLE_NAME_PROPOSAL);
        if (!proposalGr.get(versionGr.getValue('std_change_proposal')))
            return;

        var relatedTaskTemplateGr = new GlideRecord(this.TABLE_NAME_RELATED_TASK);
        relatedTaskTemplateGr.addQuery('std_change_proposal', proposalGr.getUniqueValue());
        relatedTaskTemplateGr.orderBy('order');
        relatedTaskTemplateGr.query();

        var changeTaskGr = new GlideRecord(this.TABLE_NAME_CHANGE_TASK);
        while (relatedTaskTemplateGr.next()) {
            changeTaskGr.initialize();
            changeTaskGr.setValue(this.TABLE_NAME_CHANGE, changeGr.getUniqueValue());
            changeTaskGr.applyEncodedQuery(relatedTaskTemplateGr.getValue('template'));
            changeTaskGr.insert();
        }

    },
 
 

Nicole Disbro
Tera Expert

I think this is close thanks to AI but not sure how to implement - do you need to copy all of the StdChangeUtilsSNC script to StdChangeUtils script to get it to operate both? not sure how to extend just these few lines 511-536:

createChangeTasks: function(changeGr) {
if (!changeGr || changeGr.std_change_producer_version.nil())
return;

var versionGr = new GlideRecord(this.TABLE_NAME_VERSION);
if (!versionGr.get(changeGr.getValue('std_change_producer_version')))
return;

var proposalGr = new GlideRecord(this.TABLE_NAME_PROPOSAL);
if (!proposalGr.get(versionGr.getValue('std_change_proposal')))
return;

var relatedTaskTemplateGr = new GlideRecord(this.TABLE_NAME_RELATED_TASK);
relatedTaskTemplateGr.addQuery('std_change_proposal', proposalGr.getUniqueValue());
relatedTaskTemplateGr.orderBy('order');
relatedTaskTemplateGr.query();

var changeTaskGr = new GlideRecord(this.TABLE_NAME_CHANGE_TASK);
var previousTaskSysId = null;
var currentOrder = null;
var tasksToCreate = [];

while (relatedTaskTemplateGr.next()) {
if (currentOrder !== relatedTaskTemplateGr.getValue('order')) {
if (tasksToCreate.length > 0) {
createTasks(tasksToCreate, changeGr, previousTaskSysId);
tasksToCreate = [];
}
currentOrder = relatedTaskTemplateGr.getValue('order');
}
tasksToCreate.push(relatedTaskTemplateGr.getValue('template'));
}

if (tasksToCreate.length > 0) {
createTasks(tasksToCreate, changeGr, previousTaskSysId);
}

function createTasks(taskTemplates, changeGr, previousTaskSysId) {
if (previousTaskSysId) {
var previousTaskGr = new GlideRecord(this.TABLE_NAME_CHANGE_TASK);
previousTaskGr.get(previousTaskSysId);
while (previousTaskGr.state != '3') { //3 = State closed
previousTaskGr.refresh();
gs.sleep(30000); // Wait for 30 second before checking again
}
}

taskTemplates.forEach(function(template) {
changeTaskGr.initialize();
changeTaskGr.setValue(this.TABLE_NAME_CHANGE, changeGr.getUniqueValue());
changeTaskGr.applyEncodedQuery(template);
previousTaskSysId = changeTaskGr.insert();
}.bind(this));
}
}

Bert_c1
Kilo Patron

Put the function where indicated by the comments in the StdChangeUtils script include:

 

Screenshot 2025-04-04 143825.png