Worknotes is not getting updated

Drishti
Tera Guru

Hello Community ,

 

There is one Date field on HR case form. The date value entered in the date field, when matches to todays date then state should change to WIP and work-notes should get updated with comments.

 

The challenge is here - I have created one scheduled script so that when date matches to todays date then state should change along with that work-notes should get updated. But this work-notes is not getting updated every time. Like sometimes , it work and sometimes it won't.

 

I also tried different way of script like setting work-notes without setWorkflow(false) then calling a function where I am setting state value along with setWorkflow(false).
But this too is not working.

 

My script : 

 

var grCase = new GlideRecord('sn_hr_core_case');
grCase.addEncodedQuery(MYQUERY);
grCase.query();
while (grCase.next()) {
grCase.work_notes = " MY COMMENTS FOR WORKNOTES";
grCase.update();
setStateValue(grCase);
 
}

function setStateValue(hrCase) {

hrCase.setValue('state', '18');
hrCase.autoSysFields(false);
hrCase.setWorkflow(false);
hrCase.update();

}
 
I have multiple BR and notification on condition of "State changes to WIP" . So, if I won't use setWorkflow(false) then that too will create an issue.
 
Please guide how can I achieve this.

Thanks !
1 ACCEPTED SOLUTION

NityaB161013953
Tera Patron

Hi @Drishti,

The issue is: setWorkflow(false) prevents all business rules — including system logic that updates journal fields like work_notes. That’s why your comments sometimes disappear.

Here’s the clean, reliable solution 👇


✅ Final Working Script

var grCase = new GlideRecord('sn_hr_core_case');
grCase.addEncodedQuery(MYQUERY);
grCase.query();

while (grCase.next()) {
    // Store Sys ID before manipulating workflows
    var sysId = grCase.getUniqueValue();

    // Step 1: Update work notes safely (with workflow ON)
    grCase.work_notes = "MY COMMENTS FOR WORKNOTES";
    grCase.update(); // Let this trigger normally (ensures notes get written)

    // Step 2: Update state quietly (no notifications, no BRs)
    var grSilent = new GlideRecord('sn_hr_core_case');
    if (grSilent.get(sysId)) {
        grSilent.setWorkflow(false);
        grSilent.autoSysFields(false);
        grSilent.setValue('state', '18'); // WIP
        grSilent.update();
    }
}

🔍 Why this works

  • The first update writes work notes correctly because setWorkflow(false) is not used.

  • The second update (separate GlideRecord instance) changes state silently — no BRs, no notifications, no duplicate triggers.

  • Using a fresh record (grSilent) ensures no workflow caching or update conflicts.


⚠️ Notes

  • Don’t try to set both fields in one update if setWorkflow(false) is true — that’s why you saw inconsistency.

  • Keep the “silent” update isolated to avoid blocking journal updates.

  • Make sure your scheduled job runs with a user who has rights to update HR Cases and journal fields.

View solution in original post

11 REPLIES 11

@Drishti 

the script I shared should update work notes and state both.

Any BR is stopping the update to work_notes field?

If my response helped please mark it correct and close the thread so that it benefits future readers.

I do have tried the same script in my first attempt then tried the script posted by me.
There are several communities link saying that work-notes are journal entries which gets updated by BR only. So, if we will write setWorkflow(false) then this will not work as expected .

On the same time, we have to update state value as well which will fire other BR and notification satisfying the conditions 

@Drishti 

yes got it.

It's an OOTB behavior.

then try this other workaround and insert record into sys_journal_field table

var grCase = new GlideRecord('sn_hr_core_case');
grCase.addEncodedQuery(MYQUERY);
grCase.query();

while (grCase.next()) {
    grCase.setValue('state', '18'); // WIP
    grCase.setWorkflow(false); // Avoid triggering BRs if that's intended
    grCase.autoSysFields(false); // Prevent auto-update on sys fields
    grCase.update();

    // insert data into table
    var rec = new GlideRecord('sys_journal_field');
    rec.initialize();
    rec.name = grCase.getTableName();
    rec.value = 'MY COMMENTS FOR WORKNOTES';
    rec.element = 'work_notes';
    rec.element_id = grCase.sys_id;
    rec.insert();

}

If my response helped please mark it correct and close the thread so that it benefits future readers.

@Drishti 

Hope you are doing good.

Did my reply answer your question?

If my response helped please mark it correct and close the thread so that it benefits future readers.

@Ankur Bawiskar 
sys_journal_field is having lots of records and may hamper system performance.