对于表cmdb_rel_ci,我想检索唯一的parent.sys_class_name,其计数为" type = In Rack :: Rack contains"。我在开箱即用的实例中练习。 表级别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 );
}

答案 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
。
话虽如此,根据用户的期望,你正在做的事情可能也可以,所以你在这里没有做错任何事。