Restricting a related list
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-27-2009 06:27 AM
I have a related list on the Incident form that shows all the active incidents for the same company. This is for an MSP, and the list can be very long. I currently restrict the list to those created within the last 7 days, but I would like to restrict it to "the most recent 10". I have a Relationship defined which defines the query, but I can't find a way of saying that I want the 10 most recent. Can anybody help?
Brian Broadhurst
- Labels:
-
Incident Management
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-29-2009 06:08 AM
You could create a Global Business Rule which will put the sys_ids of the most recent 10 into a Array and then use the function in your conditions.
Example:
Look at the Business Rule: getMyApprovals
The function "getMyApprovals" in the Business Rule is used in the condition for the 'Service Desk' Application > 'My Approvals' Module.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-01-2009 02:36 PM
Here's how to do it with a standard GlideRecord query. I'm not sure if it works in a relationship query.
var gr = new GlideRecord('incident');
gr.orderByDesc('sys_created_on');
gr.setLimit(10);
gr.query();
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-05-2009 11:01 AM
Thanks for the feedback on this subject. My colleague at TeamUltra, Nigel Bell, developed the following script to go in the Query With field of the Relationship:
// Specify the limit on the number of records we want
var count = 10;
/* Do our own search to find them, remembering to exclude the parent
and setting the limit based on the number above */
var recs = new GlideRecord('incident');
recs.addQuery('company', parent.company);
recs.addQuery('active', true);
recs.addQuery('sys_id','!=',parent.sys_id);
recs.orderByDesc('opened_at');
recs.setLimit(count);
recs.query();
/* If we've found some records add them all to the query for the
related list */
if ( recs.hasNext() ) {
recs.next();
qc = current.addQuery('sys_id',recs.sys_id);
while ( recs.next() ) {
qc.addOrCondition('sys_id',recs.sys_id);
}
/* Otherwise add a query that will never find anything to make sure
we get an empty list instead of every record */
} else {
current.addQuery('sys_id','0');
}

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎02-12-2020 03:09 PM
This really helped me out! Thanks for posting this. I did this with related items:
(function refineQuery(current, parent) {
// Add your code here, such as current.addQuery(field, value);
var item = new GlideRecord('sc_req_item');
item.addQuery('request.requested_for', parent.caller_id);
item.orderByDesc('sys_created_on');
item.setLimit(10);
item.query();
if (item.hasNext()) {
item.next();
var list = current.addQuery('sys_id', item.sys_id);
while (item.next()) {
list.addOrCondition('sys_id', item.sys_id);
}
} else {
current.addQuery('sys_id', '0');
}
})(current, parent);