Compare commits

...

49 Commits

Author SHA1 Message Date
Wolfgang Koch
2cc9fe50c4 ignore 2021-09-30 13:29:55 +02:00
Wolfgang Koch
c479d86aab template 2021-09-30 13:26:33 +02:00
Wolfgang Koch
2a933ead92 template 2021-09-22 10:58:45 +02:00
Wolfgang Koch
88c05a9c7f template 2021-09-22 10:37:13 +02:00
Wolfgang Koch
0a8ab2c137 corrections 2021-09-22 10:27:55 +02:00
Wolfgang Koch
aadfd9f7a1 extensibilty package json 2021-09-16 15:17:00 +02:00
Wolfgang Koch
8e2e899722 ext test 2021-09-16 15:13:29 +02:00
Dr. Wolfgang Koch
d516ffdb06 Update package.json
remove branch token
2021-07-30 09:39:25 +02:00
Wolfgang Koch
ab87eb6ee9 cleanup 2021-07-21 17:04:50 +02:00
Wolfgang Koch
b379822569 cleanup 2021-07-21 16:53:33 +02:00
Wolfgang Koch
46aec07596 cleanup 2021-07-21 16:52:45 +02:00
Dr. Wolfgang Koch
35df5e1552 Delete package-lock.json 2021-07-21 16:50:00 +02:00
Dr. Wolfgang Koch
cf717c4cf3 Delete Makefile_20210504145509.mta 2021-07-21 16:49:35 +02:00
Dr. Wolfgang Koch
8bc6343223 Delete logs_22_06_v02.txt 2021-07-21 16:49:00 +02:00
Dr. Wolfgang Koch
33c21f6f3a Delete logs_22_06.txt 2021-07-21 16:48:51 +02:00
Dr. Wolfgang Koch
7810585a0f Delete log_25_06.txt 2021-07-21 16:48:40 +02:00
Dr. Wolfgang Koch
68c8b95554 Delete log_21_07_v1.txt 2021-07-21 16:48:30 +02:00
Dr. Wolfgang Koch
fac88be2bf Delete log_16_07_v1.txt 2021-07-21 16:48:18 +02:00
Dr. Wolfgang Koch
b59a02588c Delete logs_22_06_v03.txt 2021-07-21 16:47:59 +02:00
Dr. Wolfgang Koch
0f02e25b1e Delete log_08_07_v1.txt 2021-07-21 16:47:48 +02:00
Dr. Wolfgang Koch
be46fff7e9 Delete log_06_07_v1.txt 2021-07-21 16:47:29 +02:00
Dr. Wolfgang Koch
2814486bfd Delete approuter_log_21_07_v1.txt 2021-07-21 16:47:14 +02:00
Wolfgang Koch
7f75401346 gitignore 2021-07-21 16:41:12 +02:00
Wolfgang Koch
1d91a8e2d9 linter checks 2021-07-13 14:19:23 +02:00
Wolfgang Koch
60ba27ff3c bug fix 2021-07-06 15:40:39 +02:00
Wolfgang Koch
b7ff0cd100 package 2021-06-25 12:48:22 +02:00
Wolfgang Koch
67038e7fe1 package json dep 2021-06-25 12:45:08 +02:00
nkaputnik
ac895a508a Changes to mta and mtx config 2021-06-16 17:59:27 +02:00
nkaputnik
172aab7f8d Merge branch 'multitenancy-d025985' of https://github.com/SAP-samples/cloud-cap-samples into multitenancy-d025985 2021-06-11 13:35:38 +02:00
nkaputnik
82d1891ece CDS 5.2.0 2021-06-11 13:34:16 +02:00
nkaputnik
01a528ba83 upgrade CDS to 5.2.0 2021-06-11 13:32:47 +02:00
nkaputnik
804887e208 branch for MTX Linter added 2021-05-21 13:58:36 +02:00
Wolfgang Koch
0972858cbb simple field 2021-05-20 17:23:09 +02:00
Wolfgang Koch
d57974fb5e remove linter checks Z_ 2021-05-14 11:33:49 +02:00
Wolfgang Koch
e14a4e8c40 new template 2021-05-12 14:36:37 +02:00
Wolfgang Koch
483a5f2696 new template 2021-05-12 10:04:51 +02:00
Wolfgang Koch
f952764b48 new template 2021-05-12 10:03:58 +02:00
Wolfgang Koch
70d132fed9 fiori preview 2021-05-07 17:47:41 +02:00
Wolfgang Koch
e3551dc917 Merge branch 'multitenancy-d025985' of https://github.com/SAP-samples/cloud-cap-samples into multitenancy-d025985 2021-05-06 17:32:02 +02:00
Wolfgang Koch
0f47b9ae8e allowlist 2021-05-06 17:31:30 +02:00
Uwe Klinger
76bde6ff41 Removed text tables 2021-05-05 11:01:59 +02:00
Uwe Klinger
09aa318879 Add approuter 2021-05-04 15:57:39 +02:00
Wolfgang Koch
81f762d7be ui 2021-05-04 14:09:15 +02:00
Wolfgang Koch
309c76caae adding fiori 2021-05-04 10:33:38 +02:00
Wolfgang Koch
13fc17a760 package json 2021-04-30 11:23:40 +02:00
Wolfgang Koch
c458bf0f47 rebuild sample to self cont 2021-04-30 11:13:14 +02:00
Wolfgang Koch
0d8abf71cb rebuild mtx sample to self contained 2021-04-30 11:11:05 +02:00
Wolfgang Koch
dc5cc5e607 changes to bookshop ansd fiori package.json 2021-04-29 10:12:05 +02:00
Wolfgang Koch
594043e55c initialize mtx 2021-04-29 10:10:09 +02:00
69 changed files with 1486 additions and 164 deletions

