在多個 REST 請求上實現分頁

在本例中,你將探索如何通過基於 REST 契約的 API 批量匯出 Acumatica ERP 中的以下資料:

  • 申請中存在的庫存專案,分 10 批記錄
  • 所有銷售訂單分批 100 條記錄

要通過多個 REST 呼叫以 10 個記錄的批量匯出庫存專案:

要使用版本 6.00.001預設端點從本地 AcumaticaERP 例項匯出前 10 個庫存專案,你應使用以下 URL:http://localhost/AcumaticaERP/entity/Default/6.00.001/StockItem?$top=10 ******

因此,要從 10 到 20 請求庫存商品,你只需使用過濾器引數:http://localhost/AcumaticaERP/entity/Default/6.00.001/StockItem?$top=10&$filter=InventoryID gt '<InventoryID>' 擴充套件上面的 URL

<InventoryID> 是使用先前 REST 呼叫匯出的最後一個庫存專案的 ID

下面是用 C#編寫的示例程式碼,通過向版本 6.00.001預設端點傳送多個 REST 呼叫,以 10 個記錄的批量匯出所有庫存項 : ******

using (RestService rs = new RestService(
    @"http://localhost/StackOverflow/", "Default/6.00.001",
    username, password, company, branch))
{
    var json = new JavaScriptSerializer();
    string parameters = "$top=10";
    string items = rs.GetList("StockItem", parameters);
    var records = json.Deserialize<List<Dictionary<string, object>>>(items);

    while (records.Count == 10)
    {
        var inventoryID = records[records.Count - 1]["InventoryID"] as Dictionary<string, object>;
        var inventoryIDValue = inventoryID.Values.First();
        string nextParameters = parameters + "&" + 
            "$filter=" + string.Format("InventoryID gt '{0}'", inventoryIDValue);
        items = rs.GetList("StockItem", nextParameters);
        records = json.Deserialize<List<Dictionary<string, object>>>(items);
    }
}

要通過多個 REST 呼叫以 100 個記錄的批量匯出所有銷售訂單:

要使用版本 6.00.001預設端點從本地 AcumaticaERP 例項匯出前 100 個銷售訂單,你應使用以下 URL:http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$top=100 ******

由於“ 銷售訂單” 實體的主鍵由“ 訂單型別” 和“ 訂單號”組成,因此在此示例中,你將使用 “ 訂單型別” 和“ 訂單號” 欄位的過濾器引數組合 : ****** ******

  • 要請求 100 到 200 個 SO 型別的銷售訂單,你應該使用以下 URL:http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$top=100&$filter=OrderType eq 'SO' and OrderNbr gt '<OrderNbr>'

<OrderNbr> 是使用先前 REST 呼叫匯出的最後一個銷售訂單的編號

  • 因此,要請求下一個 SO 型別的前 100 個銷售訂單,你應該使用以下 URL:http://localhost/AcumaticaERP/entity/Default/6.00.001/SalesOrder?$top=100&$filter=OrderType gt 'SO' and OrderNbr gt ''

下面是用 C#編寫的示例程式碼,用於將所有銷售訂單以 100 個記錄的批量匯出,並對 6.0006 版本的預設端點進行多次 REST 呼叫 : ******

using (RestService rs = new RestService(
    @"http://localhost/StackOverflow/", "Default/6.00.001",
    username, password, company, branch))
{
    var json = new JavaScriptSerializer();
    string parameters = "$top=100";
    string items = rs.GetList("SalesOrder", parameters);
    var records = json.Deserialize<List<Dictionary<string, object>>>(items);

    bool sameOrderType = true;
    while (records.Count > 0 && (records.Count == 100 || !sameOrderType))
    {
        var orderType = records[records.Count - 1]["OrderType"] as Dictionary<string, object>;
        var orderTypeValue = orderType.Values.First();
        var orderNbr = records[records.Count - 1]["OrderNbr"] as Dictionary<string, object>;
        var orderNbrValue = orderNbr.Values.First();

        string nextParameters = parameters + "&" + "$filter=" +
            string.Format("OrderType {0} '{1}'", sameOrderType ? "eq" : "gt", orderTypeValue) + " and " +
            string.Format("OrderNbr gt '{0}'", sameOrderType ? orderNbrValue : "''" );
        items = rs.GetList("SalesOrder", nextParameters);
        records = json.Deserialize<List<Dictionary<string, object>>>(items);
        sameOrderType = records.Count == 100;
    }
}