在ServiceNow中,我只能在SOAP
请求中获得最多 250 记录。如何获取 所有 记录?
Web Reference Url = https://*****.service-now.com/rm_story.do?WSDL
代码:
var url = "https://*****.service-now.com/rm_story.do?SOAP";
var userName = *****;
var password = *****;
var proxy = new ServiceNow_rm_story
{
Url = url,
Credentials = new NetworkCredential(userName, password)
};
try
{
var objRecord = new Namespace.WebReference.getRecords
{
// filters..
};
var recordResults = proxy.getRecords(objRecord);
}
catch (Exception ex)
{
}
在recordResults
中,我只获得 250 条记录。如何获得所有记录?
答案 0 :(得分:2)
另见这个提供信息的堆栈溢出答案。 Get ServiceNow Records Powershell - More than 250
请注意,返回大量记录会影响响应的性能,使用偏移量批量处理查询可能更有效(即获得1-100,然后是101-200,...)。这可以通过使用排序顺序和偏移来实现。 ServiceNow REST Table API实际上从Get请求返回链接头,为您提供第一组,下一组和最后一组记录的链接,以便您轻松了解查询下一批记录的URL。
请参阅:http://wiki.servicenow.com/index.php?title=Table_API#Methods 并查看“响应标题”。
答案 1 :(得分:1)
您是否曾尝试传递/覆盖__limit
参数?
Google / wiki / Users manual / Release notes are always helpful
答案 2 :(得分:0)
在你的//过滤器的代码片段中你应该定义__limit(可能__first_row和__last_row,如下面的例子所示)
int Skip = 0;
int Take = 250;
while (true)
{
using (var soapClient = new ServiceNowLocations.ServiceNow_cmn_location())
{
var cred = new System.Net.NetworkCredential(_user, _pass);
soapClient.Credentials = cred;
soapClient.Url = _apiUrl + "cmn_location.do?SOAP";
var getParams = new ServiceNowLocations.getRecords()
{
__first_row = Skip.ToString(),
__last_row = (Skip + Take).ToString(),
__limit = Take.ToString()
};
var records = soapClient.getRecords(getParams);
if (records != null)
{
if (records.Count() == 0)
{
break;
}
Skip += records.Count();
if (records.Count() != Take)
{
// last batch or everything in first batch
break;
}
}
else
{
// service now web service endpoint not configured correctly
break;
}
}
}