对于 table cmdb_rel_ci,我想检索具有 "type=In Rack::Rack contains" 计数的唯一 parent.sys_class_name
For table cmdb_rel_ci, I want to retrieve unique parent.sys_class_name with count for "type=In Rack::Rack contains"
对于 table cmdb_rel_ci,我想检索具有 "type=In Rack::Rack contains" 计数的唯一 parent.sys_class_name。我正在开箱即用的实例中进行练习。
在table级别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 为空。
试试这个:
var parentClassName = count.getValue("parent.sys_class_name")
因为它是一个 GlideAggregate
查询(而不是 GlideRecord
),发出的查询不会返回目标 table 上的所有字段。对于 GlideRecord
,dot-walking 通过引用字段(例如 parent.sys_class_name
)自动解析引用的记录以提供对其字段值的访问。这是因为 driving/original 查询带回了 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`
因此,您实际上可以专门访问正在分组的 dot-walked sys_class_name,但不能 通过 dot-walk。对 getValue("parent.sys_class_name")
的调用预计会解析为别名为 parent_sys_class_name
.
的返回列
也就是说,根据用户的期望,您所做的可能也可以,所以您在这里没有做错任何事。
对于 table cmdb_rel_ci,我想检索具有 "type=In Rack::Rack contains" 计数的唯一 parent.sys_class_name。我正在开箱即用的实例中进行练习。 在table级别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 );
}
试试这个:
var parentClassName = count.getValue("parent.sys_class_name")
因为它是一个 GlideAggregate
查询(而不是 GlideRecord
),发出的查询不会返回目标 table 上的所有字段。对于 GlideRecord
,dot-walking 通过引用字段(例如 parent.sys_class_name
)自动解析引用的记录以提供对其字段值的访问。这是因为 driving/original 查询带回了 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`
因此,您实际上可以专门访问正在分组的 dot-walked sys_class_name,但不能 通过 dot-walk。对 getValue("parent.sys_class_name")
的调用预计会解析为别名为 parent_sys_class_name
.
也就是说,根据用户的期望,您所做的可能也可以,所以您在这里没有做错任何事。