如何通过API获取ServiceNow调查的问题、回复及工单编号
解决方案
要同时获取问题、答案和工单编号,你需要通过表关联整合多个核心表的数据——asmt_metric_result仅存储答案原始值,问题和工单信息分别在其他关联表中。以下是具体实现思路和SQL示例:
核心关联逻辑
这类系统的典型表关联关系:
asmt_metric_result(回复表) ↔asmt_metric(问题表):通过metric_id关联,获取问题内容asmt_metric_result↔asmt_assessment(调查主表):通过assessment_id关联,筛选你创建的目标调查asmt_assessment↔ 工单表(如incident/change_request):通过工单关联字段(或中间表asmt_assessment_ticket)获取工单编号
示例SQL查询
SELECT am.name AS 问题内容, amr.value AS 答案, i.number AS 工单编号 FROM asmt_metric_result amr -- 关联问题表拉取问题文本 JOIN asmt_metric am ON amr.metric_id = am.sys_id -- 关联调查主表,筛选你创建的调查 JOIN asmt_assessment aa ON amr.assessment_id = aa.sys_id AND aa.created_by = '你的用户SysID' -- 替换为你的用户ID AND aa.name = '你的目标调查名称' -- 可选:指定调查名称缩小范围 -- 关联工单表(以incident为例,根据实际工单类型替换) JOIN incident i ON aa.ticket = i.sys_id -- 按工单编号和问题顺序排序,方便查看 ORDER BY i.number, am.order;
关键注意事项
- 字段适配:不同系统字段名可能有差异,比如问题文本可能是
label而非name,工单关联字段可能是ticket_id而非ticket,请通过系统数据字典确认实际字段。 - 工单关联方式:如果调查和工单通过中间表
asmt_assessment_ticket关联,需调整关联逻辑:JOIN asmt_assessment_ticket aat ON aa.sys_id = aat.assessment_id JOIN incident i ON aat.ticket_id = i.sys_id - 结构化答案解析:如果
amr.value是JSON/编码值(如多选答案),需用对应函数解析,例如:-- 假设是JSON格式的多选答案 JSON_VALUE(amr.value, '$.selected_options') AS 解析后答案 - 权限验证:确保你拥有
asmt_metric、asmt_assessment和工单表的查询权限,否则会返回权限错误。
内容的提问来源于stack exchange,提问作者Bemgi
相关产品推荐
相关产品推荐

