簡體   English   中英

Simple.Odata.Client - 批處理

[英]Simple.Odata.Client - Batch Processing

我正在嘗試為我們的 CRM 實體之一實施批處理。

我有 2 個場景 1. 添加實體記錄然后更新相同的實體記錄(因為我們無法添加非活動記錄,因此需要第二次調用以使其處於非活動狀態)。 2. 獲取實體記錄並將其與另一個實體解除鏈接。

示例代碼如下:

var record = client.For<entity1>().Filter(p => p.primaryKey == inputParam.entity1.primaryKey).
   Set(new { statecode = 0 }).InsertEntryAsync(false);

 client.For<entity1>().Filter(p => p.primaryKey == record.primaryKey).
   Set(new { statecode = 1 }).UpdateEntryAsync(false);

另外請讓我知道是否有可能使用 Odata Batch 檢索記錄和更新記錄。

我正在使用 simple.Odata.Client 庫。

謝謝。 帕里托什

如果要使用 UpdateEntry 中的記錄,則必須使用 true 調用 InsertEntryAsync 以表示在更新請求中使用之前需要返回的結果:

var record = await client
   .For<entity1>()
   .Filter(p => p.primaryKey == inputParam.entity1.primaryKey)
   .Set(new { statecode = 0 })
   .InsertEntryAsync(true);

await client
   .For<entity1>()
   .Filter(p => p.primaryKey == record.primaryKey)
   .Set(new { statecode = 1 })
   .UpdateEntryAsync(false);

對於 OData 批處理,您必須確保服務器支持批處理。 然后在您的代碼中,這是如何使用 Simple.OData.Client 推送每批最多 100 個請求的方法:

ODataClientSettings oDataSettings = new ODataClientSettings
{  
  BaseUri = new Uri(ApiUrl)
};
var batch = new ODataBatch(oDataSettings);
var entryCount = 0;
foreach (var item in entityList)
{
  entryCount++;
  batch += async c => await client
    .For<entity1>()
    .Set(item)
    .InsertEntryAsync(false);
  if ((entryCount % 100 == 0) || entryCount == entityList.Count())
  {
    await batch.ExecuteAsync();
    batch = new ODataBatch(oDataSettings);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM