对于表cmdb_rel_ci,我想检索唯一的parent.sys_class_name,其计数为" type = In Rack :: Rack contains"

时间:2018-03-20 16:34:06

标签: servicenow

对于表cmdb_rel_ci,我想检索唯一的parent.sys_class_name,其计数为" type = In Rack :: Rack contains"。我在开箱即用的实例中练习。 表级别URL如下:

URL

我想用以下脚本从上面的网址中检索结果。



var count = new GlideAggregate('cmdb_rel_ci');
count.addQuery('type','e76b8c7b0a0a0aa70082c9f7c2f9dc64');// sys_id of type In Rack::Rack contains e76b8c7b0a0a0aa70082c9f7c2f9dc64
count.addAggregate('COUNT', 'parent.sys_class_name');
count.query();

while(count.next()){  
  var parentClassName = count.parent.sys_class_name.toString();
  var parentClassNameCount = count.getAggregate('COUNT','parent.sys_class_name');
  gs.log(parentClassName + " : " + parentClassNameCount );
}



 问题是我将parentClassName变为空。

1 个答案:

答案 0 :(得分:1)

请改为尝试:

var parentClassName = count.getValue("parent.sys_class_name")

由于它是GlideAggregate查询(而不是GlideRecord),因此发出的查询不会返回目标表上的所有字段。使用GlideRecord,遍历引用字段(例如parent.sys_class_name)会自动解析引用的记录以提供对其字段值的访问。这可以通过驱动/原始查询带回parent字段的值来实现。 GlideAggregate没有发生这种情况。在这种情况下的查询基本上看起来像:

SELECT cmdb1.`sys_class_name` AS `parent_sys_class_name`, count(*) 
FROM (cmdb_rel_ci cmdb_rel_ci0  LEFT JOIN cmdb cmdb1 ON cmdb_rel_ci0.`parent` = cmdb1.`sys_id` )  
WHERE cmdb_rel_ci0.`type` = 'e76b8c7b0a0a0aa70082c9f7c2f9dc64' 
GROUP BY cmdb1.`sys_class_name` 
ORDER BY cmdb1.`sys_class_name` 

因此,您实际上可以专门访问正在分组的那个点走路的sys_class_name,但不能通过点走路。对getValue("parent.sys_class_name")的调用有望解析为返回的列别名为parent_sys_class_name

话虽如此,根据用户的期望,你正在做的事情可能也可以,所以你在这里没有做错任何事。