Compare commits

...

10 Commits

Author SHA1 Message Date
D065023
926a3eaa9a fixed version 2019-10-25 09:55:42 +02:00
johannes-vogel
de871e11cb Update README.md 2019-09-23 14:13:42 +02:00
d045778
b5684841e6 final state of exercise 4 2019-09-23 13:45:43 +02:00
d045778
00f118deed final state of exercise 3 2019-09-23 13:32:14 +02:00
d045778
fb8f6acac7 final state of exercise 2 2019-09-23 13:25:44 +02:00
d045778
1e28cb217f final state of exercise 1 2019-09-23 13:19:24 +02:00
d045778
2fc2cea260 add sap registry to npmrc 2019-09-23 13:06:09 +02:00
johannes-vogel
bfaaf36e14 Fix Key in Products 2019-09-22 13:32:18 +02:00
johannes-vogel
33b24c8d96 Use version 3.17.4 (#1) 2019-09-21 11:36:45 +02:00
i079695
387b25b1bf Add initial branch for CAA265 2019-09-11 11:07:11 +02:00
34 changed files with 722 additions and 61 deletions

1
.npmrc
View File

@@ -1 +1,2 @@
@sap:registry=https://npm.sap.com
package-lock=false package-lock=false

View File

@@ -1,58 +1,3 @@
# cloud-cap-samples # Final state of exercise 4 for CAA265 - Rapid Service Development with SAP Cloud Application Programming Model
This is a monorepository for sample projects on [SAP Cloud Application Programming Model](https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/00823f91779d4d42aa29a498e0535cdf.html?q=cloud%20application%20programming%20model).
## Description
This repository provides a list of samples and reusable packages created based on SAP Cloud Application Programming Model.
The SAP Cloud Application Programming Model enables you to quickly create business applications by allowing you to focus on your domain logic. It offers a consistent end-to-end programming model that includes languages, libraries and APIs tailored for full-stack development on SAP Cloud Platform.
The samples provided can be run in a local setup on SQLite Database.
#### Samples:
* [bookstore](./packages/bookstore) - A variant of the bookshop application, built in a modular fashion on top of products-service and common reuse packages.
* [products-service](./packages/products-service) - A reuse package providing domain models and services to manage product catalogs.
## Requirements
* [Node.js](https://nodejs.org/en/) v8 or higher
* [Git](https://git-scm.com)
* [SQLite DB](https://www.sqlite.org/download.html) (Windows only; pre-installed on Mac/Linux)
#### Optional (if you want to import the code into an editor)
* [VS Code](https://code.visualstudio.com)
* [Add CDS extension to VS](https://help.sap.com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/en-US/be944d6d51f343f6b3f53c29c44ff00a.html)
## Download and Installation
#### Clone and build the application
`git clone https://github.com/SAP-samples/cloud-cap-samples.git`
`cd samples`
`npm install`
#### Run the samples
`npm run <sample name>`
## Limitations
None
## Known Issues
None
## How to obtain support
In case you find a bug, or you need additional support, please open an issue [here](https://github.wdf.sap.corp/staging-for-SAP-samples-public/cloud-cap-samples/issues) in GitHub.
## To-Do (upcoming changes)
None
## License
Copyright (c) 2019 SAP SE or an SAP affiliate company. All rights reserved. This file is licensed under SAP Sample Code License Agreement, except as noted otherwise in the [LICENSE](/LICENSE) file.
**DO NOT MERGE IN MASTER**

3
packages/.cdsrc.json Normal file
View File

@@ -0,0 +1,3 @@
{
"cds_version": "^3.17.4"
}

View File

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

View File

@@ -0,0 +1,118 @@
<?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

@@ -0,0 +1,7 @@
# This is the resource bundle for bookList#Texts for manifest.json
#XTIT: Application name
appTitle=bookList
#YDES: Application description
appDescription=bookList

View File

@@ -0,0 +1,39 @@
<!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: "bookList",
description: "bookList",
additionalInformation: "SAPUI5.Component=ns.bookList",
applicationType : "URL",
url: "./",
navigationMode: "embedded"
}
}
};
</script>
<script src="https://sapui5.hana.ondemand.com/test-resources/sap/ushell/bootstrap/sandbox.js"></script>
<script src="https://sapui5.hana.ondemand.com/resources/sap-ui-core.js"
data-sap-ui-libs="sap.m, sap.ushell"
data-sap-ui-compatVersion="edge"
data-sap-ui-theme="sap_belize"
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

@@ -0,0 +1,134 @@
{
"_version": "1.15.0",
"sap.app": {
"id": "ns.bookList",
"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.60.1",
"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": "BooksList",
"target": "BooksList"
},
{
"pattern": "Books({key})",
"name": "BooksObjectPage",
"target": "BooksObjectPage"
}
],
"targets": {
"BooksList": {
"type": "Component",
"id": "BooksList",
"name": "sap.fe.templates.ListReport",
"options": {
"settings" : {
"entitySet" : "Books",
"variantManagement": "Page",
"navigation" : {
"Books" : {
"detail" : {
"route" : "BooksObjectPage"
}
}
}
}
}
},
"BooksObjectPage": {
"type": "Component",
"id": "BooksObjectPage",
"name": "sap.fe.templates.ObjectPage",
"options": {
"settings" : {
"entitySet" : "Books"
}
}
}
}
},
"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

@@ -0,0 +1,23 @@
{
"welcomeFile": "/index.html",
"authenticationMethod": "none",
"logout": {
"logoutEndpoint": "/do/logout"
},
"routes": [
{
"source": "^/catalog/(.*)$",
"target": "$1",
"destination": "srv-api",
"csrfProtection": false,
"authenticationType": "none"
},
{
"source": "^(.*)$",
"target": "$1",
"service": "html5-apps-repo-rt",
"authenticationType": "xsuaa"
}
]
}

View File

@@ -0,0 +1,66 @@
using sap.capire.bookstore.CatalogService as CatalogService from '../srv/services';
////////////////////////////////////////////////////////////////////////////
//
// Books Lists
//
annotate CatalogService.Books with @(
UI: {
HeaderFacets: [
{$Type: 'UI.ReferenceFacet', Label: 'Description', Target: '@UI.FieldGroup#Descr'},
],
Facets: [
{$Type: 'UI.ReferenceFacet', Label: 'Details', Target: '@UI.FieldGroup#Price'},
],
FieldGroup#Descr: {
Data: [
{Value: descr},
]
},
FieldGroup#Price: {
Data: [
{Value: price},
{Value: currency.symbol, Label: 'Currency'},
]
},
Identification: [{Value:title}],
SelectionFields: [ ID, price, currency_code ],
LineItem: [
{Value: ID},
{Value: title},
{Value: author_ID, Label:'Author ID'},
{Value: stock},
{Value: price},
{Value: currency.symbol, Label:''},
]
}
);
////////////////////////////////////////////////////////////////////////////
//
// Books Details
//
annotate CatalogService.Books with @(
UI: {
HeaderInfo: {
TypeName: 'Book',
TypeNamePlural: 'Books',
Title: {Value: title},
},
}
);
////////////////////////////////////////////////////////////////////////////
//
// Books Elements
//
annotate CatalogService.Books with {
ID @title:'ID' @UI.HiddenFilter;
title @title:'Title';
author @title:'Author ID';
price @title:'Price';
stock @title:'Stock';
descr @UI.MultiLineText;
}

View File

@@ -0,0 +1,5 @@
ID;name;dateOfBirth;placeOfBirth;dateOfDeath;placeOfDeath
101;Emily Brontë;1818-07-30;Thornton, Yorkshire;1848-12-19;Haworth, Yorkshire
107;Charlotte Brontë;1818-04-21;Thornton, Yorkshire;1855-03-31;Haworth, Yorkshire
150;Edgar Allen Poe;1809-01-19;Boston, Massachusetts;1849-10-07;Baltimore, Maryland
170;Richard Carpenter;1929-08-14;King’s Lynn, Norfolk;2012-02-26;Hertfordshire, England
1 ID name dateOfBirth placeOfBirth dateOfDeath placeOfDeath
2 101 Emily Brontë 1818-07-30 Thornton, Yorkshire 1848-12-19 Haworth, Yorkshire
3 107 Charlotte Brontë 1818-04-21 Thornton, Yorkshire 1855-03-31 Haworth, Yorkshire
4 150 Edgar Allen Poe 1809-01-19 Boston, Massachusetts 1849-10-07 Baltimore, Maryland
5 170 Richard Carpenter 1929-08-14 King’s Lynn, Norfolk 2012-02-26 Hertfordshire, England

View File

@@ -0,0 +1,4 @@
ID;amount;parent_ID;book_ID;netAmount
301;1;401;201;11.11
302;1;401;271;15
303;2;402;252;28
1 ID amount parent_ID book_ID netAmount
2 301 1 401 201 11.11
3 302 1 401 271 15
4 303 2 402 252 28

View File

@@ -0,0 +1,3 @@
ID;modifiedAt;createdAt;createdBy;modifiedBy;OrderNo;currency_code
401;;2019-01-31;john.doe@test.com;;1;EUR
402;;2019-01-30;christian.georgi@sap.com;;2;EUR
1 ID modifiedAt createdAt createdBy modifiedBy OrderNo currency_code
2 401 2019-01-31 john.doe@test.com 1 EUR
3 402 2019-01-30 christian.georgi@sap.com 2 EUR

View File

@@ -0,0 +1,11 @@
ID;parent_ID;name
1;;Poetry
2;;Biography
3;;Fantasy
4;;Science Fiction
5;;Romance
6;;Mystery
7;;Thriller
8;;Dystopia
9;;Tragedy
10;;Novel
1 ID parent_ID name
2 1 Poetry
3 2 Biography
4 3 Fantasy
5 4 Science Fiction
6 5 Romance
7 6 Mystery
8 7 Thriller
9 8 Dystopia
10 9 Tragedy
11 10 Novel

View File

@@ -0,0 +1,6 @@
ID;title;descr;author_ID;stock;price;currency_code;category_ID
201;Wuthering Heights;"Wuthering Heights, Emily Brontë's only novel, was published in 1847 under the pseudonym ""Ellis Bell"". It was written between October 1845 and June 1846. Wuthering Heights and Anne Brontë's Agnes Grey were accepted by publisher Thomas Newby before the success of their sister Charlotte's novel Jane Eyre. After Emily's death, Charlotte edited the manuscript of Wuthering Heights and arranged for the edited version to be published as a posthumous second edition in 1850.";101;12;11.11;GBP;9
207;Jane Eyre;"Jane Eyre /ɛər/ (originally published as Jane Eyre: An Autobiography) is a novel by English writer Charlotte Brontë, published under the pen name ""Currer Bell"", on 16 October 1847, by Smith, Elder & Co. of London. The first American edition was published the following year by Harper & Brothers of New York. Primarily a bildungsroman, Jane Eyre follows the experiences of its eponymous heroine, including her growth to adulthood and her love for Mr. Rochester, the brooding master of Thornfield Hall. The novel revolutionised prose fiction in that the focus on Jane's moral and spiritual development is told through an intimate, first-person narrative, where actions and events are coloured by a psychological intensity. The book contains elements of social criticism, with a strong sense of Christian morality at its core and is considered by many to be ahead of its time because of Jane's individualistic character and how the novel approaches the topics of class, sexuality, religion and feminism.";107;11;12.34;GBP;10
251;The Raven;"“The Raven"" is a narrative poem by American writer Edgar Allan Poe. First published in January 1845, the poem is often noted for its musicality, stylized language, and supernatural atmosphere. It tells of a talking raven's mysterious visit to a distraught lover, tracing the man's slow fall into madness. The lover, often identified as being a student, is lamenting the loss of his love, Lenore. Sitting on a bust of Pallas, the raven seems to further distress the protagonist with its constant repetition of the word ""Nevermore"". The poem makes use of folk, mythological, religious, and classical references.";150;333;13.13;USD;1
252;Eleonora;"""Eleonora"" is a short story by Edgar Allan Poe, first published in 1842 in Philadelphia in the literary annual The Gift. It is often regarded as somewhat autobiographical and has a relatively ""happy"" ending.";150;555;14;USD;5
271;Catweazle;Catweazle is a British fantasy television series, starring Geoffrey Bayldon in the title role, and created by Richard Carpenter for London Weekend Television. The first series, produced and directed by Quentin Lawrence, was screened in the UK on ITV in 1970. The second series, directed by David Reid and David Lane, was shown in 1971. Each series had thirteen episodes, most but not all written by Carpenter, who also published two books based on the scripts.;170;22;15;EUR;3
Internal Server Error - Bruno's Gitea
500 Internal Server Error

Gitea Version: 1.24.4