[英]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.