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批处理更新记录。

我正在使用简单。Odata.客户端库。

谢谢。 帕里托什

如果要在 UpdateItem 中使用记录,则必须使用 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);
}
}

相关内容

  • 没有找到相关文章

最新更新