4
.gitignore vendored
View File

@@ -10,8 +10,12 @@ target/
.DS_Store .DS_Store
*.log *.log
*.mtar *.mtar
*mta-op*/
connection.properties connection.properties
default-env.json default-env.json
packages/messageBox packages/messageBox
reviews/msg-box reviews/msg-box
reviews/db/test.db reviews/db/test.db
package-lock.json
*log*.txt

View File

@@ -1,2 +0,0 @@
# cds.requires.messaging.kind = file-based-messaging
PORT = 4004

View File

@@ -1,10 +0,0 @@
//
// Add Author.age and .lifetime with a DB-specific function
//
using { AdminService } from '../schema';
extend projection AdminService.Authors with {
YEARS_BETWEEN(dateOfBirth, dateOfDeath) as age: Integer,
YEAR(dateOfBirth) || ' – ' || YEAR(dateOfDeath) as lifetime : String
}

View File

@@ -1,8 +0,0 @@
using { sap.capire.bookshop } from '@capire/bookshop';
// Forward-declare calculated fields to be filled in database-specific ways
// TODO find a better way to have 'default' fields that still can be overwritten.
extend bookshop.Authors with {
virtual age: Integer;
virtual lifetime: String;
}

View File

@@ -1,10 +0,0 @@
//
// Add Author.age and .lifetime with a DB-specific function
//
using { AdminService } from '../schema';
extend projection AdminService.Authors with {
strftime('%Y',dateOfDeath)-strftime('%Y',dateOfBirth) as age: Integer,
strftime('%Y',dateOfBirth) || ' – ' || strftime('%Y',dateOfDeath) as lifetime : String
}

View File

@@ -1,44 +0,0 @@
{
"name": "@capire/fiori",
"version": "1.0.0",
"dependencies": {
"@capire/bookshop": "*",
"@capire/reviews": "*",
"@capire/orders": "*",
"@capire/common": "*",
"@sap/cds": ">=4",
"express": "^4.17.1",
"passport": "^0.4.1"
},
"scripts": {
"start": "cds run --in-memory?",
"watch": "cds watch"
},
"cds": {
"hana": {
"deploy-format": "hdbtable"
},
"requires": {
"auth": {
"strategy": "dummy"
},
"ReviewsService": {
"kind": "odata",
"model": "@capire/reviews"
},
"OrdersService": {
"kind": "odata",
"model": "@capire/orders"
},
"db": {
"kind": "sql",
"[development]": {
"model": "db/sqlite"
},
"[production]": {
"model": "db/hana"
}
}
}
}
}

View File

@@ -1,77 +0,0 @@
@bookshop = http://localhost:4004
@reviews-service = {{bookshop}}/reviews
# Uncomment this when running a separate reviews service
@reviews-service = http://localhost:4005/reviews
#################################################
#
# Reviews Service
#
GET {{reviews-service}}/Reviews
###
POST {{reviews-service}}/Reviews
Authorization: Basic {{$processEnv USER}}:
Content-Type: application/json
{"subject":"201", "title":"boo", "rating":3 }
#################################################
#
# Bookshop Services
#
GET {{bookshop}}/browse/Books/201/reviews?
&$select=rating,date,title
&$top=3
###
GET {{bookshop}}/browse/Books(201)?
&$select=ID,title,rating
&$expand=reviews
#################################################
#
# Orders Service, incl. draft choreography
#
@newOrderID = e939604c-ab83-4d4f-bdb6-95fe30b3773e
GET {{bookshop}}/orders/Orders
### Create order, still inactive
POST {{bookshop}}/orders/Orders
Content-Type: application/json
{"ID": "{{newOrderID}}"}
### Get inactive order. We have to specify `IsActiveEntity`.
GET {{bookshop}}/orders/Orders(ID={{newOrderID}},IsActiveEntity=false)
### Activate order using `.../<servicename>.draftActivate`
POST {{bookshop}}/orders/Orders(ID={{newOrderID}},IsActiveEntity=false)/OrdersService.draftActivate
Content-Type: application/json
### Get active order
GET {{bookshop}}/orders/Orders(ID={{newOrderID}},IsActiveEntity=true)
### Create author
POST {{bookshop}}/admin/Authors
Content-Type: application/json
Authorization: Basic alice:
{
"ID": 200,
"name": "William Shakespeare",
"dateOfBirth": "1564-04-26",
"dateOfDeath": "1616-04-23"
}

1
multitenancy/.cdsrc.json Normal file
View File

@@ -0,0 +1 @@
{}

33
multitenancy/.gitignore vendored Normal file
View File

@@ -0,0 +1,33 @@
# CAP multitenancy
_out
*.db
connection.properties
default-*.json
gen/
node_modules/
target/
# Web IDE, App Studio
.che/
.gen/
# MTA
*_mta_build_tmp
*.mtar
*.mta
mta_archives/
*mta-op*/
# Other
.DS_Store
*.orig
*.log
*.iml
*.flattened-pom.xml
*log*.txt
# IDEs
# .vscode
# .idea

20
multitenancy/.vscode/extensions.json vendored Normal file
View File

@@ -0,0 +1,20 @@
{
// See https://go.microsoft.com/fwlink/?LinkId=827846 to learn about workspace recommendations.
// Extension identifier format: ${publisher}.${name}. Example: vscode.csharp
// List of extensions which should be recommended for users of this workspace.
"recommendations": [
// >>>>>>>> Add CDS Editor here as soon it is available of vscode marketplace!,
"dbaeumer.vscode-eslint",
"esbenp.prettier-vscode",
"mechatroner.rainbow-csv",
"humao.rest-client",
"alexcvzz.vscode-sqlite",
"hbenl.vscode-mocha-test-adapter",
"sdras.night-owl"
],
// List of extensions recommended by VS Code that should not be recommended for users of this workspace.
"unwantedRecommendations": [
]
}

15
multitenancy/.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,15 @@
{
// 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": [
{
"command": "cds run --with-mocks --in-memory?",
"name": "cds run",
"request": "launch",
"type": "node-terminal",
"skipFiles": [ "<node_internals>/**" ]
}
]
}

7
multitenancy/.vscode/settings.json vendored Normal file
View File

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

25
multitenancy/.vscode/tasks.json vendored Normal file
View File

@@ -0,0 +1,25 @@
{
// 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",
"args": ["watch"],
"group": {
"kind": "build",
"isDefault": true
},
"problemMatcher": []
},
{
"type": "shell",
"label": "cds run",
"command": "cds",
"args": ["run", "--with-mocks", "--in-memory?"],
"problemMatcher": []
}
]
}

25
multitenancy/README.md Normal file
View File

@@ -0,0 +1,25 @@
# Getting Started
Welcome to your new project.
It contains these folders and files, following our recommended project layout:
File or Folder | Purpose
---------|----------
`app/` | content for UI frontends goes 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 VS Code simply choose _**Terminal** > Run Task > cds watch_)
- Start adding content, for example, a [db/schema.cds](db/schema.cds).
## Learn More
Learn more at https://cap.cloud.sap/docs/get-started/.

View File

@@ -1,4 +1,4 @@
using CatalogService from '@capire/bookshop'; using CatalogService from '../../srv/cat-service';
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
// //

View File

@@ -2,8 +2,8 @@
Common Annotations shared by all apps Common Annotations shared by all apps
*/ */
using { sap.capire.bookshop as my } from '@capire/bookshop'; using { sap.capire.bookshop as my } from '../db/schema';
using { sap.common } from '@capire/common'; using { sap.common } from '../db/capire_common';
//////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////
// //

View File

@@ -0,0 +1,92 @@
////////////////////////////////////////////////////////////////////////////
//
// Note: this is designed for the OrdersService being co-located with
// bookshop. It does not work if OrdersService is run as a separate
// process, and is not intended to do so.
//
////////////////////////////////////////////////////////////////////////////
using { OrdersService } from '../../srv/orders-service';
@odata.draft.enabled
annotate OrdersService.Orders with @(
UI: {
SelectionFields: [ createdAt, createdBy ],
LineItem: [
{Value: OrderNo, Label:'OrderNo'},
// {Value: buyer, Label:'Customer'}, we do not need this, because we want extend it later
{Value: createdAt, Label:'Date'}
],
HeaderInfo: {
TypeName: 'Order', TypeNamePlural: 'Orders',
Title: {
Label: 'Order number ', //A label is possible but it is not considered on the ObjectPage yet
Value: OrderNo
},
Description: {Value: createdBy}
},
Identification: [ //Is the main field group
{Value: createdBy, Label:'Customer'},
{Value: createdAt, Label:'Date'},
{Value: OrderNo },
],
HeaderFacets: [
{$Type: 'UI.ReferenceFacet', Label: '{i18n>Created}', Target: '@UI.FieldGroup#Created'},
{$Type: 'UI.ReferenceFacet', Label: '{i18n>Modified}', Target: '@UI.FieldGroup#Modified'},
],
Facets: [
{$Type: 'UI.ReferenceFacet', Label: '{i18n>Details}', Target: '@UI.FieldGroup#Details'},
{$Type: 'UI.ReferenceFacet', Label: '{i18n>OrderItems}', Target: 'Items/@UI.LineItem'},
],
FieldGroup#Details: {
Data: [
{Value: currency_code, Label:'Currency'}
]
},
FieldGroup#Created: {
Data: [
{Value: createdBy},
{Value: createdAt},
]
},
FieldGroup#Modified: {
Data: [
{Value: modifiedBy},
{Value: modifiedAt},
]
},
},
) {
createdAt @UI.HiddenFilter:false;
createdBy @UI.HiddenFilter:false;
};
annotate OrdersService.Orders_Items with @(
UI: {
LineItem: [
{Value: product_ID, Label:'Product ID'},
{Value: title, Label:'Product Title'},
{Value: price, Label:'Unit Price'},
{Value: amount, Label:'Quantity'},
],
Identification: [ //Is the main field group
{Value: amount, Label:'Amount'},
{Value: title, Label:'Product'},
{Value: price, Label:'Unit Price'},
],
Facets: [
{$Type: 'UI.ReferenceFacet', Label: '{i18n>OrderItems}', Target: '@UI.Identification'},
],
},
) {
amount @(
Common.FieldControl: #Mandatory
);
};

View File

@@ -0,0 +1,8 @@
sap.ui.define(["sap/fe/core/AppComponent"], function(AppComponent) {
"use strict";
return AppComponent.extend("orders.Component", {
metadata: { manifest: "json" }
});
});
/* eslint no-undef:0 */

View File

@@ -0,0 +1,11 @@
# This is the resource bundle of itelo
# __ldi.translation.uuid=c3431418-9caf-11e8-98d0-529269fb1459
# JCI app descriptor contains lower case TITLE
appTitle=Bookshop Sample
# JCI app descriptor contains lower case DESCRIPTION
appSubTitle=CAP Sample Application
# JCI app descriptor contains lower case DESCRIPTION
appDescription=CDS Sample Service

View File

@@ -0,0 +1,170 @@
{
"_version": "1.8.0",
"sap.app": {
"id": "orders",
"type": "application",
"title": "Order Books",
"description": "Sample Application",
"i18n": "i18n/i18n.properties",
"dataSources": {
"OrdersService": {
"uri": "/orders/",
"type": "OData",
"settings": {
"odataVersion": "4.0"
}
}
},
"-sourceTemplate": {
"id": "ui5template.basicSAPUI5ApplicationProject",
"-id": "ui5template.smartTemplate",
"-version": "1.40.12"
}
},
"sap.ui5": {
"dependencies": {
"libs": {
"sap.fe.templates": {}
}
},
"models": {
"i18n": {
"type": "sap.ui.model.resource.ResourceModel",
"uri": "i18n/i18n.properties"
},
"": {
"dataSource": "OrdersService",
"settings": {
"synchronizationMode": "None",
"operationMode": "Server",
"autoExpandSelect" : true,
"earlyRequests": true,
"groupProperties": {
"default": {
"submit": "Auto"
}
}
}
}
},
"routing": {
"routes": [
{
"pattern": ":?query:",
"name": "OrdersList",
"target": "OrdersList"
},
{
"pattern": "Orders({key}):?query:",
"name": "OrdersDetails",
"target": "OrdersDetails"
},
{
"pattern": "Orders({boo})/Items({boo2}):?query:",
"name": "OrderItemsDetails",
"target": "OrderItemsDetails"
},
{
"pattern": "Books({key}):?query:",
"name": "BooksDetails",
"target": "BooksDetails"
}
],
"targets": {
"OrdersList": {
"type": "Component",
"id": "OrdersList",
"name": "sap.fe.templates.ListReport",
"options": {
"settings" : {
"entitySet" : "Orders",
"navigation" : {
"Orders" : {
"detail" : {
"route" : "OrdersDetails"
}
}
}
}
}
},
"OrdersDetails": {
"type": "Component",
"id": "OrdersDetails",
"name": "sap.fe.templates.ObjectPage",
"options": {
"settings" : {
"entitySet": "Orders",
"navigation" : {
"Items": {
"detail": {
"route": "OrderItemsDetails"
}
},
"book": {
"detail": {
"route": "BooksDetails"
}
},
"dummy": {
"detail": {
"route": "BooksDetails"
}
}
}
}
}
},
"OrderItemsDetails": {
"type": "Component",
"id": "OrderItemsDetails",
"name": "sap.fe.templates.ObjectPage",
"options": {
"settings" : {
"entitySet": "Orders_Items"
}
}
},
"BooksDetails": {
"type": "Component",
"id": "BooksDetails",
"name": "sap.fe.templates.ObjectPage",
"options": {
"settings" : {
"entitySet": "Books",
"navigation": {
"author": {
"detail": {
"route": "AuthorsDetails"
}
}
}
}
}
},
"AuthorsDetails": {
"type": "Component",
"id": "AuthorsDetails",
"name": "sap.fe.templates.ObjectPage",
"options": {
"settings" : {
"entitySet": "Authors"
}
}
}
}
},
"contentDensities": {
"compact": true,
"cozy": true
}
},
"sap.ui": {
"technology": "UI5",
"fullWidth": false
},
"sap.fiori": {
"registrationIds": [],
"archeType": "transactional"
}
}

