Compare commits

..

12 Commits

Author SHA1 Message Date
Christian Georgi
359bfebcac Update README.md 2020-04-20 17:11:12 +02:00
Christian Georgi
569546258d Add package-lock.json, fix readme 2020-04-02 16:13:48 +02:00
Christian Georgi
36981144d5 Update readme 2020-03-23 17:10:48 +01:00
D065023
66e043294f rm other packages 2020-03-20 10:53:45 +01:00
Dr. David Kunz
6f79882c57 Update package.json 2020-02-11 11:49:50 +01:00
D065023
62c11dee1a rm req 2020-01-29 15:21:32 +01:00
D065023
7ef5034b3e rm amqp 2020-01-29 15:20:42 +01:00
D065023
a8dee62f25 imported 2020-01-29 15:19:53 +01:00
D065023
85498a9875 added default 2020-01-29 15:18:20 +01:00
D065023
19b09645db rm imported 2020-01-29 15:04:51 +01:00
D065023
9861b05f2d imported 2020-01-29 14:57:38 +01:00
D065023
c58bcf905f rm eventing 2020-01-29 14:51:42 +01:00
8 changed files with 6 additions and 60 deletions

View File

@@ -11,7 +11,7 @@ In SAP Business Application Studio, open a terminal.
Then clone the repo with this specific branch: Then clone the repo with this specific branch:
```sh ```sh
git clone https://github.com/sap-samples/cloud-cap-samples projects/cloud-cap-samples -b openSAP-week4-unit3-final git clone https://github.com/sap-samples/cloud-cap-samples projects/cloud-cap-samples -b openSAP-week4-unit1-final
cd projects/cloud-cap-samples cd projects/cloud-cap-samples
``` ```

View File

@@ -35,8 +35,8 @@ entity Authors : managed {
entity Orders : cuid, managed { entity Orders : cuid, managed {
OrderNo : String @title : 'Order Number'; //> readable key OrderNo : String @title : 'Order Number'; //> readable key
status : Status default 'processing'; status : Status default 'processing';
Items : Composition of many OrderItems Items : Composition of many OrderItems
on Items.parent = $self; on Items.parent = $self;
total : Decimal(9, 2)@readonly; total : Decimal(9, 2)@readonly;
currency : Currency; currency : Currency;

View File

@@ -18,14 +18,7 @@
"requires": { "requires": {
"API_BUSINESS_PARTNER": { "API_BUSINESS_PARTNER": {
"kind": "odata", "kind": "odata",
"model": "srv/external/API_BUSINESS_PARTNER", "model": "srv/external/API_BUSINESS_PARTNER"
"--credentials": {
"prefix": "sap/S4HANAOD/c098/BO",
"destination": "cap-api098"
}
},
"--messaging": {
"kind": "enterprise-messaging"
} }
} }
} }

View File

@@ -1,6 +0,0 @@
PATCH http://localhost:4004/api-business-partner/A_BusinessPartner('ALICE')
Content-Type: application/json
{
"BusinessPartnerIsBlocked": true
}

View File

@@ -1,5 +1,4 @@
using { sap.capire.bookshop as my } from '../db/schema'; using { sap.capire.bookshop as my } from '../db/schema';
using { API_BUSINESS_PARTNER as external } from './external/API_BUSINESS_PARTNER.csn';
@path:'/browse' @path:'/browse'
service CatalogService { service CatalogService {
@@ -8,18 +7,6 @@ service CatalogService {
author.name as author author.name as author
} excluding { createdBy, modifiedBy }; } excluding { createdBy, modifiedBy };
@readonly entity BusinessPartners as projection on external.A_BusinessPartner {
key BusinessPartner as ID,
FirstName,
MiddleName,
LastName,
BusinessPartnerIsBlocked
};
event OrderBlocked {
ID: UUID;
};
@requires_: 'authenticated-user' @requires_: 'authenticated-user'
@insertonly entity Orders as projection on my.Orders; @insertonly entity Orders as projection on my.Orders;

View File

@@ -1,25 +1,10 @@
const cds = require('@sap/cds') const cds = require('@sap/cds')
/** Service implementation for CatalogService */ /** Service implementation for CatalogService */
module.exports = cds.service.impl(async function () { module.exports = cds.service.impl(function () {
const { Books, Orders, BusinessPartners } = this.entities const { Books, Orders } = this.entities
const bupaSrv = await cds.connect.to('API_BUSINESS_PARTNER')
this.after('READ', Books, each => each.stock > 111 && _addDiscount2(each, 11)) this.after('READ', Books, each => each.stock > 111 && _addDiscount2(each, 11))
this.before('CREATE', Orders, _reduceStock) this.before('CREATE', Orders, _reduceStock)
this.on('READ', BusinessPartners, req => bupaSrv.tx(req).run(req.query))
/** Block orders if business partner is blocked */
bupaSrv.on('BusinessPartner/Changed', async msg => {
console.log('>> Received BusinessPartner/Changed', msg.data)
const BUSINESSPARTNER = msg.data.KEY[0].BUSINESSPARTNER
const tx = cds.tx(msg)
const orders = await tx.run(SELECT('ID').from(Orders).where({ createdBy: BUSINESSPARTNER, status: 'processing' }))
if (!orders.length) return
const businessPartner = await bupaSrv.tx(msg).run(SELECT.one('BusinessPartnerIsBlocked').from(BusinessPartners).where({ ID: BUSINESSPARTNER }))
if (!businessPartner || !businessPartner.BusinessPartnerIsBlocked) return
await Promise.all(orders.map(order => tx.run(UPDATE(Orders).where(order).set({ status: 'blocked' }))))
orders.forEach(order => this.emit('OrderBlocked', order) && console.log('>> Emitted OrderBlocked', order))
})
/** Add some discount for overstocked books */ /** Add some discount for overstocked books */
function _addDiscount2(each, discount) { function _addDiscount2(each, discount) {

View File

@@ -1,9 +0,0 @@
module.exports = srv => {
srv.on(['CREATE', 'UPDATE', 'DELETE'], req => {
const payload = {
KEY: [{ BUSINESSPARTNER: req.data.BusinessPartner }]
}
srv.emit('BusinessPartner/Changed', payload)
console.log('<< Emitted BusinessPartner/Changed', payload)
})
}

View File

@@ -1,4 +0,0 @@
BusinessPartner;FirstName;MiddleName;LastName;BusinessPartnerIsBlocked
ALICE;Alice;In;Wonderland;false
BOB;Bob;The;Builder;false
JABBA;Jabba;The;Hutt;true
1 BusinessPartner FirstName MiddleName LastName BusinessPartnerIsBlocked
2 ALICE Alice In Wonderland false
3 BOB Bob The Builder false
4 JABBA Jabba The Hutt true