- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-23-2015 01:43 AM
Hello,
I'm working on scheduling a change_request report - daily but only if there are new changes created 1 day ago or if any of planned start date or
planned end date have been updated since yesterday.
I have prepared the following script for the first part (new changes created) but I don't know how to do the second part (start_date / end_date updates).
// Only run this Scheduled Job if there are active Changes created 1 day ago
var ga = new GlideAggregate('change_request');
ga.addAggregate('COUNT');
ga.addQuery('created', '>=', ga.daysAgo(1));
ga.query();
ga.next();
ga.getAggregate('COUNT') !== '0'
Could you please help finalizing this script?
Thank you,
Diana
Solved! Go to Solution.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎10-23-2015 01:41 PM
Hi Diana,
I modified your script into this:
// Only run this Scheduled Job if there are active Changes created 1 day ago
var ga = new GlideAggregate('change_request');
ga.addActiveQuery();
ga.addAggregate('COUNT');
ga.addQuery('sys_created_on', '>=', gs.daysAgo(1));
ga.query();
var changes = 0;
if (ga.next()){
changes = ga.getAggregate('COUNT');
}
gs.print('There are: ' + changes + ' changes created 1 day ago');
var gr = new GlideRecord('change_request');
gr.addActiveQuery();
gr.query();
while (gr.next()){
var audit = new GlideRecord('sys_audit');
audit.addQuery('documentkey', gr.sys_id);
audit.query();
while (audit.next() && ((audit.fieldname == 'start_date') || (audit.fieldname = 'end_date'))){
if (audit.sys_created_on >= gs.daysAgo(1)){
gs.print('We have the a change with start_date or end_date updated and change record has number: ' + gr.number);
}
}
};
I used 2 parts based on your OR condition:
- one to get a count on all active change requests created since yesterday
- one part to check all active change requests and see if start_date OR end_date have been modified since yesterday (modified means a record has been inserted into sys_audit table). Now this only works if start_date/end_date are audited (by default they are). If they are not audited, then you won't know if they were or not updated since yesterday, so I am not going to talk about that case.
I run the script via Background scripts on my own instance where I modified start_date for two changes and I get:
[0:00:00.042] Script completed in scope global: script
*** Script: There are: 7 changes created 1 day ago
*** Script: We have the a change with start_date or end_date updated and change record has number: CHG0000001
*** Script: We have the a change with start_date or end_date updated and change record has number: CHG0030002
Hope this helps.
Let me know if you need anything extra.
Regards,
Sergiu
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎02-12-2016 01:09 AM
Hi,
I've noticed some issues for the first script regarding the new changes. I couldn't figure out why it's happening but the scheduled report is sent multiple times even though there are no new changes since the last report. To give you an example: I create a change on Monday and I expect to receive a report with it on Tuesday. However, what happens is that I receive the same report on Tuesday, Wednesday, Thursday etc and at some points I no longer receive it.
Another thing - is there any information with regards to change created date withit the sys_audit table so that we use something like:
- var gr = new GlideRecord('change_request');
- gr.addActiveQuery();
- gr.query();
- while (gr.next()){
- var audit = new GlideRecord('sys_audit');
- audit.addQuery('documentkey', gr.sys_id);
- audit.query();
- while (audit.next() && ((audit.fieldname == 'start_date') || (audit.fieldname = 'end_date') || (audit.fieldname = 'created_on'))){
- if (audit.sys_created_on >= gs.daysAgo(1)){
- gs.print('We have the a change with start_date or end_date updated and change record has number: ' + gr.number);
- }
- }
- };
And the last question: is the ";" at the end of the script mandatory?
Thank you in advance,
Diana
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎02-12-2016 02:33 AM
Hi Diana,
I am not sure why you're receiving the report multiple times. This might be related to the way report was created.
As for your code you mentioned, sys_audit.fieldname == 'sys_created_on', this won't help, as sys_created_on doesn't have a previous value to be tracked.
On the other hand I see an issue with this condition in the script:
while (audit.next() && ((audit.fieldname == 'start_date') || (audit.fieldname = 'end_date')
First, second condition should be (audit.fieldname == 'end_date') (double ==, not single)
and
Secondly, it doesn't evaluates correctly on my own instance (not sure why at this stage).
Instead, I would use something like this where I put the condition on sys_created_on directly in the change_request GlideRecord call:
var gr = new GlideRecord('change_request');
gr.addActiveQuery();
gr.addQuery('sys_created_on', '>=', gs.daysAgo(1));
gr.query();
gs.print('Changes created since yestearday: ' + gr.getRowCount());
while (gr.next()){
gs.print(gr.number);
var audit = new GlideRecord('sys_audit');
audit.addQuery('documentkey', gr.sys_id);
audit.query();
gs.print('We have ' + audit.getRowCount() + ' records in sys_audit for change: ' + gr.number);
while (audit.next()){
if (audit.fieldname == 'start_date'){
gs.print('Change ' + gr.number + ' has start_date changed from: ' + audit.oldvalue + ' to ' + audit.newvalue);
}
if (audit.fieldname == 'end_date') {
gs.print('Change ' + gr.number + ' has end_date changed from: ' + audit.oldvalue + ' to ' + audit.newvalue);
}
}
}
Running this on my own instance gives me:
[0:00:00.041] Script completed in scope global: script
*** Script: Changes created since yestearday: 8
*** Script: CHG0000010
*** Script: We have 0 records in sys_audit for change: CHG0000010
*** Script: CHG0000011
*** Script: We have 0 records in sys_audit for change: CHG0000011
*** Script: CHG0000012
*** Script: We have 0 records in sys_audit for change: CHG0000012
*** Script: CHG0000013
*** Script: We have 0 records in sys_audit for change: CHG0000013
*** Script: CHG0000014
*** Script: We have 0 records in sys_audit for change: CHG0000014
*** Script: CHG0000015
*** Script: We have 0 records in sys_audit for change: CHG0000015
*** Script: CHG0030001
*** Script: We have 4 records in sys_audit for change: CHG0030001
*** Script: CHG0030002
*** Script: We have 8 records in sys_audit for change: CHG0030002
*** Script: Change CHG0030002 has end_date changed from: to 2016-02-19 10:20:23
*** Script: Change CHG0030002 has start_date changed from: to 2016-02-18 10:20:20
Hope this helps.
Regards,
Sergiu
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎03-30-2017 05:06 PM
Hi Sergiu,
I want to schedule a report to send only if there was a change in the records count. How can I do this?
Thanks.