Compare commits

..

5 Commits

Author SHA1 Message Date
Elena Oresharova
7b31657f69 Update 2020-04-07 11:29:11 +02:00
Christian Georgi
2f52cbd918 Add package-lock.json, fix readme, remove hana-client 2020-04-02 16:07:58 +02:00
Christian Georgi
71742e1e35 Update readme 2020-03-23 17:09:38 +01:00
Elena Oresharova
25e3d5261c Update package.json 2020-02-09 13:14:08 +01:00
Elena Oresharova
edc2fdae91 Update for unit 6 2020-02-09 13:13:02 +01:00
59 changed files with 129 additions and 1668 deletions

View File

@@ -11,7 +11,7 @@ In SAP Business Application Studio, open a terminal.
Then clone the repo with this specific branch:
```sh
git clone https://github.com/sap-samples/cloud-cap-samples projects/cloud-cap-samples -b openSAP-week3-unit2
git clone https://github.com/sap-samples/cloud-cap-samples projects/cloud-cap-samples -b openSAP-week3-unit6
cd projects/cloud-cap-samples
```
@@ -24,7 +24,7 @@ npm install
Now you're ready to run the samples, for example:
```sh
cd packages/officesupplies
cd packages/bookshop
cds watch
```

View File

@@ -8,11 +8,7 @@
"lerna": "npx --no-install lerna -v > /dev/null || npm i lerna --no-save",
"install": "(npm -s run lerna) && lerna bootstrap --hoist",
"cleanup": "lerna clean -y && rm -fr node_modules",
"bookshop": "cds watch packages/bookshop",
"bookshop-enhanced": "cds watch packages/bookshop-enhanced",
"reviews-service": "cds watch packages/reviews-service",
"bookstore": "cds watch packages/bookstore",
"media-server": "cds watch packages/media-server"
"bookshop": "cds watch packages/bookshop"
},
"dependencies": {
"@sap/cds": "^3",

View File

@@ -0,0 +1,23 @@
namespace sap.capire.bookshop;
@cds.persistence.exists
entity Books {
key ID: Integer;
title : String(111);
descr : String(1111);
author : String(50);
rating : Integer;
}
@cds.persistence.exists
entity BooksDescr {
key id : Integer;
book_descr : String(2000);
}
@cds.persistence.exists
entity BooksInfo (REQ_RATING : Integer) {
key id : Integer;
rating : Integer;
book_author_info : String;
}

View File

@@ -0,0 +1,10 @@
{
"file_suffixes": {
"hdbtable": { "plugin_name": "com.sap.hana.di.table", "plugin_version": "11.1.0" },
"hdbview": { "plugin_name": "com.sap.hana.di.view" },
"hdbfunction": { "plugin_name": "com.sap.hana.di.function" },
"hdbtabletype": { "plugin_name": "com.sap.hana.di.tabletype", "plugin_version": "11.1.0" },
"hdbtabledata": { "plugin_name": "com.sap.hana.di.tabledata", "plugin_version": "11.1.0" },
"csv": { "plugin_name" : "com.sap.hana.di.tabledata.source" }
}
}

View File

@@ -0,0 +1,4 @@
{
"name": "",
"subfolder": "ignore"
}

View File

@@ -0,0 +1,4 @@
ID;TITLE;DESCR;AUTHOR;RATING
301;Anna Karenina;"Anna Karenina (Russian: «Анна Каренина», IPA: [ˈanːə kɐˈrʲenʲɪnə])[1] is a novel by the Russian author Leo Tolstoy, first published in book form in 1878. Many writers consider Anna Karenina the greatest work of literature ever,[2] and Tolstoy himself called it his first true novel. It was initially released in serial installments from 1873 to 1877 in the periodical The Russian Messenger.";Leo Tolstoy;4
307;The Great Gatsby;"The Great Gatsby is a 1925 novel written by American author F. Scott Fitzgerald that follows a cast of characters living in the fictional towns of West Egg and East Egg on prosperous Long Island in the summer of 1922. The story primarily concerns the young and mysterious millionaire Jay Gatsby and his quixotic passion and obsession with the beautiful former debutante Daisy Buchanan. Considered to be Fitzgerald's magnum opus, The Great Gatsby explores themes of decadence, idealism, resistance to change, social upheaval and excess, creating a portrait of the Roaring Twenties that has been described as a cautionary[a] tale regarding the American Dream.";F. Scott Fitzgerald;4
406;Harry Potter;"Harry Potter is a series of fantasy novels written by British author J. K. Rowling. The novels chronicle the lives of a young wizard, Harry Potter, and his friends Hermione Granger and Ron Weasley, all of whom are students at Hogwarts School of Witchcraft and Wizardry. The main story arc concerns Harry's struggle against Lord Voldemort, a dark wizard who intends to become immortal, overthrow the wizard governing body known as the Ministry of Magic and subjugate all wizards and Muggles (non-magical people).";J. K. Rowling;5
1 ID TITLE DESCR AUTHOR RATING
2 301 Anna Karenina Anna Karenina (Russian: «Анна Каренина», IPA: [ˈanːə kɐˈrʲenʲɪnə])[1] is a novel by the Russian author Leo Tolstoy, first published in book form in 1878. Many writers consider Anna Karenina the greatest work of literature ever,[2] and Tolstoy himself called it his first true novel. It was initially released in serial installments from 1873 to 1877 in the periodical The Russian Messenger. Leo Tolstoy 4
3 307 The Great Gatsby The Great Gatsby is a 1925 novel written by American author F. Scott Fitzgerald that follows a cast of characters living in the fictional towns of West Egg and East Egg on prosperous Long Island in the summer of 1922. The story primarily concerns the young and mysterious millionaire Jay Gatsby and his quixotic passion and obsession with the beautiful former debutante Daisy Buchanan. Considered to be Fitzgerald's magnum opus, The Great Gatsby explores themes of decadence, idealism, resistance to change, social upheaval and excess, creating a portrait of the Roaring Twenties that has been described as a cautionary[a] tale regarding the American Dream. F. Scott Fitzgerald 4
4 406 Harry Potter Harry Potter is a series of fantasy novels written by British author J. K. Rowling. The novels chronicle the lives of a young wizard, Harry Potter, and his friends Hermione Granger and Ron Weasley, all of whom are students at Hogwarts School of Witchcraft and Wizardry. The main story arc concerns Harry's struggle against Lord Voldemort, a dark wizard who intends to become immortal, overthrow the wizard governing body known as the Ministry of Magic and subjugate all wizards and Muggles (non-magical people). J. K. Rowling 5

View File

@@ -0,0 +1,8 @@
COLUMN TABLE SAP_CAPIRE_BOOKSHOP_BOOKS (
ID INTEGER NOT NULL,
TITLE NVARCHAR(111),
DESCR NVARCHAR(1111),
AUTHOR NVARCHAR(50),
RATING INTEGER,
PRIMARY KEY(ID)
)

View File

@@ -0,0 +1,19 @@
{
"format_version": 1,
"imports": [
{
"target_table": "SAP_CAPIRE_BOOKSHOP_BOOKS",
"source_data": {
"data_type": "CSV",
"file_name": "Books.csv",
"has_header": true,
"no_data_import": false,
"delete_existing_foreign_data": false,
"dialect": "HANA",
"type_config": {
"delimiter": ";"
}
}
}
]
}

View File

@@ -0,0 +1,10 @@
FUNCTION SAP_CAPIRE_BOOKSHOP_BOOKSDESCR
RETURNS TABLE (ID integer, BOOK_DESCR nvarchar(2000))
LANGUAGE SQLSCRIPT
AS
BEGIN
RETURN SELECT
100 + ID AS ID,
'From my HANA function: A summary for the book ' || TITLE || ': ' || DESCR AS BOOK_DESCR
FROM SAP_CAPIRE_BOOKSHOP_BOOKS;
END

View File

@@ -0,0 +1,6 @@
VIEW SAP_CAPIRE_BOOKSHOP_BOOKSINFO (in REQ_RATING integer) AS SELECT
ID,
RATING,
'From my HANA view: The book ' || TITLE || ' is authored by ' || AUTHOR AS BOOK_AUTHOR_INFO
FROM SAP_CAPIRE_BOOKSHOP_BOOKS
WHERE RATING = :REQ_RATING;

View File

@@ -0,0 +1,25 @@
{
"name": "@sap/capire-bookshop",
"version": "1.0.0",
"description": "A simple bookshop application, build in a self-contained all-in-one fashion, i.e. w/o reusing other packages.",
"license": "SAP SAMPLE CODE LICENSE",
"dependencies": {
"@sap/cds": "^3",
"express": "^4",
"hdb": "^0.17.1"
},
"scripts": {
"start": "cds run --in-memory?",
"watch": "cds watch"
},
"cds": {
"requires": {
"db": {
"kind": "sql"
}
}
},
"devDependencies": {
"@sap/hdi-deploy": "3.7.0"
}
}

View File

@@ -0,0 +1,9 @@
using { sap.capire.bookshop as db } from '../db/schema';
service CatalogService {
entity Books as projection on db.Books;
entity BooksInfo (RATING : Integer) as select from db.BooksInfo(REQ_RATING: :RATING) {*};
entity BooksDescr as select from db.BooksDescr;
}

View File

@@ -0,0 +1,8 @@
# Get all books
GET http://localhost:4004/catalog/Books
# Get books description from the HANA function
GET http://localhost:4004/catalog/BooksDescr
# Get books with rating 4 via the HANA view
GET http://localhost:4004/catalog/BooksInfo(RATING=4)/Set

View File

@@ -1,24 +0,0 @@
{
"extends": "eslint:recommended",
"env": {
"node": true,
"es6": true,
"jest": true
},
"parserOptions": {
"ecmaVersion": 2017
},
"globals": {
"SELECT": true,
"INSERT": true,
"UPDATE": true,
"DELETE": true,
"CREATE": true,
"DROP": true,
"cds": true
},
"rules": {
"no-console": "off",
"require-atomic-updates": "off"
}
}

View File

@@ -1,23 +0,0 @@
# CAP officesupplies
_out
*.db
connection.properties
default-*.json
gen/
node_modules/
package-lock.json
target/
# Web IDE, App Studio
.che/
.gen/
# MTA
*_mta_build_tmp
*.mtar
mta_archives/
# Other
.DS_Store
*.orig
*.log

View File

@@ -1,4 +0,0 @@
// used in launch.json to refer to an installed cds via an absolute path
const cds = require('@sap/cds');
cds.exec();

View File

@@ -1,19 +0,0 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "cds run",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/.vscode/cds",
"args": [ "run", "--with-mocks", "--in-memory?" ],
"skipFiles": [ "<node_internals>/**" ],
"internalConsoleOptions": "openOnSessionStart",
"console": "internalConsole",
"autoAttachChildProcesses": true
}
]
}

