我試圖將所有數據從ServiceNow CMDB數據表中抽取到我自己的SQL數據庫中。我計劃在數據在需要與新SN實現同步的客戶遺留系統中進行維護時將其用於自動更新。ServiceNow Table API返回重複/不返回所有記錄
我們的SN環境有很多領域,很多客戶等等,這些轉化爲大量的數據。試圖在單個API調用中拉取所有記錄自然會導致超時異常,因爲數據太大。在Web API建議分批的數據,這是我已經實現:
...
var offset = 0;
while (true)
{
var requestUrl = string.Format("{0}/api/now/table/cmdb_ci_vm_instance?sysparm_offset={1}&sysparm_limit={2}&sysparm_exclude_reference_link=true", url, offset, batchSize);
var result = ApiRequest.Get(new Uri(requestUrl), _credential, null, out response);
if (result == HttpStatusCode.OK)
{
var virtualmachineRo = JsonConvert.DeserializeObject<VirtualMachineRootObject>(response);
if (virtualmachineRo.result.Count < batchSize)
{
virtualmachines.AddRange(virtualmachineRo.result);
break;
}
virtualmachines.AddRange(virtualmachineRo.result);
offset += virtualmachineRo.result.Count;
}
else
{
break;
}
}
....
我有不同的批量工作,它給了我不同的結果。根據我打的是哪張桌子,有時候我會得到重複的東西,有時我不會,有時會得到不同的重複。在幾乎所有情況下,當我DO得到一個副本時,副本會替換流中的有效記錄,這意味着我'缺少'有效記錄。
我已經通過查看來自serviceNow的原始數據流並查看重複內容並驗證ServiceNow中沒有顯示在我的流中的記錄(通常在我嘗試創建丟失的記錄和SN響應與「忽略 - 沒有領域變化」,表明該記錄已經存在)
我試圖搜索並找到任何有類似問題但沒有找到任何東西的人。在直接打開SN的票之前,我希望看看是否有一些錯誤的代碼,或者我認爲這是一個與平臺相關的bug。
這聽起來像一個很好的解決方法 - 我現在要試一試。會回到你身邊。 (這也符合我的假設 - 他們沒有在批量購買前在SN端訂購數據。) –
不幸的是,這並沒有奏效 - 更奇怪的是,如果我不批量並試圖拖動整個數據集(這太大),它會超時......但會返回一個包含2000-4000條記錄的部分數據集。每次都不一樣。我希望HTTP代碼是408或類似的東西,但是我得到一個部分數據集,其中嵌入了一個錯誤,但仍然是一個HTTP 200.非常令人沮喪= / –