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)
            {

            }

では、 250レコードrecordResultsしか取得できません。すべてのレコードを取得するには?

4

4 に答える 4

2

情報を提供するこのスタックオーバーフローの回答も参照してください。 ServiceNow Records Powershell を取得 - 250 以上

多数のレコードを返すと、応答のパフォーマンスに影響を与える可能性があることに注意してください。また、オフセットを使用してバッチでクエリを処理する方が効率的である可能性があります (つまり、1 ~ 100 を取得し、次に 101 ~ 200 を取得するなど)。これは、並べ替え順序とオフセットを使用して実現できます。ServiceNow REST テーブル API は実際に Get リクエストからリンク ヘッダーを返し、レコードの最初、次、および最後のセットへのリンクを提供し、レコードの次のバッチをクエリするための URL を簡単に知ることができます。

http://wiki.servicenow.com/index.php?title=Table_API#Methodsを参照 して、「応答ヘッダー」の下を見てください。

于 2015-05-09T14:50:59.543 に答える
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 に答える