Need to copy comment from RITM to sc_task

s_nandhini
Tera Contributor

I need to copy my additional comment from RITM to sc_task . But my sc_task contain group type "Restriction" Only user part of sc_task can able to see the sc_task. So, comment is copying properly.

 

I tried creating an event + BR + script action but it not working

 

BR: (After - update)

 

(function executeRule(current, previous /*null when async*/ ) {
    if (current.comments.changes()) {
     var rawEntry = current.comments.getJournalEntry(1);
    var latestComment = rawEntry.split("\n")[1];
        var userId = gs.getUserID();
       
    gs.log("BR firing event ritm.comment.added");
    gs.log("Latest comment: " + latestComment);
    gs.log("User ID: " + userId);
        gs.eventQueue("ritm.comment.add", current, latestComment, userId);
    }
})(current, previous);
 
Script action:
(function executeAction(event) {

    gs.log("latest: " + event.parm1);
    gs.log("comm: " + event.parm2);

    if (!event.parm1) {
        gs.log("No comment text passed to Script Action");
        return;
    }
   
    var tasks = new GlideRecord("sc_task");
    tasks.addQuery("request_item", current.sys_id);
    tasks.query();
    if (tasks.next()) {
        gs.log("commenttask:" + event.parm1);
        tasks.comments.setJournalEntry(event.parm1);
        tasks.update();
       
    }else{
        gs.log("commentnotfound:"+ event.parm1 + current.sys_id + gs.getUserName());
    }
})(event) ;
 
But commentnotfound log is running instead of if.

 

1 ACCEPTED SOLUTION

@s_nandhini 

in after update BR on RITM, no script action required

BR Condition: Comments Changes

(function executeRule(current, previous /*null when async*/ ) {

    var sctask = new GlideRecord('sc_task');
    sctask.addQuery('request_item', current.sys_id);
    sctask.setWorkflow(false); // disables query BR and allows script to query that record
    sctask.query();
    while (sctask.next()) {
        var comments = current.comments.getJournalEntry(1).match(/\n.+/gm).join("\n");
        comments = comments.replace('\n', '');
        sctask.comments = comments;
        sctask.update();
    }

})(current, previous);

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

Regards,
Ankur
Certified Technical Architect  ||  10x ServiceNow MVP  ||  ServiceNow Community Leader

View solution in original post

16 REPLIES 16

Hi..

Not quite—this will run, but it has a couple of mistakes that will break or behave incorrectly. You’re updating the wrong variable (sc_task.update() instead of grSCTask.update()), and directly assigning grSCTask.comments = ritmComment won’t reliably write to a journal field. Also, you should only trigger when the comment actually changes.

TharaS657398130
Giga Guru

Hey

 
I got this question in my architect interview round

The problem is that in your Script Action you’re using current.sys_id, but current doesn’t exist there, so your query never finds any sc_task records and always goes to the “not found” log; to fix it, pass the RITM sys_id in the event (e.g., gs.eventQueue("ritm.comment.add", current, latestComment, current.sys_id);) and then use event.parm2 in the Script Action to query sc_task, which will allow the comment to copy correctly.

s_nandhini
Tera Contributor

@TharaS657398130 can you send me sample how to call the event.aprm2 in the script action

@s_nandhini 

if you are restricting sc_task using Query BR then update this line

var tasks = new GlideRecord("sc_task");
    tasks.addQuery("request_item", current.sys_id);
tasks.setWorkflow(false); // disables query BR and allows script to query that record
    tasks.query();

💡 If my response helped, please mark it as correct and close the thread 🔒— this helps future readers find the solution faster! 🙏

Regards,
Ankur
Certified Technical Architect  ||  10x ServiceNow MVP  ||  ServiceNow Community Leader

In script action?