SAP CAP篇七:为CAP添加Fiori Launchpad入口 (Sandbox环境)

news2024/11/9 1:53:11

本文目录

  • 本系列之前的文章
  • 在现有代码基础上继续增强
  • 增强`app`文件夹
    • 文件 `package.json`
    • 文件夹`appconfig`
    • 文件`fioriSandboxConfig.json`
    • 文件 `fiori.html`
    • 更新`Srv`中的`UiIndexContentProviderFactory`
  • 再次检查代码
  • 运行效果
  • 代码库 (Gitcode)

本系列之前的文章

本系列之前的文章:

SAP CAP篇一:快速创建一个Service,基于Java的实现
SAP CAP篇二:为Service加上数据库支持
SAP CAP篇三:定义Model
SAP CAP篇四:为CAP添加Fiori Elements程序(1)
SAP CAP篇五:为CAP添加Fiori Elements程序(1)
SAP CAP篇六:为CAP添加Fiori Elements程序(3)

在现有代码基础上继续增强

根据从篇四到篇六的修改和增强,现有的代码结构如下:

程序结构

增强app文件夹

app文件夹中添加如下文件:

  • package.json
  • appconfig folder

文件 package.json

正如在篇四提到的那样,这里app文件夹其实是为approuter准备的,所以,package.json的定义如下:

{
	"name": "approuter",
	"dependencies": {
		"@sap/approuter": "^13"
	},
	"scripts": {
		"start": "node node_modules/@sap/approuter/approuter.js"
	}
}

文件夹appconfig

app文件夹下新建子文件夹appconfig。该文件夹用来提供Fiori Launchpad的Sandbox系统。真正Deploy到SAP BTP上时,需要遵循Launchpad 定义的标准。

文件fioriSandboxConfig.json

在新创建的appconfig下创建fioriSandboxConfig.json。该文件用来定义一个Launchpad的Sandbox环境。

{
    "services": {
        "LaunchPage": {
            "adapter": {
                "config": {
                    "catalogs": [],
                    "groups": [
                        {
                            "id": "Admin",
                            "title": "Admin",
                            "isPreset": true,
                            "isVisible": true,
                            "isGroupLocked": false,
                            "tiles": [
                                {
                                    "id": "manage-books",
                                    "tileType": "sap.ushell.ui.tile.StaticTile",
                                    "properties": {
                                      "targetURL": "#Books-manage",
                                      "title": "Manage Books",
                                      "description": "Find your favorite book"
                                    }
                                }
                            ]
                        }, {
                            "id": "Book",
                            "title": "Book",
                            "isPreset": true,
                            "isVisible": true,
                            "isGroupLocked": false,
                            "tiles": [
                                {
                                    "id": "browse-books",
                                    "tileType": "sap.ushell.ui.tile.StaticTile",
                                    "properties": {
                                      "targetURL": "#Books-display",
                                      "title": "Display Books",
                                      "description": "Find your favorite book"
                                    }
                                }
                            ]
                        }
                    ]          
                }
            }
        },
        "NavTargetResolution": {
          "config": {
            "enableClientSideTargetResolution": true
          }
        },
        "ClientSideTargetResolution": {
            "adapter": {
                "config": {
                    "inbounds": {
                        "manage-books": {
                            "semanticObject": "Books",
                            "action": "manage",
                            "signature": {
                              "parameters": {},
                              "additionalParameters": "allowed"
                            },
                            "resolutionResult": {
                              "applicationType": "SAPUI5",
                              "additionalInformation": "SAPUI5.Component=manage-books",
                              "url": "/manage-books/webapp"
                            }
                        },
                        "browse-books": {
                            "semanticObject": "Books",
                            "action": "display",
                            "signature": {
                              "parameters": {},
                              "additionalParameters": "allowed"
                            },
                            "resolutionResult": {
                              "applicationType": "SAPUI5",
                              "additionalInformation": "SAPUI5.Component=browse-books",
                              "url": "/browse-books/webapp"
                            }
                        }              
                    }
                }
            }
        }    
    }
}

这里的Sandbox的inbound定义,完全对应了篇六的两个Fiori Elements程序的"semanticObject":和
“action”。

该配置要要求接入口为fiori.html,所以,继续创建该HTML文件。

文件 fiori.html

文件fiori.html是用作Fiori Launchpad的入口程序——类似于绝大多数的HTML程序的index.html一样。所以,这个fiori.html是标准的Fiori Launchpad的定义文件。

app文件夹下添加该HTML文件:

<!DOCTYPE html>
<html>
<head>

	<meta http-equiv="X-UA-Compatible" content="IE=edge" />
	<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1.0" />
	<title>Fiori</title>

	<script>
		window["sap-ushell-config"] = {
			defaultRenderer: "fiori2",
			applications: {}
		};
	</script>

	<script id="sap-ushell-bootstrap" src="https://sapui5.hana.ondemand.com/1.115.0/test-resources/sap/ushell/bootstrap/sandbox.js"></script>
	<script id="sap-ui-bootstrap" src="https://sapui5.hana.ondemand.com/1.115.0/resources/sap-ui-core.js"
			data-sap-ui-libs="sap.m, sap.ushell, sap.collaboration, sap.ui.layout"
			data-sap-ui-compatVersion="edge"
			data-sap-ui-theme="sap_horizon"
			data-sap-ui-frameOptions="allow">
	</script>
	<script>
		sap.ui.getCore().attachInit(()=> sap.ushell.Container.createRenderer().placeAt("content"))
	</script>

</head>
<body class="sapUiBody" id="content"></body>
</html>

更新Srv中的UiIndexContentProviderFactory

更新UI index的入口:

	@Override
	public void writeContent(PrintWriter writer, String contextPath) {
		writer.print(ENDPOINT_START);
		writer.printf(ENDPOINT, contextPath + "/fiori.html", "Fiori Launchpad");
		writer.print(ENDPOINT_END);
	}

再次检查代码

根据本篇的增强后,代码结构最新如下:
程序结构

运行效果

Fiori Launchpad
Manage Books

代码库 (Gitcode)

与本文配套的代码

参考README.md关于各个branch的详细介绍。

本篇对应的branch是3_withlaunchpad

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/677881.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

javaWeb之cookiesession

1 回顾 1.1 response对象 一次响应封装对象&#xff0c;由服务器创建。使用response对象将服务器需要的数据发送给浏览器。 将数据存放response对象中&#xff0c;tomcat从response对象获得数据&#xff0c;根据数据组织http响应&#xff0c;最后将http响应内容发送给浏览器&…

CTF-Show密码学:ZIP文件密码破解【暴力破解】

萌新 隐写23 题目内容&#xff1a; 文件的主人喜欢用生日做密码&#xff0c;而且还是个90后。 一、已知条件 在这个题目中&#xff0c;我们有以下已知条件&#xff1a; 文件的主人喜欢用生日做密码 - 这个条件告诉我们&#xff0c;密码可能是一个八位的纯数字密码&#xff0c…

windows服务器——部署PKI与证书服务

作者简介&#xff1a;一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭&#xff1a;低头赶路&#xff0c;敬事如仪 个人主页&#xff1a;网络豆的主页​​​​​ 目录 前言 学习导图 一.PKI 概念 1.PKI体系能够实现的功能 二.公钥加密技术 1.公钥加…

股票量化系统QTYX选股框架实战案例集|大盘跳水,上涨趋势票抗跌-230621

前言 “实战案例个股画像”系列是和大家分享我基于QTYX的选股框架&#xff0c;在实战中选股的应用案例&#xff0c;和大家一起见证QTYX选股框架逐步完善的过程&#xff0c;帮助大家更好地理解QTYX选股框架精髓。 关于QTYX的使用攻略可以查看链接&#xff1a;QTYX使用攻略 首先要…

C++ 面向对象(2)——继承

C 继承 面向对象程序设计中最重要的一个概念是继承。继承允许我们依据另一个类来定义一个类&#xff0c;这使得创建和维护一个应用程序变得更容易。这样做&#xff0c;也达到了重用代码功能和提高执行效率的效果。 当创建一个类时&#xff0c;您不需要重新编写新的数据成员和…

【Python】异常处理 ① ( 异常概念 | 异常处理 | 异常捕获 )

文章目录 一、Python 异常简介1、异常概念2、Python 异常示例 二、Python 异常处理1、异常处理简介2、代码实例 - 出现异常代码3、代码实例 - 出现异常并进行捕获处理 一、Python 异常简介 1、异常概念 Python 异常 是在程序运行过程中发生的错误或问题的表示 ; 出现异常可能会…

【软件设计师暴击考点】面向对象考点暴击系列

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;软件…

记录好项目D12

记录好项目 你好呀&#xff0c;这里是我专门记录一下从某些地方收集起来的项目&#xff0c;对项目修改&#xff0c;进行添砖加瓦&#xff0c;变成自己的闪亮项目。修修补补也可以成为毕设哦 本次的项目是个房屋租赁系统 一、系统介绍 包括管理员、房东、租客三种角色&#…

【小沐学数据库】MongoDB下载、安装和入门(Python)

