Resolving HR Cases via VA Chatbot

Rob Sestito
Mega Sage

Hey SN Comm,

I am looking for some help implementing a conversation through VA Chatbot, to be able to resolve HR Cases.

I have taking the 'Resolve Incident' flow and copied it, change the table and state to match the hr case table (so I thought).

But the chatbot keeps returning 'No Records Found' decision.

Here is the Resolve Incident 'Get Incidents' Script Action:

(function execute() {
    var gr = new GlideRecordSecure('incident');
    gr.addQuery('assigned_to', vaInputs.user);
    gr.addQuery('state', '!=', vaVars.resolved_state)
    gr.addActiveQuery();
    gr.orderByDesc('sys_updated_on');

    var start = parseInt(vaVars.index);
    var end = start + parseInt(vaVars.limit);
    gr.chooseWindow(start, end, true);
    gr.query();

    vaVars.count = gr.getRowCount();
    var results = [];
    while(gr.next()) {
        results.push({ 
            'value': gr.getUniqueValue(), 
            'label': gs.getMessage('{0} [{1}]', [gr.getDisplayValue('short_description'),gr.getDisplayValue('number')])
        });
    }

    vaVars.results = JSON.stringify(results);
})()

And here are the next steps it takes once it gets records

find_real_file.png

Here is what I changed to try and match HR Case tables:

(function execute() {
    var gr = new GlideRecord('sn_hr_core_case');
    gr.addQuery('assigned_to', vaInputs.user);
    gr.addQuery('state', '!=', vaVars.closed_complete_state)
    gr.addActiveQuery();
    gr.orderByDesc('sys_updated_on');

    var start = parseInt(vaVars.index);
    var end = start + parseInt(vaVars.limit);
    gr.chooseWindow(start, end, true);
    gr.query();

    vaVars.count = gr.getRowCount();
    var results = [];
    while(gr.next()) {
        results.push({ 
            'value': gr.getUniqueValue(), 
            'label': gs.getMessage('{0} [{1}]', [gr.getDisplayValue('short_description'),gr.getDisplayValue('number')])
        });
    }

    vaVars.results = JSON.stringify(results);
})()

And here are my next steps to match:

find_real_file.png

I keep getting taken to the No Cases Found decision and I am thinking I have the table set up wrong from the very first step. I definitely have cases assigned to myself.

Anyone able to assist with this?

Thank you!

-Rob

1 ACCEPTED SOLUTION

Okay - looked at the code with a co-worker and we were able to figure it out!

realized that vaVars.awaiting_acceptance_state means nothing for scoped hr.

It wants the value instead of the label name - i.e. awaiting acceptance is '20'.

I also had my u_case_resolution get function in the wrong place, for how we handle on the native side.

here is the code the works perfectly:

(function execute() {
    var success = null;
    var gr = new GlideRecordSecure('sn_hr_core_case');
    if (gr.get(vaVars.sys_id)) {
        //set state to Awaiting Acceptance
        gs.info("changing state");
        gs.info("current state is: " + gr.state);
        gr.u_case_resolution = vaInputs.u_case_resolution.getValue();
        gr.state = 20;
        gs.info("state has changed to:" + gr.state);
        var operation = vaInputs.update_comments.getValue();
        if (operation != 'cancel') {
            if ((operation == 'comment' || operation == 'both') && vaInputs.comment.getValue().trim() != ''){
                gr.comments = vaInputs.comment;
            }
            if ((operation == 'work_notes' || operation == 'both') && vaInputs.work_notes.getValue().trim() != ''){
                gr.work_notes = vaInputs.work_notes;
            }
        }
        success = gr.update();
    }
    vaVars.success = '' + (success != null);
})()

@Mark Roethof - seriously thank you for all your help with this! Truly helpful!

View solution in original post

25 REPLIES 25

Nope!

That made no difference as I switched over to HR Core, duplicated the designer and tried to preview. It still hits the No Records Found scenario.

-Rob

Hmmm strange. I just duplicated the same topic, in the HR Core scope, immediately working after (only) changing table name to sn_hr_core_case:

find_real_file.png

If my answer helped you in any way, please then mark it as helpful.

Kind regards,
Mark

---

LinkedIn
Community article list

 

Kind regards,

 

Mark Roethof

Independent ServiceNow Consultant

10x ServiceNow MVP

---

 

~444 Articles, Blogs, Videos, Podcasts, Share projects - Experiences from the field

LinkedIn

Add some logging to the GlideRecord query. Is that giving result at all on your instance?

If my answer helped you in any way, please then mark it as helpful.

Kind regards,
Mark

---

LinkedIn
Community article list

 

Kind regards,

 

Mark Roethof

Independent ServiceNow Consultant

10x ServiceNow MVP

---

 

~444 Articles, Blogs, Videos, Podcasts, Share projects - Experiences from the field

LinkedIn

Mark Roethof
Tera Patron
Tera Patron

Indeed if running this from Global, just tested:

find_real_file.png

If my answer helped you in any way, please then mark it as helpful.

Kind regards,
Mark

---

LinkedIn
Community article list

 

Kind regards,

 

Mark Roethof

Independent ServiceNow Consultant

10x ServiceNow MVP

---

 

~444 Articles, Blogs, Videos, Podcasts, Share projects - Experiences from the field

LinkedIn

Wait - I think it is the way I am passing the State query within the 'Get Cases' step. I commented out the query to match cases that are not in Closed Complete State, and it returned 11 records (which is correct) - however it did not display the actual records which will be my next issue to work through.

So, I need to figure out how to pass the correct State query