ServiceNow CMDB调用API获取业务应用CI Relationships数据咨询
ServiceNow CMDB 获取指定业务负责人所属业务应用CI关系数据方案
问题根因
你之前调用cmdb_rel_type表的思路有误:cmdb_rel_type是存储关系类型元数据的表,仅保存「依赖于」「包含」「被使用」这类关系的定义信息,不存储具体CI之间的关联记录,所以无法获取到业务应用的实际关系数据。
正确实现步骤
你前两步的操作是正确的,只需调整第三步的调用逻辑即可:
- 第一步:通过邮箱查询
sys_user表获取业务负责人的sys_id,接口逻辑无需调整GET https://xxx.service-now.com/api/now/table/sys_user?sysparm_query=email%3D{xxxx.com}&sysparm_limit=1 - 第二步:通过负责人ID过滤
cmdb_ci_business_app表,获取名下所有业务应用CI的sys_id列表,接口逻辑无需调整GET https://xxx.service-now.com/api/now/table/cmdb_ci_business_app?sysparm_query=owned_by%3D{owner_sys_id}&sysparm_limit=10 - 第三步:调用存储实际CI关联关系的
cmdb_rel_ci表,查询对应业务应用的所有关系记录。该表核心字段为parent(父CI ID)、child(子CI ID)、type(关联关系类型,对应cmdb_rel_type表记录),调用示例如下:
要获取单个业务应用(ID为{app_sys_id})的全部关联关系(对应UI上CI Relationships标签页的全量数据),调用:GET https://xxx.service-now.com/api/now/table/cmdb_rel_ci?sysparm_query=parent%3D{app_sys_id}%5EORchild%3D{app_sys_id}&sysparm_limit=100&sysparm_display_value=true
参数说明
- 查询条件
parent={app_sys_id}^ORchild={app_sys_id}:匹配该业务应用作为父CI或子CI的所有关联记录,和UI展示的内容完全一致 - 可选添加
sysparm_display_value=true参数:可直接返回关联CI的显示名称、关系类型的显示名,无需额外调用接口转换sys_id - 如需过滤特定类型的关联关系,可在查询条件后追加
^type={rel_type_sys_id}指定关系类型ID即可
可选优化方案
如果不需要单独保留业务应用列表,也可以通过关联查询一步获取结果,将cmdb_rel_ci表与cmdb_ci_business_app表关联,直接过滤owned_by字段,适合批量查询场景。
内容的提问来源于stack exchange,提问作者Idan Taler
相关产品推荐
相关产品推荐