View File

@@ -0,0 +1,19 @@
{
"name": "approuter",
"version": "1.0.0",
"description": "",
"main": "index.js",
"devDependencies": {},
"engines": {
"node": "^12.0.0"
},
"scripts": {
"start": "node node_modules/@sap/approuter/approuter.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@sap/approuter": ">=9.0.2"
}
}

View File

@@ -4,9 +4,8 @@
using from './admin/fiori-service'; using from './admin/fiori-service';
using from './browse/fiori-service'; using from './browse/fiori-service';
using from './orders/fiori-service';
using from './common'; using from './common';
using from '@capire/common'; using from '../db/capire_common';
// only works in case of embedded orders service
using from '@capire/orders/app/orders/fiori-service';

View File

@@ -0,0 +1,28 @@
{
"welcomeFile": "/admin-fiori.html",
"authenticationMethod": "route",
"sessionTimeout": 30,
"logout": {
"logoutEndpoint": "/do/logout",
"logoutPage": "/"
},
"routes": [
{
"source": "^/((admin|browse|orders)/webapp/.*)$",
"target": "$1",
"localDir": ".",
"authenticationType": "xsuaa"
},
{
"source": "^(/[^/]+\\.html(\\?.*)?)$",
"target": "$1",
"localDir": ".",
"authenticationType": "xsuaa"
},
{
"source": "^.*$",
"destination": "srv-api",
"authenticationType": "xsuaa"
}
]
}

View File

@@ -0,0 +1,45 @@
using { sap } from '@sap/cds/common';
extend sap.common.Currencies with {
// Currencies.code = ISO 4217 alphabetic three-letter code
// with the first two letters being equal to ISO 3166 alphabetic country codes
// See also:
// [1] https://www.iso.org/iso-4217-currency-codes.html
// [2] https://www.currency-iso.org/en/home/tables/table-a1.html
// [3] https://www.ibm.com/support/knowledgecenter/en/SSZLC2_7.0.0/com.ibm.commerce.payments.developer.doc/refs/rpylerl2mst97.htm
numcode : Integer;
exponent : Integer; //> e.g. 2 --> 1 Dollar = 10^2 Cent
minor : String; //> e.g. 'Cent'
}
/**
* The Code Lists below are designed as optional extensions to
* the base schema. Switch them on by adding an Association to
* one of the code list entities in your models or by:
* annotate sap.common.Countries with @cds.persistence.skip:false;
*/
context sap.common_countries {
extend sap.common.Countries {
regions : Composition of many Regions on regions._parent = $self.code;
}
entity Regions : sap.common.CodeList {
key code : String(5); // ISO 3166-2 alpha5 codes, e.g. DE-BW
children : Composition of many Regions on children._parent = $self.code;
cities : Composition of many Cities on cities.region = $self;
_parent : String(11);
}
entity Cities : sap.common.CodeList {
key code : String(11);
region : Association to Regions;
districts : Composition of many Districts on districts.city = $self;
}
entity Districts : sap.common.CodeList {
key code : String(11);
city : Association to Cities;
}
}

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
Internal Server Error - Bruno's Gitea
500 Internal Server Error

Gitea Version: 1.24.4