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

Yes, so here is what I have for those:

find_real_file.png

find_real_file.png

 

Prompt:

(function execute() {
    return gs.getMessage('You have {0} Cases assigned. Which Case do you want to resolve?', vaVars.count);
})()

 

Reference Type: Script

Choice Value Expression:

(function execute() {
    var results = JSON.parse(vaVars.results);
    var options = [];
    for(var i = 0; i < results.length; i++) {
        options.push({ 'value': results[i].value, 'label': results[i].label });
    }

    if ((parseInt(vaVars.index) != 0)) {
        options.push({ 'value': 'show_previous', 'label': gs.getMessage('Show previous') });
    }

    if (parseInt(vaVars.count) > (parseInt(vaVars.index) +  parseInt(vaVars.limit))) {
        options.push({ 'value': 'show_next', 'label': gs.getMessage('Show more') });
    }

    options.push({ 'value': 'cancel', 'label': gs.getMessage('I\'m done') });
    return options;
})()

find_real_file.png

 

find_real_file.png

Script:

(function execute() {
    return vaInputs.sn_hr_core_case.getValue() == 'cancel';
})()

 

And the rest match to have the correct table within their script (where applicable.

I'm not sure, though I think you've got a mixup with:

hr_case_found on the Reference choice

and

vaInputs.sn_hr_core_case

hr_case_found is your vaInputs. Though your renamed the condition to vaInputs.sn_hr_core_case, and not vaInputs.hr_case_found

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

ahhh - makes sense. I will see what I can do with all of that.

Thank you!

-Rob

Okay - I was able to correct my references and now move forward!

Next step, figure out closing the actual case. I was able to work through the chatbot to take my notes and say it has resolved my case. But the case was not moved to a closed state.

On to the next!

Thanks,

-Rob

Ah nice, step by step.

Out-of-the-box, you won't be able to put a HR Case directly on Closed (3). Out-of-the-box the HR Case will go to Awaiting Acceptance (20) first. When a HR Case is on Awaiting Acceptance, then you can move it to Closed.

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