簡體   English   中英

無法使用 SAP Cloud SDK for JavaScript 通過 Cloud Connector 訪問 S/4HANA on Premise 系統

[英]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 系統。

詳細地說,我有

  • 雲連接器
  • 連接服務
  • xsuaa 服務實例
  • 應用路由器(app-router)
  • 目的地
  • 目的地服務

這一切都按預期工作。 這些先決條件由不同的教程解釋( 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM