如何将另一个 SAP Cloud 项目资源包含到已部署的 SAPUI5 应用程序中?

How to include another SAP Cloud project resource into deployed SAPUI5 app?

我在 Eclipse 中创建了几个 SAPUI5 Web 应用程序,这些应用程序已部署到 SAP NetWeaver PO 7.5 应用程序服务器。

所有这些应用程序都使用 "common" 项目的通用组件。我只是通过 html header 使用此引导 script-tag:

使它们可用
<!-- Bootstrapping UI5 -->
<script id="sap-ui-bootstrap"
        src="/sapui5/resources/sap-ui-cachebuster/sap-ui-core.js"
        data-sap-ui-libs="sap.m"
        data-sap-ui-theme="path.to.custom.theme"
        data-sap-ui-compatVersion="edge"
        data-sap-ui-resourceroots='{"com.namespace.ui.specificapp": ".", "com.namespace.ui.common" :"/com.namespace~ui~common~web"}'
        data-sap-ui-frameOptions="trusted"
        data-sap-ui-appCacheBuster = "./,/com.namespace~ui~common~web/" >
</script>

在我分层将这些应用程序转移到 SAP Cloud 之前,这一切都很好。

我将项目导入 WebIDE,我发现的第一件事是 data-sap-ui-resourceroots 属性不再起作用,因为应用程序无法从公共项目中找到组件。所以我将通用应用程序部署到 SAP Cloud,并在 index.html 的引导 script-tag 中插入相应的 URL,如下所示:

<script id="sap-ui-bootstrap"
    src="/sapui5/resources/sap-ui-cachebuster/sap-ui-core.js"
    data-sap-ui-libs="sap.m"
    data-sap-ui-theme="path.to.custom.theme"
    data-sap-ui-compatVersion="edge"
    data-sap-ui-resourceroots='{"com.namespace.ui.specificapp": ".", "com.namespace.ui.common" :"/https://common-aXXXXXXXX.dispatcher.hana.ondemand.com/"}'
    data-sap-ui-frameOptions="trusted"
    data-sap-ui-appCacheBuster = "./,/com.namespace~ui~common~web/" >

这允许浏览器从公共项目中找到 JS-files,但会导致此错误:

Note: Your browser does not support JavaScript or it is turned off. Press the button to proceed.

这是 https://common-aXXXXXXXX.dispatcher.hana.ondemand.com/ 主机抛出的消息。

分析 HTTP 请求我发现参数 Accept:text/plain, */*; q=0.01 已设置。

我不知道为什么 SAPUI5 要求纯文本或我可以在哪里更改此行为。有谁知道如何将此应用程序结构转移到 SAP 云?

答案很简单:服务器阻止对其他来源的请求以防止 CSRF 攻击。在本地解决方案中,所有源文件都来自同一个来源:自己的服务器。在 SAP Cloud 中,每个应用程序都是独立部署的,有自己的 URL。因此浏览器不接受来自其他项目的 JavaScript 文件。访问这些文件的解决方案是将公共项目的 URL 添加到 SAP Cloud Cockpit 中的目标。

仅供参考在目标中包含 URL 使您可以使用相对 URL 来引用外部 JavaScript 文件,这样它们就不会被浏览器阻止。