[英]Cannot access S/4HANA on Premise system via Cloud Connector using SAP Cloud SDK for JavaScript
我正在嘗試使用 SAP Cloud SDK for JavaScript (版本 1.5.0)通過 Cloud Connector 和 SAP Cloud Platform 連接服務訪問 S/4HANA on Premise 系統。
詳細地說,我有
這一切都按預期工作。 這些先決條件由不同的教程解釋( https://blogs.sap.com/2019/04/02/a-do-it-yourself-at-home-guide-how-to-connect-a-node.js- app-on-sap-cloud-platform-for-the-cloud-foundry-to-an-s4hana-on-premise-system-securely-via-cloud-connector/ , https: //blogs.sap.com/2017 /07/13/part-2-how-to-use-the-sap-cloud-platform-connectivity-and-the-cloud-connector-in-the-cloud-foundry-environment/ )。
通過這種設置,我可以輕松訪問 S/4HANA Cloud 系統。 使用 SAP Cloud SDK for Java 時,一切都按預期工作,即我可以訪問內部部署系統。 我在內部部署系統上擁有足夠的權限。 使用基本身份驗證。
使用 SAP Cloud SDK JavaScript 檢索文檔信息記錄的 GET 請求示例:
let destination = await useOrFetchDestination({
destinationName: 'MY_DESTINATION',
jwt: 'MY_JWT' });
DocumentInfoRecord.requestBuilder()
.getAll()
.execute(destination);
但是針對內部部署系統進行測試會使 GET 請求失敗並顯示狀態代碼 503:
ERR Error: get request failed!
ERR at Object.errorWithCause (/path-to-app/node_modules/@sap/cloud-sdk-util/dist/error.js:14:20)
ERR at specializeError (/path-to-app/@sap/cloud-sdk-core/dist/request-builder/request/odata-request.js:175:32)
ERR at /path-to-app/@sap/cloud-sdk-core/dist/request-builder/request/odata-request.js:162:58
ERR at processTicksAndRejections (internal/process/task_queues.js:86:5)
ERR Caused by:
ERR Error: Request failed with status code 503
ERR at createError (/path-to-app/axios/lib/core/createError.js:16:15)
ERR at settle (/path-to-app/axios/lib/core/settle.js:17:12)
ERR at IncomingMessage.handleStreamEnd (/path-to-app/axios/lib/adapters/http.js:237:11)
ERR at IncomingMessage.emit (events.js:198:15)
ERR at endReadableNT (_stream_readable.js:1139:12)
ERR at processTicksAndRejections (internal/process/task_queues.js:81:17)
我可能錯過了什么? 是否需要額外的 HTTP 標頭才能使請求成功?
更新:將目標信息添加到代碼片段並完成錯誤消息。
第二次更新:目標配置看起來類似於:
Name: <MY_DESTINATION>
Type: HTTP
URL: http://... //this matches the cloud connector host, i.e. in SAP Cloud Platform Cockpit --> Cloud Connectors --> Exposed Back-End Systems
ProxyType: OnPremise
Authentication: BasicAuthentication
User: <USERNAME>
Password: <PASSWORD>
經過一些調查,位置 ID導致了問題。 它已在目標和雲連接器上設置為特定值。 因此,雲連接器將只接受提供此屬性的請求。
雲連接器的日志中沒有錯誤。 但是遠程調試應用程序(按照這些說明)會出現以下錯誤消息:
沒有連接到您的子賬戶的 SAP Cloud Connector (SCC)。 請求為子賬戶“SUBACCOUNT_ID”和 SCC 位置 ID 打開隧道,默認值為空字符串或未配置。 檢查SCC和雲端的配置。
使用來自 SAP Cloud SDK JavaScript 的useOrFetchDestination
來檢索目標信息不會返回此屬性,這就是它從未添加到請求中的原因。
當前的解決方法是從目標和雲連接器中刪除位置 ID。 然后請求成功。
有沒有辦法檢索目的地的位置 ID?
更新:可以使用originalProperties
屬性從目的地檢索位置 ID。 如果存在,它包含名為CloudConnectorLocationId
的屬性。 如此處所述,此值可以作為SAP-Connectivity-SCC-Location_ID
標頭添加到請求中。
感謝丹尼斯 H 的支持。
更新:
老實說,我現在有點難受。 鑒於您的請求適用於 Java SDK,我也對它在 JS 中失敗的原因感到困惑。
您是否嘗試過在 Java 中查詢完全相同的服務? (即您確定您的雲連接器中的路徑映射正常工作嗎?)您可以從雲駕駛艙共享您的目標配置嗎? 除了您已經發布的錯誤之外,還有其他日志輸出嗎? 您是否有權訪問雲連接器日志? (即你能以某種方式找出請求失敗的地方嗎?
原答案:
如果這是您使用的確切代碼:
DocumentInfoRecord.requestBuilder()
.getAll()
.execute({});
然后該請求無論如何都不會工作,因為您沒有為execute
函數提供正確的目的地。 您需要傳遞目的地本身,例如:
.execute({
url: 'https://my.onprem.system',
...
})
(但我認為這對於本地目的地來說非常困難),或者提供當前請求的 JWT 的目的地名稱,例如:
.execute({
destinationName: 'my-on-prem-destination',
jwt: myJwt
})
如果這不是您使用的代碼,能否提供更具代表性的代碼片段和錯誤的完整堆棧跟蹤?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.