@sap/cds-dk 9.4.3 → 9.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/bin/compile/index.js +1 -1
  3. package/bin/export.js +1 -1
  4. package/bin/help.js +0 -1
  5. package/bin/import.js +8 -3
  6. package/bin/repl.js +7 -11
  7. package/bin/up.js +150 -20
  8. package/bin/util/containerize.js +66 -25
  9. package/bin/version.js +4 -4
  10. package/lib/bind/k8s.js +1 -1
  11. package/lib/build/plugins/helm/files/templates/_deployment_helpers.tpl +1 -1
  12. package/lib/build/plugins/helm/index.js +1 -1
  13. package/lib/build/provider/hana/2migration.js +16 -24
  14. package/lib/build/provider/hana/index.js +1 -1
  15. package/lib/build/provider/hana/template/.hdiconfig-all +7 -1
  16. package/lib/build/provider/hana/template/package.json +1 -1
  17. package/lib/build/provider/internalBuildPlugin.js +15 -1
  18. package/lib/build/provider/java/index.js +12 -1
  19. package/lib/build/provider/mtx-sidecar/index.js +2 -1
  20. package/lib/build/provider/nodejs/index.js +2 -1
  21. package/lib/build/util.js +3 -3
  22. package/lib/compile/to_openapi.js +1 -5
  23. package/lib/import/common.js +2 -1
  24. package/lib/import/odata/ParserContext.js +1 -0
  25. package/lib/import/odata/v4parser.js +48 -3
  26. package/lib/import/openapi/importOpenAPI.js +6 -1
  27. package/lib/init/constants.js +1 -1
  28. package/lib/init/index.js +15 -6
  29. package/lib/init/merge.js +16 -0
  30. package/lib/init/projectReader.js +19 -4
  31. package/lib/init/registries/mta.js +2 -2
  32. package/lib/init/template/ams/index.js +1 -1
  33. package/lib/init/template/app-frontend/files/app-package.json.hbs +1 -7
  34. package/lib/init/template/app-frontend/files/ui5.yaml.hbs +20 -1
  35. package/lib/init/template/app-frontend/index.js +0 -4
  36. package/lib/init/template/application-logging/index.js +9 -14
  37. package/lib/init/template/approuter/files/mta.yaml.hbs +0 -2
  38. package/lib/init/template/approuter/index.js +6 -7
  39. package/lib/init/template/cloud-logging/index.js +2 -3
  40. package/lib/init/template/containerize/files/containerize.yaml.hbs +17 -2
  41. package/lib/init/template/containerize/index.js +0 -4
  42. package/lib/init/template/data/as-json.js +18 -20
  43. package/lib/init/template/dynatrace/index.js +0 -2
  44. package/lib/init/template/github-actions/files/workflows/cf.yaml.hbs +16 -1
  45. package/lib/init/template/github-actions/files/workflows/test.yaml.hbs +20 -0
  46. package/lib/init/template/github-actions/index.js +5 -8
  47. package/lib/init/template/hana/files/db/package.json +2 -2
  48. package/lib/init/template/hana/files/mta.yaml.hbs +0 -4
  49. package/lib/init/template/hana/index.js +3 -5
  50. package/lib/init/template/helm/index.js +2 -7
  51. package/lib/init/template/helm-unified-runtime/index.js +0 -4
  52. package/lib/init/template/html5-repo/files/app-package.json.hbs +1 -7
  53. package/lib/init/template/html5-repo/files/ui5.yaml.hbs +20 -1
  54. package/lib/init/template/html5-repo/index.js +6 -12
  55. package/lib/init/template/ias/files/values.yaml.hbs +6 -6
  56. package/lib/init/template/ias/index.js +12 -20
  57. package/lib/init/template/kyma/index.js +14 -1
  58. package/lib/init/template/malware-scanner/files/mta.yaml.hbs +3 -1
  59. package/lib/init/template/malware-scanner/files/values.yaml +3 -1
  60. package/lib/init/template/multitenancy/files/mta.yaml.hbs +1 -3
  61. package/lib/init/template/multitenancy/files/values.yaml.hbs +8 -0
  62. package/lib/init/template/multitenancy/index.js +8 -3
  63. package/lib/init/template/nodejs/files/package.json.hbs +1 -1
  64. package/lib/init/template/pipeline/files/app-package.json.hbs +1 -7
  65. package/lib/init/template/pipeline/files/ui5.yaml.hbs +20 -1
  66. package/lib/init/template/pipeline/index.js +1 -2
  67. package/lib/init/template/portal/files/mta.yaml.hbs +5 -3
  68. package/lib/init/template/portal/index.js +3 -6
  69. package/lib/init/template/sample/files/_i18n/i18n_de.properties +12 -0
  70. package/lib/init/template/sample/files/_i18n/i18n_en.properties +21 -0
  71. package/lib/init/template/sample/files/_i18n/i18n_fr.properties +20 -0
  72. package/lib/init/template/sample/files/_i18n/messages_de.properties +34 -0
  73. package/lib/init/template/sample/files/_i18n/messages_en.properties +34 -0
  74. package/lib/init/template/sample/files/_i18n/messages_fr.properties +34 -0
  75. package/lib/init/template/sample/files/app/_i18n/i18n_de.properties +0 -26
  76. package/lib/init/template/sample/files/app/_i18n/i18n_en.properties +8 -0
  77. package/lib/init/template/sample/files/app/admin-authors/fiori-service.cds +52 -0
  78. package/lib/init/template/sample/files/app/admin-authors/webapp/Component.js.hbs +3 -0
  79. package/lib/init/template/sample/files/app/admin-authors/webapp/i18n/i18n.properties +11 -0
  80. package/lib/init/template/sample/files/app/admin-authors/webapp/manifest.json +130 -0
  81. package/lib/init/template/sample/files/app/admin-books/fiori-service.cds +81 -88
  82. package/lib/init/template/sample/files/app/admin-books/webapp/Component.js.hbs +3 -0
  83. package/lib/init/template/sample/files/app/admin-books/webapp/i18n/i18n.properties +10 -2
  84. package/lib/init/template/sample/files/app/admin-books/webapp/manifest.json +24 -48
  85. package/lib/init/template/sample/files/app/appconfig/fioriSandboxConfig.json +54 -3
  86. package/lib/init/template/sample/files/app/browse/fiori-service.cds +30 -30
  87. package/lib/init/template/sample/files/app/browse/webapp/Component.js.hbs +3 -0
  88. package/lib/init/template/sample/files/app/browse/webapp/i18n/i18n.properties +10 -3
  89. package/lib/init/template/sample/files/app/browse/webapp/manifest.json +18 -23
  90. package/lib/init/template/sample/files/app/common.cds +126 -158
  91. package/lib/init/template/sample/files/app/fiori-apps.html +30 -0
  92. package/lib/init/template/sample/files/app/genres/fiori-service.cds +33 -0
  93. package/lib/init/template/sample/files/app/genres/tree-view.cds +42 -0
  94. package/lib/init/template/sample/files/app/genres/value-help.cds +6 -0
  95. package/lib/init/template/sample/files/app/genres/webapp/Component.js.hbs +3 -0
  96. package/lib/init/template/sample/files/app/genres/webapp/i18n/i18n.properties +4 -0
  97. package/lib/init/template/sample/files/app/genres/webapp/i18n/i18n_de.properties +2 -0
  98. package/lib/init/template/sample/files/app/genres/webapp/manifest.json +126 -0
  99. package/lib/init/template/sample/files/app/services.cds +6 -2
  100. package/lib/init/template/sample/files/db/currencies.cds +13 -0
  101. package/lib/init/template/sample/files/db/data/sap.capire.bookshop-Books.csv +5 -5
  102. package/lib/init/template/sample/files/db/data/{sap.capire.bookshop-Books_texts.csv → sap.capire.bookshop-Books.texts.csv} +4 -4
  103. package/lib/init/template/sample/files/db/data/sap.capire.bookshop-Genres.csv +42 -15
  104. package/lib/init/template/sample/files/db/data/sap.common-Currencies.csv +12 -0
  105. package/lib/init/template/sample/files/db/data/sap.common-Currencies.texts.csv +15 -0
  106. package/lib/init/template/sample/files/db/hana/index.cds +10 -0
  107. package/lib/init/template/sample/files/db/schema.cds +35 -22
  108. package/lib/init/template/sample/files/db/sqlite/index.cds +10 -0
  109. package/lib/init/template/sample/files/package.json.hbs +14 -1
  110. package/lib/init/template/sample/files/srv/access-control.cds +3 -0
  111. package/lib/init/template/sample/files/srv/admin-service.cds +3 -2
  112. package/lib/init/template/sample/files/srv/cat-service.cds +7 -11
  113. package/lib/init/template/sample/index.js +26 -17
  114. package/lib/init/template/telemetry/index.js +1 -3
  115. package/lib/init/template/typescript/files/package.json +1 -1
  116. package/lib/init/template/workzone-standard/files/mta.yaml.hbs +0 -5
  117. package/lib/init/template/workzone-standard/index.js +0 -1
  118. package/lib/init/template/xsuaa/files/mta.yaml.hbs +4 -0
  119. package/lib/init/template/xsuaa/index.js +3 -5
  120. package/lib/lint/Linter.js +10 -4
  121. package/lib/lint/eslintHelp.json +1 -1
  122. package/lib/mtx/tenant_action.js +12 -4
  123. package/lib/util/checksum.js +32 -0
  124. package/lib/util/question.js +60 -7
  125. package/npm-shrinkwrap.json +59 -35
  126. package/package.json +2 -2
  127. package/lib/init/template/app-frontend/files/ui5-deploy.yaml.hbs +0 -25
  128. package/lib/init/template/github-actions/files/cf-setup/action.yaml +0 -53
  129. package/lib/init/template/html5-repo/files/ui5-deploy.yaml.hbs +0 -25
  130. package/lib/init/template/pipeline/files/ui5-deploy.yaml.hbs +0 -25
  131. package/lib/init/template/sample/files/app/_i18n/i18n.properties +0 -29
  132. package/lib/init/template/sample/files/app/admin-books/webapp/Component.js +0 -8
  133. package/lib/init/template/sample/files/app/admin-books/webapp/i18n/i18n_de.properties +0 -3
  134. package/lib/init/template/sample/files/app/admin-books/webapp/i18n/i18n_en.properties +0 -3
  135. package/lib/init/template/sample/files/app/browse/webapp/Component.js +0 -7
  136. package/lib/init/template/sample/files/app/browse/webapp/i18n/i18n_de.properties +0 -3
  137. package/lib/init/template/sample/files/app/browse/webapp/i18n/i18n_en.properties +0 -4
  138. package/lib/init/template/sample/files/app/index.html +0 -32
