温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - E-Tag handling for odatav2 in SAP Cloud SDK VDM
sap-cloud-sdk

其他 - SAP Cloud SDK VDM中odatav2的电子标签处理

发布于 2020-04-17 14:15:45

使用最新的Java SAP Cloud Sdk

我们正在尝试对S / 4系统中的OutboundDelivery进行更新。我们正在使用API​​_OUTBOUND_DELIVERY_SRV版本2。该服务要求我们使用etag,即它要求我们提供标头- if-match具有etag的相应值。

我们正在使用VDM执行更新,并正在使用com.sap.cloud.sdk.s4hana.datamodel.odata.namespaces.outbounddeliveryv2.batch.OutboundDeliveryV2ServiceBatch请在下面找到用于更新的代码段:

...
OutboundDeliveryV2ServiceBatch service = // Instantiate service;

List<OutbDeliverItem> itemsToUpdate = new ArrayList<>();

items.add(OutbDeliveryItem.builder()
            .deliveryDocument("some key")
            .deliveryDocumentItem("some key")
            .build());

// Assume more additions to items
...
...
...

OutboundDeliveryV2ServiceBatchChangeSet changeSet = service.beginChangeSet();

items.forEach(changeSet::updateOutbDeliveryItem);

changeSet.endChangeSet();

BatchResponse response = service.execute(someDestination);
...

一旦service.execute(someDestination)执行,就不会在S / 4上执行更新,并且S / 4上的日志会出现以下错误:

The Data Service Request is required to be conditional. Try using the "If-Match" header.

我的问题:

  1. 为什么VDM / SDK在内部不处理etag处理?根据此博客中的乐观并发控制部分,提到在javascript sdk中会自动处理它,但是java sdk呢?
  2. 是否可以通过某种方式使用VDM传递此标头?如果是,那怎么办?
  3. 还是我们必须放弃S / 4服务中的乐观并发控制?

请注意,由于性能原因,我们必须使用批处理操作本身。

查看更多

提问者
cleancoder
被浏览
45
MatKuhr 2020-02-05 17:52

缺少ETag,因为要更新的项目是使用生成器模式在您的应用程序中以编程方式创建的。因此,当您执行更新时,它们上将不存在任何ETag,并且在构建请求时,SDK将没有可用的ETag来设置“ If-Match”标头。

解决方案是首先从服务器获取项目。这还可以确保您具有更新的最新版本,这是更新它们的先决条件。