Show an error message when exist a "Conflict" in Change Request.

crhistopherjuar
Kilo Expert

Hi Experts,

I have a requirement to show an error message when a ITIL user try to schedule a Change request, when exist a specific "Conflict" in Change Request.

I tried to resolve this with an onBefore Business Rule when the confict status is "Conflict" and the user have the ITIL role.

Here the Business Rule:

Condition:   g_user.hasRole('itil')

var change = new GlideRecord('change_request');

  change.addQuery('sys_id', current.change);

  change.query();

var conflict = new GlideRecord('conflict');      

    conflict.addQuery('change',current.change);      

    conflict.query();      

while (g.next()){

if (conflict.schedule == 'Fiscal Freeze'){

  current.setAbortAction(true);  

  gs.addInfoMessage('No change allowed in fiscal freeze. Please alter the schedule.');

}

}

My Business Rule doesn't work and I don't know what I am missing.

I hope that you can help me.

Regards

1 ACCEPTED SOLUTION

The key to business rules is understanding that they are triggered by database operations. If nothing has updated that conflict record, then running the business rule there isn't going to do any good.



Here's a thought... rather than an if, incorporate that in to the query. Your business rule should actually look like this (inside a function)



Name: Check for conflict


When: Before


Insert: true


Update: true


Condition: Conflict status | is | Conflict




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



        var conflict = new GlideRecord('conflict');


        conflict.addQuery('change', current.sys_id);


        conflict.addQuery('schedule.name', 'Fiscal Freeze 2017');


        conflict.query();



        if (conflict.next()) {


                  gs.addErrorMessage('No change allowed in fiscal freeze. Please alter the schedule');


                  current.setAbortAction(true);


        }



})(current, previous);


View solution in original post

23 REPLIES 23

Not clear what the first three lines are for, Crhistopher. What are you expecting to get by querying the change_request table?


I was trying from the beginning do the business rule in the [conflict] table
Actually I tried changing the table again to the conflict table and I'm still without success


Do you want to check specifically for that one type (fiscal freeze) or just check if ANY conflicts are in the embedded/related list of conflicts?


Just specifically for fiscal freeze type
The idea is IF the ITIL user tries to schedule the Change Request in the range of the "fiscal freeze" period, show a message that the change is not allowed and the itil user has to change the schedule planned start/end date to continue with the change request.



find_real_file.png


Then the script above should be doing what you expect. You just need to change the if statement to look for 'Fiscal Freeze 2017' instead of just 'Fiscal Freeze'.