@@ -8,7 +8,7 @@ modules:
8
8
  {{#isJava}}
9
9
  - name: mtx-api
10
10
  properties:
11
- CDS_MULTITENANCY_SIDECAR_URL: ~{mtx-url}
11
+ CDS_MULTITENANCY_SIDECAR_URL: {{^hasIas}}~{mtx-url}{{/hasIas}}{{#hasIas}}~{mtx-cert-url}{{/hasIas}}
12
12
  {{/isJava}}
13
13
  provides:
14
14
  - name: srv-api # required by consumers of CAP services (e.g. approuter)
@@ -93,7 +93,6 @@ resources:
93
93
  onUpdateDependenciesAsync: true
94
94
  callbackTimeoutMillis: 300000 # Increase if your deployments are taking longer than that
95
95
 
96
- {{#hasIas}}
97
96
  - name: {{appName}}-sms
98
97
  type: org.cloudfoundry.managed-service
99
98
  parameters:
@@ -119,4 +118,3 @@ resources:
119
118
  requires:
120
119
  - name: {{#isJava}}srv-api{{/isJava}}{{^isJava}}mtx-api{{/isJava}}
121
120
  processed-after: [{{#hasXsuaa}}{{appName}}-registry, {{/hasXsuaa}}{{appName}}-ias]
122
- {{/hasIas}}
@@ -49,10 +49,18 @@ subscription-manager:
49
49
  servicePlanName: provider
50
50
  parameters:
51
51
  appCallbacks:
52
+ {{#isNodejs}}
52
53
  dependenciesCallbacks:
53
54
  {{#literal}}url: https://{{ .Release.Name }}-sidecar-{{ .Release.Namespace }}.cert.{{ .Values.global.domain }}/-/cds/sms-provisioning/dependencies/{app_tid}{{/literal}}
54
55
  subscriptionCallbacks:
55
56
  {{#literal}}url: https://{{ .Release.Name }}-sidecar-{{ .Release.Namespace }}.cert.{{ .Values.global.domain }}/-/cds/sms-provisioning/tenant/{app_tid}{{/literal}}
57
+ {{/isNodejs}}
58
+ {{#isJava}}
59
+ dependenciesCallbacks:
60
+ {{#literal}}url: https://{{ .Release.Name }}-srv-{{ .Release.Namespace }}.cert.{{ .Values.global.domain }}/mt/sms/subscriptions/tenants/{app_tid}/dependencies{{/literal}}
61
+ subscriptionCallbacks:
62
+ {{#literal}}url: https://{{ .Release.Name }}-srv-{{ .Release.Namespace }}.cert.{{ .Values.global.domain }}/mt/sms/subscriptions/tenants/{app_tid}{{/literal}}
63
+ {{/isJava}}
56
64
  appName: {{appName}}
57
65
  applicationType: application
58
66
  category: "CAP Application"
@@ -55,10 +55,13 @@ module.exports = class MultitenancyTemplate extends require('../../plugin') {
55
55
  if (hasIas) services.push(subscriptionManager)
56
56
  if (!hasIas || hasXsuaa) services.push(saasRegistry)
57
57
  const apis = [srvApi4(srv), providedMtxApiSidecar4(mtxSidecar)]
58
- if (isJava) apis.push(requiredMtxSidecarApi4(srv))
58
+ if (isJava) {
59
+ const name = hasIas ? '~{mtx-cert-url}' : '~{mtx-url}'
60
+ apis.push(requiredMtxSidecarApi4(srv, name))
61
+ }
59
62
  const additions = [...modules, ...services, ...apis]
60
63
  const relationships = []
61
- if (addXsuaa) {
64
+ if (hasXsuaa) {
62
65
  relationships.push({
63
66
  insert: [saasRegistry, 'name'],
64
67
  into: [isJava ? srv : mtxSidecar, 'requires', 'name']
@@ -89,7 +92,9 @@ module.exports = class MultitenancyTemplate extends require('../../plugin') {
89
92
  }}},
90
93
  ...(isJava) && { srv: { env: {
91
94
  CDS_MULTITENANCY_APPUI_URL: `https://{{ .Release.Name }}-${applicationWorkload}-{{ .Release.Namespace }}.{{ .Values.global.domain }}`,
92
- CDS_MULTITENANCY_SIDECAR_URL: `https://{{ .Release.Name }}-sidecar-{{ .Release.Namespace }}.{{ .Values.global.domain }}`
95
+ CDS_MULTITENANCY_SIDECAR_URL: hasIas ?
96
+ `https://{{ .Release.Name }}-sidecar-{{ .Release.Namespace }}.cert.{{ .Values.global.domain }}` :
97
+ `https://{{ .Release.Name }}-sidecar-{{ .Release.Namespace }}.{{ .Values.global.domain }}`
93
98
  }}}
94
99
  }).into('chart/values.yaml',{ forceOverwrite: true })
95
100
  }
@@ -13,4 +13,4 @@
13
13
  "start": "cds-serve"
14
14
  },
15
15
  "private": true
16
- }
16
+ }
@@ -3,18 +3,12 @@
3
3
  "version": "1.0.0",
4
4
  "main": "webapp/index.html",
5
5
  "scripts": {
6
- "build": "ui5 build preload --clean-dest --config ui5-deploy.yaml",
7
- "build-local": "ui5 build preload --clean-dest",
6
+ "build": "ui5 build preload --clean-dest",
8
7
  "start": "ui5 serve"
9
8
  },
10
9
  "devDependencies": {
11
10
  "@ui5/cli": "^4",
12
11
  "ui5-task-zipper": "^3"
13
- },
14
- "ui5": {
15
- "dependencies": [
16
- "ui5-task-zipper"
17
- ]
18
12
  }
19
13
  {{/hasUI5}}
20
14
  }
@@ -1,6 +1,25 @@
1
1
  ---
2
2
  # yaml-language-server: $schema=https://sap.github.io/ui5-tooling/schema/ui5.yaml.json
3
- specVersion: '3.1'
3
+ specVersion: '4.0'
4
4
  metadata:
5
5
  name: {{app}}
6
6
  type: application
7
+ resources:
8
+ configuration:
9
+ propertiesFileSourceEncoding: UTF-8
10
+ builder:
11
+ resources:
12
+ excludes:
13
+ - "/test/**"
14
+ - "/localService/**"
15
+ customTasks:
16
+ - name: ui5-task-zipper
17
+ afterTask: generateVersionInfo
18
+ configuration:
19
+ archiveName: {{app}}
20
+ additionalFiles:
21
+ - xs-app.json
22
+ {{#isTypescript}}
23
+ - name: ui5-tooling-transpile-task
24
+ afterTask: replaceVersion
25
+ {{/isTypescript}}
@@ -38,8 +38,7 @@ module.exports = class PipelineTemplate extends require('../../plugin') {
38
38
  project.app = app
39
39
  await Promise.all([
40
40
  merge(__dirname, 'files/app-package.json.hbs').into(join(appPath, app, 'package.json'), { project }),
41
- merge(__dirname, 'files/ui5.yaml.hbs').into(join(appPath, app, 'ui5.yaml'), { project }),
42
- merge(__dirname, 'files/ui5-deploy.yaml.hbs').into(join(appPath, app, 'ui5-deploy.yaml'), { project })
41
+ merge(__dirname, 'files/ui5.yaml.hbs').into(join(appPath, app, 'ui5.yaml'), { project })
43
42
  ])
44
43
  }
45
44
  }
@@ -43,9 +43,11 @@ modules:
43
43
  {{#hasIas}}
44
44
  - name: {{appName}}-ias
45
45
  parameters:
46
- config:
47
- credential-type: X509_GENERATED
48
- app-identifier: portal-deployer
46
+ service-key:
47
+ config:
48
+ credential-type: X509_GENERATED
49
+ app-identifier: portal-deployer
50
+ name: {{appName}}-portal-deployer-ias-key
49
51
  {{/hasIas}}
50
52
  - name: {{appName}}-html5-repo-host
51
53
  - name: {{appName}}-app-deployer
@@ -28,7 +28,7 @@ module.exports = class PortalTemplate extends require('../../plugin') {
28
28
 
29
29
  async combine() {
30
30
  const project = readProject()
31
- const { appName, isJava, addMta, hasMta, srvPath, addHtml5Repo, addXsuaa, addApprouter, addMultitenancy, addHelm, addHelmUnifiedRuntime, addContainerize, hasApprouter, hasHtml5Repo } = project
31
+ const { appName, isJava, addMta, hasMta, srvPath, addHtml5Repo, addXsuaa, addApprouter, addMultitenancy, addHelm, addHelmUnifiedRuntime, addContainerize, hasApprouter, hasHtml5Repo, hasMultitenancy, hasXsuaa } = project
32
32
 
33
33
  if (addMultitenancy) {
34
34
  await merge(__dirname, 'files/package.sidecar.json').into('mtx/sidecar/package.json')
@@ -45,15 +45,13 @@ module.exports = class PortalTemplate extends require('../../plugin') {
45
45
  into: [portalDeployer, 'requires', 'name']
46
46
  }]
47
47
 
48
- if (addXsuaa) {
49
- additions.push(xsuaa)
48
+ if (hasXsuaa) {
50
49
  relationships.push({
51
50
  insert: [xsuaa, 'name'],
52
51
  into: [portalDeployer, 'requires', 'name']
53
52
  })
54
53
  }
55
54
  if (hasHtml5Repo) {
56
- additions.push(html5RepoHost)
57
55
  relationships.push({
58
56
  insert: [html5RepoHost, 'name'],
59
57
  into: [portalDeployer, 'requires', 'name']
@@ -61,14 +59,13 @@ module.exports = class PortalTemplate extends require('../../plugin') {
61
59
  }
62
60
 
63
61
  if (hasApprouter) {
64
- additions.push(approuter)
65
62
  relationships.push({
66
63
  insert: [portal, 'name'],
67
64
  into: [approuter, 'requires', 'name']
68
65
  })
69
66
  }
70
67
 
71
- if (addMultitenancy) {
68
+ if (hasMultitenancy) {
72
69
  relationships.push({
73
70
  insert: [portal, 'name'],
74
71
  into: [isJava ? srv : mtxSidecar4('gen/mtx/sidecar'), 'requires', 'name']
@@ -0,0 +1,12 @@
1
+ Books = Bücher
2
+ Book = Buch
3
+ Title = Titel
4
+ Description = Beschreibung
5
+ Stock = Bestand
6
+ Image = Bild
7
+ Price = Preis
8
+ Currency = Währung
9
+
10
+ Authors = Autoren
11
+ Author = Autor
12
+ AuthorID = ID des Autors
@@ -0,0 +1,21 @@
1
+ Books = Books
2
+ Book = Book
3
+ ID = ID
4
+ Title = Title
5
+ Description = Description
6
+ Stock = Stock
7
+ Image = Image
8
+ Price = Price
9
+ Currency = Currency
10
+
11
+ Authors = Authors
12
+ Author = Author
13
+ AuthorID = Author''s ID
14
+ Name = Name
15
+ DateOfBirth = Date of Birth
16
+ DateOfDeath = Date of Death
17
+ PlaceOfBirth = Place of Birth
18
+ PlaceOfDeath = Place of Death
19
+
20
+ Genres = Genres
21
+ Genre = Genre
@@ -0,0 +1,20 @@
1
+ Books = Livres
2
+ Book = Livre
3
+ Title = Titre
4
+ Description = Description
5
+ Stock = Action
6
+ Image = Image
7
+ Price = Prix
8
+ Currency = Devise
9
+
10
+ Authors = Auteurs
11
+ Author = Auteur
12
+ AuthorID = ID de l''auteur
13
+ Name = Nom
14
+ DateOfBirth = Date de naissance
15
+ DateOfDeath = Date de décès
16
+ PlaceOfBirth = Lieu de naissance
17
+ PlaceOfDeath = Lieu de décès
18
+
19
+ Genres = Genre
20
+ Genre = Genre
@@ -0,0 +1,34 @@
1
+ 400 = Ungültige Anfrage
2
+ 401 = Nicht autorisiert
3
+ 403 = Verboten
4
+ 404 = Nicht gefunden
5
+ 405 = Methode nicht zulässig
6
+ 406 = Nicht akzeptabel
7
+ 407 = Proxy-Authentifizierung erforderlich
8
+ 408 = Anfrage-Timeout
9
+ 409 = Konflikt
10
+ 410 = Weg
11
+ 411 = Erforderliche Länge
12
+ 412 = Vorbedingung fehlgeschlagen
13
+ 413 = Nutzlast zu groß
14
+ 414 = URI zu lang
15
+ 415 = Nicht unterstützter Medientyp
16
+ 416 = Bereich nicht erfüllbar
17
+ 417 = Erwartung fehlgeschlagen
18
+ 422 = Nicht verarbeitbarer Inhalt
19
+ 424 = Fehlgeschlagene Abhängigkeit
20
+ 428 = Vorbedingung erforderlich
21
+ 429 = Zu viele Anfragen
22
+ 431 = Anfrage-Headerfelder zu groß
23
+ 451 = Aus rechtlichen Gründen nicht verfügbar
24
+ 500 = Interner Serverfehler
25
+ 501 = Der Server unterstützt die zur Erfüllung der Anfrage erforderliche Funktionalität nicht
26
+ 502 = Ungültiges Gateway
27
+ 503 = Dienst nicht verfügbar
28
+ 504 = Gateway-Timeout
29
+
30
+ ASSERT_RANGE = Wert {0} liegt nicht im angegebenen Bereich [{1}, {2}]
31
+ ASSERT_FORMAT = Wert "{0}" liegt nicht im angegebenen Format "{1}"
32
+ ASSERT_ARRAY = Wert muss ein Array sein
33
+ ASSERT_ENUM = Wert {0} ist gemäß Enumerationsdeklaration {{1}} ungültig
34
+ ASSERT_NOT_NULL = Wert ist erforderlich
@@ -0,0 +1,34 @@
1
+ 400 = Bad Request
2
+ 401 = Unauthorized
3
+ 403 = Forbidden
4
+ 404 = Not Found
5
+ 405 = Method Not Allowed
6
+ 406 = Not Acceptable
7
+ 407 = Proxy Authentication Required
8
+ 408 = Request Timeout
9
+ 409 = Conflict
10
+ 410 = Gone
11
+ 411 = Length Required
12
+ 412 = Precondition Failed
13
+ 413 = Payload Too Large
14
+ 414 = URI Too Long
15
+ 415 = Unsupported Media Type
16
+ 416 = Range Not Satisfiable
17
+ 417 = Expectation Failed
18
+ 422 = Unprocessable Content
19
+ 424 = Failed Dependency
20
+ 428 = Precondition Required
21
+ 429 = Too Many Requests
22
+ 431 = Request Header Fields Too Large
23
+ 451 = Unavailable For Legal Reasons
24
+ 500 = Internal Server Error
25
+ 501 = The server does not support the functionality required to fulfill the request
26
+ 502 = Bad Gateway
27
+ 503 = Service Unavailable
28
+ 504 = Gateway Timeout
29
+
30
+ ASSERT_RANGE = Value {0} is not in specified range [{1}, {2}]
31
+ ASSERT_FORMAT = Value "{0}" is not in specified format "{1}"
32
+ ASSERT_ARRAY = Value must be an array
33
+ ASSERT_ENUM = Value {0} is invalid according to enum declaration {{1}}
34
+ ASSERT_NOT_NULL = Value is required
@@ -0,0 +1,34 @@
1
+ 400 = Requête incorrecte
2
+ 401 = Non autorisée
3
+ 403 = Interdite
4
+ 404 = Introuvable
5
+ 405 = Méthode non autorisée
6
+ 406 = Non acceptable
7
+ 407 = Authentification proxy requise
8
+ 408 = Délai d''expiration de la requête
9
+ 409 = Conflit
10
+ 410 = Disparu
11
+ 411 = Longueur requise
12
+ 412 = Échec de la condition préalable
13
+ 413 = Charge utile trop importante
14
+ 414 = URI trop longue
15
+ 415 = Type de média non pris en charge
16
+ 416 = Plage non satisfaisante
17
+ 417 = Échec de l''attente
18
+ 422 = Contenu non traitable
19
+ 424 = Dépendance échouée
20
+ 428 = Condition préalable requise
21
+ 429 = Trop de requêtes
22
+ 431 = Champs d''en-tête de requête trop importants
23
+ 451 = Indisponible pour des raisons juridiques
24
+ 500 = Erreur interne du serveur
25
+ 501 = Le serveur ne prend pas en charge la fonctionnalité requise pour répondre à la requête
26
+ 502 = Passerelle incorrecte
27
+ 503 = Service indisponible
28
+ 504 = Délai d''attente de la passerelle
29
+
30
+ ASSERT_RANGE = La valeur {0} n''est pas dans la plage spécifiée [{1}, {2}]
31
+ ASSERT_FORMAT = La valeur "{0}" n''est pas au format spécifié "{1}"
32
+ ASSERT_ARRAY = La valeur doit être un tableau
33
+ ASSERT_ENUM = La valeur {0} n''est pas valide selon la déclaration d''énumération {{1}}
34
+ ASSERT_NOT_NULL = La valeur est obligatoire
@@ -1,29 +1,3 @@
1
- Books = Bücher
2
- Book = Buch
3
- ID = ID
4
- Title = Titel
5
- Author = Autor
6
- Authors = Autoren
7
- AuthorID = ID des Autors
8
1
  AuthorName = Name des Autors
9
- Name = Name
10
2
  Age = Alter
11
- Stock = Bestand
12
- Order = Bestellung
13
- Orders = Bestellungen
14
3
  Price = Preis
15
- Genre = Genre
16
- Genres = Genres
17
- DateOfBirth = Geburtsdatum
18
- DateOfDeath = Todesdatum
19
- PlaceOfBirth = Geburtsort
20
- PlaceOfDeath = Todesort
21
- Details = Details
22
- Languages = Sprachen
23
- Currencies = Währungen
24
- MainGenre = Hauptgenre
25
- SubGenres = Subgenres
26
- Admin = Admin
27
- Translations = Übersetzungen
28
- General = Allgemein
29
- Locale = Gebietsschema
@@ -0,0 +1,8 @@
1
+ Age = Age
2
+ Lifetime = Lifetime
3
+
4
+ SubGenres = Subgenre
5
+
6
+ NumCode = Numeric Code
7
+ MinorUnit = Minor Unit
8
+ Exponent = Exponent
@@ -0,0 +1,52 @@
1
+ using {AdminService} from '../../srv/admin-service';
2
+
3
+ annotate AdminService.Authors with @odata.draft.enabled;
4
+
5
+ ////////////////////////////////////////////////////////////////////////////
6
+ //
7
+ // Authors Object Page
8
+ //
9
+ annotate AdminService.Authors with @(UI : {
10
+ HeaderInfo : {
11
+ TypeName : 'Author',
12
+ TypeNamePlural : 'Authors',
13
+ Description : {Value : lifetime}
14
+ },
15
+ Facets : [
16
+ {
17
+ $Type : 'UI.ReferenceFacet',
18
+ Label : '{i18n>Details}',
19
+ Target : '@UI.FieldGroup#Details'
20
+ },
21
+ {
22
+ $Type : 'UI.ReferenceFacet',
23
+ Label : '{i18n>Books}',
24
+ Target : 'books/@UI.LineItem'
25
+ },
26
+ ],
27
+ FieldGroup #Details : {Data : [
28
+ {Value : placeOfBirth},
29
+ {Value : placeOfDeath},
30
+ {Value : dateOfBirth},
31
+ {Value : dateOfDeath},
32
+ {
33
+ Value : age,
34
+ Label : '{i18n>Age}'
35
+ },
36
+ ]},
37
+ });
38
+
39
+
40
+ // Workaround to avoid errors for unknown db-specific calculated fields above
41
+ extend sap.capire.bookshop.Authors with {
42
+ virtual age : Integer;
43
+ virtual lifetime : String;
44
+ }
45
+
46
+ annotate AdminService.Authors with {
47
+ age @Common.Label : '{i18n>Age}';
48
+ lifetime @Common.Label : '{i18n>Lifetime}'
49
+ }
50
+
51
+ // Workaround for Fiori popup for asking user to enter a new UUID on Create
52
+ annotate AdminService.Authors with { ID @Core.Computed; }
@@ -0,0 +1,3 @@
1
+ sap.ui.define(["sap/fe/core/AppComponent"], ac => ac.extend("{{appName}}.{{app}}.Component", {
2
+ metadata:{ manifest: 'json' }
3
+ }))
@@ -0,0 +1,11 @@
1
+ # This is the resource bundle of itelo
2
+ # __ldi.translation.uuid=c3431418-9caf-11e8-98d0-529269fb1459
3
+
4
+ # JCI app descriptor contains lower case TITLE
5
+ appTitle=Manage Authors
6
+
7
+ # JCI app descriptor contains lower case DESCRIPTION
8
+ appSubTitle=CAP Sample Application
9
+
10
+ # JCI app descriptor contains lower case DESCRIPTION
11
+ appDescription=Bookshop Authors
@@ -0,0 +1,130 @@
1
+ {
2
+ "_version": "1.28.0",
3
+ "sap.app": {
4
+ "id": "authors",
5
+ "type": "application",
6
+ "title": "{{appTitle}}",
7
+ "description": "{{appDescription}}",
8
+ "i18n": "i18n/i18n.properties",
9
+ "applicationVersion": {
10
+ "version": "1.0.0"
11
+ },
12
+ "dataSources": {
13
+ "AdminService": {
14
+ "uri": "odata/v4/admin/",
15
+ "type": "OData",
16
+ "settings": {
17
+ "odataVersion": "4.0"
18
+ }
19
+ }
20
+ },
21
+ "crossNavigation": {
22
+ "inbounds": {
23
+ "Authors-manage": {
24
+ "signature": {
25
+ "parameters": {
26
+ "Books.author.ID": {
27
+ "renameTo": "ID"
28
+ }
29
+ },
30
+ "additionalParameters": "ignored"
31
+ },
32
+ "semanticObject": "Authors",
33
+ "action": "manage",
34
+ "title": "{{appTitle}}",
35
+ "info": "{{appInfo}}",
36
+ "subTitle": "{{appSubTitle}}",
37
+ "icon": "sap-icon://SAP-icons-TNT/user",
38
+ "indicatorDataSource": {
39
+ "dataSource": "AdminService",
40
+ "path": "Authors/$count",
41
+ "refresh": 1800
42
+ }
43
+ }
44
+ }
45
+ }
46
+ },
47
+ "sap.ui5": {
48
+ "dependencies": {
49
+ "minUI5Version": "1.136.0",
50
+ "libs": {
51
+ "sap.fe.templates": {}
52
+ }
53
+ },
54
+ "models": {
55
+ "i18n": {
56
+ "type": "sap.ui.model.resource.ResourceModel",
57
+ "uri": "i18n/i18n.properties"
58
+ },
59
+ "": {
60
+ "dataSource": "AdminService",
61
+ "settings": {
62
+ "synchronizationMode": "None",
63
+ "operationMode": "Server",
64
+ "autoExpandSelect": true,
65
+ "earlyRequests": true
66
+ }
67
+ }
68
+ },
69
+ "routing": {
70
+ "routes": [
71
+ {
72
+ "pattern": ":?query:",
73
+ "name": "AuthorsList",
74
+ "target": "AuthorsList"
75
+ },
76
+ {
77
+ "pattern": "Authors({key}):?query:",
78
+ "name": "AuthorsDetails",
79
+ "target": "AuthorsDetails"
80
+ }
81
+ ],
82
+ "targets": {
83
+ "AuthorsList": {
84
+ "type": "Component",
85
+ "id": "AuthorsList",
86
+ "name": "sap.fe.templates.ListReport",
87
+ "options": {
88
+ "settings": {
89
+ "entitySet": "Authors",
90
+ "liveMode": true,
91
+ "navigation": {
92
+ "Authors": {
93
+ "detail": {
94
+ "route": "AuthorsDetails"
95
+ }
96
+ }
97
+ }
98
+ }
99
+ }
100
+ },
101
+ "AuthorsDetails": {
102
+ "type": "Component",
103
+ "id": "AuthorsDetailsList",
104
+ "name": "sap.fe.templates.ObjectPage",
105
+ "options": {
106
+ "settings": {
107
+ "entitySet": "Authors"
108
+ }
109
+ }
110
+ }
111
+ }
112
+ },
113
+ "contentDensities": {
114
+ "compact": true,
115
+ "cozy": true
116
+ }
117
+ },
118
+ "sap.ui": {
119
+ "technology": "UI5",
120
+ "deviceTypes": {
121
+ "desktop": true,
122
+ "tablet": true,
123
+ "phone": true
124
+ }
125
+ },
126
+ "sap.fiori": {
127
+ "registrationIds": [],
128
+ "archeType": "transactional"
129
+ }
130
+ }