Change Calendar + Blackout Dates

gaidem
ServiceNow Employee
ServiceNow Employee

I'm trying to find a way to have a calendar show changes and also show blackout dates. Basically there may be a week where there is extra attention to changes. I'd like some graphical way to represent this on a calendar. I have played with maintenance windows and blackout windows and the change collision detector, but I haven't found anything close to what I'm trying to do.

Any thoughts?

Thanks!

Matt

18 REPLIES 18

Hi Michael,



I dont see this module (Windows and Changes) there, could you paste the screen shot here?



Thanks


Yogish


Here you go:



Screen Shot 2016-09-16 at 7.43.24 AM.png


thanks Michael, i would suggest this to the clients and lets see.



Thanks


Yogish


jerilynnknepper
Kilo Contributor

I recently was given a similar requirement for a Homepage.   Using the Windows and Changes "Schedule page" I combined the scripts to create one merged view of the scheduled maintenances, releases, blackout dates and change requests.   I then created a URL gauge.   Also on the home page I created a Change and Release Timeline Visualization for each, created gauges, and also added to the homepage.     Still needs some cosmetic work, but hope it helps.



//Maintenance


var g = new GlideRecord('cmn_schedule');


g.addQuery('name', 'XxxxXX Scheduled Maintenance' );


g.query();



while (g.next()) {


  schedulePage.addSchedule(g.sys_id, '#808080', null, true);


}



g.initialize();


g.addQuery('name', 'server');


g.query();



while (g.next()) {


  schedulePage.addSchedule(g.sys_id, '#FF0000', null, true);


}



g.initialize();


g.addQuery('type', 'blackout');


g.query();



while (g.next()) {


  schedulePage.addSchedule(g.sys_id, '#FF0000', null, true);


}



g.initialize();


g.addQuery('name', 'application');


g.query();



while (g.next()) {


  schedulePage.addSchedule(g.sys_id, '#FF0000', null, true);


}



g.initialize();


g.addQuery('name', 'network');


g.query();



while (g.next()) {


  schedulePage.addSchedule(g.sys_id, '#FF0000', null, true);


}



//Changes


var gr = new GlideRecord('change_request');


gr.addEncodedQuery('sys_created_on>=javascript:gs.monthsAgoStart(6)^state=-12');


gr.query();


while (gr.next()) {


  var name = gr.number.toString() + ' - ' + gr.short_description.toString() + ' <br> Change Initiator:   ' + gr.requested_by.getDisplayValue() + ' <br> Change Owners:   ' + gr.u_change_owners.getDisplayValue()   + ' <br>Outage involves:           ' + gr.u_outage_impact.getDisplayValue();   //Change fields added to item in Calendar view


  var start = gr.start_date.getDisplayValue();


  var end = gr.end_date.getDisplayValue();


  var item = schedulePage.addItem(gr, start, end, '#008000');


  if (item) {


  item.setDescription(name);


  item.setName(name);


  }


}



//Release


var rr = new GlideRecord('rm_release');


rr.addEncodedQuery('state!=7');


rr.query();


while (rr.next()) {


  var start = new GlideDateTime(rr.u_entry_cutoff.toString() + ' 00:00:00');


  var end = new GlideDateTime(rr.u_deploy_prod_end_date.toString() + ' 23:23:59');


  var item = schedulePage.addItem(rr, start, end, '', '#FFD700');


  if (item) {


  //item.setAllDay(true);


  item.setDescription(rr.short_description.toString());


  }


}


Hi Jerilynn



Can you explain a bit more what you did here?



Where does this script go?
How do you get this to display as a Homepage?



Thank you!!