官术网_书友最值得收藏!

Counting records with GlideAggregate

Earlier in this chapter, the getRowCount function of GlideRecord was introduced. It returns the number of results found. However, this is only determined by getting all the information from the database and then counting it. Wouldn't it be more efficient if we could get just the total number? We can, with GlideAggregate!

Tip

The developer site has more information available: https://developer.servicenow.com/app.do#!/api_doc?v=helsinki&type=server&scoped=true&to=class__scoped_glideaggregate__helsink.

Run the following lines of code to get the total number of records that were created yesterday:

var today = new GlideDate();
 
 var yesterdayTime = new GlideDateTime();
 yesterdayTime.addDaysUTC(-1);
 
 var yesterday = new GlideDate();
 yesterday.setValue(yesterdayTime);
 
 
 var count = new GlideAggregate('x_hotel_check_in');
 count.addQuery('sys_created_on', '<', today);
 count.addQuery('sys_created_on', '>=', yesterday);
 
 count.addAggregate('count');
 count.query();
 count.next();
 var result = count.getAggregate('COUNT');
 gs.info('Result: ' + result);

Note

With GlideRecord, you should check that the next function is successful. But in this scenario GlideAggregate will always return something.

The style of working with GlideAggregate is very similar to that for GlideRecord. You can add filters, for example, in just the same way. Here, one of the functions of GlideSystem is used to return all the records created after the beginning of yesterday (that is, yesterday midnight). The main difference is that the addAggregate function is used to ask for the desired information, and the query call then returns that instead of a list of fields.

The addAggregate function accepts two parameters: the calculation (such as min, max, count, sum, or avg for average) and the field to perform it on. The groupBy function is used to divide the result set up and return multiple entries, which are then looped over.

To obtain the last time every guest checked in, the following code could be used:

var gr = new GlideAggregate('x_hotel_check_in'); 
gr.addAggregate('max', 'sys_created_on'); 
gr.groupBy('guest'); 
gr.query(); 
while(gr.next()) { 
  gs.log(gr.guest.name + ' ' + gr.getAggregate('max', 'sys_created_on')); 
}

Be aware that GlideAggregate only populates attributes in the object that are relevant. So you can only access the fields that you group by or have an aggregate of. In the preceding example, guest is available since it is grouped by field. Other fields are not available.

主站蜘蛛池模板: 贺兰县| 乐安县| 米脂县| 高陵县| 江达县| 龙口市| 拉孜县| 琼中| 沾化县| 东阳市| 惠州市| 德兴市| 石渠县| 凤阳县| 麻城市| 格尔木市| 三明市| 剑阁县| 色达县| 牙克石市| 中宁县| 武川县| 繁昌县| 夹江县| 曲水县| 乃东县| 长寿区| 哈巴河县| 民和| 凤阳县| 屏南县| 封丘县| 上林县| 昌平区| 马边| 修文县| 吴川市| 蕲春县| 虎林市| 桃园市| 邓州市|