Find your people. Pick a challenge. Ship something real. The CreatorCon Hackathon is coming to the Community Pavilion for one epic night. Every skill level, every role welcome. Join us on May 5th and learn more here.

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

@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

Sure,

In your BR - 

gs.eventQueue("ritm.comment.add", current, latestComment, current.sys_id);

In your script action - 

(function executeAction(event) {

var ritmId = event.parm2; // this is the RITM sys_id
var comment = event.parm1; // this is the comment

var tasks = new GlideRecord("sc_task");
tasks.addQuery("request_item", ritmId);
tasks.query();

while (tasks.next()) {
tasks.comments.setJournalEntry(comment);
tasks.update();
}

})(event);

 

So in short: event.parm1 = comment, event.parm2 = RITM sys_id, and you just use event.parm2 like a normal variable in the Script Action.

I tried the same but still it not copying.

 

BR:

if (current.comments.changes()) {
     var rawEntry = current.comments.getJournalEntry(1);
    var latestComment = rawEntry.split("\n")[1];
        var userId = gs.getUserID();
       
   
        gs.eventQueue("ritm.comment.add", current, latestComment,  current.sys_id);
    }
 
Script Action:
 
(function executeAction(event) {

    var ritmId = event.parm2; // this is the RITM sys_id
    var comment = event.parm1; // this is the comment

    var tasks = new GlideRecord("sc_task");
    tasks.addQuery("request_item", ritmId);
    tasks.query();
    while (tasks.next()) {
        gs.log("commenttask:" + event.parm1);
        tasks.comments.setJournalEntry(comment);
        tasks.update();
    }
})(event);
 
Even log is not coming.
 
 

@s_nandhini 

did you try the approach I shared?

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

Yes, it is copying not but not showing exact user you entered the comment.IT show as "system".