View File

@@ -1,7 +0,0 @@
{
"files.exclude": {
"**/.gitignore": true,
"**/.git": true,
"**/.vscode": true
}
}

View File

@@ -1,23 +0,0 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "cds watch",
"command": ["cds", "watch"],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
},
{
"type": "shell",
"label": "cds run",
"command": ["cds", "run", "--with-mocks", "--in-memory?"],
"problemMatcher": []
}
]
}

View File

@@ -1,25 +0,0 @@
# Getting Started
Welcome to your new project.
It contains these folders and files, following our recommended project layout:
File / Folder | Purpose
---------|----------
`app/` | content for UI frontends go here
`db/` | your domain models and data go here
`srv/` | your service models and code go here
`package.json` | project metadata and configuration
`readme.md` | this getting started guide
## Next Steps...
- Open a new terminal and run `cds watch`
- ( in VSCode simply choose _**Terminal** > Run Task > cds watch_ )
- Start adding content, e.g. a [db/schema.cds](db/schema.cds), ...
## Learn more...
Learn more at https://cap.cloud.sap/docs/get-started/

View File

@@ -1,4 +0,0 @@
@sap:registry=https://npm.sap.com
@ui5:registry=https://registry.npmjs.org
save = true
save-exact = true

View File

@@ -1,21 +0,0 @@
# products
This is a my new Fiori elements app
## Starting the generated app
- This app has been generated using the SAP UX - App Generator, as part of the SAP UX Tools Suite. In order to launch the generated app, simply run the following from the generated app root folder:
```
npm start
```
- Is it also possible to run the application using mock data that reflects the OData Service URL supplied during application generation. In order to run the application with Mock Data, run the following from the generated app root folder:
```
npm run start-mock
```
### Pre-requisites:
1. Active NodeJS LTS (Long Term Support) version and associated supported NPM version. (See https://nodejs.org)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

View File

@@ -1,33 +0,0 @@
{
"name": "products",
"version": "0.0.1",
"private": true,
"sapux": true,
"description": "This is a my new Fiori elements app",
"keywords": [
"ui5",
"openui5",
"sapui5"
],
"main": "webapp/index.html",
"scripts": {
"start": "npm run start-app-router",
"start-app-router": "npm run build && run-script-os",
"start-app-router:default": "destinations='[{\"name\":\"odata\",\"url\":\"http://localhost:4004\",\"strictSSL\":false}]' node node_modules/@sap/approuter/approuter.js",
"start-app-router:windows": "set destinations=[{\"name\":\"odata\",\"url\":\"http://localhost:4004\",\"strictSSL\":false}] && node node_modules/@sap/approuter/approuter.js",
"build": "rimraf dist && ui5 build -a --include-task=generateManifestBundle generateCachebusterInfo"
},
"remarkConfig": {
"plugins": [
"remark-preset-lint-consistent"
]
},
"dependencies": {
"@sap/approuter": "6.5.1",
"@ui5/cli": "1.8.0"
},
"devDependencies": {
"run-script-os": "1.0.7",
"rimraf": "3.0.0"
}
}

View File

@@ -1,4 +0,0 @@
specVersion: '1.0'
metadata:
name: products
type: application

View File

@@ -1,10 +0,0 @@
/* global hasher */
sap.ui.define(['sap/fe/AppComponent'], function(AppComponent) {
'use strict';
return AppComponent.extend('sap.uxfe.demo.products.Component', {
metadata: {
manifest: 'json'
}
});
});

View File

@@ -1,118 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee">
<display-name>OData v4</display-name>
<!-- ============================================================== -->
<!-- UI5 resource servlet used to handle application resources -->
<!-- ============================================================== -->
<servlet>
<display-name>ResourceServlet</display-name>
<servlet-name>ResourceServlet</servlet-name>
<servlet-class>com.sap.ui5.resource.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ResourceServlet</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ResourceServlet</servlet-name>
<url-pattern>/test-resources/*</url-pattern>
</servlet-mapping>
<!-- enable CORS -->
<context-param>
<param-name>com.sap.ui5.resource.ACCEPTED_ORIGINS</param-name>
<param-value>*</param-value>
</context-param>
<!-- BEGIN: DEV MODE -->
<!-- DEV MODE switched off by default and can be switched on during development -->
<!-- but has to be switched off for productive use on a Java server! -->
<context-param>
<param-name>com.sap.ui5.resource.DEV_MODE</param-name>
<param-value>true</param-value>
</context-param>
<!-- END: DEV MODE -->
<!-- ============================================================== -->
<!-- Cache Control Filter to prevent caching of any resource -->
<!-- ============================================================== -->
<filter>
<display-name>CacheControlFilter</display-name>
<filter-name>CacheControlFilter</filter-name>
<filter-class>com.sap.ui5.resource.CacheControlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.js</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.css</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.json</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.xml</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.gif</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.png</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.jpg</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.properties</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.tmpl</url-pattern>
</filter-mapping>
<!-- ============================================================== -->
<!-- UI5 proxy servlet -->
<!-- ============================================================== -->
<servlet>
<servlet-name>SimpleProxyServlet</servlet-name>
<servlet-class>com.sap.ui5.proxy.SimpleProxyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleProxyServlet</servlet-name>
<url-pattern>/proxy/*</url-pattern>
</servlet-mapping>
<!-- ============================================================== -->
<!-- Welcome file list -->
<!-- ============================================================== -->
<welcome-file-list>
<welcome-file>test.html</welcome-file>
</welcome-file-list>
</web-app>

View File

@@ -1,9 +0,0 @@
# This is the resource bundle for products
#Texts for manifest.json
#XTIT: Application name
appTitle=Products
#YDES: Application description
appDescription=This is a my new Fiori elements app

View File

@@ -1,38 +0,0 @@
<!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>{{appTitle}}</title>
<script>
window['sap-ushell-config'] = {
defaultRenderer: 'fiori2',
applications: {
"fe-lrop-v4": {
title: 'Products',
description: 'This is a my new Fiori elements app',
additionalInformation: 'SAPUI5.Component=sap.uxfe.demo.products',
applicationType: 'URL',
url: './',
navigationMode: 'embedded'
}
}
};
</script>
<script src="https://sapui5.hana.ondemand.com/1.71.0/test-resources/sap/ushell/bootstrap/sandbox.js"></script>
<script
src="https://sapui5.hana.ondemand.com/1.71.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_fiori_3"
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>

View File

@@ -1,233 +0,0 @@
<?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://wiki.scn.sap.com/wiki/download/attachments/448470974/Common.xml?api=v2">
<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://wiki.scn.sap.com/wiki/download/attachments/448470968/UI.xml?api=v2">
<edmx:Include Alias="UI" Namespace="com.sap.vocabularies.UI.v1"/>
</edmx:Reference>
<edmx:DataServices>
<Schema Namespace="CatalogService" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<EntityContainer Name="EntityContainer">
<EntitySet Name="Currencies" EntityType="CatalogService.Currencies">
<NavigationPropertyBinding Path="texts" Target="Currencies_texts"/>
<NavigationPropertyBinding Path="localized" Target="Currencies_texts"/>
</EntitySet>
<EntitySet Name="Currencies_texts" EntityType="CatalogService.Currencies_texts"/>
<EntitySet Name="Products" EntityType="CatalogService.Products">
<NavigationPropertyBinding Path="currency" Target="Currencies"/>
<NavigationPropertyBinding Path="supplier" Target="Suppliers"/>
<NavigationPropertyBinding Path="texts" Target="Products_texts"/>
<NavigationPropertyBinding Path="localized" Target="Products_texts"/>
</EntitySet>
<EntitySet Name="Products_texts" EntityType="CatalogService.Products_texts"/>
<EntitySet Name="Suppliers" EntityType="CatalogService.Suppliers">
<NavigationPropertyBinding Path="products" Target="Products"/>
</EntitySet>
</EntityContainer>
<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="2"/>
<NavigationProperty Name="texts" Type="Collection(CatalogService.Currencies_texts)">
<OnDelete Action="Cascade"/>
</NavigationProperty>
<NavigationProperty Name="localized" Type="CatalogService.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="5" 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>
<EntityType Name="Products">
<Key>
<PropertyRef Name="ID"/>
</Key>
<Property Name="ID" Type="Edm.Guid" Nullable="false"/>
<Property Name="identifier" Type="Edm.String"/>
<Property Name="title" Type="Edm.String"/>
<Property Name="description" Type="Edm.String"/>
<Property Name="availability" Type="Edm.Int32"/>
<Property Name="storageCapacity" Type="Edm.Int32"/>
<Property Name="criticality" Type="Edm.Int32"/>
<Property Name="price" Type="Edm.Decimal" Scale="2" Precision="9"/>
<NavigationProperty Name="currency" Type="CatalogService.Currencies">
<ReferentialConstraint Property="currency_code" ReferencedProperty="code"/>
</NavigationProperty>
<NavigationProperty Name="supplier" Type="CatalogService.Suppliers" Partner="products">
<ReferentialConstraint Property="supplier_ID" ReferencedProperty="ID"/>
</NavigationProperty>
<Property Name="image_url" Type="Edm.String"/>
<NavigationProperty Name="texts" Type="Collection(CatalogService.Products_texts)">
<OnDelete Action="Cascade"/>
</NavigationProperty>
<NavigationProperty Name="localized" Type="CatalogService.Products_texts">
<ReferentialConstraint Property="ID" ReferencedProperty="ID"/>
</NavigationProperty>
<Property Name="currency_code" Type="Edm.String" MaxLength="3"/>
<Property Name="supplier_ID" Type="Edm.Guid"/>
</EntityType>
<EntityType Name="Products_texts">
<Key>
<PropertyRef Name="locale"/>
<PropertyRef Name="ID"/>
</Key>
<Property Name="locale" Type="Edm.String" MaxLength="5" Nullable="false"/>
<Property Name="ID" Type="Edm.Guid" Nullable="false"/>
<Property Name="title" Type="Edm.String"/>
<Property Name="description" Type="Edm.String"/>
</EntityType>
<EntityType Name="Suppliers">
<Key>
<PropertyRef Name="ID"/>
</Key>
<Property Name="ID" Type="Edm.Guid" Nullable="false"/>
<Property Name="identifier" Type="Edm.String"/>
<Property Name="name" Type="Edm.String"/>
<Property Name="phone" Type="Edm.String"/>
<Property Name="building" Type="Edm.String"/>
<Property Name="street" Type="Edm.String"/>
<Property Name="postCode" Type="Edm.String"/>
<Property Name="city" Type="Edm.String"/>
<Property Name="country" Type="Edm.String"/>
<NavigationProperty Name="products" Type="Collection(CatalogService.Products)" Partner="supplier"/>
</EntityType>
<Annotations Target="CatalogService.Currencies">
<Annotation Term="UI.Identification">
<Collection>
<Path>name</Path>
</Collection>
</Annotation>
</Annotations>
<Annotations Target="CatalogService.Currencies/name">
<Annotation Term="Common.Label" String="Name"/>
</Annotations>
<Annotations Target="CatalogService.Currencies/descr">
<Annotation Term="Common.Label" String="Description"/>
</Annotations>
<Annotations Target="CatalogService.Currencies/code">
<Annotation Term="Common.Label" String="Currency Code"/>
</Annotations>
<Annotations Target="CatalogService.Currencies/symbol">
<Annotation Term="Common.Label" String="Currency Symbol"/>
</Annotations>
<Annotations Target="CatalogService.Currencies_texts/name">
<Annotation Term="Common.Label" String="Name"/>
</Annotations>
<Annotations Target="CatalogService.Currencies_texts/descr">
<Annotation Term="Common.Label" String="Description"/>
</Annotations>
<Annotations Target="CatalogService.Currencies_texts/code">
<Annotation Term="Common.Label" String="Currency Code"/>
</Annotations>
<Annotations Target="CatalogService.EntityContainer/Products">
<Annotation Term="Capabilities.DeleteRestrictions">
<Record Type="Capabilities.DeleteRestrictionsType">
<PropertyValue Property="Deletable" Bool="false"/>
</Record>
</Annotation>
<Annotation Term="Capabilities.InsertRestrictions">
<Record Type="Capabilities.InsertRestrictionsType">
<PropertyValue Property="Insertable" Bool="false"/>
</Record>
</Annotation>
<Annotation Term="Capabilities.UpdateRestrictions">
<Record Type="Capabilities.UpdateRestrictionsType">
<PropertyValue Property="Updatable" Bool="false"/>
</Record>
</Annotation>
</Annotations>
<Annotations Target="CatalogService.Products/ID">
<Annotation Term="Common.Label" String="UUID"/>
</Annotations>
<Annotations Target="CatalogService.Products/identifier">
<Annotation Term="Common.Label" String="ID"/>
</Annotations>
<Annotations Target="CatalogService.Products/title">
<Annotation Term="Common.Label" String="Name"/>
</Annotations>
<Annotations Target="CatalogService.Products/currency">
<Annotation Term="Common.Label" String="Currency"/>
<Annotation Term="Common.ValueList">
<Record Type="Common.ValueListType">
<PropertyValue Property="Label" String="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="A currency code as specified in ISO 4217"/>
</Annotations>
<Annotations Target="CatalogService.Products/currency_code">
<Annotation Term="Common.Label" String="Currency"/>
<Annotation Term="Common.ValueList">
<Record Type="Common.ValueListType">
<PropertyValue Property="Label" String="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="A currency code as specified in ISO 4217"/>
</Annotations>
<Annotations Target="CatalogService.Products_texts/ID">
<Annotation Term="Common.Label" String="UUID"/>
</Annotations>
<Annotations Target="CatalogService.Products_texts/title">
<Annotation Term="Common.Label" String="Name"/>
</Annotations>
<Annotations Target="CatalogService.EntityContainer/Suppliers">
<Annotation Term="Capabilities.DeleteRestrictions">
<Record Type="Capabilities.DeleteRestrictionsType">
<PropertyValue Property="Deletable" Bool="false"/>
</Record>
</Annotation>
<Annotation Term="Capabilities.InsertRestrictions">
<Record Type="Capabilities.InsertRestrictionsType">
<PropertyValue Property="Insertable" Bool="false"/>
</Record>
</Annotation>
<Annotation Term="Capabilities.UpdateRestrictions">
<Record Type="Capabilities.UpdateRestrictionsType">
<PropertyValue Property="Updatable" Bool="false"/>
</Record>
</Annotation>
</Annotations>
</Schema>
</edmx:DataServices>
</edmx:Edmx>

View File

@@ -1,133 +0,0 @@
{
"_version": "1.15.0",
"sap.app": {
"id": "sap.uxfe.demo.products",
"type": "application",
"i18n": "i18n/i18n.properties",
"applicationVersion": {
"version": "1.0"
},
"title": "{{appTitle}}",
"description": "{{appDescription}}",
"ach": "CA-UI5-FE",
"dataSources": {
"mainService": {
"uri": "/catalog/",
"type": "OData",
"settings": {
"odataVersion": "4.0"
}
}
},
"offline": false,
"resources": "resources.json",
"sourceTemplate": {
"id": "ui5template.fiorielements.v4.lrop",
"version": "1.0.0"
}
},
"sap.ui": {
"technology": "UI5",
"icons": {
"icon": "",
"favIcon": "",
"phone": "",
"phone@2": "",
"tablet": "",
"tablet@2": ""
},
"deviceTypes": {
"desktop": true,
"tablet": true,
"phone": true
}
},
"sap.ui5": {
"resources": {
"js": [],
"css": []
},
"dependencies": {
"minUI5Version": "1.71.0",
"libs": {
"sap.fe": {}
}
},
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"uri": "i18n/i18n.properties"
},
"": {
"dataSource": "mainService",
"settings": {
"synchronizationMode": "None",
"operationMode": "Server",
"autoExpandSelect": true,
"earlyRequests": true
}
}
},
"routing": {
"routes": [
{
"pattern": "",
"name": "ProductsList",
"target": "ProductsList"
},
{
"pattern": "Products({key})",
"name": "ProductsObjectPage",
"target": "ProductsObjectPage"
}
],
"targets": {
"ProductsList": {
"type": "Component",
"id": "ProductsList",
"name": "sap.fe.templates.ListReport",
"options": {
"settings": {
"entitySet": "Products",
"variantManagement": "Page",
"navigation": {
"Products": {
"detail": {
"route": "ProductsObjectPage"
}
}
}
}
}
},
"ProductsObjectPage": {
"type": "Component",
"id": "ProductsObjectPage",
"name": "sap.fe.templates.ObjectPage",
"options": {
"settings": {
"entitySet": "Products"
}
}
}
}
},
"contentDensities": {
"compact": true,
"cozy": true
}
},
"sap.platform.abap": {
"_version": "1.1.0",
"uri": ""
},
"sap.platform.hcp": {
"_version": "1.1.0",
"uri": ""
},
"sap.fiori": {
"_version": "1.1.0",
"registrationIds": [],
"archeType": "transactional"
}
}

View File

@@ -1,16 +0,0 @@
{
"welcomeFile": "/index.html",
"authenticationMethod": "none",
"routes": [
{
"source": "^/catalog/(.*)$",
"target": "/catalog/$1",
"destination": "odata",
"csrfProtection": false
},
{
"source": "^(.*)",
"localDir": "webapp"
}
]
}

View File

@@ -1,4 +0,0 @@
@sap:registry=https://npm.sap.com
@ui5:registry=https://registry.npmjs.org
save = true
save-exact = true

View File

@@ -1,21 +0,0 @@
# suppliers
This is a my new Fiori elements app
## Starting the generated app
- This app has been generated using the SAP UX - App Generator, as part of the SAP UX Tools Suite. In order to launch the generated app, simply run the following from the generated app root folder:
```
npm start
```
- Is it also possible to run the application using mock data that reflects the OData Service URL supplied during application generation. In order to run the application with Mock Data, run the following from the generated app root folder:
```
npm run start-mock
```
### Pre-requisites:
1. Active NodeJS LTS (Long Term Support) version and associated supported NPM version. (See https://nodejs.org)

View File

@@ -1,33 +0,0 @@
{
"name": "suppliers",
"version": "0.0.1",
"private": true,
"sapux": true,
"description": "This is a my new Fiori elements app",
"keywords": [
"ui5",
"openui5",
"sapui5"
],
"main": "webapp/index.html",
"scripts": {
"start": "npm run start-app-router",
"start-app-router": "npm run build && run-script-os",
"start-app-router:default": "destinations='[{\"name\":\"odata\",\"url\":\"http://localhost:4004\",\"strictSSL\":false}]' node node_modules/@sap/approuter/approuter.js",
"start-app-router:windows": "set destinations=[{\"name\":\"odata\",\"url\":\"http://localhost:4004\",\"strictSSL\":false}] && node node_modules/@sap/approuter/approuter.js",
"build": "rimraf dist && ui5 build -a --include-task=generateManifestBundle generateCachebusterInfo"
},
"remarkConfig": {
"plugins": [
"remark-preset-lint-consistent"
]
},
"dependencies": {
"@sap/approuter": "6.5.1",
"@ui5/cli": "1.8.0"
},
"devDependencies": {
"run-script-os": "1.0.7",
"rimraf": "3.0.0"
}
}

View File

@@ -1,4 +0,0 @@
specVersion: '1.0'
metadata:
name: suppliers
type: application

View File

@@ -1,10 +0,0 @@
/* global hasher */
sap.ui.define(['sap/fe/AppComponent'], function(AppComponent) {
'use strict';
return AppComponent.extend('supplier.suppliers.Component', {
metadata: {
manifest: 'json'
}
});
});

View File

@@ -1,118 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee">
<display-name>OData v4</display-name>
<!-- ============================================================== -->
<!-- UI5 resource servlet used to handle application resources -->
<!-- ============================================================== -->
<servlet>
<display-name>ResourceServlet</display-name>
<servlet-name>ResourceServlet</servlet-name>
<servlet-class>com.sap.ui5.resource.ResourceServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ResourceServlet</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ResourceServlet</servlet-name>
<url-pattern>/test-resources/*</url-pattern>
</servlet-mapping>
<!-- enable CORS -->
<context-param>
<param-name>com.sap.ui5.resource.ACCEPTED_ORIGINS</param-name>
<param-value>*</param-value>
</context-param>
<!-- BEGIN: DEV MODE -->
<!-- DEV MODE switched off by default and can be switched on during development -->
<!-- but has to be switched off for productive use on a Java server! -->
<context-param>
<param-name>com.sap.ui5.resource.DEV_MODE</param-name>
<param-value>true</param-value>
</context-param>
<!-- END: DEV MODE -->
<!-- ============================================================== -->
<!-- Cache Control Filter to prevent caching of any resource -->
<!-- ============================================================== -->
<filter>
<display-name>CacheControlFilter</display-name>
<filter-name>CacheControlFilter</filter-name>
<filter-class>com.sap.ui5.resource.CacheControlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.js</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.css</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.json</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.xml</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.gif</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.png</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.jpg</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.properties</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CacheControlFilter</filter-name>
<url-pattern>*.tmpl</url-pattern>
</filter-mapping>
<!-- ============================================================== -->
<!-- UI5 proxy servlet -->
<!-- ============================================================== -->
<servlet>
<servlet-name>SimpleProxyServlet</servlet-name>
<servlet-class>com.sap.ui5.proxy.SimpleProxyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SimpleProxyServlet</servlet-name>
<url-pattern>/proxy/*</url-pattern>
</servlet-mapping>
<!-- ============================================================== -->
<!-- Welcome file list -->
<!-- ============================================================== -->
<welcome-file-list>
<welcome-file>test.html</welcome-file>
</welcome-file-list>
</web-app>

View File

@@ -1,9 +0,0 @@
# This is the resource bundle for suppliers
#Texts for manifest.json
#XTIT: Application name
appTitle=suppliers
#YDES: Application description
appDescription=This is a my new Fiori elements app

View File

@@ -1,38 +0,0 @@
<!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>{{appTitle}}</title>
<script>
window['sap-ushell-config'] = {
defaultRenderer: 'fiori2',
applications: {
"fe-lrop-v4": {
title: 'suppliers',
description: 'This is a my new Fiori elements app',
additionalInformation: 'SAPUI5.Component=supplier.suppliers',
applicationType: 'URL',
url: './',
navigationMode: 'embedded'
}
}
};
</script>
<script src="https://sapui5.hana.ondemand.com/1.71.0/test-resources/sap/ushell/bootstrap/sandbox.js"></script>
<script
src="https://sapui5.hana.ondemand.com/1.71.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_fiori_3"
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>

View File

@@ -1,346 +0,0 @@
<?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://wiki.scn.sap.com/wiki/download/attachments/448470974/Common.xml?api=v2">
<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://oasis-tcs.github.io/odata-vocabularies/vocabularies/Org.OData.Measures.V1.xml">
<edmx:Include Alias="Measures" Namespace="Org.OData.Measures.V1"/>
</edmx:Reference>
<edmx:Reference Uri="https://wiki.scn.sap.com/wiki/download/attachments/448470968/UI.xml?api=v2">
<edmx:Include Alias="UI" Namespace="com.sap.vocabularies.UI.v1"/>
</edmx:Reference>
<edmx:DataServices>
<Schema Namespace="CatalogService" xmlns="http://docs.oasis-open.org/odata/ns/edm">
<EntityContainer Name="EntityContainer">
<EntitySet Name="Currencies" EntityType="CatalogService.Currencies">
<NavigationPropertyBinding Path="texts" Target="Currencies_texts"/>
<NavigationPropertyBinding Path="localized" Target="Currencies_texts"/>
</EntitySet>
<EntitySet Name="Currencies_texts" EntityType="CatalogService.Currencies_texts"/>
<EntitySet Name="Products" EntityType="CatalogService.Products">
<NavigationPropertyBinding Path="currency" Target="Currencies"/>
<NavigationPropertyBinding Path="supplier" Target="Suppliers"/>
<NavigationPropertyBinding Path="texts" Target="Products_texts"/>
<NavigationPropertyBinding Path="localized" Target="Products_texts"/>
</EntitySet>
<EntitySet Name="Products_texts" EntityType="CatalogService.Products_texts"/>
<EntitySet Name="Suppliers" EntityType="CatalogService.Suppliers">
<NavigationPropertyBinding Path="products" Target="Products"/>
</EntitySet>
</EntityContainer>
<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="2"/>
<NavigationProperty Name="texts" Type="Collection(CatalogService.Currencies_texts)">
<OnDelete Action="Cascade"/>
</NavigationProperty>
<NavigationProperty Name="localized" Type="CatalogService.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="5" 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>
<EntityType Name="Products">
<Key>
<PropertyRef Name="ID"/>
</Key>
<Property Name="ID" Type="Edm.Guid" Nullable="false"/>
<Property Name="identifier" Type="Edm.String"/>
<Property Name="title" Type="Edm.String"/>
<Property Name="description" Type="Edm.String"/>
<Property Name="availability" Type="Edm.Int32"/>
<Property Name="storageCapacity" Type="Edm.Int32"/>
<Property Name="criticality" Type="Edm.Int32"/>
<Property Name="price" Type="Edm.Decimal" Scale="2" Precision="9"/>
<NavigationProperty Name="currency" Type="CatalogService.Currencies">
<ReferentialConstraint Property="currency_code" ReferencedProperty="code"/>
</NavigationProperty>
<NavigationProperty Name="supplier" Type="CatalogService.Suppliers" Partner="products">
<ReferentialConstraint Property="supplier_ID" ReferencedProperty="ID"/>
</NavigationProperty>
<Property Name="image_url" Type="Edm.String"/>
<NavigationProperty Name="texts" Type="Collection(CatalogService.Products_texts)">
<OnDelete Action="Cascade"/>
</NavigationProperty>
<NavigationProperty Name="localized" Type="CatalogService.Products_texts">
<ReferentialConstraint Property="ID" ReferencedProperty="ID"/>
</NavigationProperty>
<Property Name="currency_code" Type="Edm.String" MaxLength="3"/>
<Property Name="supplier_ID" Type="Edm.Guid"/>
</EntityType>
<EntityType Name="Products_texts">
<Key>
<PropertyRef Name="locale"/>
<PropertyRef Name="ID"/>
</Key>
<Property Name="locale" Type="Edm.String" MaxLength="5" Nullable="false"/>
<Property Name="ID" Type="Edm.Guid" Nullable="false"/>
<Property Name="title" Type="Edm.String"/>
<Property Name="description" Type="Edm.String"/>
</EntityType>
<EntityType Name="Suppliers">
<Key>
<PropertyRef Name="ID"/>
</Key>
<Property Name="ID" Type="Edm.Guid" Nullable="false"/>
<Property Name="identifier" Type="Edm.String"/>
<Property Name="name" Type="Edm.String"/>
<Property Name="phone" Type="Edm.String"/>
<Property Name="building" Type="Edm.String"/>
<Property Name="street" Type="Edm.String"/>
<Property Name="postCode" Type="Edm.String"/>
<Property Name="city" Type="Edm.String"/>
<Property Name="country" Type="Edm.String"/>
<NavigationProperty Name="products" Type="Collection(CatalogService.Products)" Partner="supplier"/>
</EntityType>
<Annotations Target="CatalogService.Currencies">
<Annotation Term="UI.Identification">
<Collection>
<Path>name</Path>
</Collection>
</Annotation>
</Annotations>
<Annotations Target="CatalogService.Currencies/name">
<Annotation Term="Common.Label" String="Name"/>
</Annotations>
<Annotations Target="CatalogService.Currencies/descr">
<Annotation Term="Common.Label" String="Description"/>
</Annotations>
<Annotations Target="CatalogService.Currencies/code">
<Annotation Term="Common.Label" String="Currency Code"/>
</Annotations>
<Annotations Target="CatalogService.Currencies/symbol">
<Annotation Term="Common.Label" String="Currency Symbol"/>
</Annotations>
<Annotations Target="CatalogService.Currencies_texts/name">
<Annotation Term="Common.Label" String="Name"/>
</Annotations>
<Annotations Target="CatalogService.Currencies_texts/descr">
<Annotation Term="Common.Label" String="Description"/>
</Annotations>
<Annotations Target="CatalogService.Currencies_texts/code">
<Annotation Term="Common.Label" String="Currency Code"/>
</Annotations>
<Annotations Target="CatalogService.Products">
<Annotation Term="UI.DataPoint" Qualifier="Price">
<Record Type="UI.DataPointType">
<PropertyValue Property="Title" String="Price"/>
<PropertyValue Property="Value" Path="price"/>
</Record>
</Annotation>
<Annotation Term="UI.Facets">
<Collection>
<Record Type="UI.CollectionFacet">
<PropertyValue Property="Label" String="Product Information"/>
<PropertyValue Property="Facets">
<Collection>
<Record Type="UI.ReferenceFacet">
<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#Description"/>
<PropertyValue Property="Label" String="Description"/>
</Record>
</Collection>
</PropertyValue>
</Record>
</Collection>
</Annotation>
<Annotation Term="UI.FieldGroup" Qualifier="Description">
<Record Type="UI.FieldGroupType">
<PropertyValue Property="Data">
<Collection>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="description"/>
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
<Annotation Term="UI.FieldGroup" Qualifier="ProductDetail">
<Record Type="UI.FieldGroupType">
<PropertyValue Property="Data">
<Collection>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="identifier"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="availability"/>
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
<Annotation Term="UI.FieldGroup" Qualifier="SupplierDetail">
<Record Type="UI.FieldGroupType">
<PropertyValue Property="Data">
<Collection>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="supplier/identifier"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="supplier/postCode"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="supplier/phone"/>
</Record>
</Collection>
</PropertyValue>
</Record>
</Annotation>
<Annotation Term="UI.HeaderFacets">
<Collection>
<Record Type="UI.ReferenceFacet">
<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#ProductDetail"/>
<PropertyValue Property="Label" String="Details"/>
</Record>
<Record Type="UI.ReferenceFacet">
<PropertyValue Property="Target" AnnotationPath="@UI.FieldGroup#SupplierDetail"/>
<PropertyValue Property="Label" String="Supplier"/>
</Record>
<Record Type="UI.ReferenceFacet">
<PropertyValue Property="Target" AnnotationPath="@UI.DataPoint#Price"/>
</Record>
</Collection>
</Annotation>
<Annotation Term="UI.HeaderInfo">
<Record Type="UI.HeaderInfoType">
<PropertyValue Property="Title">
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="title"/>
</Record>
</PropertyValue>
<PropertyValue Property="TypeName" String="Product"/>
<PropertyValue Property="TypeNamePlural" String="Products"/>
</Record>
</Annotation>
<Annotation Term="UI.LineItem">
<Collection>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="image_url"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="identifier"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="title"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="availability"/>
</Record>
<Record Type="UI.DataField">
<PropertyValue Property="Value" Path="price"/>
</Record>
</Collection>
</Annotation>
<Annotation Term="UI.SelectionFields">
<Collection>
<PropertyPath>identifier</PropertyPath>
<PropertyPath>title</PropertyPath>
<PropertyPath>availability</PropertyPath>
<PropertyPath>price</PropertyPath>
</Collection>
</Annotation>
</Annotations>
<Annotations Target="CatalogService.Products/ID">
<Annotation Term="Common.Label" String="ProductID"/>
</Annotations>
<Annotations Target="CatalogService.Products/identifier">
<Annotation Term="Common.Label" String="ID"/>
</Annotations>
<Annotations Target="CatalogService.Products/title">
<Annotation Term="Common.Label" String="Name"/>
</Annotations>
<Annotations Target="CatalogService.Products/description">
<Annotation Term="Common.Label" String="Description"/>
</Annotations>
<Annotations Target="CatalogService.Products/availability">
<Annotation Term="Common.Label" String="In Stock"/>
</Annotations>
<Annotations Target="CatalogService.Products/price">
<Annotation Term="Common.Label" String="Price"/>
<Annotation Term="Measures.ISOCurrency" Path="currency_code"/>
</Annotations>
<Annotations Target="CatalogService.Products/currency">
<Annotation Term="Common.Label" String="Currency"/>
<Annotation Term="Common.ValueList">
<Record Type="Common.ValueListType">
<PropertyValue Property="Label" String="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="A currency code as specified in ISO 4217"/>
</Annotations>
<Annotations Target="CatalogService.Products/image_url">
<Annotation Term="Common.Label" String="Image"/>
<Annotation Term="UI.IsImageURL" Bool="true"/>
</Annotations>
<Annotations Target="CatalogService.Products/currency_code">
<Annotation Term="Common.Label" String="Currency"/>
<Annotation Term="Common.ValueList">
<Record Type="Common.ValueListType">
<PropertyValue Property="Label" String="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="A currency code as specified in ISO 4217"/>
</Annotations>
<Annotations Target="CatalogService.Products_texts/ID">
<Annotation Term="Common.Label" String="UUID"/>
</Annotations>
<Annotations Target="CatalogService.Products_texts/title">
<Annotation Term="Common.Label" String="Name"/>
</Annotations>
<Annotations Target="CatalogService.Suppliers/identifier">
<Annotation Term="Common.Label" String="Name"/>
<Annotation Term="Common.Text" Path="name">
<Annotation Term="UI.TextArrangement" EnumMember="UI.TextArrangementType/TextFirst"/>
</Annotation>
</Annotations>
<Annotations Target="CatalogService.Suppliers/phone">
<Annotation Term="Common.Label" String="Phone"/>
</Annotations>
<Annotations Target="CatalogService.Suppliers/postCode">
<Annotation Term="Common.Label" String="City"/>
<Annotation Term="Common.Text" Path="city">
<Annotation Term="UI.TextArrangement" EnumMember="UI.TextArrangementType/TextFirst"/>
</Annotation>
</Annotations>
</Schema>
</edmx:DataServices>
</edmx:Edmx>

View File

@@ -1,155 +0,0 @@
{
"_version": "1.15.0",
"sap.app": {
"id": "supplier.suppliers",
"type": "application",
"i18n": "i18n/i18n.properties",
"applicationVersion": {
"version": "1.0"
},
"title": "{{appTitle}}",
"description": "{{appDescription}}",
"ach": "CA-UI5-FE",
"dataSources": {
"mainService": {
"uri": "/catalog/",
"type": "OData",
"settings": {
"odataVersion": "4.0"
}
}
},
"offline": false,
"resources": "resources.json",
"sourceTemplate": {
"id": "ui5template.fiorielements.v4.lrop",
"version": "1.0.0"
}
},
"sap.ui": {
"technology": "UI5",
"icons": {
"icon": "",
"favIcon": "",
"phone": "",
"phone@2": "",
"tablet": "",
"tablet@2": ""
},
"deviceTypes": {
"desktop": true,
"tablet": true,
"phone": true
}
},
"sap.ui5": {
"resources": {
"js": [],
"css": []
},
"dependencies": {
"minUI5Version": "1.71.0",
"libs": {
"sap.fe": {}
}
},
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"uri": "i18n/i18n.properties"
},
"": {
"dataSource": "mainService",
"settings": {
"synchronizationMode": "None",
"operationMode": "Server",
"autoExpandSelect": true,
"earlyRequests": true
}
}
},
"routing": {
"routes": [
{
"pattern": "",
"name": "SuppliersList",
"target": "SuppliersList"
},
{
"pattern": "Suppliers({key})",
"name": "SuppliersObjectPage",
"target": "SuppliersObjectPage"
},
{
"pattern": "Suppliers({key})/texts({key2})",
"name": "Currencies_textsObjectPage",
"target": "Currencies_textsObjectPage"
}
],
"targets": {
"SuppliersList": {
"type": "Component",
"id": "SuppliersList",
"name": "sap.fe.templates.ListReport",
"options": {
"settings": {
"entitySet": "Suppliers",
"variantManagement": "Page",
"navigation": {
"Suppliers": {
"detail": {
"route": "SuppliersObjectPage"
}
}
}
}
}
},
"SuppliersObjectPage": {
"type": "Component",
"id": "SuppliersObjectPage",
"name": "sap.fe.templates.ObjectPage",
"options": {
"settings": {
"entitySet": "Suppliers",
"navigation": {
"texts": {
"detail": {
"route": "Currencies_textsObjectPage"
}
}
}
}
}
},
"Currencies_textsObjectPage": {
"type": "Component",
"id": "Currencies_textsObjectPage",
"name": "sap.fe.templates.ObjectPage",
"options": {
"settings": {
"entitySet": "Currencies_texts"
}
}
}
}
},
"contentDensities": {
"compact": true,
"cozy": true
}
},
"sap.platform.abap": {
"_version": "1.1.0",
"uri": ""
},
"sap.platform.hcp": {
"_version": "1.1.0",
"uri": ""
},
"sap.fiori": {
"_version": "1.1.0",
"registrationIds": [],
"archeType": "transactional"
}
}

View File

@@ -1,16 +0,0 @@
{
"welcomeFile": "/index.html",
"authenticationMethod": "none",
"routes": [
{
"source": "^/catalog/(.*)$",
"target": "/catalog/$1",
"destination": "odata",
"csrfProtection": false
},
{
"source": "^(.*)",
"localDir": "webapp"
}
]
}

View File

@@ -1,7 +0,0 @@
ID,IDENTIFIER,TITLE,DESCRIPTION,AVAILABILITY,STORAGE_CAPACITY,CRITICALITY,PRICE,CURRENCY_CODE,SUPPLIER_ID,IMAGE_URL
844ede5c-071e-34ed-907f-f99cb3a4693d,MC-CM-1003,Tea- / Coffee-Mug,Robust high-quality ceramic mug for every-day use in two unobstrusive colours.,153,200,0,2.65,USD,8b001df1-dab2-39a2-8b1a-89b6b445e237,../images/mug.png
64d40922-ea0d-30f9-9b83-eb4448ee4c2e,MC-CH-1000,Coat Hangers,"Set of high-quality hangers with coated surface, trouser bar - anti slip. Super slim design - space saving - The hooks can be rotated through 360 degree rotation, practical for various room situations. Material: ABS (plastic); Colour: turquoise.",10,200,3,2.6,USD,12726eec-165c-3713-a674-3d2fc4f5127f,../images/hanger1.png
a6756d40-792e-34c9-8b2e-df3acb0c54b4,MC-CH-1001,Coat Hangers,"Set of high-quality hangers with coated surface, trouser bar - anti slip. Super slim design - space saving - The hooks can be rotated through 360 degree rotation, practical for various room situations. Material: ABS (plastic); Colour: assorted (2 of each pink, grey, blue green, black).",34,200,2,21.73,USD,12726eec-165c-3713-a674-3d2fc4f5127f,../images/hanger2.png
37f028f0-1dd5-30ae-9cdd-a7f543e4d61d,MC-CH-1002,Wooden Coat Hangers - Pack of 5,"Pack of 5 quality wooden hangers with trouser bar. Slim design for space saving - The hooks can be rotated through 360 degree rotation, practical for various room situations. Material: ABS (plastic); Colour: assorted (2 of each pink, grey, blue green, black).",5,200,2,6.4,USD,8b001df1-dab2-39a2-8b1a-89b6b445e237,../images/hanger3.png
a376e380-00e8-3d90-ba9f-c332c2df0f28,MC-CH-1003,Designer Coat Hooks - Pack of 3,Pack of 3 designer coat hook. Heavy-duty stainless steel hooks in a stylish shape.,6,200,1,6.49,USD,8b001df1-dab2-39a2-8b1a-89b6b445e237,../images/hanger4.png
fc16c43d-bb4e-30db-8b7e-98b3fdc7f0b9,MC-CH-1004,Vacuum Wall Hook - Pack of 6,"Big suction cup with diameter of 70mm, can load more than 10kg; bright contemporary colour; Principle of work: Atmospheric pressure, safely and easy to install and tear off, no need to drill a hole or add glue, without any damage to the surface; can be used on a variety of surfaces, including paint, glasses, wood, ceramic tile, gypsum, and any other smooth surface.",17,200,0,5.76,USD,12726eec-165c-3713-a674-3d2fc4f5127f,../images/hanger4.png
1 ID IDENTIFIER TITLE DESCRIPTION AVAILABILITY STORAGE_CAPACITY CRITICALITY PRICE CURRENCY_CODE SUPPLIER_ID IMAGE_URL
2 844ede5c-071e-34ed-907f-f99cb3a4693d MC-CM-1003 Tea- / Coffee-Mug Robust high-quality ceramic mug for every-day use in two unobstrusive colours. 153 200 0 2.65 USD 8b001df1-dab2-39a2-8b1a-89b6b445e237 ../images/mug.png
3 64d40922-ea0d-30f9-9b83-eb4448ee4c2e MC-CH-1000 Coat Hangers Set of high-quality hangers with coated surface, trouser bar - anti slip. Super slim design - space saving - The hooks can be rotated through 360 degree rotation, practical for various room situations. Material: ABS (plastic); Colour: turquoise. 10 200 3 2.6 USD 12726eec-165c-3713-a674-3d2fc4f5127f ../images/hanger1.png
4 a6756d40-792e-34c9-8b2e-df3acb0c54b4 MC-CH-1001 Coat Hangers Set of high-quality hangers with coated surface, trouser bar - anti slip. Super slim design - space saving - The hooks can be rotated through 360 degree rotation, practical for various room situations. Material: ABS (plastic); Colour: assorted (2 of each pink, grey, blue green, black). 34 200 2 21.73 USD 12726eec-165c-3713-a674-3d2fc4f5127f ../images/hanger2.png
5 37f028f0-1dd5-30ae-9cdd-a7f543e4d61d MC-CH-1002 Wooden Coat Hangers - Pack of 5 Pack of 5 quality wooden hangers with trouser bar. Slim design for space saving - The hooks can be rotated through 360 degree rotation, practical for various room situations. Material: ABS (plastic); Colour: assorted (2 of each pink, grey, blue green, black). 5 200 2 6.4 USD 8b001df1-dab2-39a2-8b1a-89b6b445e237 ../images/hanger3.png
6 a376e380-00e8-3d90-ba9f-c332c2df0f28 MC-CH-1003 Designer Coat Hooks - Pack of 3 Pack of 3 designer coat hook. Heavy-duty stainless steel hooks in a stylish shape. 6 200 1 6.49 USD 8b001df1-dab2-39a2-8b1a-89b6b445e237 ../images/hanger4.png
7 fc16c43d-bb4e-30db-8b7e-98b3fdc7f0b9 MC-CH-1004 Vacuum Wall Hook - Pack of 6 Big suction cup with diameter of 70mm, can load more than 10kg; bright contemporary colour; Principle of work: Atmospheric pressure, safely and easy to install and tear off, no need to drill a hole or add glue, without any damage to the surface; can be used on a variety of surfaces, including paint, glasses, wood, ceramic tile, gypsum, and any other smooth surface. 17 200 0 5.76 USD 12726eec-165c-3713-a674-3d2fc4f5127f ../images/hanger4.png

View File

@@ -1,16 +0,0 @@
ID,IDENTIFIER,NAME,COUNTRY,POSTCODE,CITY,STREET,BUILDING,PHONE
12726eec-165c-3713-a674-3d2fc4f5127f,OFFIPOR,OffiPOR,PR,Guaynabo,PR 00968,City View Plaza,301,+1 787-38515864
9655e5b6-bd8c-31ee-b94a-0651449721a0,POLIRADO,POLirado,PL,Warszawa,02-675,Ul. Woloska,5,+48 883 77522087
f1fd8dd5-3156-3469-b4f1-a03ff5041080,REGULCUST,Regular Custom Ltd,GB,Knutsford,WA16 6DW,King Street,25,+44 1565 47759991
bb2fa1e5-5c3a-3d26-b5c1-ed53f3e08622,OFFICEGURU,Office-Guru AG,DE,Siegen,57078,Birlenbacher Str.,19-21,+49 271 7722547
b91f077f-2086-3517-8244-d3b50835651b,MEINRESSORT,Mein Ressort GmbH,CH,Regensdorf,8105,Althardstrasse,80,+41 44 84008483
8b001df1-dab2-39a2-8b1a-89b6b445e237,OFFICELINE,Office Line Prag,CZ,Praha,140 00,Vyskocilova,1481/4,+420 776 9487923
3c7e6cbb-ea0f-35d2-a2ce-c85057a57916,DEPOT4ALL,Depot-4All,DE,Freiberg a. N.,71691,Grundelbachstrasse,10,+49 7141 2463585
41b46958-5ad7-30b6-9884-b547c1e26b7e,ITELOFFICE,ITeL-Office,DE,Dresden,01187,Chemnitzer Strasse,48,+49 351 31915489
7c5a5e3a-6dfa-35d3-8bf4-0cadbddb761a,FAMOUSUS,FamousUS,US,Houston,TX 77098,2601 Westheimer Road,Suite C250,+1 713-12001085
36de419f-0a4c-3a5a-b285-188979ce13ec,CHINACHAIN,ChinaChain,CN,Guangzhou,510613,No. 233 Tien He Road North,6402-6403,+86 20 86454650
41b922ad-35d9-352d-80c7-ee63ba1c007c,FAMOUSUS1,FamousUS (LV),US,Las Vegas,NV 89118,W Sunset Rd,3620,+1 702-486454400
b4b3188c-fa27-3467-a38a-f36ede8acc18,FAMOUSUS2,FamousUS (SF),US,South San Francisco,CA 94080,Forbes Blvd,401,+1 650-486454500
b5f1b294-a102-38e1-88c5-9b4d9ff0dd33,FAMOUSUS3,FamousUS (NY),US,New York,NY 10128,3rd Ave,1588,+1 212-486454600
391da904-9acd-334b-885e-4b4da38f3c6e,FAMOUSUS4,FamousUS (ORL),US,Orlando,FL 32806,W Sturtevant St,47,+1 407-486454700
1f6aed3b-bac0-39e5-ba5b-c091b0d18f40,FAMOUSUS5,FamousUS (NSH),US,Nashville,TN 37211,Space Park S Dr,486-810,+1 615-486454800
1 ID IDENTIFIER NAME COUNTRY POSTCODE CITY STREET BUILDING PHONE
2 12726eec-165c-3713-a674-3d2fc4f5127f OFFIPOR OffiPOR PR Guaynabo PR 00968 City View Plaza 301 +1 787-38515864
3 9655e5b6-bd8c-31ee-b94a-0651449721a0 POLIRADO POLirado PL Warszawa 02-675 Ul. Woloska 5 +48 883 77522087
4 f1fd8dd5-3156-3469-b4f1-a03ff5041080 REGULCUST Regular Custom Ltd GB Knutsford WA16 6DW King Street 25 +44 1565 47759991
5 bb2fa1e5-5c3a-3d26-b5c1-ed53f3e08622 OFFICEGURU Office-Guru AG DE Siegen 57078 Birlenbacher Str. 19-21 +49 271 7722547
6 b91f077f-2086-3517-8244-d3b50835651b MEINRESSORT Mein Ressort GmbH CH Regensdorf 8105 Althardstrasse 80 +41 44 84008483
7 8b001df1-dab2-39a2-8b1a-89b6b445e237 OFFICELINE Office Line Prag CZ Praha 140 00 Vyskocilova 1481/4 +420 776 9487923
8 3c7e6cbb-ea0f-35d2-a2ce-c85057a57916 DEPOT4ALL Depot-4All DE Freiberg a. N. 71691 Grundelbachstrasse 10 +49 7141 2463585
9 41b46958-5ad7-30b6-9884-b547c1e26b7e ITELOFFICE ITeL-Office DE Dresden 01187 Chemnitzer Strasse 48 +49 351 31915489
10 7c5a5e3a-6dfa-35d3-8bf4-0cadbddb761a FAMOUSUS FamousUS US Houston TX 77098 2601 Westheimer Road Suite C250 +1 713-12001085
11 36de419f-0a4c-3a5a-b285-188979ce13ec CHINACHAIN ChinaChain CN Guangzhou 510613 No. 233 Tien He Road North 6402-6403 +86 20 86454650
12 41b922ad-35d9-352d-80c7-ee63ba1c007c FAMOUSUS1 FamousUS (LV) US Las Vegas NV 89118 W Sunset Rd 3620 +1 702-486454400
13 b4b3188c-fa27-3467-a38a-f36ede8acc18 FAMOUSUS2 FamousUS (SF) US South San Francisco CA 94080 Forbes Blvd 401 +1 650-486454500
14 b5f1b294-a102-38e1-88c5-9b4d9ff0dd33 FAMOUSUS3 FamousUS (NY) US New York NY 10128 3rd Ave 1588 +1 212-486454600
15 391da904-9acd-334b-885e-4b4da38f3c6e FAMOUSUS4 FamousUS (ORL) US Orlando FL 32806 W Sturtevant St 47 +1 407-486454700
16 1f6aed3b-bac0-39e5-ba5b-c091b0d18f40 FAMOUSUS5 FamousUS (NSH) US Nashville TN 37211 Space Park S Dr 486-810 +1 615-486454800

View File

@@ -1,5 +0,0 @@
"SYMBOL";"DESCR";"NAME";"CODE"
"";"Euro";"Euro";"EUR"
"£";"British Pound";"British Pound";"GBP"
"";"Indian Rupee";"Indian Rupee";"INR"
"$";"US Dollar";"US Dollar";"USD"
1 SYMBOL DESCR NAME CODE
2 Euro Euro EUR
3 £ British Pound British Pound GBP
4 Indian Rupee Indian Rupee INR
5 $ US Dollar US Dollar USD

View File

@@ -1,30 +0,0 @@
namespace sap.capire.officesupplies;
using { Currency } from '@sap/cds/common';
entity Products {
@Common.Label : 'UUID'
key ID : UUID;
identifier : String @Common.Label : 'ID';
title : localized String @( Common.Label : 'Name' );
description : localized String;
availability : Integer;
storage_capacity: Integer;
criticality : Integer;
price : Decimal(9,2);
currency : Currency;
supplier : Association to Suppliers;
image_url : String;
}
entity Suppliers {
key ID : UUID;
identifier: String;
name : String;
phone : String;
building : String;
street : String @multiline;
postCode : String;
city : String;
country : String;
products : Composition of many Products on products.supplier = $self;
}

View File

@@ -1,19 +0,0 @@
Cat.ProductID=ProductID
Cat.ProductStock=In Stock
Cat.ProductPrice=Price
Cat.ProductTitle=Title
Cat.ProductDescr=Description
Cat.ProductImage=Image
Cat.SuppliersIdentifier=Name
Cat.SuppliersPostCode=City
Cat.SuppliersPhone=Phone
Cat.HeaderFacetDetails=Details
Cat.HeaderFacetSupplier=Supplier
Cat.HeaderPrice=Price
Cat.FacetProductInformation=Product Information
Cat.FacetSectionDescription=Description
Cat.TypeName=Product
Cat.TypeNamePlural=Products

View File

@@ -1,14 +0,0 @@
{
"name": "officesupplies",
"version": "1.0.0",
"description": "A simple CAP project.",
"repository": "<Add your repository here>",
"license": "ISC",
"dependencies": {
"@sap/cds": "^3",
"express": "^4"
},
"scripts": {
"start": "npx cds run"
}
}

View File

@@ -1,72 +0,0 @@
using sap.capire.officesupplies from '../db/schema';
@path:'/catalog'
service CatalogService {
entity Products as projection on officesupplies.Products;
entity Suppliers as projection on officesupplies.Suppliers;
};
annotate CatalogService.Products with @(
UI: {
HeaderInfo: {
TypeName: '{i18n>Cat.TypeName}',
TypeNamePlural: '{i18n>Cat.TypeNamePlural}',
Title: { $Type: 'UI.DataField', Value: title }
},
SelectionFields: [ identifier, title, availability, price],
LineItem: [
{$Type: 'UI.DataField', Value: image_url},
{$Type: 'UI.DataField', Value: identifier},
{$Type: 'UI.DataField', Value: title},
{$Type: 'UI.DataField', Value: availability},
{$Type: 'UI.DataField', Value: price}
],
HeaderFacets: [
{$Type: 'UI.ReferenceFacet', Target: '@UI.FieldGroup#ProductDetail', Label:'{i18n>Cat.HeaderFacetDetails}' },
{$Type: 'UI.ReferenceFacet', Target: '@UI.FieldGroup#SupplierDetail', Label:'{i18n>Cat.HeaderFacetSupplier}' },
{$Type: 'UI.ReferenceFacet', Target: '@UI.DataPoint#Price'}
],
Facets: [
{
$Type: 'UI.CollectionFacet',
Label: '{i18n>Cat.FacetProductInformation}',
Facets: [
{$Type: 'UI.ReferenceFacet', Target: '@UI.FieldGroup#Description', Label: '{i18n>Cat.FacetSectionDescription}'},
]
}
],
DataPoint#Price: {Value: price, Title: '{i18n>Cat.HeaderPrice}'},
FieldGroup#Description: {
Data:[
{$Type: 'UI.DataField', Value: description}
]
},
FieldGroup#ProductDetail: {
Data:[
{$Type: 'UI.DataField', Value: identifier},
{$Type: 'UI.DataField', Value: availability}
]
},
FieldGroup#SupplierDetail: {
Data:[
{$Type: 'UI.DataField', Value: supplier.identifier},
{$Type: 'UI.DataField', Value: supplier.postCode},
{$Type: 'UI.DataField', Value: supplier.phone}
]
}
}
);
annotate CatalogService.Products with {
ID @( Common: { Label: '{i18n>Cat.ProductID}'} );
availability @( Common.Label: '{i18n>Cat.ProductStock}' );
price @( Common.Label: '{i18n>Cat.ProductPrice}', Measures.ISOCurrency: currency_code );
description @( Common.Label: '{i18n>Cat.ProductDescr}' );
image_url @( Common.Label: '{i18n>Cat.ProductImage}', UI.IsImageURL: true);
}
annotate CatalogService.Suppliers with {
identifier @( Common : { Label: '{i18n>Cat.SuppliersIdentifier}', Text: name, TextArrangement: #TextFirst } );
postCode @( Common : { Label: '{i18n>Cat.SuppliersPostCode}', Text: city, TextArrangement: #TextFirst } );
phone @Common.Label: '{i18n>Cat.SuppliersPhone}';
}