Etag对S / 4 EX的支持

问题描述

SDK支持Etag:https://sap.github.io/cloud-sdk/docs/java/features/odata/use-typed-odata-v4-client-in-sap-cloud-sdk-for-java/#handling-of-etags

因此,请在S / 4 EX中使用BusinessPartner实体进行实验。

但是似乎没有If-Match标头:

log capture

标题为何不显示-使用etag的任何先决条件?

(代表实施合作伙伴团队进入)


我检查了响应的VersionIdentifier,但未将其设置为值。 我还检查了响应的JSON __Metadeta和标头,但似乎没有与ETag值相对应的值。

[代码]

BusinessPartner bp1 = new DefaultBusinessPartnerService().getBusinessPartnerByKey(bpId).execute(dest);
log.debug("get 1: {}",bp1);
log.debug("get 1 VersionIdentifier: {}",bp1.getVersionIdentifier());

bp1.setorganizationBPName1("SCP Update 1st:" + System.currentTimeMillis());
ODataUpdateResult result1 = new DefaultBusinessPartnerService().updateBusinessPartner(bp1).execute(dest);
log.debug("Update1 Http Status: {}",result1.getHttpStatusCode());

bp1.setorganizationBPName1("SCP Update 2nd:" + System.currentTimeMillis());
bp1.setVersionIdentifier("dummy");
ODataUpdateResult result2 = new DefaultBusinessPartnerService().updateBusinessPartner(bp1).execute(dest);
log.debug("Update2 Http Status: {}",result2.getHttpStatusCode());

[日志]

get 1: BusinessPartner(super=VdmObject(customFields={},changedOriginal...
get 1 VersionIdentifier: None
Update1 Http Status: 204
Update2 Http Status: 204

[获取响应JSON(__ Metadata)/响应标头] (它已屏蔽了IP地址。)

"__Metadata": {
    "id": "https://xxx.xxx.xxx.xxx:xxxxxx/sap/opu/odata/sap/API_BUSInesS_PARTNER/A_BusinessPartner('1000001')","uri": "https://xxx.xxx.xxx.xxx:xxxxxx/sap/opu/odata/sap/API_BUSInesS_PARTNER/A_BusinessPartner('1000001')","type": "API_BUSInesS_PARTNER.A_BusinessPartnerType"
},
HTTP/1.1 200 OK
content-type: application/json; charset=utf-8
content-length: 3152
dataserviceversion: 2.0
sap-Metadata-last-modified: Thu,14 May 2020 23:58:07 GMT
cache-control: no-store,no-cache
sap-processing-info: ODataBEP=,crp=,RAL=,st=,MedCacheHub=SHM,codeployed=X,softstate=
sap-server: true
sap-perf-fesrec: 243070.000000

我尝试在测试代码(第二次更新)中将VersionIdentifier设置为无意义的值。 尽管请求标头现在已添加“ If-Match”,但更新过程似乎已成功。 (我期望更新会失败,因为值永远不匹配,所以我希望更新会失败。)

[第二次更新(setVersionIdenfifier)] (它掩盖了某些值。)

PATCH http://xxx.xxx.xxx.xxx:xxxxxx/sap/opu/odata/sap/API_BUSInesS_PARTNER/A_BusinessPartner(BusinessPartner='1000001') HTTP/1.1
x-csrf-token: xxx
Content-Type: application/json
Accept: application/json
If-Match: dummy
Authorization: Basic xxx
SAP-Connectivity-SCC-Location_ID: xxx
Proxy-Authorization: Bearer xxx
sap-language: en
sap-client: xxx
Content-Length: 55

解决方法

如果ETag不是OData服务响应的一部分,那么您应该联系维护S / 4后端的IT /管理员。 SAP Cloud SDK仅使用OData服务。不幸的是,如果禁用了ETag,则无法利用。