1

ServiceNow中,我最多只能在请求中获得250条记录。SOAP如何获取所有记录?

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条记录。如何获取所有记录?

4

4 回答 4

2

另请参阅提供信息的此堆栈溢出答案。 获取 ServiceNow 记录 Powershell - 超过 250 个

请注意,返回大量记录会影响响应的性能,并且使用偏移量批量处理查询可能更有效(即,获取 1-100,然后是 101-200,...)。这可以通过使用排序顺序和偏移量来实现。ServiceNow REST Table API 实际上从 Get 请求返回链接标头,为您提供第一组、下一组和最后一组记录的链接,从而轻松了解查询下一批记录的 url。

请参阅:http ://wiki.servicenow.com/index.php?title= Table_API#Methods 并在“响应标题”下查看。

于 2015-05-09T14:50:59.543 回答
1

您是否尝试过传递/覆盖__limit参数?

Google / wiki / 用户手册 / 发行说明总是很有帮助

于 2015-05-08T06:45:37.520 回答
0

在您的代码片段中,它显示 //filter 您应该定义 __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;
          }
     }
}
于 2016-08-11T10:10:10.110 回答
0

我制作了一个库,可以更轻松地处理与 ServiceNow Rest API 的交互 https://emersonbottero.github.io/ServiceNow.Core/

于 2022-01-21T23:51:05.477 回答