首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >中odatav2的电子标签处理

中odatav2的电子标签处理
EN

Stack Overflow用户
提问于 2020-02-04 11:02:53
回答 2查看 409关注 0票数 2

使用最新的java SAP Cloud

我们试图在S/4系统中执行对OutboundDelivery的更新。我们使用的是API_OUTBOUND_DELIVERY_SRV版本2。服务要求我们使用etag,也就是说,它要求我们提供具有etag对应值的头- if-match

我们使用VDM来执行更新,并使用com.sap.cloud.sdk.s4hana.datamodel.odata.namespaces.outbounddeliveryv2.batch.OutboundDeliveryV2ServiceBatch。请查找用于更新的代码片段,如下所示:

代码语言:javascript
复制
...
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上的日志会出现以下错误:

代码语言:javascript
复制
The Data Service Request is required to be conditional. Try using the "If-Match" header.

我的问题:

  1. 为什么VDM/SDK不处理内部的etag处理?根据the section in this blog的说法,它是在javascript中自动处理的,但是java呢?
  2. 可以通过使用VDM来传递这个标头吗?如果是,那么怎么做?
  3. 还是我们必须放弃对S/4服务的乐观并发控制?

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-05 09:52:33

缺少ETags是因为要更新的项是通过编程方式使用构建器模式在应用程序中创建的。因此,在执行update时,它们上没有ETags,而且在构建请求时,SDK无法设置"If-Match“标头。

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

票数 0
EN

Stack Overflow用户

发布于 2020-02-04 11:42:37

首先,我对您正在使用的的哪个版本感到困惑。您在第一个问题中提到了JavaScript,但是com.sap.cloud.sdk.s4hana是一个Maven包标识符,即Java。你能澄清一下你用的是哪种版本吗?

或者,这两个版本都应该自动为您处理这个问题。我假设您正在尝试执行某种类型的写请求(更新或删除),从而生成您在这里发布的错误消息。当然,为了发送带有这样一个请求的eTag,必须事先知道当前的eTag。在执行写入请求之前,是否获取了实体的最新状态?

最后,JavaScript SDK允许您忽略相应请求生成器上的ignoreVersionIdentifier方法的版本标识符。当然,这通常是不推荐的!因此,在决定是否可以忽略它之前,一定要了解为什么需要使用eTag。最后,还有withCustomHeader,您可以在这里提供自己的eTag头,如果出于任何原因,上述方法都不适合您。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60055957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档