如何通过REST API获取ServiceNow有近期活动的工单列表?
解决方法
1. 用关联子查询直接过滤有近期活动的工单
ServiceNow的REST API支持在查询参数里嵌套子查询,你可以直接关联工单活动表,只返回有符合日期条件活动的工单,不用二次调用每个工单的活动接口。
构造请求URL如下:
/api/sn_customerservice/{api_version}/case?sysparm_query=sys_idIN(SELECTparentFROMsn_customerservice_case_activityWHEREsys_created_on>={given date})
sn_customerservice_case_activity是工单活动对应的后台表名(和你调用的/case/{id}/activities接口对应)sys_created_on取的是活动创建的时间,能准确代表实际活动发生的节点,不会被后台进程的无关更新干扰- 这个查询会直接返回所有关联了近期活动的工单,一步到位
2. 优化请求效率
如果返回的数据量太大,可以加上sysparm_fields参数只获取你需要的字段,减少响应体积:
/api/sn_customerservice/{api_version}/case?sysparm_query=sys_idIN(SELECTparentFROMsn_customerservice_case_activityWHEREsys_created_on>={given date})&sysparm_fields=sys_id,short_description,opened_at
如果工单数量上千,建议用分页参数分批拉取,避免超时:
/api/sn_customerservice/{api_version}/case?sysparm_query=sys_idIN(SELECTparentFROMsn_customerservice_case_activityWHEREsys_created_on>={given date})&sysparm_limit=100&sysparm_offset=0
每次递增sysparm_offset的值(比如0→100→200…),直到返回结果为空即可。
注意事项
- 确保你的个人账号有权限查询
sn_customerservice_case_activity表的数据,否则子查询会返回空结果 - 如果活动表的
sys_created_on不是你需要的时间字段,可以换成sys_updated_on,但前者更能体现活动首次发生的时间 - 测试时先缩小日期范围(比如最近3天),验证返回的工单确实有实际活动,避免大范围查询浪费资源
内容的提问来源于stack exchange,提问作者user8735467239
相关产品推荐
相关产品推荐

