Commit 5bcf7959 authored by guozhipeng's avatar guozhipeng

两个页面

parent ab00a61f
# Generated with Cloud MTA Build Tool version 1.2.33
version=0.0.1
MBT=C:/Users/admin/AppData/Roaming/npm/node_modules/mbt/unpacked_bin/mbt.exe
ifndef p
$(error platform flag is expected. e.g. use make -f makefile.mta p=cf)
endif
target_provided=true
ifndef t
t="$(CURDIR)"
target_provided=false
endif
ifndef strict
strict=true
endif
ifndef mtar
mtar="*"
endif
modules := $(shell $(MBT) provide modules -d=dev)
modules := $(subst ],,$(subst [,,$(modules)))
# List of all the recipes to be executed during the build process
.PHONY: all pre_validate pre_build validate $(modules) post_build meta mtar cleanup
# Default target compile all
all: pre_validate pre_build validate $(modules) post_build meta mtar cleanup
# Validate mta.yaml
pre_validate:
@$(MBT) validate -r=${strict} -x="paths"
pre_build: pre_validate
@$(MBT) project build -p=pre
# Execute module build
define build_rule
$(1): validate
@$(MBT) module build -m=$(1) -p=${p} -t=${t}
endef
$(foreach mod,$(modules),$(eval $(call build_rule,$(mod))))# Create META-INF folder with MANIFEST.MF & mtad.yaml
meta: $(modules) post_build
@$(MBT) gen meta -p=${p} -t=${t}
post_build: $(modules)
@$(MBT) project build -p=post -t=${t}
# Validate mta.yaml
validate: pre_build
@$(MBT) validate -r=${strict}
# Pack as MTAR artifact
mtar: $(modules) meta
@$(MBT) gen mtar --mtar=${mtar} --target_provided=${target_provided} -t=${t}
cleanup: mtar
# Remove tmp folder
@$(MBT) clean -t=${t}
\ No newline at end of file
# 注意事项
## 参考文档
Build a Business Application Using CAP for Java
使用 CAP for Java 构建业务应用程序
https://developers.sap.com/mission.cap-java-app.html
注意:JDK需要21
本地开发启动命令:
mvn clean spring-boot:run
浏览器访问地址:http://localhost:8080/
## 打包部署
命令:
cf api https://api.cf.cn40.platform.sapcloud.cn
登录BTP gzpTest子账户部署命令:
cf login -a https://api.cf.cn40.platform.sapcloud.cn -o "Shenzhen-Lianchuangjie-Technology-Co-Ltd-test-cnrc164l" -s gzpTest -u zhipeng.guo@boscloud.cn
密码: Gzp@123456
打包命令:
mbt build -t gen --mtar mta.mtar
部署命令:
cf deploy gen/mta.mtar
No preview for this file type
...@@ -7,6 +7,9 @@ ...@@ -7,6 +7,9 @@
"": { "": {
"name": "books", "name": "books",
"version": "0.0.1", "version": "0.0.1",
"dependencies": {
"books": "file:"
},
"devDependencies": { "devDependencies": {
"@sap/ux-ui5-tooling": "1", "@sap/ux-ui5-tooling": "1",
"@ui5/cli": "^3.0.0", "@ui5/cli": "^3.0.0",
...@@ -8069,6 +8072,10 @@ ...@@ -8069,6 +8072,10 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/books": {
"resolved": "",
"link": true
},
"node_modules/boxen": { "node_modules/boxen": {
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmmirror.com/boxen/-/boxen-5.1.2.tgz", "resolved": "https://registry.npmmirror.com/boxen/-/boxen-5.1.2.tgz",
......
## Application Details
| |
| ------------- |
|**Generation Date and Time**<br>Mon Jan 13 2025 17:44:45 GMT+0800 (中国标准时间)|
|**App Generator**<br>@sap/generator-fiori-elements|
|**App Generator Version**<br>1.11.3|
|**Generation Platform**<br>Visual Studio Code|
|**Template Used**<br>List Report Page V4|
|**Service Type**<br>Local Cap|
|**Service URL**<br>http://localhost:4004/odata/v4/OrdersService/
|**Module Name**<br>orders|
|**Application Title**<br>Orders|
|**Namespace**<br>ns|
|**UI5 Theme**<br>sap_horizon|
|**UI5 Version**<br>1.131.1|
|**Enable Code Assist Libraries**<br>False|
|**Enable TypeScript**<br>False|
|**Add Eslint configuration**<br>False|
|**Main Entity**<br>Orders|
|**Navigation Entity**<br>None|
## orders
Orders
### Starting the generated app
- This app has been generated using the SAP Fiori tools - App Generator, as part of the SAP Fiori tools suite. In order to launch the generated app, simply start your CAP project (```mvn spring-boot:run```) and navigate to the following location in your browser:
http://localhost:8080/orders/webapp/index.html
#### Pre-requisites:
1. Active NodeJS LTS (Long Term Support) version and associated supported NPM version. (See https://nodejs.org)
using OrdersService as service from '../../srv/services';
annotate service.Orders with @(
UI.LineItem : [
{
$Type : 'UI.DataField',
Label : 'total',
Value : total,
},
{
$Type : 'UI.DataField',
Label : 'currency_code',
Value : currency_code,
},
]
);
annotate service.Orders with @(
UI.FieldGroup #GeneratedGroup1 : {
$Type : 'UI.FieldGroupType',
Data : [
{
$Type : 'UI.DataField',
Label : 'total',
Value : total,
},
{
$Type : 'UI.DataField',
Label : 'currency_code',
Value : currency_code,
},
],
},
UI.Facets : [
{
$Type : 'UI.ReferenceFacet',
ID : 'GeneratedFacet1',
Label : 'General Information',
Target : '@UI.FieldGroup#GeneratedGroup1',
},
]
);
sap.ui.define(
["sap/fe/core/AppComponent"],
function (Component) {
"use strict";
return Component.extend("ns.orders.Component", {
metadata: {
manifest: "json"
}
});
}
);
\ No newline at end of file
//@ui5-bundle ns/orders/Component-preload.js
sap.ui.require.preload({
"ns/orders/Component.js":function(){
sap.ui.define(["sap/fe/core/AppComponent"],function(e){"use strict";return e.extend("ns.orders.Component",{metadata:{manifest:"json"}})});
},
"ns/orders/i18n/i18n.properties":'# This is the resource bundle for ns.orders\n\n#Texts for manifest.json\n\n#XTIT: Application name\nappTitle=Orders\n\n#YDES: Application description\nappDescription=Orders',
"ns/orders/manifest.json":'{"_version":"1.58.0","sap.app":{"id":"ns.orders","type":"application","i18n":"i18n/i18n.properties","applicationVersion":{"version":"0.0.1"},"title":"{{appTitle}}","description":"{{appDescription}}","resources":"resources.json","sourceTemplate":{"id":"@sap/generator-fiori:lrop","version":"1.11.3","toolsId":"c798f7f5-c5e6-4c9a-8f24-c78035263d30"},"dataSources":{"mainService":{"uri":"/odata/v4/OrdersService/","type":"OData","settings":{"annotations":[],"localUri":"localService/metadata.xml","odataVersion":"4.0"}}}},"sap.ui":{"technology":"UI5","icons":{"icon":"","favIcon":"","phone":"","phone@2":"","tablet":"","tablet@2":""},"deviceTypes":{"desktop":true,"tablet":true,"phone":true}},"sap.ui5":{"flexEnabled":true,"dependencies":{"minUI5Version":"1.131.1","libs":{"sap.m":{},"sap.ui.core":{},"sap.ushell":{},"sap.fe.templates":{}}},"contentDensities":{"compact":true,"cozy":true},"models":{"i18n":{"type":"sap.ui.model.resource.ResourceModel","settings":{"bundleName":"ns.orders.i18n.i18n"}},"":{"dataSource":"mainService","preload":true,"settings":{"synchronizationMode":"None","operationMode":"Server","autoExpandSelect":true,"earlyRequests":true}},"@i18n":{"type":"sap.ui.model.resource.ResourceModel","uri":"i18n/i18n.properties"}},"resources":{"css":[]},"routing":{"config":{},"routes":[{"pattern":":?query:","name":"OrdersList","target":"OrdersList"},{"pattern":"Orders({key}):?query:","name":"OrdersObjectPage","target":"OrdersObjectPage"}],"targets":{"OrdersList":{"type":"Component","id":"OrdersList","name":"sap.fe.templates.ListReport","options":{"settings":{"contextPath":"/Orders","variantManagement":"Page","navigation":{"Orders":{"detail":{"route":"OrdersObjectPage"}}}}}},"OrdersObjectPage":{"type":"Component","id":"OrdersObjectPage","name":"sap.fe.templates.ObjectPage","options":{"settings":{"editableHeaderContent":false,"contextPath":"/Orders"}}}}}},"sap.fiori":{"registrationIds":[],"archeType":"transactional"}}'
});
//# sourceMappingURL=Component-preload.js.map
{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"names":[],"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"file":"Component.js","names":["sap","ui","define","Component","extend","metadata","manifest"],"sources":["Component-dbg.js"],"mappings":"AAAAA,IAAIC,GAAGC,OACH,CAAC,4BACD,SAAUC,GACN,aAEA,OAAOA,EAAUC,OAAO,sBAAuB,CAC3CC,SAAU,CACNC,SAAU,SAGtB","ignoreList":[],"sourceRoot":""}}]}
\ No newline at end of file
sap.ui.define(["sap/fe/core/AppComponent"],function(e){"use strict";return e.extend("ns.orders.Component",{metadata:{manifest:"json"}})});
//# sourceMappingURL=Component.js.map
\ No newline at end of file
{"version":3,"file":"Component.js","names":["sap","ui","define","Component","extend","metadata","manifest"],"sources":["Component-dbg.js"],"mappings":"AAAAA,IAAIC,GAAGC,OACH,CAAC,4BACD,SAAUC,GACN,aAEA,OAAOA,EAAUC,OAAO,sBAAuB,CAC3CC,SAAU,CACNC,SAAU,SAGtB","ignoreList":[]}
\ No newline at end of file
# This is the resource bundle for ns.orders
#Texts for manifest.json
#XTIT: Application name
appTitle=Orders
#YDES: Application description
appDescription=Orders
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Orders</title>
<style>
html, body, body > div, #container, #container-uiarea {
height: 100%;
}
</style>
<script
id="sap-ui-bootstrap"
src="https://sapui5.hana.ondemand.com/1.131.1/resources/sap-ui-core.js"
data-sap-ui-theme="sap_horizon"
data-sap-ui-resourceroots='{
"ns.orders": "./"
}'
data-sap-ui-oninit="module:sap/ui/core/ComponentSupport"
data-sap-ui-compatVersion="edge"
data-sap-ui-async="true"
data-sap-ui-frameOptions="trusted"
></script>
</head>
<body class="sapUiBody sapUiSizeCompact" id="content">
<div
data-sap-ui-component
data-name="ns.orders"
data-id="container"
data-settings='{"id" : "ns.orders"}'
data-handle-validation="true"
></div>
</body>
</html>
\ No newline at end of file
{
"_version": "1.58.0",
"sap.app": {
"id": "ns.orders",
"type": "application",
"i18n": "i18n/i18n.properties",
"applicationVersion": {
"version": "0.0.1"
},
"title": "{{appTitle}}",
"description": "{{appDescription}}",
"resources": "resources.json",
"sourceTemplate": {
"id": "@sap/generator-fiori:lrop",
"version": "1.11.3",
"toolsId": "c798f7f5-c5e6-4c9a-8f24-c78035263d30"
},
"dataSources": {
"mainService": {
"uri": "/odata/v4/OrdersService/",
"type": "OData",
"settings": {
"annotations": [],
"localUri": "localService/metadata.xml",
"odataVersion": "4.0"
}
}
}
},
"sap.ui": {
"technology": "UI5",
"icons": {
"icon": "",
"favIcon": "",
"phone": "",
"phone@2": "",
"tablet": "",
"tablet@2": ""
},
"deviceTypes": {
"desktop": true,
"tablet": true,
"phone": true
}
},
"sap.ui5": {
"flexEnabled": true,
"dependencies": {
"minUI5Version": "1.131.1",
"libs": {
"sap.m": {},
"sap.ui.core": {},
"sap.ushell": {},
"sap.fe.templates": {}
}
},
"contentDensities": {
"compact": true,
"cozy": true
},
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"settings": {
"bundleName": "ns.orders.i18n.i18n"
}
},
"": {
"dataSource": "mainService",
"preload": true,
"settings": {
"synchronizationMode": "None",
"operationMode": "Server",
"autoExpandSelect": true,
"earlyRequests": true
}
},
"@i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"uri": "i18n/i18n.properties"
}
},
"resources": {
"css": []
},
"routing": {
"config": {},
"routes": [
{
"pattern": ":?query:",
"name": "OrdersList",
"target": "OrdersList"
},
{
"pattern": "Orders({key}):?query:",
"name": "OrdersObjectPage",
"target": "OrdersObjectPage"
}
],
"targets": {
"OrdersList": {
"type": "Component",
"id": "OrdersList",
"name": "sap.fe.templates.ListReport",
"options": {
"settings": {
"contextPath": "/Orders",
"variantManagement": "Page",
"navigation": {
"Orders": {
"detail": {
"route": "OrdersObjectPage"
}
}
}
}
}
},
"OrdersObjectPage": {
"type": "Component",
"id": "OrdersObjectPage",
"name": "sap.fe.templates.ObjectPage",
"options": {
"settings": {
"editableHeaderContent": false,
"contextPath": "/Orders"
}
}
}
}
}
},
"sap.fiori": {
"registrationIds": [],
"archeType": "transactional"
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "orders",
"version": "0.0.1",
"description": "Orders",
"keywords": [
"ui5",
"openui5",
"sapui5"
],
"main": "webapp/index.html",
"dependencies": {},
"devDependencies": {
"@sap/ux-ui5-tooling": "1",
"@ui5/cli": "^3.0.0",
"ui5-task-zipper": "^3"
},
"scripts": {
"deploy-config": "npx -p @sap/ux-ui5-tooling fiori add deploy-config cf",
"build": "ui5 build preload --clean-dest --config ui5-deploy.yaml",
"build-local": "ui5 build preload --clean-dest",
"start": "ui5 serve"
},
"ui5": {
"dependencies": [
"ui5-task-zipper"
]
}
}
# yaml-language-server: $schema=https://sap.github.io/ui5-tooling/schema/ui5.yaml.json
specVersion: '3.1'
metadata:
name: orders
type: application
resources:
configuration:
propertiesFileSourceEncoding: UTF-8
builder:
resources:
excludes:
- "/test/**"
- "/localService/**"
customTasks:
- name: ui5-task-zipper
afterTask: generateVersionInfo
configuration:
archiveName: orders
additionalFiles:
- xs-app.json
specVersion: "2.5"
metadata:
name: ns.orders
type: application
server:
customMiddleware:
- name: fiori-tools-proxy
afterMiddleware: compression
configuration:
ignoreCertError: false # If set to true, certificate errors will be ignored. E.g. self-signed certificates will be accepted
ui5:
path:
- /resources
- /test-resources
url: https://sapui5.hana.ondemand.com
- name: fiori-tools-appreload
afterMiddleware: compression
configuration:
port: 35729
path: webapp
delay: 300
sap.ui.define(
["sap/fe/core/AppComponent"],
function (Component) {
"use strict";
return Component.extend("ns.orders.Component", {
metadata: {
manifest: "json"
}
});
}
);
\ No newline at end of file
# This is the resource bundle for ns.orders
#Texts for manifest.json
#XTIT: Application name
appTitle=Orders
#YDES: Application description
appDescription=Orders
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Orders</title>
<style>
html, body, body > div, #container, #container-uiarea {
height: 100%;
}
</style>
<script
id="sap-ui-bootstrap"
src="https://sapui5.hana.ondemand.com/1.131.1/resources/sap-ui-core.js"
data-sap-ui-theme="sap_horizon"
data-sap-ui-resourceroots='{
"ns.orders": "./"
}'
data-sap-ui-oninit="module:sap/ui/core/ComponentSupport"
data-sap-ui-compatVersion="edge"
data-sap-ui-async="true"
data-sap-ui-frameOptions="trusted"
></script>
</head>
<body class="sapUiBody sapUiSizeCompact" id="content">
<div
data-sap-ui-component
data-name="ns.orders"
data-id="container"
data-settings='{"id" : "ns.orders"}'
data-handle-validation="true"
></div>
</body>
</html>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Reference Uri="https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Capabilities.V1.xml">
<edmx:Include Alias="Capabilities" Namespace="Org.OData.Capabilities.V1"/>
</edmx:Reference>
<edmx:Reference Uri="https://sap.github.io/odata-vocabularies/vocabularies/Common.xml">
<edmx:Include Alias="Common" Namespace="com.sap.vocabularies.Common.v1"/>
</edmx:Reference>
<edmx:Reference Uri="https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.xml">
<edmx:Include Alias="Core" Namespace="Org.OData.Core.V1"/>
</edmx:Reference>
<edmx:Reference Uri="https://sap.github.io/odata-vocabularies/vocabularies/UI.xml">
<edmx:Include Alias="UI" Namespace="com.sap.vocabularies.UI.v1"/>
</edmx:Reference>
<edmx:DataServices>
<Schema Namespace="OrdersService" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<EntityContainer Name="EntityContainer">
<EntitySet Name="Orders" EntityType="OrdersService.Orders">
<NavigationPropertyBinding Path="items" Target="OrderItems"/>
<NavigationPropertyBinding Path="currency" Target="Currencies"/>
</EntitySet>
<EntitySet Name="OrderItems" EntityType="OrdersService.OrderItems">
<NavigationPropertyBinding Path="parent" Target="Orders"/>
</EntitySet>
<EntitySet Name="Currencies" EntityType="OrdersService.Currencies">
<NavigationPropertyBinding Path="texts" Target="Currencies_texts"/>
<NavigationPropertyBinding Path="localized" Target="Currencies_texts"/>
</EntitySet>
<EntitySet Name="Currencies_texts" EntityType="OrdersService.Currencies_texts"/>
</EntityContainer>
<EntityType Name="Orders">
<Key>
<PropertyRef Name="ID"/>
</Key>
<Property Name="ID" Type="Edm.Guid" Nullable="false"/>
<Property Name="createdAt" Type="Edm.DateTimeOffset" Precision="7"/>
<Property Name="createdBy" Type="Edm.String" MaxLength="255"/>
<Property Name="modifiedAt" Type="Edm.DateTimeOffset" Precision="7"/>
<Property Name="modifiedBy" Type="Edm.String" MaxLength="255"/>
<NavigationProperty Name="items" Type="Collection(OrdersService.OrderItems)" Partner="parent">
<OnDelete Action="Cascade"/>
</NavigationProperty>
<Property Name="total" Type="Edm.Decimal" Scale="2" Precision="9"/>
<NavigationProperty Name="currency" Type="OrdersService.Currencies">
<ReferentialConstraint Property="currency_code" ReferencedProperty="code"/>
</NavigationProperty>
<Property Name="currency_code" Type="Edm.String" MaxLength="3"/>
</EntityType>
<EntityType Name="OrderItems">
<Key>
<PropertyRef Name="ID"/>
</Key>
<Property Name="ID" Type="Edm.Guid" Nullable="false"/>
<NavigationProperty Name="parent" Type="OrdersService.Orders" Nullable="false" Partner="items">
<ReferentialConstraint Property="parent_ID" ReferencedProperty="ID"/>
</NavigationProperty>
<Property Name="parent_ID" Type="Edm.Guid" Nullable="false"/>
<Property Name="book_ID" Type="Edm.Guid"/>
<Property Name="amount" Type="Edm.Int32"/>
<Property Name="netAmount" Type="Edm.Decimal" Scale="2" Precision="9"/>
</EntityType>
<EntityType Name="Currencies">
<Key>
<PropertyRef Name="code"/>
</Key>
<Property Name="name" Type="Edm.String" MaxLength="255"/>
<Property Name="descr" Type="Edm.String" MaxLength="1000"/>
<Property Name="code" Type="Edm.String" MaxLength="3" Nullable="false"/>
<Property Name="symbol" Type="Edm.String" MaxLength="5"/>
<Property Name="minorUnit" Type="Edm.Int16"/>
<NavigationProperty Name="texts" Type="Collection(OrdersService.Currencies_texts)">
<OnDelete Action="Cascade"/>
</NavigationProperty>
<NavigationProperty Name="localized" Type="OrdersService.Currencies_texts">
<ReferentialConstraint Property="code" ReferencedProperty="code"/>
</NavigationProperty>
</EntityType>
<EntityType Name="Currencies_texts">
<Key>
<PropertyRef Name="locale"/>
<PropertyRef Name="code"/>
</Key>
<Property Name="locale" Type="Edm.String" MaxLength="14" Nullable="false"/>
<Property Name="name" Type="Edm.String" MaxLength="255"/>
<Property Name="descr" Type="Edm.String" MaxLength="1000"/>
<Property Name="code" Type="Edm.String" MaxLength="3" Nullable="false"/>
</EntityType>
<Annotations Target="OrdersService.EntityContainer/Orders">
<Annotation Term="Capabilities.UpdateRestrictions">
<Record Type="Capabilities.UpdateRestrictionsType">
<PropertyValue Property="Updatable" Bool="false"/>
</Record>
</Annotation>
</Annotations>
<Annotations Target="OrdersService.Orders/createdAt">
<Annotation Term="UI.HiddenFilter" Bool="true"/>
<Annotation Term="Core.Immutable" Bool="true"/>
<Annotation Term="Core.Computed" Bool="true"/>
<Annotation Term="Common.Label" String="{i18n>CreatedAt}"/>
</Annotations>
<Annotations Target="OrdersService.Orders/createdBy">
<Annotation Term="UI.HiddenFilter" Bool="true"/>
<Annotation Term="Core.Immutable" Bool="true"/>
<Annotation Term="Core.Computed" Bool="true"/>
<Annotation Term="Core.Description" String="{i18n>UserID.Description}"/>
<Annotation Term="Common.Label" String="{i18n>CreatedBy}"/>
</Annotations>
<Annotations Target="OrdersService.Orders/modifiedAt">
<Annotation Term="UI.HiddenFilter" Bool="true"/>
<Annotation Term="Core.Computed" Bool="true"/>
<Annotation Term="Common.Label" String="{i18n>ChangedAt}"/>
</Annotations>
<Annotations Target="OrdersService.Orders/modifiedBy">
<Annotation Term="UI.HiddenFilter" Bool="true"/>
<Annotation Term="Core.Computed" Bool="true"/>
<Annotation Term="Core.Description" String="{i18n>UserID.Description}"/>
<Annotation Term="Common.Label" String="{i18n>ChangedBy}"/>
</Annotations>
<Annotations Target="OrdersService.Orders/total">
<Annotation Term="Core.Computed" Bool="true"/>
</Annotations>
<Annotations Target="OrdersService.Orders/currency">
<Annotation Term="Common.Label" String="{i18n>Currency}"/>
<Annotation Term="Core.Description" String="{i18n>CurrencyCode.Description}"/>
</Annotations>
<Annotations Target="OrdersService.Orders/currency_code">
<Annotation Term="Common.Label" String="{i18n>Currency}"/>
<Annotation Term="Common.ValueList">
<Record Type="Common.ValueListType">
<PropertyValue Property="Label" String="{i18n>Currency}"/>
<PropertyValue Property="CollectionPath" String="Currencies"/>
<PropertyValue Property="Parameters">
<Collection>
<Record Type="Common.ValueListParameterInOut">
<PropertyValue Property="LocalDataProperty" PropertyPath="currency_code"/>
<PropertyValue Property="ValueListProperty" String="code"/>
</Record>
<Record Type="Common.ValueListParameterDisplayOnly">
<PropertyValue Property="ValueListProperty" String="name"/>
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
<Annotation Term="Core.Description" String="{i18n>CurrencyCode.Description}"/>
</Annotations>
<Annotations Target="OrdersService.EntityContainer/OrderItems">
<Annotation Term="Capabilities.UpdateRestrictions">
<Record Type="Capabilities.UpdateRestrictionsType">
<PropertyValue Property="Updatable" Bool="false"/>
</Record>
</Annotation>
</Annotations>
<Annotations Target="OrdersService.OrderItems/netAmount">
<Annotation Term="Core.Computed" Bool="true"/>
</Annotations>
<Annotations Target="OrdersService.Currencies">
<Annotation Term="UI.Identification">
<Collection>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="name"/>
</Record>
</Collection>
</Annotation>
</Annotations>
<Annotations Target="OrdersService.Currencies/name">
<Annotation Term="Common.Label" String="{i18n>Name}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies/descr">
<Annotation Term="Common.Label" String="{i18n>Description}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies/code">
<Annotation Term="Common.Text" Path="name"/>
<Annotation Term="Common.Label" String="{i18n>CurrencyCode}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies/symbol">
<Annotation Term="Common.Label" String="{i18n>CurrencySymbol}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies/minorUnit">
<Annotation Term="Common.Label" String="{i18n>CurrencyMinorUnit}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies_texts/locale">
<Annotation Term="Common.Label" String="{i18n>LanguageCode}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies_texts/name">
<Annotation Term="Common.Label" String="{i18n>Name}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies_texts/descr">
<Annotation Term="Common.Label" String="{i18n>Description}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies_texts/code">
<Annotation Term="Common.Text" Path="name"/>
<Annotation Term="Common.Label" String="{i18n>CurrencyCode}"/>
</Annotations>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
\ No newline at end of file
{
"_version": "1.58.0",
"sap.app": {
"id": "ns.orders",
"type": "application",
"i18n": "i18n/i18n.properties",
"applicationVersion": {
"version": "0.0.1"
},
"title": "{{appTitle}}",
"description": "{{appDescription}}",
"resources": "resources.json",
"sourceTemplate": {
"id": "@sap/generator-fiori:lrop",
"version": "1.11.3",
"toolsId": "c798f7f5-c5e6-4c9a-8f24-c78035263d30"
},
"dataSources": {
"mainService": {
"uri": "/odata/v4/OrdersService/",
"type": "OData",
"settings": {
"annotations": [],
"localUri": "localService/metadata.xml",
"odataVersion": "4.0"
}
}
}
},
"sap.ui": {
"technology": "UI5",
"icons": {
"icon": "",
"favIcon": "",
"phone": "",
"phone@2": "",
"tablet": "",
"tablet@2": ""
},
"deviceTypes": {
"desktop": true,
"tablet": true,
"phone": true
}
},
"sap.ui5": {
"flexEnabled": true,
"dependencies": {
"minUI5Version": "1.131.1",
"libs": {
"sap.m": {},
"sap.ui.core": {},
"sap.ushell": {},
"sap.fe.templates": {}
}
},
"contentDensities": {
"compact": true,
"cozy": true
},
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"settings": {
"bundleName": "ns.orders.i18n.i18n"
}
},
"": {
"dataSource": "mainService",
"preload": true,
"settings": {
"synchronizationMode": "None",
"operationMode": "Server",
"autoExpandSelect": true,
"earlyRequests": true
}
},
"@i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"uri": "i18n/i18n.properties"
}
},
"resources": {
"css": []
},
"routing": {
"config": {},
"routes": [
{
"pattern": ":?query:",
"name": "OrdersList",
"target": "OrdersList"
},
{
"pattern": "Orders({key}):?query:",
"name": "OrdersObjectPage",
"target": "OrdersObjectPage"
}
],
"targets": {
"OrdersList": {
"type": "Component",
"id": "OrdersList",
"name": "sap.fe.templates.ListReport",
"options": {
"settings": {
"contextPath": "/Orders",
"variantManagement": "Page",
"navigation": {
"Orders": {
"detail": {
"route": "OrdersObjectPage"
}
}
}
}
}
},
"OrdersObjectPage": {
"type": "Component",
"id": "OrdersObjectPage",
"name": "sap.fe.templates.ObjectPage",
"options": {
"settings": {
"editableHeaderContent": false,
"contextPath": "/Orders"
}
}
}
}
}
},
"sap.fiori": {
"registrationIds": [],
"archeType": "transactional"
}
}
<!DOCTYPE HTML>
<html>
<!-- Copyright (c) 2015 SAP AG, All Rights Reserved -->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{appTitle}}</title>
<!-- Bootstrap the unified shell in sandbox mode for standalone usage.
The renderer is specified in the global Unified Shell configuration object "sap-ushell-config".
The fiori2 renderer will render the shell header allowing, for instance,
testing of additional application setting buttons.
The navigation target resolution service is configured in a way that the empty URL hash is
resolved to our own application.
This example uses relative path references for the SAPUI5 resources and test-resources;
it might be necessary to adapt them depending on the target runtime platform.
The sandbox platform is restricted to development or demo use cases and must NOT be used
for productive scenarios.
-->
<script type="text/javascript">
window["sap-ushell-config"] = {
defaultRenderer: "fiori2",
bootstrapPlugins: {
"RuntimeAuthoringPlugin": {
component: "sap.ushell.plugins.rta",
config: {
validateAppVersion: false
}
}
},
renderers: {
fiori2: {
componentData: {
config: {
search: "hidden"
}
}
}
},
applications: {
"nsorders-tile": {
title: "Orders",
description: "Orders",
additionalInformation: "SAPUI5.Component=ns.orders",
applicationType: "URL",
url: "../"
}
}
};
</script>
<script src="https://sapui5.hana.ondemand.com/1.131.1/test-resources/sap/ushell/bootstrap/sandbox.js" id="sap-ushell-bootstrap"></script>
<!-- Bootstrap the UI5 core library -->
<script id="sap-ui-bootstrap"
src="https://sapui5.hana.ondemand.com/1.131.1/resources/sap-ui-core.js"
data-sap-ui-libs=""
data-sap-ui-async="true"
data-sap-ui-preload="async"
data-sap-ui-theme="sap_horizon"
data-sap-ui-compatVersion="edge"
data-sap-ui-language="en"
data-sap-ui-resourceroots='{"ns.orders": "../"}'
data-sap-ui-frameOptions="allow"> // NON-SECURE setting for testing environment
</script>
</head>
<!-- UI Content -->
<body class="sapUiBody" id="content">
</body>
</html>
sap.ui.define([
"sap/ui/test/opaQunit"
], function (opaTest) {
"use strict";
var Journey = {
run: function() {
QUnit.module("First journey");
opaTest("Start application", function (Given, When, Then) {
Given.iStartMyApp();
Then.onTheOrdersList.iSeeThisPage();
});
opaTest("Navigate to ObjectPage", function (Given, When, Then) {
// Note: this test will fail if the ListReport page doesn't show any data
When.onTheOrdersList.onFilterBar().iExecuteSearch();
Then.onTheOrdersList.onTable().iCheckRows();
When.onTheOrdersList.onTable().iPressRow(0);
Then.onTheOrdersObjectPage.iSeeThisPage();
});
opaTest("Teardown", function (Given, When, Then) {
// Cleanup
Given.iTearDownMyApp();
});
}
}
return Journey;
});
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>Integration tests</title>
<meta charset="utf-8">
<script id="sap-ui-bootstrap"
src="/resources/sap-ui-core.js"
data-sap-ui-theme='sap_fiori_3'
data-sap-ui-resourceroots='{
"ns.orders": "../../"
}'
data-sap-ui-animation="false"
data-sap-ui-compatVersion="edge"
data-sap-ui-async="true">
</script>
<link rel="stylesheet" type="text/css" href="/resources/sap/ui/thirdparty/qunit-2.css">
<script src="/resources/sap/ui/thirdparty/qunit-2.js"></script>
<script src="/resources/sap/ui/qunit/qunit-junit.js"></script>
<script src="opaTests.qunit.js"></script>
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
</body>
</html>
\ No newline at end of file
sap.ui.require(
[
'sap/fe/test/JourneyRunner',
'ns/orders/test/integration/FirstJourney',
'ns/orders/test/integration/pages/OrdersList',
'ns/orders/test/integration/pages/OrdersObjectPage'
],
function(JourneyRunner, opaJourney, OrdersList, OrdersObjectPage) {
'use strict';
var JourneyRunner = new JourneyRunner({
// start index.html in web folder
launchUrl: sap.ui.require.toUrl('ns/orders') + '/index.html'
});
JourneyRunner.run(
{
pages: {
onTheOrdersList: OrdersList,
onTheOrdersObjectPage: OrdersObjectPage
}
},
opaJourney.run
);
}
);
\ No newline at end of file
sap.ui.define(['sap/fe/test/ListReport'], function(ListReport) {
'use strict';
var CustomPageDefinitions = {
actions: {},
assertions: {}
};
return new ListReport(
{
appId: 'ns.orders',
componentId: 'OrdersList',
contextPath: '/Orders'
},
CustomPageDefinitions
);
});
\ No newline at end of file
sap.ui.define(['sap/fe/test/ObjectPage'], function(ObjectPage) {
'use strict';
var CustomPageDefinitions = {
actions: {},
assertions: {}
};
return new ObjectPage(
{
appId: 'ns.orders',
componentId: 'OrdersObjectPage',
contextPath: '/Orders'
},
CustomPageDefinitions
);
});
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>QUnit test suite</title>
<script src="../resources/sap/ui/qunit/qunit-redirect.js"></script>
<script src="testsuite.qunit.js" data-sap-ui-testsuite></script>
</head>
<body></body>
</html>
\ No newline at end of file
window.suite = function() {
'use strict';
// eslint-disable-next-line
var oSuite = new parent.jsUnitTestSuite(),
sContextPath = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1);
oSuite.addTestPage(sContextPath + 'integration/opaTests.qunit.html');
return oSuite;
};
\ No newline at end of file
{
"welcomeFile": "/index.html",
"authenticationMethod": "route",
"routes": [
{
"source": "^/?odata/(.*)$",
"target": "/odata/$1",
"destination": "srv-api",
"authenticationType": "xsuaa",
"csrfProtection": true
},
{
"source": "^(.*)$",
"target": "$1",
"service": "html5-apps-repo-rt",
"authenticationType": "xsuaa"
}
]
}
...@@ -7,6 +7,9 @@ ...@@ -7,6 +7,9 @@
"": { "": {
"name": "books", "name": "books",
"version": "0.0.1", "version": "0.0.1",
"dependencies": {
"books": "file:"
},
"devDependencies": { "devDependencies": {
"@sap/ux-ui5-tooling": "1", "@sap/ux-ui5-tooling": "1",
"@ui5/cli": "^3.0.0", "@ui5/cli": "^3.0.0",
...@@ -8069,6 +8072,10 @@ ...@@ -8069,6 +8072,10 @@
"url": "https://github.com/sponsors/ljharb" "url": "https://github.com/sponsors/ljharb"
} }
}, },
"node_modules/books": {
"resolved": "",
"link": true
},
"node_modules/boxen": { "node_modules/boxen": {
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmmirror.com/boxen/-/boxen-5.1.2.tgz", "resolved": "https://registry.npmmirror.com/boxen/-/boxen-5.1.2.tgz",
......
## Application Details
| |
| ------------- |
|**Generation Date and Time**<br>Mon Jan 13 2025 17:44:45 GMT+0800 (中国标准时间)|
|**App Generator**<br>@sap/generator-fiori-elements|
|**App Generator Version**<br>1.11.3|
|**Generation Platform**<br>Visual Studio Code|
|**Template Used**<br>List Report Page V4|
|**Service Type**<br>Local Cap|
|**Service URL**<br>http://localhost:4004/odata/v4/OrdersService/
|**Module Name**<br>orders|
|**Application Title**<br>Orders|
|**Namespace**<br>ns|
|**UI5 Theme**<br>sap_horizon|
|**UI5 Version**<br>1.131.1|
|**Enable Code Assist Libraries**<br>False|
|**Enable TypeScript**<br>False|
|**Add Eslint configuration**<br>False|
|**Main Entity**<br>Orders|
|**Navigation Entity**<br>None|
## orders
Orders
### Starting the generated app
- This app has been generated using the SAP Fiori tools - App Generator, as part of the SAP Fiori tools suite. In order to launch the generated app, simply start your CAP project (```mvn spring-boot:run```) and navigate to the following location in your browser:
http://localhost:8080/orders/webapp/index.html
#### Pre-requisites:
1. Active NodeJS LTS (Long Term Support) version and associated supported NPM version. (See https://nodejs.org)
using OrdersService as service from '../../srv/services';
annotate service.Orders with @(
UI.LineItem : [
{
$Type : 'UI.DataField',
Label : 'total',
Value : total,
},
{
$Type : 'UI.DataField',
Label : 'currency_code',
Value : currency_code,
},
]
);
annotate service.Orders with @(
UI.FieldGroup #GeneratedGroup1 : {
$Type : 'UI.FieldGroupType',
Data : [
{
$Type : 'UI.DataField',
Label : 'total',
Value : total,
},
{
$Type : 'UI.DataField',
Label : 'currency_code',
Value : currency_code,
},
],
},
UI.Facets : [
{
$Type : 'UI.ReferenceFacet',
ID : 'GeneratedFacet1',
Label : 'General Information',
Target : '@UI.FieldGroup#GeneratedGroup1',
},
]
);
sap.ui.define(
["sap/fe/core/AppComponent"],
function (Component) {
"use strict";
return Component.extend("ns.orders.Component", {
metadata: {
manifest: "json"
}
});
}
);
\ No newline at end of file
//@ui5-bundle ns/orders/Component-preload.js
sap.ui.require.preload({
"ns/orders/Component.js":function(){
sap.ui.define(["sap/fe/core/AppComponent"],function(e){"use strict";return e.extend("ns.orders.Component",{metadata:{manifest:"json"}})});
},
"ns/orders/i18n/i18n.properties":'# This is the resource bundle for ns.orders\n\n#Texts for manifest.json\n\n#XTIT: Application name\nappTitle=Orders\n\n#YDES: Application description\nappDescription=Orders',
"ns/orders/manifest.json":'{"_version":"1.58.0","sap.app":{"id":"ns.orders","type":"application","i18n":"i18n/i18n.properties","applicationVersion":{"version":"0.0.1"},"title":"{{appTitle}}","description":"{{appDescription}}","resources":"resources.json","sourceTemplate":{"id":"@sap/generator-fiori:lrop","version":"1.11.3","toolsId":"c798f7f5-c5e6-4c9a-8f24-c78035263d30"},"dataSources":{"mainService":{"uri":"/odata/v4/OrdersService/","type":"OData","settings":{"annotations":[],"localUri":"localService/metadata.xml","odataVersion":"4.0"}}}},"sap.ui":{"technology":"UI5","icons":{"icon":"","favIcon":"","phone":"","phone@2":"","tablet":"","tablet@2":""},"deviceTypes":{"desktop":true,"tablet":true,"phone":true}},"sap.ui5":{"flexEnabled":true,"dependencies":{"minUI5Version":"1.131.1","libs":{"sap.m":{},"sap.ui.core":{},"sap.ushell":{},"sap.fe.templates":{}}},"contentDensities":{"compact":true,"cozy":true},"models":{"i18n":{"type":"sap.ui.model.resource.ResourceModel","settings":{"bundleName":"ns.orders.i18n.i18n"}},"":{"dataSource":"mainService","preload":true,"settings":{"synchronizationMode":"None","operationMode":"Server","autoExpandSelect":true,"earlyRequests":true}},"@i18n":{"type":"sap.ui.model.resource.ResourceModel","uri":"i18n/i18n.properties"}},"resources":{"css":[]},"routing":{"config":{},"routes":[{"pattern":":?query:","name":"OrdersList","target":"OrdersList"},{"pattern":"Orders({key}):?query:","name":"OrdersObjectPage","target":"OrdersObjectPage"}],"targets":{"OrdersList":{"type":"Component","id":"OrdersList","name":"sap.fe.templates.ListReport","options":{"settings":{"contextPath":"/Orders","variantManagement":"Page","navigation":{"Orders":{"detail":{"route":"OrdersObjectPage"}}}}}},"OrdersObjectPage":{"type":"Component","id":"OrdersObjectPage","name":"sap.fe.templates.ObjectPage","options":{"settings":{"editableHeaderContent":false,"contextPath":"/Orders"}}}}}},"sap.fiori":{"registrationIds":[],"archeType":"transactional"}}'
});
//# sourceMappingURL=Component-preload.js.map
{"version":3,"file":"Component-preload.js","sections":[{"offset":{"line":1,"column":0},"map":{"version":3,"names":[],"sources":["Component-preload.js?bundle-code-0"],"mappings":"AAAA;AACA","sourcesContent":["sap.ui.require.preload({\n"],"sourceRoot":""}},{"offset":{"line":3,"column":0},"map":{"version":3,"file":"Component.js","names":["sap","ui","define","Component","extend","metadata","manifest"],"sources":["Component-dbg.js"],"mappings":"AAAAA,IAAIC,GAAGC,OACH,CAAC,4BACD,SAAUC,GACN,aAEA,OAAOA,EAAUC,OAAO,sBAAuB,CAC3CC,SAAU,CACNC,SAAU,SAGtB","ignoreList":[],"sourceRoot":""}}]}
\ No newline at end of file
sap.ui.define(["sap/fe/core/AppComponent"],function(e){"use strict";return e.extend("ns.orders.Component",{metadata:{manifest:"json"}})});
//# sourceMappingURL=Component.js.map
\ No newline at end of file
{"version":3,"file":"Component.js","names":["sap","ui","define","Component","extend","metadata","manifest"],"sources":["Component-dbg.js"],"mappings":"AAAAA,IAAIC,GAAGC,OACH,CAAC,4BACD,SAAUC,GACN,aAEA,OAAOA,EAAUC,OAAO,sBAAuB,CAC3CC,SAAU,CACNC,SAAU,SAGtB","ignoreList":[]}
\ No newline at end of file
# This is the resource bundle for ns.orders
#Texts for manifest.json
#XTIT: Application name
appTitle=Orders
#YDES: Application description
appDescription=Orders
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Orders</title>
<style>
html, body, body > div, #container, #container-uiarea {
height: 100%;
}
</style>
<script
id="sap-ui-bootstrap"
src="https://sapui5.hana.ondemand.com/1.131.1/resources/sap-ui-core.js"
data-sap-ui-theme="sap_horizon"
data-sap-ui-resourceroots='{
"ns.orders": "./"
}'
data-sap-ui-oninit="module:sap/ui/core/ComponentSupport"
data-sap-ui-compatVersion="edge"
data-sap-ui-async="true"
data-sap-ui-frameOptions="trusted"
></script>
</head>
<body class="sapUiBody sapUiSizeCompact" id="content">
<div
data-sap-ui-component
data-name="ns.orders"
data-id="container"
data-settings='{"id" : "ns.orders"}'
data-handle-validation="true"
></div>
</body>
</html>
\ No newline at end of file
{
"_version": "1.58.0",
"sap.app": {
"id": "ns.orders",
"type": "application",
"i18n": "i18n/i18n.properties",
"applicationVersion": {
"version": "0.0.1"
},
"title": "{{appTitle}}",
"description": "{{appDescription}}",
"resources": "resources.json",
"sourceTemplate": {
"id": "@sap/generator-fiori:lrop",
"version": "1.11.3",
"toolsId": "c798f7f5-c5e6-4c9a-8f24-c78035263d30"
},
"dataSources": {
"mainService": {
"uri": "/odata/v4/OrdersService/",
"type": "OData",
"settings": {
"annotations": [],
"localUri": "localService/metadata.xml",
"odataVersion": "4.0"
}
}
}
},
"sap.ui": {
"technology": "UI5",
"icons": {
"icon": "",
"favIcon": "",
"phone": "",
"phone@2": "",
"tablet": "",
"tablet@2": ""
},
"deviceTypes": {
"desktop": true,
"tablet": true,
"phone": true
}
},
"sap.ui5": {
"flexEnabled": true,
"dependencies": {
"minUI5Version": "1.131.1",
"libs": {
"sap.m": {},
"sap.ui.core": {},
"sap.ushell": {},
"sap.fe.templates": {}
}
},
"contentDensities": {
"compact": true,
"cozy": true
},
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"settings": {
"bundleName": "ns.orders.i18n.i18n"
}
},
"": {
"dataSource": "mainService",
"preload": true,
"settings": {
"synchronizationMode": "None",
"operationMode": "Server",
"autoExpandSelect": true,
"earlyRequests": true
}
},
"@i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"uri": "i18n/i18n.properties"
}
},
"resources": {
"css": []
},
"routing": {
"config": {},
"routes": [
{
"pattern": ":?query:",
"name": "OrdersList",
"target": "OrdersList"
},
{
"pattern": "Orders({key}):?query:",
"name": "OrdersObjectPage",
"target": "OrdersObjectPage"
}
],
"targets": {
"OrdersList": {
"type": "Component",
"id": "OrdersList",
"name": "sap.fe.templates.ListReport",
"options": {
"settings": {
"contextPath": "/Orders",
"variantManagement": "Page",
"navigation": {
"Orders": {
"detail": {
"route": "OrdersObjectPage"
}
}
}
}
}
},
"OrdersObjectPage": {
"type": "Component",
"id": "OrdersObjectPage",
"name": "sap.fe.templates.ObjectPage",
"options": {
"settings": {
"editableHeaderContent": false,
"contextPath": "/Orders"
}
}
}
}
}
},
"sap.fiori": {
"registrationIds": [],
"archeType": "transactional"
}
}
This source diff could not be displayed because it is too large. You can view the blob instead.
{
"name": "orders",
"version": "0.0.1",
"description": "Orders",
"keywords": [
"ui5",
"openui5",
"sapui5"
],
"main": "webapp/index.html",
"dependencies": {},
"devDependencies": {
"@sap/ux-ui5-tooling": "1",
"@ui5/cli": "^3.0.0",
"ui5-task-zipper": "^3"
},
"scripts": {
"deploy-config": "npx -p @sap/ux-ui5-tooling fiori add deploy-config cf",
"build": "ui5 build preload --clean-dest --config ui5-deploy.yaml",
"build-local": "ui5 build preload --clean-dest",
"start": "ui5 serve"
},
"ui5": {
"dependencies": [
"ui5-task-zipper"
]
}
}
# yaml-language-server: $schema=https://sap.github.io/ui5-tooling/schema/ui5.yaml.json
specVersion: '3.1'
metadata:
name: orders
type: application
resources:
configuration:
propertiesFileSourceEncoding: UTF-8
builder:
resources:
excludes:
- "/test/**"
- "/localService/**"
customTasks:
- name: ui5-task-zipper
afterTask: generateVersionInfo
configuration:
archiveName: orders
additionalFiles:
- xs-app.json
specVersion: "2.5"
metadata:
name: ns.orders
type: application
server:
customMiddleware:
- name: fiori-tools-proxy
afterMiddleware: compression
configuration:
ignoreCertError: false # If set to true, certificate errors will be ignored. E.g. self-signed certificates will be accepted
ui5:
path:
- /resources
- /test-resources
url: https://sapui5.hana.ondemand.com
- name: fiori-tools-appreload
afterMiddleware: compression
configuration:
port: 35729
path: webapp
delay: 300
sap.ui.define(
["sap/fe/core/AppComponent"],
function (Component) {
"use strict";
return Component.extend("ns.orders.Component", {
metadata: {
manifest: "json"
}
});
}
);
\ No newline at end of file
# This is the resource bundle for ns.orders
#Texts for manifest.json
#XTIT: Application name
appTitle=Orders
#YDES: Application description
appDescription=Orders
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Orders</title>
<style>
html, body, body > div, #container, #container-uiarea {
height: 100%;
}
</style>
<script
id="sap-ui-bootstrap"
src="https://sapui5.hana.ondemand.com/1.131.1/resources/sap-ui-core.js"
data-sap-ui-theme="sap_horizon"
data-sap-ui-resourceroots='{
"ns.orders": "./"
}'
data-sap-ui-oninit="module:sap/ui/core/ComponentSupport"
data-sap-ui-compatVersion="edge"
data-sap-ui-async="true"
data-sap-ui-frameOptions="trusted"
></script>
</head>
<body class="sapUiBody sapUiSizeCompact" id="content">
<div
data-sap-ui-component
data-name="ns.orders"
data-id="container"
data-settings='{"id" : "ns.orders"}'
data-handle-validation="true"
></div>
</body>
</html>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<edmx:Edmx Version="4.0" xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx">
<edmx:Reference Uri="https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Capabilities.V1.xml">
<edmx:Include Alias="Capabilities" Namespace="Org.OData.Capabilities.V1"/>
</edmx:Reference>
<edmx:Reference Uri="https://sap.github.io/odata-vocabularies/vocabularies/Common.xml">
<edmx:Include Alias="Common" Namespace="com.sap.vocabularies.Common.v1"/>
</edmx:Reference>
<edmx:Reference Uri="https://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Core.V1.xml">
<edmx:Include Alias="Core" Namespace="Org.OData.Core.V1"/>
</edmx:Reference>
<edmx:Reference Uri="https://sap.github.io/odata-vocabularies/vocabularies/UI.xml">
<edmx:Include Alias="UI" Namespace="com.sap.vocabularies.UI.v1"/>
</edmx:Reference>
<edmx:DataServices>
<Schema Namespace="OrdersService" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<EntityContainer Name="EntityContainer">
<EntitySet Name="Orders" EntityType="OrdersService.Orders">
<NavigationPropertyBinding Path="items" Target="OrderItems"/>
<NavigationPropertyBinding Path="currency" Target="Currencies"/>
</EntitySet>
<EntitySet Name="OrderItems" EntityType="OrdersService.OrderItems">
<NavigationPropertyBinding Path="parent" Target="Orders"/>
</EntitySet>
<EntitySet Name="Currencies" EntityType="OrdersService.Currencies">
<NavigationPropertyBinding Path="texts" Target="Currencies_texts"/>
<NavigationPropertyBinding Path="localized" Target="Currencies_texts"/>
</EntitySet>
<EntitySet Name="Currencies_texts" EntityType="OrdersService.Currencies_texts"/>
</EntityContainer>
<EntityType Name="Orders">
<Key>
<PropertyRef Name="ID"/>
</Key>
<Property Name="ID" Type="Edm.Guid" Nullable="false"/>
<Property Name="createdAt" Type="Edm.DateTimeOffset" Precision="7"/>
<Property Name="createdBy" Type="Edm.String" MaxLength="255"/>
<Property Name="modifiedAt" Type="Edm.DateTimeOffset" Precision="7"/>
<Property Name="modifiedBy" Type="Edm.String" MaxLength="255"/>
<NavigationProperty Name="items" Type="Collection(OrdersService.OrderItems)" Partner="parent">
<OnDelete Action="Cascade"/>
</NavigationProperty>
<Property Name="total" Type="Edm.Decimal" Scale="2" Precision="9"/>
<NavigationProperty Name="currency" Type="OrdersService.Currencies">
<ReferentialConstraint Property="currency_code" ReferencedProperty="code"/>
</NavigationProperty>
<Property Name="currency_code" Type="Edm.String" MaxLength="3"/>
</EntityType>
<EntityType Name="OrderItems">
<Key>
<PropertyRef Name="ID"/>
</Key>
<Property Name="ID" Type="Edm.Guid" Nullable="false"/>
<NavigationProperty Name="parent" Type="OrdersService.Orders" Nullable="false" Partner="items">
<ReferentialConstraint Property="parent_ID" ReferencedProperty="ID"/>
</NavigationProperty>
<Property Name="parent_ID" Type="Edm.Guid" Nullable="false"/>
<Property Name="book_ID" Type="Edm.Guid"/>
<Property Name="amount" Type="Edm.Int32"/>
<Property Name="netAmount" Type="Edm.Decimal" Scale="2" Precision="9"/>
</EntityType>
<EntityType Name="Currencies">
<Key>
<PropertyRef Name="code"/>
</Key>
<Property Name="name" Type="Edm.String" MaxLength="255"/>
<Property Name="descr" Type="Edm.String" MaxLength="1000"/>
<Property Name="code" Type="Edm.String" MaxLength="3" Nullable="false"/>
<Property Name="symbol" Type="Edm.String" MaxLength="5"/>
<Property Name="minorUnit" Type="Edm.Int16"/>
<NavigationProperty Name="texts" Type="Collection(OrdersService.Currencies_texts)">
<OnDelete Action="Cascade"/>
</NavigationProperty>
<NavigationProperty Name="localized" Type="OrdersService.Currencies_texts">
<ReferentialConstraint Property="code" ReferencedProperty="code"/>
</NavigationProperty>
</EntityType>
<EntityType Name="Currencies_texts">
<Key>
<PropertyRef Name="locale"/>
<PropertyRef Name="code"/>
</Key>
<Property Name="locale" Type="Edm.String" MaxLength="14" Nullable="false"/>
<Property Name="name" Type="Edm.String" MaxLength="255"/>
<Property Name="descr" Type="Edm.String" MaxLength="1000"/>
<Property Name="code" Type="Edm.String" MaxLength="3" Nullable="false"/>
</EntityType>
<Annotations Target="OrdersService.EntityContainer/Orders">
<Annotation Term="Capabilities.UpdateRestrictions">
<Record Type="Capabilities.UpdateRestrictionsType">
<PropertyValue Property="Updatable" Bool="false"/>
</Record>
</Annotation>
</Annotations>
<Annotations Target="OrdersService.Orders/createdAt">
<Annotation Term="UI.HiddenFilter" Bool="true"/>
<Annotation Term="Core.Immutable" Bool="true"/>
<Annotation Term="Core.Computed" Bool="true"/>
<Annotation Term="Common.Label" String="{i18n>CreatedAt}"/>
</Annotations>
<Annotations Target="OrdersService.Orders/createdBy">
<Annotation Term="UI.HiddenFilter" Bool="true"/>
<Annotation Term="Core.Immutable" Bool="true"/>
<Annotation Term="Core.Computed" Bool="true"/>
<Annotation Term="Core.Description" String="{i18n>UserID.Description}"/>
<Annotation Term="Common.Label" String="{i18n>CreatedBy}"/>
</Annotations>
<Annotations Target="OrdersService.Orders/modifiedAt">
<Annotation Term="UI.HiddenFilter" Bool="true"/>
<Annotation Term="Core.Computed" Bool="true"/>
<Annotation Term="Common.Label" String="{i18n>ChangedAt}"/>
</Annotations>
<Annotations Target="OrdersService.Orders/modifiedBy">
<Annotation Term="UI.HiddenFilter" Bool="true"/>
<Annotation Term="Core.Computed" Bool="true"/>
<Annotation Term="Core.Description" String="{i18n>UserID.Description}"/>
<Annotation Term="Common.Label" String="{i18n>ChangedBy}"/>
</Annotations>
<Annotations Target="OrdersService.Orders/total">
<Annotation Term="Core.Computed" Bool="true"/>
</Annotations>
<Annotations Target="OrdersService.Orders/currency">
<Annotation Term="Common.Label" String="{i18n>Currency}"/>
<Annotation Term="Core.Description" String="{i18n>CurrencyCode.Description}"/>
</Annotations>
<Annotations Target="OrdersService.Orders/currency_code">
<Annotation Term="Common.Label" String="{i18n>Currency}"/>
<Annotation Term="Common.ValueList">
<Record Type="Common.ValueListType">
<PropertyValue Property="Label" String="{i18n>Currency}"/>
<PropertyValue Property="CollectionPath" String="Currencies"/>
<PropertyValue Property="Parameters">
<Collection>
<Record Type="Common.ValueListParameterInOut">
<PropertyValue Property="LocalDataProperty" PropertyPath="currency_code"/>
<PropertyValue Property="ValueListProperty" String="code"/>
</Record>
<Record Type="Common.ValueListParameterDisplayOnly">
<PropertyValue Property="ValueListProperty" String="name"/>
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
<Annotation Term="Core.Description" String="{i18n>CurrencyCode.Description}"/>
</Annotations>
<Annotations Target="OrdersService.EntityContainer/OrderItems">
<Annotation Term="Capabilities.UpdateRestrictions">
<Record Type="Capabilities.UpdateRestrictionsType">
<PropertyValue Property="Updatable" Bool="false"/>
</Record>
</Annotation>
</Annotations>
<Annotations Target="OrdersService.OrderItems/netAmount">
<Annotation Term="Core.Computed" Bool="true"/>
</Annotations>
<Annotations Target="OrdersService.Currencies">
<Annotation Term="UI.Identification">
<Collection>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="name"/>
</Record>
</Collection>
</Annotation>
</Annotations>
<Annotations Target="OrdersService.Currencies/name">
<Annotation Term="Common.Label" String="{i18n>Name}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies/descr">
<Annotation Term="Common.Label" String="{i18n>Description}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies/code">
<Annotation Term="Common.Text" Path="name"/>
<Annotation Term="Common.Label" String="{i18n>CurrencyCode}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies/symbol">
<Annotation Term="Common.Label" String="{i18n>CurrencySymbol}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies/minorUnit">
<Annotation Term="Common.Label" String="{i18n>CurrencyMinorUnit}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies_texts/locale">
<Annotation Term="Common.Label" String="{i18n>LanguageCode}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies_texts/name">
<Annotation Term="Common.Label" String="{i18n>Name}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies_texts/descr">
<Annotation Term="Common.Label" String="{i18n>Description}"/>
</Annotations>
<Annotations Target="OrdersService.Currencies_texts/code">
<Annotation Term="Common.Text" Path="name"/>
<Annotation Term="Common.Label" String="{i18n>CurrencyCode}"/>
</Annotations>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
\ No newline at end of file
{
"_version": "1.58.0",
"sap.app": {
"id": "ns.orders",
"type": "application",
"i18n": "i18n/i18n.properties",
"applicationVersion": {
"version": "0.0.1"
},
"title": "{{appTitle}}",
"description": "{{appDescription}}",
"resources": "resources.json",
"sourceTemplate": {
"id": "@sap/generator-fiori:lrop",
"version": "1.11.3",
"toolsId": "c798f7f5-c5e6-4c9a-8f24-c78035263d30"
},
"dataSources": {
"mainService": {
"uri": "/odata/v4/OrdersService/",
"type": "OData",
"settings": {
"annotations": [],
"localUri": "localService/metadata.xml",
"odataVersion": "4.0"
}
}
}
},
"sap.ui": {
"technology": "UI5",
"icons": {
"icon": "",
"favIcon": "",
"phone": "",
"phone@2": "",
"tablet": "",
"tablet@2": ""
},
"deviceTypes": {
"desktop": true,
"tablet": true,
"phone": true
}
},
"sap.ui5": {
"flexEnabled": true,
"dependencies": {
"minUI5Version": "1.131.1",
"libs": {
"sap.m": {},
"sap.ui.core": {},
"sap.ushell": {},
"sap.fe.templates": {}
}
},
"contentDensities": {
"compact": true,
"cozy": true
},
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"settings": {
"bundleName": "ns.orders.i18n.i18n"
}
},
"": {
"dataSource": "mainService",
"preload": true,
"settings": {
"synchronizationMode": "None",
"operationMode": "Server",
"autoExpandSelect": true,
"earlyRequests": true
}
},
"@i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"uri": "i18n/i18n.properties"
}
},
"resources": {
"css": []
},
"routing": {
"config": {},
"routes": [
{
"pattern": ":?query:",
"name": "OrdersList",
"target": "OrdersList"
},
{
"pattern": "Orders({key}):?query:",
"name": "OrdersObjectPage",
"target": "OrdersObjectPage"
}
],
"targets": {
"OrdersList": {
"type": "Component",
"id": "OrdersList",
"name": "sap.fe.templates.ListReport",
"options": {
"settings": {
"contextPath": "/Orders",
"variantManagement": "Page",
"navigation": {
"Orders": {
"detail": {
"route": "OrdersObjectPage"
}
}
}
}
}
},
"OrdersObjectPage": {
"type": "Component",
"id": "OrdersObjectPage",
"name": "sap.fe.templates.ObjectPage",
"options": {
"settings": {
"editableHeaderContent": false,
"contextPath": "/Orders"
}
}
}
}
}
},
"sap.fiori": {
"registrationIds": [],
"archeType": "transactional"
}
}
<!DOCTYPE HTML>
<html>
<!-- Copyright (c) 2015 SAP AG, All Rights Reserved -->
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{appTitle}}</title>
<!-- Bootstrap the unified shell in sandbox mode for standalone usage.
The renderer is specified in the global Unified Shell configuration object "sap-ushell-config".
The fiori2 renderer will render the shell header allowing, for instance,
testing of additional application setting buttons.
The navigation target resolution service is configured in a way that the empty URL hash is
resolved to our own application.
This example uses relative path references for the SAPUI5 resources and test-resources;
it might be necessary to adapt them depending on the target runtime platform.
The sandbox platform is restricted to development or demo use cases and must NOT be used
for productive scenarios.
-->
<script type="text/javascript">
window["sap-ushell-config"] = {
defaultRenderer: "fiori2",
bootstrapPlugins: {
"RuntimeAuthoringPlugin": {
component: "sap.ushell.plugins.rta",
config: {
validateAppVersion: false
}
}
},
renderers: {
fiori2: {
componentData: {
config: {
search: "hidden"
}
}
}
},
applications: {
"nsorders-tile": {
title: "Orders",
description: "Orders",
additionalInformation: "SAPUI5.Component=ns.orders",
applicationType: "URL",
url: "../"
}
}
};
</script>
<script src="https://sapui5.hana.ondemand.com/1.131.1/test-resources/sap/ushell/bootstrap/sandbox.js" id="sap-ushell-bootstrap"></script>
<!-- Bootstrap the UI5 core library -->
<script id="sap-ui-bootstrap"
src="https://sapui5.hana.ondemand.com/1.131.1/resources/sap-ui-core.js"
data-sap-ui-libs=""
data-sap-ui-async="true"
data-sap-ui-preload="async"
data-sap-ui-theme="sap_horizon"
data-sap-ui-compatVersion="edge"
data-sap-ui-language="en"
data-sap-ui-resourceroots='{"ns.orders": "../"}'
data-sap-ui-frameOptions="allow"> // NON-SECURE setting for testing environment
</script>
</head>
<!-- UI Content -->
<body class="sapUiBody" id="content">
</body>
</html>
sap.ui.define([
"sap/ui/test/opaQunit"
], function (opaTest) {
"use strict";
var Journey = {
run: function() {
QUnit.module("First journey");
opaTest("Start application", function (Given, When, Then) {
Given.iStartMyApp();
Then.onTheOrdersList.iSeeThisPage();
});
opaTest("Navigate to ObjectPage", function (Given, When, Then) {
// Note: this test will fail if the ListReport page doesn't show any data
When.onTheOrdersList.onFilterBar().iExecuteSearch();
Then.onTheOrdersList.onTable().iCheckRows();
When.onTheOrdersList.onTable().iPressRow(0);
Then.onTheOrdersObjectPage.iSeeThisPage();
});
opaTest("Teardown", function (Given, When, Then) {
// Cleanup
Given.iTearDownMyApp();
});
}
}
return Journey;
});
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>Integration tests</title>
<meta charset="utf-8">
<script id="sap-ui-bootstrap"
src="/resources/sap-ui-core.js"
data-sap-ui-theme='sap_fiori_3'
data-sap-ui-resourceroots='{
"ns.orders": "../../"
}'
data-sap-ui-animation="false"
data-sap-ui-compatVersion="edge"
data-sap-ui-async="true">
</script>
<link rel="stylesheet" type="text/css" href="/resources/sap/ui/thirdparty/qunit-2.css">
<script src="/resources/sap/ui/thirdparty/qunit-2.js"></script>
<script src="/resources/sap/ui/qunit/qunit-junit.js"></script>
<script src="opaTests.qunit.js"></script>
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
</body>
</html>
\ No newline at end of file
sap.ui.require(
[
'sap/fe/test/JourneyRunner',
'ns/orders/test/integration/FirstJourney',
'ns/orders/test/integration/pages/OrdersList',
'ns/orders/test/integration/pages/OrdersObjectPage'
],
function(JourneyRunner, opaJourney, OrdersList, OrdersObjectPage) {
'use strict';
var JourneyRunner = new JourneyRunner({
// start index.html in web folder
launchUrl: sap.ui.require.toUrl('ns/orders') + '/index.html'
});
JourneyRunner.run(
{
pages: {
onTheOrdersList: OrdersList,
onTheOrdersObjectPage: OrdersObjectPage
}
},
opaJourney.run
);
}
);
\ No newline at end of file
sap.ui.define(['sap/fe/test/ListReport'], function(ListReport) {
'use strict';
var CustomPageDefinitions = {
actions: {},
assertions: {}
};
return new ListReport(
{
appId: 'ns.orders',
componentId: 'OrdersList',
contextPath: '/Orders'
},
CustomPageDefinitions
);
});
\ No newline at end of file
sap.ui.define(['sap/fe/test/ObjectPage'], function(ObjectPage) {
'use strict';
var CustomPageDefinitions = {
actions: {},
assertions: {}
};
return new ObjectPage(
{
appId: 'ns.orders',
componentId: 'OrdersObjectPage',
contextPath: '/Orders'
},
CustomPageDefinitions
);
});
\ No newline at end of file
<!DOCTYPE html>
<html>
<head>
<title>QUnit test suite</title>
<script src="../resources/sap/ui/qunit/qunit-redirect.js"></script>
<script src="testsuite.qunit.js" data-sap-ui-testsuite></script>
</head>
<body></body>
</html>
\ No newline at end of file
window.suite = function() {
'use strict';
// eslint-disable-next-line
var oSuite = new parent.jsUnitTestSuite(),
sContextPath = location.pathname.substring(0, location.pathname.lastIndexOf('/') + 1);
oSuite.addTestPage(sContextPath + 'integration/opaTests.qunit.html');
return oSuite;
};
\ No newline at end of file
{
"welcomeFile": "/index.html",
"authenticationMethod": "route",
"routes": [
{
"source": "^/?odata/(.*)$",
"target": "/odata/$1",
"destination": "srv-api",
"authenticationType": "xsuaa",
"csrfProtection": true
},
{
"source": "^(.*)$",
"target": "$1",
"service": "html5-apps-repo-rt",
"authenticationType": "xsuaa"
}
]
}
...@@ -11,6 +11,12 @@ ...@@ -11,6 +11,12 @@
"target": "/$1", "target": "/$1",
"localDir": "./books", "localDir": "./books",
"cacheControl": "no-cache, no-store, must-revalidate" "cacheControl": "no-cache, no-store, must-revalidate"
},
{
"source": "^/app2/(.*)",
"target": "/$1",
"localDir": "./orders",
"cacheControl": "no-cache, no-store, must-revalidate"
} }
] ]
} }
using from './books/annotations'; using from './books/annotations';
using from './orders/annotations';
\ No newline at end of file
...@@ -10,7 +10,6 @@ build-parameters: ...@@ -10,7 +10,6 @@ build-parameters:
commands: commands:
- npm ci - npm ci
- npx cds build --production - npx cds build --production
- mkdir -p resources
modules: modules:
- name: bookstore-srv - name: bookstore-srv
...@@ -63,12 +62,23 @@ modules: ...@@ -63,12 +62,23 @@ modules:
[] []
build-result: . build-result: .
- name: orders
type: html5
path: app/orders
build-parameters:
builder: custom
commands:
- npm run build
supported-platforms:
[]
build-result: .
- name: bookstore - name: bookstore
type: approuter.nodejs type: approuter.nodejs
path: app\router path: app\router
parameters: parameters:
keep-existing-routes: true keep-existing-routes: true
disk-quota: 512M disk-quota: 1024M
memory: 512M memory: 512M
requires: requires:
- name: srv-api - name: srv-api
...@@ -84,6 +94,10 @@ modules: ...@@ -84,6 +94,10 @@ modules:
artifacts: artifacts:
- './*' - './*'
target-path: books target-path: books
- name: orders
artifacts:
- './*'
target-path: orders
provides: provides:
- name: app-api - name: app-api
properties: properties:
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
"@sap/ux-specification": "^1.124.7" "@sap/ux-specification": "^1.124.7"
}, },
"sapux": [ "sapux": [
"app/books" "app/books",
"app/orders"
] ]
} }
...@@ -7,8 +7,6 @@ ...@@ -7,8 +7,6 @@
<packaging>pom</packaging> <packaging>pom</packaging>
<name>bookstore parent</name> <name>bookstore parent</name>
<properties> <properties>
<revision>1.0.0-SNAPSHOT</revision> <revision>1.0.0-SNAPSHOT</revision>
<jdk.version>21</jdk.version> <jdk.version>21</jdk.version>
<cds.services.version>3.4.0</cds.services.version> <cds.services.version>3.4.0</cds.services.version>
...@@ -22,8 +20,6 @@ ...@@ -22,8 +20,6 @@
</modules> </modules>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
<dependency> <dependency>
<groupId>com.sap.cds</groupId> <groupId>com.sap.cds</groupId>
<artifactId>cds-services-bom</artifactId> <artifactId>cds-services-bom</artifactId>
...@@ -42,11 +38,6 @@ ...@@ -42,11 +38,6 @@
</dependencyManagement> </dependencyManagement>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
<artifactId>maven-compiler-plugin</artifactId> <artifactId>maven-compiler-plugin</artifactId>
<version>3.13.0</version> <version>3.13.0</version>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment