我正在尝试为我们的一个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);
}
}