文章目录 1、简介2、下载和安装2.1 平台支持2.2 MongoDB Community Server2.3 MongoDB Shell2.4 MongoDB Compass2.5 pymongo库 3、概念3.1 数据库3.2 文档(Document)3.3 集合&#xff08;Collection&#xff09;3.4 元数据3.5 数据类型 4、Python代码测试4.1 连接数据库4.2 指…

kafka基础

文章目录 1、什么是消息队列&#xff1f;2、基础架构3、Kafka为什么快4、零拷贝5、Rebalance机制6、kafka如何避免重复消费7、避免消息丢失8、Kafka怎么实现消息的顺序消费9、什么是ISR10、Kafka文件存储机制 1、什么是消息队列&#xff1f; kafka是一个消息队列的中间件&…

ProGuard混淆及R8优化

前言&#xff1a;使用java编写的源代码编译后生成了对于的class文件&#xff0c;市面上很多软件都可以对class文件进行反编译&#xff0c;况且Android开发的应用程序是用Java代码写的&#xff0c;为了很好的保护Java源代码&#xff0c;我们需要对编译好后的class文件进行混淆。…

切底掌握Android中的Kotlin DSL

前言 在这篇文章中&#xff0c;我们将学习如何在您的 Android 项目中编写 Kotlin DSL。 这个文章会很长&#xff0c;所以花点时间&#xff0c;让我们一起来写你的 DSL。我们将讨论以下主题&#xff0c; 什么是简单英语中的 DSL&#xff1f;您使用任何 DSL 吗&#xff1f;为什…

微服务的文件配置

1 基于本地文件配置的痛点 ①修改本地配置文件 需要重启服务 ②viper能监听本地配置文件变动 修改内存中变量的值 貌似可以满足需求 痛点如果实例过多 手动改极有可能出错 很多服务都依赖一个配置 运维可以写脚本批量修改 出问题运维不想背锅 ③ 多语言开发的实例 使用…

ThreadX在mdk(AC5)中的移植

1.ThreadX简介 Threadx是由 Express Logic 公司开发的一款实时操作系统&#xff08;RTOS&#xff09;&#xff0c;2019年被微软收购&#xff0c;成为了微软的一款Azure RTOS。在2020年&#xff0c;ThreadX也加入了开源大军&#xff0c;将ThreadX内核及其各大组件开源免费。 Th…

电赛汇总(一):微控制器以其外围电路模块设计

电赛汇总(一)&#xff1a;微控制器以其外围电路模块设计 这一章节主要详细记录各种常用的微控制器的引脚功能、外围的电路模块等&#xff0c;以便随时查看翻阅。这部分内容出自黄智伟等学者著的《全国大学生电子设计竞赛教程–常用电路模块制作》一书中&#xff0c;感兴趣的朋…

PS2022版本修复打开闪退问题

前言 windows 11 系统最近换了一台电脑&#xff0c;重新装了一批摄影剪辑软件&#xff0c;在使用过程中发现 PS2022 版本一但导入图片就卡死闪退。起初我以为是版本不兼容问题&#xff0c;但是问了一下对应的朋友他们并未出现这种情况。后面我就从百度中开始捞答案&#xff0c…

适用于平坦草原的近地层以上风廓线推算方法

目录 引言1 数据观测和处理1.1 观测实验和仪器1.2 数据处理 引言 本文研究平坦草原近地层之上的风廓线特征&#xff0c;尤其是不同稳定度情况下风随高度的变化&#xff1b;得到适用于本地的粗糙度、边界层高度和地转风的估测方法。 在上述研究的基础上&#xff0c;本文用上述…

如何快速的阅读一本书

B站&#xff1a;【读书方法】读不进&#xff1f;记不住&#xff1f;5分钟教你如何快速高效读书 | 读书会犯的5大错误&#xff01; 1 看着书皮&#xff0c;思考一下自己为什么读这本书&#xff0c;是为了解决什么问题。 2 要看目录&#xff0c;根据目录看一下这本书能不能解决…

0002Java程序设计-SSM协同过滤算法的新闻推荐系统

摘 要 “互联网”的战略实施后&#xff0c;很多行业的信息化水平都有了很大的提升。但是目前很多行业的管理仍是通过人工管理的方式进行&#xff0c;需要在各个岗位投入大量的人力进行很多重复性工作&#xff0c;使得对人力物力造成诸多浪费&#xff0c;工作效率不高等情况&am…

FPGA时序约束--实战篇(读懂Vivado时序报告)

目录 一、新建工程 二、时序报告分析 1、打开时序报告界面 2、时序报告界面介绍 3、时序路径分析 三、总结 FPGA开发过程中&#xff0c;vivado和quartus等开发软件都会提供时序报告&#xff0c;以方便开发者判断自己的工程时序是否满足时序要求。 本文将详细介绍如何读懂…