Supporto Etag per S/4 EX

Sep 04 2020

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

Quindi sperimentandolo utilizzando l'entità BusinessPartner in S/4 EX.

Ma sembra che non ci sia un'intestazione If-Match:

Come mai l'intestazione non viene visualizzata: qualche prerequisito con etag?

(entrando per conto del team del partner di implementazione)


Ho controllato VersionIdentifier della risposta e non è stato impostato su un valore. Ho anche controllato il JSON __metadeta e l'intestazione della risposta, ma non c'erano valori che sembravano corrispondere al valore ETag.

[Codice]

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());

[Tronco d'albero]

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

[GET Response JSON(__metadata) / Response Header] (ha mascherato l'indirizzo 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

Ho provato a impostare VersionIdentifier su un valore insignificante nel mio codice di test (2° aggiornamento). Il processo di aggiornamento sembra avere esito positivo, sebbene l'intestazione della richiesta ora abbia aggiunto "If-Match". (Mi aspettavo che l'aggiornamento fallisse perché i valori non corrispondono mai, quindi speravo che l'aggiornamento fallisse.)

[2nd Update(setVersionIdenfifier)] (Ha mascherato alcuni valori.)

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

Risposte

1 AlexanderDümont Oct 05 2020 at 14:51

Se gli ETag non fanno parte delle risposte del servizio OData, dovresti rivolgerti agli amministratori IT/a che gestiscono il back-end S/4. SAP Cloud SDK utilizza solo il servizio OData. Sfortunatamente non può sfruttare il supporto ETag se è disabilitato.