From 655e8e7cde1a13c09acbf9442bfd7f1a583944bd Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Mon, 7 Aug 2023 13:09:57 +0200 Subject: [PATCH 01/84] Added configuration for messaging with Apache Kafka --- mta-multi-tenant-messaging.yaml | 142 ++++++++++++++++++++++++ srv/pom.xml | 15 ++- srv/src/main/resources/application.yaml | 22 ++++ 3 files changed, 177 insertions(+), 2 deletions(-) create mode 100644 mta-multi-tenant-messaging.yaml diff --git a/mta-multi-tenant-messaging.yaml b/mta-multi-tenant-messaging.yaml new file mode 100644 index 00000000..23355329 --- /dev/null +++ b/mta-multi-tenant-messaging.yaml @@ -0,0 +1,142 @@ +_schema-version: '2.1' +ID: bookshop-mt-messaging +version: 1.0.0 +description: "Multitenant Bookshop CAP Java Project with UI" +parameters: + enable-parallel-deployments: true +modules: +# --------------------- SERVER MODULE ------------------------ + - name: bookshop-mt-messaging-srv +# ------------------------------------------------------------ + type: java + path: srv + parameters: + memory: 1024M + disk-quota: 512M + buildpack: sap_java_buildpack + properties: + CDS_MULTITENANCY_APPUI_TENANTSEPARATOR: "-" + JBP_CONFIG_COMPONENTS: "jres: ['com.sap.xs.java.buildpack.jre.SAPMachineJRE']" + JBP_CONFIG_SAP_MACHINE_JRE: '{ use_offline_repository: false, version: 17.+ }' + build-parameters: + builder: custom + commands: + - mvn clean package -DskipTests=true + build-result: target/*-exec.jar + requires: + - name: bookshop-mt-messaging-kafka + - name: bookshop-mt-messaging-service-manager + - name: bookshop-mt-messaging-uaa + - name: bookshop-mt-messaging-saas-registry + - name: mtx-api + properties: + CDS_MULTITENANCY_SIDECAR_URL: ~{mtx-url} + - name: app-api + properties: + CDS_MULTITENANCY_APPUI_URL: ~{app-url} + - name: cf-logging + provides: + - name: srv-api + properties: + srv-url: '${default-url}' +# --------------------- SIDECAR MODULE ----------------------- + - name: bookshop-mt-messaging-sidecar +# ------------------------------------------------------------ + type: nodejs + path: mtx/sidecar + parameters: + memory: 256M + disk-quota: 1024M + build-parameters: + builder: custom + build-result: gen + commands: + - npm run build + requires: + - name: bookshop-mt-messaging-srv + requires: + - name: bookshop-mt-messaging-service-manager + - name: bookshop-mt-messaging-uaa + - name: cf-logging + provides: + - name: mtx-api + properties: + mtx-url: ${default-url} +# --------------------- APPROUTER MODULE --------------------- + - name: bookshop-mt-messaging-app +# ------------------------------------------------------------ + type: approuter.nodejs + path: app + parameters: + memory: 256M + disk-quota: 512M + keep-existing-routes: true + properties: + TENANT_HOST_PATTERN: ^(.*)-${default-uri} # testing only, use custom domain with wildcard for production + requires: + - name: srv-api + group: destinations + properties: + name: backend + url: ~{srv-url} + forwardAuthToken: true + strictSSL: true + - name: bookshop-mt-messaging-uaa + provides: + - name: app-api + properties: + app-url: '${default-url}' + app-domain: '${domain}' +# --------------------- RESOURCES --------------------- +resources: +# ----------------------------------------------------- + - name: bookshop-mt-messaging-kafka + type: org.cloudfoundry.managed-service + parameters: + service: kafka + service-plan: reference + config: + advertisement: "3315eb2d-3142-4ed5-91ab-1c3665fef3a8" + - name: bookshop-mt-messaging-uaa + type: org.cloudfoundry.managed-service + parameters: + service: xsuaa + service-plan: application + path: ./xs-security-mt.json + config: # override xsappname as it needs to be unique + xsappname: bookshop-mt-messaging-${org}-${space} + oauth2-configuration: + redirect-uris: + - https://*.~{app-api/app-domain}/** + requires: + - name: app-api + - name: bookshop-mt-messaging-service-manager + type: org.cloudfoundry.managed-service + parameters: + service: service-manager + service-plan: container + - name: bookshop-mt-messaging-saas-registry + type: org.cloudfoundry.managed-service + parameters: + service: saas-registry + service-plan: application + config: + appName: bookshop-mt-messaging-${org}-${space} # this is the text on the tile + xsappname: bookshop-mt-messaging-${org}-${space} # this is the value from xsuaa.parameters.config.xsappname + appUrls: + getDependencies: ~{srv-api/srv-url}/mt/v1.0/subscriptions/dependencies + onSubscription: ~{srv-api/srv-url}/mt/v1.0/subscriptions/tenants/{tenantId} + onSubscriptionAsync: true + onUnSubscriptionAsync: true + onUpdateDependenciesAsync: true + callbackTimeoutMillis: 3600000 + displayName: bookshop-java + description: A simple CAP Java project. + category: 'Category' + requires: + - name: srv-api + - name: cf-logging + type: org.cloudfoundry.managed-service + parameters: + service: application-logs + service-plan: lite diff --git a/srv/pom.xml b/srv/pom.xml index 17132e65..0d5650d2 100644 --- a/srv/pom.xml +++ b/srv/pom.xml @@ -47,13 +47,24 @@ com.sap.cds - cds-feature-enterprise-messaging + cds-feature-remote-odata runtime + com.sap.cds - cds-feature-remote-odata + cds-feature-enterprise-messaging + runtime + + + com.sap.cds + cds-feature-kafka + runtime + + + com.sap.cds + cds-feature-message-queuing runtime diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index d0866ebd..d4b67b23 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -95,6 +95,28 @@ cds: name: "myself" suffix: "/api" +--- +spring: + config.activate.on-profile: kafka-messaging-cloud + sql.init.schema-locations: "classpath:schema-nomocks.sql" +cds: + messaging.services: + bupa-messaging: + binding: bookshop-mt-messaging-kafka + queue: + channel: cds.default.cdsjava-testing + enabled: true + application.services: + api-business-partner-mocked: + model: API_BUSINESS_PARTNER + serve: + path: API_BUSINESS_PARTNER + remote.services: + '[API_BUSINESS_PARTNER]': + destination: + name: "myself" + suffix: "/api" + --- spring: config.activate.on-profile: ft From 2831dcc07754f26f6f6dd64bc49ed9130ee6decc Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Tue, 8 Aug 2023 09:19:41 +0200 Subject: [PATCH 02/84] fixed the queue configuration --- srv/src/main/resources/application.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index d4b67b23..22197428 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -104,7 +104,8 @@ cds: bupa-messaging: binding: bookshop-mt-messaging-kafka queue: - channel: cds.default.cdsjava-testing + config: + channel: cds.default.cdsjava-testing enabled: true application.services: api-business-partner-mocked: From 96c7ec03bf6d884980f0559bba2e626595dcf409 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Wed, 9 Aug 2023 10:43:49 +0200 Subject: [PATCH 03/84] adjusted profile for kafka-messaging-cloud profile --- srv/src/main/resources/application.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 22197428..d93fae9c 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -100,6 +100,8 @@ spring: config.activate.on-profile: kafka-messaging-cloud sql.init.schema-locations: "classpath:schema-nomocks.sql" cds: + security: + authentication.normalize-provider-tenant: false messaging.services: bupa-messaging: binding: bookshop-mt-messaging-kafka From b1e49ca87d6bab6e20af6d7016cb21f0944cb8ce Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Wed, 9 Aug 2023 11:23:58 +0200 Subject: [PATCH 04/84] Added ITest for messaging --- .../AdminServiceAddress_broker_ITest.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 srv/src/test/java/my/bookshop/AdminServiceAddress_broker_ITest.java diff --git a/srv/src/test/java/my/bookshop/AdminServiceAddress_broker_ITest.java b/srv/src/test/java/my/bookshop/AdminServiceAddress_broker_ITest.java new file mode 100644 index 00000000..ba7c47b5 --- /dev/null +++ b/srv/src/test/java/my/bookshop/AdminServiceAddress_broker_ITest.java @@ -0,0 +1,20 @@ +package my.bookshop; + +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; +import org.springframework.test.context.junit.jupiter.EnabledIf; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +@ExtendWith(SpringExtension.class) +@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, + properties = "cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name=myself-AdminServiceAddressITest") +public class AdminServiceAddress_broker_ITest extends AdminServiceAddressITestBase { + @Test + @Override + @EnabledIf(value = "#{'${spring.profiles.active}' == 'kafka-messaging-cloud'}", loadContext = true) + public void testOrderWithAddress() throws InterruptedException { + super.testOrderWithAddress(); + } +} From 927b8e0b875eab5d384ebe8952d0f9578754094e Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Wed, 9 Aug 2023 12:51:37 +0200 Subject: [PATCH 05/84] configuring mocked business partner destination when profile mocked-api-business-partner is set --- .../main/java/my/bookshop/config/DestinationConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index 94f796a4..595b0606 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -13,7 +13,7 @@ import com.sap.cloud.sdk.cloudplatform.security.BasicCredentials; @Component -@Profile("mocked") +@Profile("mocked,mocked-api-business-partner") public class DestinationConfiguration { @Autowired From 989f93ed269977a92dfee0a3036b9051cd781987 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Wed, 9 Aug 2023 12:58:31 +0200 Subject: [PATCH 06/84] configuring mocked business partner destination when profile mocked-api-business-partner is set --- .../main/java/my/bookshop/config/DestinationConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index 595b0606..d6177581 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -13,7 +13,7 @@ import com.sap.cloud.sdk.cloudplatform.security.BasicCredentials; @Component -@Profile("mocked,mocked-api-business-partner") +@Profile({"mocked", "mocked-api-business-partner"}) public class DestinationConfiguration { @Autowired From b4c7bfb9d6a01e7947663f8844ec9e2cf3d30141 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Wed, 9 Aug 2023 13:22:18 +0200 Subject: [PATCH 07/84] configuring mocked business partner destination when profile mocked-api-business-partner is set --- srv/src/main/resources/application.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index d93fae9c..88017670 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -98,10 +98,11 @@ cds: --- spring: config.activate.on-profile: kafka-messaging-cloud - sql.init.schema-locations: "classpath:schema-nomocks.sql" cds: security: authentication.normalize-provider-tenant: false + data-source: + auto-config.enabled: false messaging.services: bupa-messaging: binding: bookshop-mt-messaging-kafka From c5db3cd72a23c32e6d0cd6f2383955df30873237 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Wed, 9 Aug 2023 14:29:48 +0200 Subject: [PATCH 08/84] reverted last change --- srv/src/main/resources/application.yaml | 3 +-- .../AdminServiceAddress_broker_ITest.java | 20 ------------------- 2 files changed, 1 insertion(+), 22 deletions(-) delete mode 100644 srv/src/test/java/my/bookshop/AdminServiceAddress_broker_ITest.java diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 88017670..d93fae9c 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -98,11 +98,10 @@ cds: --- spring: config.activate.on-profile: kafka-messaging-cloud + sql.init.schema-locations: "classpath:schema-nomocks.sql" cds: security: authentication.normalize-provider-tenant: false - data-source: - auto-config.enabled: false messaging.services: bupa-messaging: binding: bookshop-mt-messaging-kafka diff --git a/srv/src/test/java/my/bookshop/AdminServiceAddress_broker_ITest.java b/srv/src/test/java/my/bookshop/AdminServiceAddress_broker_ITest.java deleted file mode 100644 index ba7c47b5..00000000 --- a/srv/src/test/java/my/bookshop/AdminServiceAddress_broker_ITest.java +++ /dev/null @@ -1,20 +0,0 @@ -package my.bookshop; - -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.SpringBootTest.WebEnvironment; -import org.springframework.test.context.junit.jupiter.EnabledIf; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -@ExtendWith(SpringExtension.class) -@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT, - properties = "cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name=myself-AdminServiceAddressITest") -public class AdminServiceAddress_broker_ITest extends AdminServiceAddressITestBase { - @Test - @Override - @EnabledIf(value = "#{'${spring.profiles.active}' == 'kafka-messaging-cloud'}", loadContext = true) - public void testOrderWithAddress() throws InterruptedException { - super.testOrderWithAddress(); - } -} From 3190dea5e3118545d6503ab44f4fc848dae0f6e4 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Wed, 9 Aug 2023 15:07:07 +0200 Subject: [PATCH 09/84] reverted last change --- srv/src/main/resources/application.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index d93fae9c..88017670 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -98,10 +98,11 @@ cds: --- spring: config.activate.on-profile: kafka-messaging-cloud - sql.init.schema-locations: "classpath:schema-nomocks.sql" cds: security: authentication.normalize-provider-tenant: false + data-source: + auto-config.enabled: false messaging.services: bupa-messaging: binding: bookshop-mt-messaging-kafka From 555d13d0b8f8426cc5611889cc0df4ef731935ca Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 08:55:25 +0200 Subject: [PATCH 10/84] dynamically building URL for mocked API_BUSINESS_PARTNER --- .../bookshop/config/DestinationConfiguration.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index d6177581..788fddf2 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -1,5 +1,7 @@ package my.bookshop.config; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.event.ApplicationReadyEvent; import org.springframework.context.annotation.Profile; @@ -7,22 +9,34 @@ import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; +import com.sap.cds.services.runtime.CdsRuntime; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultDestinationLoader; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor; import com.sap.cloud.sdk.cloudplatform.security.BasicCredentials; +import my.bookshop.handlers.external.ApiBusinessPartnerEventMockHandler; + @Component @Profile({"mocked", "mocked-api-business-partner"}) public class DestinationConfiguration { + private final static Logger logger = LoggerFactory.getLogger(DestinationConfiguration.class); + @Autowired private Environment environment; + @Autowired + private CdsRuntime runtime; + @EventListener void applicationReady(ApplicationReadyEvent ready) { Integer port = environment.getProperty("local.server.port", Integer.class); + String applicationUrl = runtime.getEnvironment().getApplicationInfo().getUrl(); String destinationName = environment.getProperty("cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name"); + + logger.info("Application URL: {}", applicationUrl); + if(port != null && destinationName != null) { DefaultHttpDestination httpDestination = DefaultHttpDestination .builder("http://localhost:" + port) From b6e8c251a533474c703a0e64f8a9e29072ce29ae Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 08:56:46 +0200 Subject: [PATCH 11/84] dynamically building URL for mocked API_BUSINESS_PARTNER --- .../java/my/bookshop/config/DestinationConfiguration.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index 788fddf2..c3426155 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -32,12 +32,15 @@ public class DestinationConfiguration { @EventListener void applicationReady(ApplicationReadyEvent ready) { Integer port = environment.getProperty("local.server.port", Integer.class); - String applicationUrl = runtime.getEnvironment().getApplicationInfo().getUrl(); String destinationName = environment.getProperty("cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name"); logger.info("Application URL: {}", applicationUrl); if(port != null && destinationName != null) { + String applicationUrl = runtime.getEnvironment().getApplicationInfo().getUrl(); + + logger.info("Application URL for mocked API_BUSINESS_PARTNER service: {}", applicationUrl); + DefaultHttpDestination httpDestination = DefaultHttpDestination .builder("http://localhost:" + port) .basicCredentials(new BasicCredentials("authenticated", "")) From cd3537dc3a66114e156d1a863770baeae53d8118 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 08:59:39 +0200 Subject: [PATCH 12/84] dynamically building URL for mocked API_BUSINESS_PARTNER --- .../main/java/my/bookshop/config/DestinationConfiguration.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index c3426155..350c10ad 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -34,8 +34,6 @@ void applicationReady(ApplicationReadyEvent ready) { Integer port = environment.getProperty("local.server.port", Integer.class); String destinationName = environment.getProperty("cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name"); - logger.info("Application URL: {}", applicationUrl); - if(port != null && destinationName != null) { String applicationUrl = runtime.getEnvironment().getApplicationInfo().getUrl(); From b07a113ea848da5d85d1f2d10f9019c62d5b331b Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 09:17:43 +0200 Subject: [PATCH 13/84] dynamically building URL for mocked API_BUSINESS_PARTNER --- .../config/DestinationConfiguration.java | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index 350c10ad..c018d6fd 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -40,7 +40,7 @@ void applicationReady(ApplicationReadyEvent ready) { logger.info("Application URL for mocked API_BUSINESS_PARTNER service: {}", applicationUrl); DefaultHttpDestination httpDestination = DefaultHttpDestination - .builder("http://localhost:" + port) + .builder(buildUrl(applicationUrl, port)) .basicCredentials(new BasicCredentials("authenticated", "")) .name(destinationName).build(); @@ -49,4 +49,18 @@ void applicationReady(ApplicationReadyEvent ready) { } } + private String buildUrl(String applicationUrl, Integer port) { + String url; + + if (applicationUrl != null) { + url = "https://" + applicationUrl + ":" + port; + } else { + url = "http://localhost:" + port; + } + + logger.info("Application URL for mocked API_BUSINESS_PARTNER service: {}", url); + + return url; + } + } From 2ec7f6b968fd1492f50feb65de4e6b2b333e37d6 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 09:22:19 +0200 Subject: [PATCH 14/84] dynamically building URL for mocked API_BUSINESS_PARTNER --- .../main/java/my/bookshop/config/DestinationConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index c018d6fd..343c308f 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -58,7 +58,7 @@ private String buildUrl(String applicationUrl, Integer port) { url = "http://localhost:" + port; } - logger.info("Application URL for mocked API_BUSINESS_PARTNER service: {}", url); + logger.info("Destination URL for mocked API_BUSINESS_PARTNER service: {}", url); return url; } From 944434ce7e829c38fbb2f357bb4f7f617a841d41 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 09:45:13 +0200 Subject: [PATCH 15/84] dynamically building URL for mocked API_BUSINESS_PARTNER --- .../main/java/my/bookshop/config/DestinationConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index 343c308f..fe3a3db3 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -53,7 +53,7 @@ private String buildUrl(String applicationUrl, Integer port) { String url; if (applicationUrl != null) { - url = "https://" + applicationUrl + ":" + port; + url = "https://" + applicationUrl; } else { url = "http://localhost:" + port; } From 1f7752eeb6cf734b4a0364676e121b91ed6fac8b Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 11:20:02 +0200 Subject: [PATCH 16/84] dynamically building URL for mocked API_BUSINESS_PARTNER --- srv/pom.xml | 5 ++ .../config/DestinationConfiguration.java | 52 ++++++++++--------- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/srv/pom.xml b/srv/pom.xml index 0d5650d2..87199206 100644 --- a/srv/pom.xml +++ b/srv/pom.xml @@ -45,6 +45,11 @@ runtime + + com.sap.cds + cds-integration-cloud-sdk + + com.sap.cds cds-feature-remote-odata diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index fe3a3db3..718c00ba 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -1,5 +1,8 @@ package my.bookshop.config; +import java.util.List; +import java.util.stream.Collectors; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -9,14 +12,14 @@ import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; +import com.sap.cds.integration.cloudsdk.destination.DestinationResolver; import com.sap.cds.services.runtime.CdsRuntime; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultDestinationLoader; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor; +import com.sap.cloud.sdk.cloudplatform.connectivity.OnBehalfOf; import com.sap.cloud.sdk.cloudplatform.security.BasicCredentials; -import my.bookshop.handlers.external.ApiBusinessPartnerEventMockHandler; - @Component @Profile({"mocked", "mocked-api-business-partner"}) public class DestinationConfiguration { @@ -31,36 +34,35 @@ public class DestinationConfiguration { @EventListener void applicationReady(ApplicationReadyEvent ready) { - Integer port = environment.getProperty("local.server.port", Integer.class); + String applicationUrl = runtime.getEnvironment().getApplicationInfo().getUrl(); + + if (applicationUrl != null) { + // it seems we're running in the cloud + recisterCloudDestination(applicationUrl); + } else { + registerLocalDestination(); + } + } + + private void recisterCloudDestination(String applicationUrl) { String destinationName = environment.getProperty("cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name"); - if(port != null && destinationName != null) { - String applicationUrl = runtime.getEnvironment().getApplicationInfo().getUrl(); + logger.info("TEST BINDINGS: {}", runtime.getEnvironment().getServiceBindings().collect(Collectors.toList())); + //DestinationResolver.getDestinationForXsuaaBasedServiceBinding(applicationUrl, null, OnBehalfOf.NAMED_USER_CURRENT_TENANT); + } - logger.info("Application URL for mocked API_BUSINESS_PARTNER service: {}", applicationUrl); + private void registerLocalDestination() { + Integer port = environment.getProperty("local.server.port", Integer.class); + String destinationName = environment.getProperty("cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name"); + if(port != null && destinationName != null) { DefaultHttpDestination httpDestination = DefaultHttpDestination - .builder(buildUrl(applicationUrl, port)) - .basicCredentials(new BasicCredentials("authenticated", "")) - .name(destinationName).build(); + .builder("http://localhost:" + port) + .basicCredentials(new BasicCredentials("authenticated", "")) + .name(destinationName).build(); DestinationAccessor.prependDestinationLoader( - new DefaultDestinationLoader().registerDestination(httpDestination)); + new DefaultDestinationLoader().registerDestination(httpDestination)); } } - - private String buildUrl(String applicationUrl, Integer port) { - String url; - - if (applicationUrl != null) { - url = "https://" + applicationUrl; - } else { - url = "http://localhost:" + port; - } - - logger.info("Destination URL for mocked API_BUSINESS_PARTNER service: {}", url); - - return url; - } - } From 8e6d39410815899c78c9814dab7084dea1aad8ec Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 12:58:18 +0200 Subject: [PATCH 17/84] dynamically building URL for mocked API_BUSINESS_PARTNER --- .../my/bookshop/config/DestinationConfiguration.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index 718c00ba..69c89a14 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -1,6 +1,5 @@ package my.bookshop.config; -import java.util.List; import java.util.stream.Collectors; import org.slf4j.Logger; @@ -12,12 +11,11 @@ import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -import com.sap.cds.integration.cloudsdk.destination.DestinationResolver; import com.sap.cds.services.runtime.CdsRuntime; +import com.sap.cloud.environment.servicebinding.api.ServiceBinding; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultDestinationLoader; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor; -import com.sap.cloud.sdk.cloudplatform.connectivity.OnBehalfOf; import com.sap.cloud.sdk.cloudplatform.security.BasicCredentials; @Component @@ -38,16 +36,16 @@ void applicationReady(ApplicationReadyEvent ready) { if (applicationUrl != null) { // it seems we're running in the cloud - recisterCloudDestination(applicationUrl); + registerCloudDestination(applicationUrl); } else { registerLocalDestination(); } } - private void recisterCloudDestination(String applicationUrl) { + private void registerCloudDestination(String applicationUrl) { String destinationName = environment.getProperty("cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name"); - logger.info("TEST BINDINGS: {}", runtime.getEnvironment().getServiceBindings().collect(Collectors.toList())); + logger.info("TEST BINDINGS: {}", runtime.getEnvironment().getServiceBindings().map(ServiceBinding::getName).collect(Collectors.toList())); //DestinationResolver.getDestinationForXsuaaBasedServiceBinding(applicationUrl, null, OnBehalfOf.NAMED_USER_CURRENT_TENANT); } From e9fa9477f69b4b04781f7cd642d6ec07e2aab36f Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 13:02:46 +0200 Subject: [PATCH 18/84] dynamically building URL for mocked API_BUSINESS_PARTNER --- mta-multi-tenant-messaging.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/mta-multi-tenant-messaging.yaml b/mta-multi-tenant-messaging.yaml index 23355329..04acd9ad 100644 --- a/mta-multi-tenant-messaging.yaml +++ b/mta-multi-tenant-messaging.yaml @@ -24,6 +24,7 @@ modules: - mvn clean package -DskipTests=true build-result: target/*-exec.jar requires: + - name: bookshop-mt-messaging-srv - name: bookshop-mt-messaging-kafka - name: bookshop-mt-messaging-service-manager - name: bookshop-mt-messaging-uaa From b76337f08e45409393b595a87aeb34608246a431 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 14:10:05 +0200 Subject: [PATCH 19/84] dynamically building URL for mocked API_BUSINESS_PARTNER --- .../my/bookshop/config/DestinationConfiguration.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index 69c89a14..309a5380 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -11,11 +11,13 @@ import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; +import com.sap.cds.integration.cloudsdk.destination.DestinationResolver; import com.sap.cds.services.runtime.CdsRuntime; import com.sap.cloud.environment.servicebinding.api.ServiceBinding; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultDestinationLoader; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor; +import com.sap.cloud.sdk.cloudplatform.connectivity.OnBehalfOf; import com.sap.cloud.sdk.cloudplatform.security.BasicCredentials; @Component @@ -45,8 +47,13 @@ void applicationReady(ApplicationReadyEvent ready) { private void registerCloudDestination(String applicationUrl) { String destinationName = environment.getProperty("cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name"); - logger.info("TEST BINDINGS: {}", runtime.getEnvironment().getServiceBindings().map(ServiceBinding::getName).collect(Collectors.toList())); - //DestinationResolver.getDestinationForXsuaaBasedServiceBinding(applicationUrl, null, OnBehalfOf.NAMED_USER_CURRENT_TENANT); + ServiceBinding uaaBinding = runtime.getEnvironment().getServiceBindings().filter(b -> b.getName().get().equals("bookshop-mt-messaging-uaa")).findFirst().get(); + logger.info("UAA Service Binding: {} / {}", uaaBinding.getName(), uaaBinding.getServiceName().get()); + DestinationAccessor.prependDestinationLoader( + new DefaultDestinationLoader() + .registerDestination( + DestinationResolver + .getDestinationForXsuaaBasedServiceBinding(applicationUrl, uaaBinding, OnBehalfOf.NAMED_USER_CURRENT_TENANT))); } private void registerLocalDestination() { From 863de77cee93cd058c62b24177bcc1733a09eb9b Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 14:37:33 +0200 Subject: [PATCH 20/84] dynamically building URL for mocked API_BUSINESS_PARTNER --- mta-multi-tenant-messaging.yaml | 1 - .../config/DestinationConfiguration.java | 21 +++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/mta-multi-tenant-messaging.yaml b/mta-multi-tenant-messaging.yaml index 04acd9ad..23355329 100644 --- a/mta-multi-tenant-messaging.yaml +++ b/mta-multi-tenant-messaging.yaml @@ -24,7 +24,6 @@ modules: - mvn clean package -DskipTests=true build-result: target/*-exec.jar requires: - - name: bookshop-mt-messaging-srv - name: bookshop-mt-messaging-kafka - name: bookshop-mt-messaging-service-manager - name: bookshop-mt-messaging-uaa diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index 309a5380..4bd06d7e 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -1,5 +1,6 @@ package my.bookshop.config; +import java.util.Map; import java.util.stream.Collectors; import org.slf4j.Logger; @@ -17,8 +18,12 @@ import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultDestinationLoader; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor; +import com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2DestinationBuilder; import com.sap.cloud.sdk.cloudplatform.connectivity.OnBehalfOf; import com.sap.cloud.sdk.cloudplatform.security.BasicCredentials; +import com.sap.cloud.security.config.ClientCertificate; +import com.sap.cloud.security.config.ClientCredentials; +import com.sap.cloud.security.config.ClientIdentity; @Component @Profile({"mocked", "mocked-api-business-partner"}) @@ -47,13 +52,21 @@ void applicationReady(ApplicationReadyEvent ready) { private void registerCloudDestination(String applicationUrl) { String destinationName = environment.getProperty("cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name"); - ServiceBinding uaaBinding = runtime.getEnvironment().getServiceBindings().filter(b -> b.getName().get().equals("bookshop-mt-messaging-uaa")).findFirst().get(); - logger.info("UAA Service Binding: {} / {}", uaaBinding.getName(), uaaBinding.getServiceName().get()); + ServiceBinding uaaBinding = runtime.getEnvironment().getServiceBindings().filter(b -> b.getServiceName().get().equals("xsuaa")).findFirst().get(); + logger.info("UAA Service Binding: {} / {}", uaaBinding.getName().get(), uaaBinding.getServiceName().get()); + + Map credentials = uaaBinding.getCredentials(); + Object client = new ClientCredentials((String)credentials.get("clientid"), (String)credentials.get("clientsecret")); + String tokenUrl = (String)credentials.get("url"); + DestinationAccessor.prependDestinationLoader( new DefaultDestinationLoader() .registerDestination( - DestinationResolver - .getDestinationForXsuaaBasedServiceBinding(applicationUrl, uaaBinding, OnBehalfOf.NAMED_USER_CURRENT_TENANT))); + OAuth2DestinationBuilder + .forTargetUrl(applicationUrl) + .withTokenEndpoint(tokenUrl) + .withClient((ClientIdentity)client, OnBehalfOf.NAMED_USER_CURRENT_TENANT) + .build())); } private void registerLocalDestination() { From c260ab42e6ddd2731a58ffe0c6b80ce54e0def2f Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 15:18:21 +0200 Subject: [PATCH 21/84] dynamically building URL for mocked API_BUSINESS_PARTNER --- .../java/my/bookshop/config/DestinationConfiguration.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index 4bd06d7e..7ddedf20 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -1,8 +1,11 @@ package my.bookshop.config; +import java.util.Collections; import java.util.Map; +import java.util.UUID; import java.util.stream.Collectors; +import org.apache.http.HttpHeaders; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -18,7 +21,11 @@ import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultDestinationLoader; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor; +import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationProperty; import com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2DestinationBuilder; +import com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2DestinationBuilder.BuilderWithTargetUrl; +import com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2ServiceImpl; +import com.sap.cloud.sdk.cloudplatform.connectivity.OAuthHeaderProvider; import com.sap.cloud.sdk.cloudplatform.connectivity.OnBehalfOf; import com.sap.cloud.sdk.cloudplatform.security.BasicCredentials; import com.sap.cloud.security.config.ClientCertificate; @@ -66,6 +73,7 @@ private void registerCloudDestination(String applicationUrl) { .forTargetUrl(applicationUrl) .withTokenEndpoint(tokenUrl) .withClient((ClientIdentity)client, OnBehalfOf.NAMED_USER_CURRENT_TENANT) + .withProperties(Collections.singletonMap(DestinationProperty.NAME.getKeyName(), destinationName)) .build())); } From b6eb26d5608a9d0725ce5ef35ef16134a3bf1bc9 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 15:21:50 +0200 Subject: [PATCH 22/84] dynamically building URL for mocked API_BUSINESS_PARTNER --- .../java/my/bookshop/config/DestinationConfiguration.java | 8 -------- 1 file changed, 8 deletions(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index 7ddedf20..401e38fd 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -2,10 +2,7 @@ import java.util.Collections; import java.util.Map; -import java.util.UUID; -import java.util.stream.Collectors; -import org.apache.http.HttpHeaders; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -15,7 +12,6 @@ import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -import com.sap.cds.integration.cloudsdk.destination.DestinationResolver; import com.sap.cds.services.runtime.CdsRuntime; import com.sap.cloud.environment.servicebinding.api.ServiceBinding; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultDestinationLoader; @@ -23,12 +19,8 @@ import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor; import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationProperty; import com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2DestinationBuilder; -import com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2DestinationBuilder.BuilderWithTargetUrl; -import com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2ServiceImpl; -import com.sap.cloud.sdk.cloudplatform.connectivity.OAuthHeaderProvider; import com.sap.cloud.sdk.cloudplatform.connectivity.OnBehalfOf; import com.sap.cloud.sdk.cloudplatform.security.BasicCredentials; -import com.sap.cloud.security.config.ClientCertificate; import com.sap.cloud.security.config.ClientCredentials; import com.sap.cloud.security.config.ClientIdentity; From 126d89e8871ff7546eb5bdd9c7abaef2294c15fe Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 15:34:20 +0200 Subject: [PATCH 23/84] dynamically building URL for mocked API_BUSINESS_PARTNER --- .../main/java/my/bookshop/config/DestinationConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index 401e38fd..4469c465 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -62,7 +62,7 @@ private void registerCloudDestination(String applicationUrl) { new DefaultDestinationLoader() .registerDestination( OAuth2DestinationBuilder - .forTargetUrl(applicationUrl) + .forTargetUrl("https://" + applicationUrl + "/") .withTokenEndpoint(tokenUrl) .withClient((ClientIdentity)client, OnBehalfOf.NAMED_USER_CURRENT_TENANT) .withProperties(Collections.singletonMap(DestinationProperty.NAME.getKeyName(), destinationName)) From dc7723bbe8196f8b36d18d0e4e6facf6fcd23c63 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 10 Aug 2023 15:50:53 +0200 Subject: [PATCH 24/84] making API_BUSINESS_PARTNER entities persistable --- srv/external/API_BUSINESS_PARTNER.cds | 702 +++++++++++++------------- 1 file changed, 351 insertions(+), 351 deletions(-) diff --git a/srv/external/API_BUSINESS_PARTNER.cds b/srv/external/API_BUSINESS_PARTNER.cds index 72c3173a..e4772389 100644 --- a/srv/external/API_BUSINESS_PARTNER.cds +++ b/srv/external/API_BUSINESS_PARTNER.cds @@ -6,13 +6,13 @@ service API_BUSINESS_PARTNER {}; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Email Address' entity API_BUSINESS_PARTNER.A_AddressEmailAddress { /** * Internal key for identifying a Business Address Services address. - * + * * For more information about the meaning and use of the address number and the Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -20,7 +20,7 @@ entity API_BUSINESS_PARTNER.A_AddressEmailAddress { key AddressID : String(10) not null; /** * Internal key for identifying a person in Business Address Services. - * + * * For more information about the meaning and use of the person number and Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -35,14 +35,14 @@ entity API_BUSINESS_PARTNER.A_AddressEmailAddress { IsDefaultEmailAddress : Boolean; /** * Internet mail address, also called e-mail address. - * + * * Example: user.name@company.comThe Internet mail address is used to send mail via the Internet world-wide; the protocol used is SMTP (Simple Mail Transfer Protocol).The Internet mail address format is specified in various RFCs (Internet Request for Comment), including RFCs 821 and 822.This is not an IP address (192.56.30.6). */ @sap.label : 'Email Address' EmailAddress : String(241); /** * This field is generated by the system from the complete Internet mail address and is stored in table ADR6. - * + * * It contains the first 20 characters of the Internet mail address in normalized form, that is, without comment characters and converted into uppercase.The field cannot be maintained by the user or from an interface.The table ADR6 contains an index for this field.Using an Internet mail address, the corresponding key of table ADR6 and the owner of the address are determined (for example, business partner or user). */ @sap.display.format : 'UpperCase' @@ -51,7 +51,7 @@ entity API_BUSINESS_PARTNER.A_AddressEmailAddress { SearchEmailAddress : String(20); /** * Additional information about the communication connection - * + * * You can maintain further information about the communication connection here. In the case of telephone numbers, for example, you can maintain the times at which the call recipient is available and those at which they are not, or you can specify whether the number is that of the secretary.The information is stored in table ADRT, regardless of language. */ @sap.label : 'Notes' @@ -60,13 +60,13 @@ entity API_BUSINESS_PARTNER.A_AddressEmailAddress { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Fax Number' entity API_BUSINESS_PARTNER.A_AddressFaxNumber { /** * Internal key for identifying a Business Address Services address. - * + * * For more information about the meaning and use of the address number and the Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -74,7 +74,7 @@ entity API_BUSINESS_PARTNER.A_AddressFaxNumber { key AddressID : String(10) not null; /** * Internal key for identifying a person in Business Address Services. - * + * * For more information about the meaning and use of the person number and Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -85,7 +85,7 @@ entity API_BUSINESS_PARTNER.A_AddressFaxNumber { key OrdinalNumber : String(3) not null; /** * If several addresses are maintained for one communication type, the user in the SAP System can be reached under one of these addresses. One address can be set as theStandard Address. - * + * * The standard address is used for the following functions:When sending using the SMTP nodein SAPconnect, the home address of the communication type used is the one set as the sender address. The recipient can see this address in the sender information and can also reply directly to this address. The standard address is also transferred and can be used for incoming status notifications, for example.When sending using an RFC node in SAPconnect, the standard address of the communication type used is the one set as the sender address. The structure defined in the case of the RFC does not permit another address to be transferred, so the standard address is used for incoming status notifications too.The SAP users have the addresses of their exchange P.O. boxes in their standard communication type 'Internet Mail' as the home address and their Internet address in the SAP system as their standard address. Example:Home address: Bernard.Brown@Company.comStandard address: Bernard.Brown@System.Company.comSending using an SMTP nodeThe home address of the communication type 'Internet Mail' (Bernard.Brown@Company.com) is used as the sender address. If a reply is sent to this address the user receives directly in the exchange postbox.Sending using the RFC nodeThe standard address of the communication type 'Internet Mail' (Bernard.Brown@System.Company.com) is used as the sender address. If a reply is sent to this address, it arrives back to the SAP system.Example using a mail system groupThe users should get all messages in their Microsoft Exchange postboxes. In the SAP system the mail system group is activated for this using the setting "Send Messages to the Home Address".The address settings of the SAP users remain unchanged:Home address: Bernard.Brown@Company.comStandard address: Bernard.Brown@System.Company.comSending using an SMTP nodeThe home address of the communication type 'Internet Mail' (Bernard.Brown@Company.com) is used as the sender address. If a reply is sent to this address the user receives directly in the exchange postbox.Sending using the RFC nodeThe standard address of the communication type 'Internet Mail' (Bernard.Brown@System.Company.com) is used as the sender address. If a reply is sent to this address it arrives back in the SAP system. It is then forwarded using the mail system group to the home address and the user gets it in the exchange postbox. */ @sap.display.format : 'UpperCase' @@ -94,7 +94,7 @@ entity API_BUSINESS_PARTNER.A_AddressFaxNumber { IsDefaultFaxNumber : Boolean; /** * The country for the telephone number or fax number is maintained here. - * + * * This specification is used to determine the correct country code. A normalized form of the telephone number or fax number is then derived and stored in a field for a program-driven search.In most cases, the telephone number or fax number refers directly to an address.If this is the case, when a new number is created, the country of the address is proposed.If this is not the case (for example, with address-independent communication data for a business partner), the country from the user parameter LND is proposed (if it is maintained). If the user parameter LND is not maintained, the country of the company address assigned in the user master data is proposed.If the country of the address changes, the country of the corresponding telephone number and fax address is not changed automatically.Example: A business partner moves abroad.If the telephone number is for a permanent connection, the telephone number also changes when the business partner moves and has to be maintained again in the system.If the telephone number is for a mobile telephone and the number is retained, the original country for this telephone number also has to be retained and must not be changed automatically to the new country of the address. */ @sap.display.format : 'UpperCase' @@ -103,7 +103,7 @@ entity API_BUSINESS_PARTNER.A_AddressFaxNumber { FaxCountry : String(3); /** * Fax number, consisting of dialling code and number, but without country dialling code. - * + * * If the fax number consists of a company number and an extension, the extension must be entered in the field extension.Fax number, as it is to be dialled from within the same country.Enter the following for the number "01234/567-0":Fax: 01234/567Extension: 0Enter the following for the number "01234/567-891":Fax: 01234/567Extension: 891For the number "012-345-678" (678 as extension) enter the following:Fax: 012-345Extension: 678In the following cases, enter the complete number (without country dialing code) in the field Fax:No part of the number can be considered as an extension.You are not sure which part of the number can be considered as an extension. */ @sap.display.format : 'UpperCase' @@ -112,7 +112,7 @@ entity API_BUSINESS_PARTNER.A_AddressFaxNumber { FaxNumber : String(30); /** * Fax extension number - * + * * If the fax number consists of a company number and an extension, the extension must be entered here.Enter the extensionThe following rules apply for the format of telephone and fax numbers:The length of the entries in the field Telephone and Extension (Fax and Extension) cannot be more than 24 characters in total.Leading spaces are not allowed in the field Telephone or Fax or in the field Extension.Valid characters are:Numbers (0123456789)Letters (ABCDEFGHIJKLMNOPQRSTUVWXYZ)Following other characters: /, (, ), - *, # and " " (space), but not as a leading space.If an + is entered as the first character, the system checks whether the specified number starts with a country code. If so, a warning message is displayed because the country code is automatically determined by the system and should not be stored in the Telephone number (Fax number) field.If an & is entered as the first character, the automatic check and formatting of the telephone number (fax number), as well as the determination of the country code, is suppressed.Enter the following for the number "01234/567-0":Fax: 01234/567Extension: 0Enter the following for the number "01234/567-891":Fax: 01234/567Extension: 891For the number "012-345-678" (678 as extension) enter the following:Fax: 012-345Extension: 678In the following cases, enter the complete number (without country dialing code) in the field Fax:No part of the number can be considered as an extension.You are not sure which part of the number can be considered as an extension. */ @sap.display.format : 'UpperCase' @@ -121,7 +121,7 @@ entity API_BUSINESS_PARTNER.A_AddressFaxNumber { FaxNumberExtension : String(10); /** * The content of this field is automatically calculated by the system based on fax number and country code components. - * + * * This field is therefore not to be filled when Business Address Services function modules are called. */ @sap.display.format : 'UpperCase' @@ -130,7 +130,7 @@ entity API_BUSINESS_PARTNER.A_AddressFaxNumber { InternationalFaxNumber : String(30); /** * Additional information about the communication connection - * + * * You can maintain further information about the communication connection here. In the case of telephone numbers, for example, you can maintain the times at which the call recipient is available and those at which they are not, or you can specify whether the number is that of the secretary.The information is stored in table ADRT, regardless of language. */ @sap.label : 'Notes' @@ -139,13 +139,13 @@ entity API_BUSINESS_PARTNER.A_AddressFaxNumber { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Home Page URL' entity API_BUSINESS_PARTNER.A_AddressHomePageURL { /** * Internal key for identifying a Business Address Services address. - * + * * For more information about the meaning and use of the address number and the Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -153,7 +153,7 @@ entity API_BUSINESS_PARTNER.A_AddressHomePageURL { key AddressID : String(10) not null; /** * Internal key for identifying a person in Business Address Services. - * + * * For more information about the meaning and use of the person number and Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -176,7 +176,7 @@ entity API_BUSINESS_PARTNER.A_AddressHomePageURL { SearchURLAddress : String(50); /** * Additional information about the communication connection - * + * * You can maintain further information about the communication connection here. In the case of telephone numbers, for example, you can maintain the times at which the call recipient is available and those at which they are not, or you can specify whether the number is that of the secretary.The information is stored in table ADRT, regardless of language. */ @sap.label : 'Notes' @@ -191,13 +191,13 @@ entity API_BUSINESS_PARTNER.A_AddressHomePageURL { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Phone Number' entity API_BUSINESS_PARTNER.A_AddressPhoneNumber { /** * Internal key for identifying a Business Address Services address. - * + * * For more information about the meaning and use of the address number and the Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -205,7 +205,7 @@ entity API_BUSINESS_PARTNER.A_AddressPhoneNumber { key AddressID : String(10) not null; /** * Internal key for identifying a person in Business Address Services. - * + * * For more information about the meaning and use of the person number and Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -216,7 +216,7 @@ entity API_BUSINESS_PARTNER.A_AddressPhoneNumber { key OrdinalNumber : String(3) not null; /** * The country for the telephone number or fax number is maintained here. - * + * * This specification is used to determine the correct country code. A normalized form of the telephone number or fax number is then derived and stored in a field for a program-driven search.In most cases, the telephone number or fax number refers directly to an address.If this is the case, when a new number is created, the country of the address is proposed.If this is not the case (for example, with address-independent communication data for a business partner), the country from the user parameter LND is proposed (if it is maintained). If the user parameter LND is not maintained, the country of the company address assigned in the user master data is proposed.If the country of the address changes, the country of the corresponding telephone number and fax address is not changed automatically.Example: A business partner moves abroad.If the telephone number is for a permanent connection, the telephone number also changes when the business partner moves and has to be maintained again in the system.If the telephone number is for a mobile telephone and the number is retained, the original country for this telephone number also has to be retained and must not be changed automatically to the new country of the address. */ @sap.display.format : 'UpperCase' @@ -225,7 +225,7 @@ entity API_BUSINESS_PARTNER.A_AddressPhoneNumber { DestinationLocationCountry : String(3); /** * If several addresses are maintained for one communication type, the user in the SAP System can be reached under one of these addresses. One address can be set as theStandard Address. - * + * * The standard address is used for the following functions:When sending using the SMTP nodein SAPconnect, the home address of the communication type used is the one set as the sender address. The recipient can see this address in the sender information and can also reply directly to this address. The standard address is also transferred and can be used for incoming status notifications, for example.When sending using an RFC node in SAPconnect, the standard address of the communication type used is the one set as the sender address. The structure defined in the case of the RFC does not permit another address to be transferred, so the standard address is used for incoming status notifications too.The SAP users have the addresses of their exchange P.O. boxes in their standard communication type 'Internet Mail' as the home address and their Internet address in the SAP system as their standard address. Example:Home address: Bernard.Brown@Company.comStandard address: Bernard.Brown@System.Company.comSending using an SMTP nodeThe home address of the communication type 'Internet Mail' (Bernard.Brown@Company.com) is used as the sender address. If a reply is sent to this address the user receives directly in the exchange postbox.Sending using the RFC nodeThe standard address of the communication type 'Internet Mail' (Bernard.Brown@System.Company.com) is used as the sender address. If a reply is sent to this address, it arrives back to the SAP system.Example using a mail system groupThe users should get all messages in their Microsoft Exchange postboxes. In the SAP system the mail system group is activated for this using the setting "Send Messages to the Home Address".The address settings of the SAP users remain unchanged:Home address: Bernard.Brown@Company.comStandard address: Bernard.Brown@System.Company.comSending using an SMTP nodeThe home address of the communication type 'Internet Mail' (Bernard.Brown@Company.com) is used as the sender address. If a reply is sent to this address the user receives directly in the exchange postbox.Sending using the RFC nodeThe standard address of the communication type 'Internet Mail' (Bernard.Brown@System.Company.com) is used as the sender address. If a reply is sent to this address it arrives back in the SAP system. It is then forwarded using the mail system group to the home address and the user gets it in the exchange postbox. */ @sap.display.format : 'UpperCase' @@ -234,7 +234,7 @@ entity API_BUSINESS_PARTNER.A_AddressPhoneNumber { IsDefaultPhoneNumber : Boolean; /** * Telephone number, consisting of dialling code and number, but without country dialling code. - * + * * If the telephone number consists of a company number and an extension, the extension must be entered in the field extension.Telephone number, as it is dialled from within the country.For the number "01234/567-0" enter the following:Telephone: 01234/567Estension: 0For the number "01234/567-891" enter the following:Telephone: 01234/567Extension: 891For the number "012-345-678" (678 as extension) enter the following:Telepone: 012-345Extension: 678In the following cases enter the complete number (without country dialling code) in the field Telephone:No part of the number can be regarded as an extension.You are not sure which part of the number can be regarded as an extension. */ @sap.display.format : 'UpperCase' @@ -243,7 +243,7 @@ entity API_BUSINESS_PARTNER.A_AddressPhoneNumber { PhoneNumber : String(30); /** * Telephone extension number - * + * * If the telephone number consists of a company number and an extension, the extension should be entered here.Enter the extension.The following rules apply for the format of telephone and fax numbers:The length of the entries in the field Telephone and Extension (Fax and Extension) cannot be more than 24 characters in total.Leading spaces are not allowed in the field Telephone or Fax or in the field Extension.Valid characters are:Numbers (0123456789)Letters (ABCDEFGHIJKLMNOPQRSTUVWXYZ)Following other characters: /, (, ), - *, # and " " (space), but not as a leading space.If an + is entered as the first character, the system checks whether the specified number starts with a country code. If so, a warning message is displayed because the country code is automatically determined by the system and should not be stored in the Telephone number (Fax number) field.If an & is entered as the first character, the automatic check and formatting of the telephone number (fax number), as well as the determination of the country code, is suppressed.For the number "01234/567-0" enter the following:Telephone: 01234/567Estension: 0For the number "01234/567-891" enter the following:Telephone: 01234/567Extension: 891For the number "012-345-678" (678 as extension) enter the following:Telepone: 012-345Extension: 678In the following cases enter the complete number (without country dialling code) in the field Telephone:No part of the number can be regarded as an extension.You are not sure which part of the number can be regarded as an extension. */ @sap.display.format : 'UpperCase' @@ -252,7 +252,7 @@ entity API_BUSINESS_PARTNER.A_AddressPhoneNumber { PhoneNumberExtension : String(10); /** * The content of this field is automatically calculated by the system based on the telephone number and country code components. - * + * * This field is therefore not to be filled when Business Address Services function modules are called. */ @sap.display.format : 'UpperCase' @@ -261,7 +261,7 @@ entity API_BUSINESS_PARTNER.A_AddressPhoneNumber { InternationalPhoneNumber : String(30); /** * This field specifies whether the telephone number is a mobile telephone number. - * + * * ' ' : The telephone number is a fixed-line telephone'1' : The telephone number is the standard fixed-line telephone'2' : The telephone nubmer is a mobile telephone'3' : The telephone number is the standard mobile telephoneEither the standard fixed-line telephone number or the standard mobile telephone number is also the standard telephone number (FLGDEFAULT = 'X').In older data sets, this field may have also have the value ' ' for the standard fixed-line telephone. In this case, however, FLGDEFAULT is always 'X'.In Customizing, you can specify whether the SMS-compatible indicator is to be proposed for new mobile telephone numbers created in dialog by choosing General Settings -> Set countries -> Define Mobile Telephone Attributes for each country. */ @sap.display.format : 'UpperCase' @@ -270,7 +270,7 @@ entity API_BUSINESS_PARTNER.A_AddressPhoneNumber { PhoneNumberType : String(1); /** * Additional information about the communication connection - * + * * You can maintain further information about the communication connection here. In the case of telephone numbers, for example, you can maintain the times at which the call recipient is available and those at which they are not, or you can specify whether the number is that of the secretary.The information is stored in table ADRT, regardless of language. */ @sap.label : 'Notes' @@ -279,7 +279,7 @@ entity API_BUSINESS_PARTNER.A_AddressPhoneNumber { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.creatable : 'false' @sap.updatable : 'false' @sap.deletable : 'false' @@ -307,7 +307,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { key ValidityEndDate : Date not null; /** * Internal key for identifying a Business Address Services address. - * + * * For more information about the meaning and use of the address number and the Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -315,7 +315,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { key AddressID : String(10) not null; /** * Internal key for identifying a Business Address Services address. - * + * * For more information about the meaning and use of the address number and the Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -323,21 +323,21 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { AddressNumber : String(10); /** * Additional address field which is printed above the Street line. - * + * * The Street address contains two lines above the street and two lines below the street.See Print the Street address. */ @sap.label : 'Street 3' AdditionalStreetPrefixName : String(40); /** * Additional address field which is printed under the Street line. - * + * * The Street address has two lines above the street and two lines below the steet.See Print the Street address. */ @sap.label : 'Street 5' AdditionalStreetSuffixName : String(40); /** * Time zone as part of an address. - * + * * The time zone is automatically determined by the system in address maintenance if time zone Customizing is maintained.It depends on the country and the region. (Region means state, province or county, depending on the country)The automatic determination is only made if there is no value in the time zone field. */ @sap.display.format : 'UpperCase' @@ -346,7 +346,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { AddressTimeZone : String(6); /** * Part of the address (c/o = care of) if the recipient is different from the occupant and the names are not similar (e.g. subtenants). - * + * * Put the country-specific code (e.g. c/o) in front of the name of the occupant. This is not automatically done in the print format, like the language-specific word "PO Box".John Smithc/o David BrownThis field is not always automatically printed, as it was subsequently added to the address structure.The print program or form may need to be adjusted.This exception applies to the following fields:Street2, Street3, Street4, Street5, c/o name, and to all address fields added after Release 4.5. */ @sap.label : 'c/o' @@ -358,14 +358,14 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { CityCode : String(12); /** * City name as part of the address. - * + * * The city name is saved redundantly in another database field in upper- case letters, for search help.If the Postal regional structure ('city file') is active, the city name is checked against the Cities defined in the regional structure. */ @sap.label : 'City' CityName : String(40); /** * Postal code that is assigned directly to one company (= company postal code = major customer postal code). - * + * * This field is used for countries where major companies are assigned their own postal code by the national post office.This postal code has to be entered in the field "Company Postal Code". Postal codes for group major customers, however, have to be entered in the field "PO Box Postal Code", since individual customers with a shared postal code for group major customers are differentiated by means of their PO box. */ @sap.display.format : 'UpperCase' @@ -374,7 +374,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { CompanyPostalCode : String(10); /** * The country key contains information which the system uses to check entries such as the length of the postal code or bank account number. - * + * * The two-character ISO code in accordance with ISO 3166, which is delivered by SAP as a default, is usually used.It could also be the vehicle license plate country-code or a typical country key, for example, in Germany the Federal statistics office key.The country keys are determined at system installation in the global settings.The definition of the country key in the SAP system does not have to match political or government entities.Since the country key does not have to correspond to the ISO code in all installations, programs that differ according to certain values of the country key cannot query the country key T005-LAND1, but have to program based on the ISO code T005 INTCA. */ @sap.display.format : 'UpperCase' @@ -382,14 +382,14 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { Country : String(3); /** * Specifies the county’s name - * + * * This field is used to store the county’s name. You can enter the name of the county in this field. */ @sap.label : 'County' County : String(40); /** * The delivery service is part of the PO box address. - * + * * Some countries offer different services in addition to regular postal delivery and PO boxes, for example the Private Bag or Response Bag. If an address is related to one of these delivery services, the information about this particular delivery service has to be entered in the corresponding fields.In the field "Number of Delivery Service," the number of the Private Bag, Response Bag, or other relevant service has to be entered. Entering a number is not mandatory for each delivery service.For each address, either the information about the PO box or the information about the delivery service can be entered, but not both types of information at the same time.Mr PickeringPrivate Bag 106999Timaru 7942Delivery services will only be taken into account for address formatting in countries in which they are commonly used in addition to regular postal delivery and PO boxes, for example, in Australia, New Zealand, and the USA. In all other countries, these fields will not be taken into account for address formatting. */ @sap.display.format : 'UpperCase' @@ -398,7 +398,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { DeliveryServiceNumber : String(10); /** * The delivery service is part of the PO box address. - * + * * Some countries offer different services in addition to regular postal delivery and PO boxes, for example the Private Bag or Response Bag. If an address is related to one of these delivery services, the information about this particular delivery service has to be entered in the corresponding fields.In the field "Type of Delivery Service," the type of the delivery service has to be entered.For each address, either the information about the PO box or the information about the delivery service can be entered, but not both types of information at the same time.Mr PickeringPrivate Bag 106999Timaru 7942Delivery services will only be taken into account for address formatting in countries in which they are commonly used in addition to regular postal delivery and PO boxes, for example, in Australia, New Zealand, and the USA. In all other countries, these fields will not be taken into account for address formatting. */ @sap.display.format : 'UpperCase' @@ -407,14 +407,14 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { DeliveryServiceTypeCode : String(4); /** * City or District supplement - * + * * In some countries, this entry is appended with a hyphen to the city name by the automatic address formatting, other countries, it is output on a line of its own or (e.g. in the USA) not printed.See the examples in the Address Layout Key documentation. */ @sap.label : 'District' District : String(40); /** * Key for form of address text. - * + * * You can also define a form of address text in Customizing.The form of address text can be maintained in different languages. */ @sap.display.format : 'UpperCase' @@ -425,7 +425,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { FormOfAddress : String(4); /** * This field contains the full name or formatted name of a party. - * + * * For organizations or document addresses, typically the fields Name1 and Name2 are concatenated.For persons the field contains the formatted name according to country specific rules. It corresponds e.g. to the content of the fields BUT000-NAME1_TEXT or ADRP-NAME_TEXT. */ @sap.label : 'Full Name' @@ -435,7 +435,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { FullName : String(80); /** * City of residence which is different from the postal city - * + * * In some countries, the residential city is required if it differs from the postal city.In the USA, the official street indexes, against which data can be checked, are based on the residential city, not the postal city, which may be different.It is the same in France, where a postally correct address must contain the residential city in a separate line above the postal city, if it differs from the postal city.This field is not always automatically printed, as it was subsequently added to the address structure.The print program or form may need to be adjusted.This exception applies to the following fields:Street2, Street3, Street4, Street5, c/o name, and to all address fields added after Release 4.5. */ @sap.label : 'Different City' @@ -443,14 +443,14 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { HomeCityName : String(40); /** * House number as part of an address. - * + * * It is printed in the Street line.Other supplementary street information can be entered in the House number supplement or one of the Street2, Street3, Street4 or Street5 fields. See Print the Street address.A house number (e.g. 117) or a house number with supplement (e.g. 117a), or a house number range (e.g. 16-20), can be maintained in this field. */ @sap.label : 'House Number' HouseNumber : String(10); /** * House number supplement as part of an address, e.g. - * + * * App. 17 orSuite 600.It is printed in the Street line.Further Street supplements can be put in one of the fields Street2, Street3, Street4 or Street5.See Print the Street address. */ @sap.label : 'Supplement' @@ -458,14 +458,14 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { HouseNumberSupplementText : String(10); /** * The language key indicates - * + * * - the language in which texts are displayed,- the language in which you enter texts,- the language in which the system prints texts. */ @sap.label : 'Language Key' Language : String(2); /** * PO Box number as part of an address. - * + * * Only enter the PO Box number in this field. The text "PO Box" is provided in the recipient language by the system when you print the address.When you print an address, the "Street address" and the "PO Box address" are distinguished. The print program determines which of them has priority if both are maintained in an address record.Besides the PO Box number, the PO Box address uses the following fields:PO Box postal code, if specified (otherwise the normal postal code)PO Box city, if specified (otherwise the normal city)PO Box region, if specified (otherwise the normal region)PO Box country, if specified (otherwise the normal country)If the address is a "PO Box" (without a number), do not fill the "PO Box" field. Select the "PO Box w/o Number" indicator instead.You can also enter a company postal code for organizational addresses, instead of a PO Box. A separate field is predefined for this entry.For general information and examples about address formatting, see the documentation on the Address Structure Key. */ @sap.display.format : 'UpperCase' @@ -473,7 +473,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { POBox : String(10); /** * Different city for the PO Box as an address component. - * + * * The PO Box city can be entered here if it is different from the address city.If the address is only a PO Box address, enter the city in the normal city field.If the address contains two different city names for the address and the PO Box address, use this field. */ @sap.label : 'PO Box City' @@ -481,7 +481,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { POBoxDeviatingCityName : String(40); /** * Different PO Box country in address. - * + * * The PO Box country can be entered here, if it is different from the street address country.If the address only has a PO Box address, the country is in the normal country field.Use this field if the address has two different country values for the street address and the PO Box address.This field is not always automatically printed, as it was subsequently added to the address structure.The print program or form may need to be adjusted.This exception applies to the following fields:Street2, Street3, Street4, Street5, c/o name, and to all address fields added after Release 4.5. */ @sap.display.format : 'UpperCase' @@ -489,7 +489,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { POBoxDeviatingCountry : String(3); /** * Different Region for PO Box in an address. - * + * * Enter the PO Box Region here, if it differs from the street address region.If the address only has a PO Box address, the Region in in the normal Region field.Use this field if the address has two different Region values for the street address and the PO Box address.This field is not always automatically printed, as it was subsequently added to the address structure.The print program or form may need to be adjusted.This exception applies to the following fields:Street2, Street3, Street4, Street5, c/o name, and to all address fields added after Release 4.5. */ @sap.display.format : 'UpperCase' @@ -498,7 +498,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { POBoxDeviatingRegion : String(3); /** * PO Box address without PO Box number flag. - * + * * Only the word 'PO Box' is output in PO Box addresses without PO Box number.Set this flag for a PO Box address without PO Box number.This field is not always automatically printed, as it was subsequently added to the address structure.The print program or form may need to be adjusted.This exception applies to the following fields:Street2, Street3, Street4, Street5, c/o name, and to all address fields added after Release 4.5. */ @sap.display.format : 'UpperCase' @@ -507,14 +507,14 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { POBoxIsWithoutNumber : Boolean; /** * The PO box lobby is part of the PO box address. - * + * * In some countries, entering a PO box, postal code and city is not sufficient to uniquely identify a PO box, because the same PO box number is assigned multiple times in some cities.Therefore, additional information might be required to determine the post office of the PO box in question. This information can be entered in the field "PO Box Lobby."Mr NellingPO Box 4099HighfieldTimaru 7942The PO box lobby will only be taken into account for address formatting in countries in which it is commonly used in addition to regular postal delivery and PO boxes, for example, in Canada or New Zealand. In all other countries, this field will not be taken into account for address formatting. */ @sap.label : 'PO Box Lobby' POBoxLobbyName : String(40); /** * Postal code that is required for a unique assignment of the PO box. - * + * * This field is used for countries where a different postal code applies to mail that is sent to the PO box rather than to the street address of a particular business partner.Postal codes for group major customers also have to be entered in the field for the PO box postal code since individual customers with a shared postal code for group major customers are differentiated by means of the PO box. Postal codes for major customers (= company postal codes), however, are assigned to one customer only and have to be entered in the field 'Company Postal Code'. */ @sap.display.format : 'UpperCase' @@ -522,7 +522,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { POBoxPostalCode : String(10); /** * Internal key for identifying a person in Business Address Services. - * + * * For more information about the meaning and use of the person number and Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -532,7 +532,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { Person : String(10); /** * Postal code as part of the address - * + * * If different postal codes are maintained for the PO Box and Street address of an address, this field contains the Street address postal code. */ @sap.display.format : 'UpperCase' @@ -541,7 +541,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { PostalCode : String(10); /** * Communication method with which you can exchange documents and messages with a business partner. - * + * * In Business Address Services, you can specify a standard communication method that can be used by programs to determine the means of communication for sending messages.One business partner wants all messages by fax, another by e-mail.The application context can restrict the possible methods of communication. For example, invitations should perhaps only be sent by post because of enclosures, whereas minutes can be sent by post, fax or e-mail.Communication strategies can be defined for this purpose and applied in application contexts. */ @sap.display.format : 'UpperCase' @@ -550,7 +550,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { PrfrdCommMediumType : String(3); /** * In some countries, the region forms part of the address. The meaning depends on the country. - * + * * The automatic address formatting function prints the region in addresses in the USA, Canada, Italy, Brazil or Australia, and the county in Great Britain.For more information, see the examples in the documentation on the Address Layout Key.Meaning of the regional code in ...Australia -> ProvinceBrazil -> StateCanada -> ProvinceGermany -> StateGreat Britain -> CountyItaly -> ProvinceJapan -> PrefectureSwitzerland -> CantonUSA -> State */ @sap.display.format : 'UpperCase' @@ -559,21 +559,21 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { Region : String(3); /** * Street name as part of the address. - * + * * The street name is saved, redundantly in upper case in another database field, for search help purposes.There are other fields for address parts which can be printed above or below the street. See Print the Street address.The house number and other supplements are usually maintained in their own fields. See Formatting the Street line. */ @sap.label : 'Street' StreetName : String(60); /** * Additional address field which is printed above the Street line. - * + * * The Street address contains two lines above the street and two lines below the street.See Print the Street address.This field is not always automatically printed, as it was subsequently added to the address structure.The print program or form may need to be adjusted.This exception applies to the following fields:Street2, Street3, Street4, Street5, c/o name, and to all address fields added after Release 4.5. */ @sap.label : 'Street 2' StreetPrefixName : String(40); /** * Additional address field which is printed below the Street line. - * + * * The Street address contains two lines above the street and two lines below the street.See Print the Street address. */ @sap.label : 'Street 4' @@ -584,7 +584,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { TaxJurisdiction : String(15); /** * Sales and distribution: - * + * * Regional zone of Goods recipient.Purchasing:Regional zone of supplier.You can define regional zones to suit the requirements of your own business and country.Sales and distributionthe system automatically proposes a suitable route by using the transportation zone of the goods recipient in combination with other information about the delivery, such as theCountries of origin and destinationShipping conditionsTransportation groupIn the USA, for example, you can define regional zones to correspond to the US postal zip codes. */ @sap.display.format : 'UpperCase' @@ -604,7 +604,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToAddress { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.creatable : 'false' @sap.deletable : 'false' @sap.content.version : '1' @@ -631,7 +631,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToFuncAndDept { key ValidityEndDate : Date not null; /** * Identifies the function that a person has within a company. - * + * * This is a contact person attribute that you can define in Customizing.Personnel managerSecretary */ @sap.display.format : 'UpperCase' @@ -640,7 +640,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToFuncAndDept { ContactPersonFunction : String(4); /** * Name of the department of a business partner for your internal usage. - * + * * The name given by the business partner to this particular department may differ from the name that you use. You can enter the name given by the business partner in the field company department.This is a contact person attribute that you can define in Customizing.For your purposes, the department name is "Sales". The business partner names the same department "Sales South". */ @sap.display.format : 'UpperCase' @@ -648,7 +648,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToFuncAndDept { ContactPersonDepartment : String(4); /** * Telephone number, consisting of dialling code and number, but without country dialling code. - * + * * If the telephone number consists of a company number and an extension, the extension must be entered in the field extension.Telephone number, as it is dialled from within the country.For the number "01234/567-0" enter the following:Telephone: 01234/567Estension: 0For the number "01234/567-891" enter the following:Telephone: 01234/567Extension: 891For the number "012-345-678" (678 as extension) enter the following:Telepone: 012-345Extension: 678In the following cases enter the complete number (without country dialling code) in the field Telephone:No part of the number can be regarded as an extension.You are not sure which part of the number can be regarded as an extension. */ @sap.display.format : 'UpperCase' @@ -657,7 +657,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToFuncAndDept { PhoneNumber : String(30); /** * Telephone extension number - * + * * If the telephone number consists of a company number and an extension, the extension should be entered here.Enter the extension.The following rules apply for the format of telephone and fax numbers:The length of the entries in the field Telephone and Extension (Fax and Extension) cannot be more than 24 characters in total.Leading spaces are not allowed in the field Telephone or Fax or in the field Extension.Valid characters are:Numbers (0123456789)Letters (ABCDEFGHIJKLMNOPQRSTUVWXYZ)Following other characters: /, (, ), - *, # and " " (space), but not as a leading space.If an + is entered as the first character, the system checks whether the specified number starts with a country code. If so, a warning message is displayed because the country code is automatically determined by the system and should not be stored in the Telephone number (Fax number) field.If an & is entered as the first character, the automatic check and formatting of the telephone number (fax number), as well as the determination of the country code, is suppressed.For the number "01234/567-0" enter the following:Telephone: 01234/567Estension: 0For the number "01234/567-891" enter the following:Telephone: 01234/567Extension: 891For the number "012-345-678" (678 as extension) enter the following:Telepone: 012-345Extension: 678In the following cases enter the complete number (without country dialling code) in the field Telephone:No part of the number can be regarded as an extension.You are not sure which part of the number can be regarded as an extension. */ @sap.display.format : 'UpperCase' @@ -666,7 +666,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToFuncAndDept { PhoneNumberExtension : String(10); /** * Fax number, consisting of dialling code and number, but without country dialling code. - * + * * If the fax number consists of a company number and an extension, the extension must be entered in the field extension.Fax number, as it is to be dialled from within the same country.Enter the following for the number "01234/567-0":Fax: 01234/567Extension: 0Enter the following for the number "01234/567-891":Fax: 01234/567Extension: 891For the number "012-345-678" (678 as extension) enter the following:Fax: 012-345Extension: 678In the following cases, enter the complete number (without country dialing code) in the field Fax:No part of the number can be considered as an extension.You are not sure which part of the number can be considered as an extension. */ @sap.display.format : 'UpperCase' @@ -675,7 +675,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToFuncAndDept { FaxNumber : String(30); /** * Fax extension number - * + * * If the fax number consists of a company number and an extension, the extension must be entered here.Enter the extensionThe following rules apply for the format of telephone and fax numbers:The length of the entries in the field Telephone and Extension (Fax and Extension) cannot be more than 24 characters in total.Leading spaces are not allowed in the field Telephone or Fax or in the field Extension.Valid characters are:Numbers (0123456789)Letters (ABCDEFGHIJKLMNOPQRSTUVWXYZ)Following other characters: /, (, ), - *, # and " " (space), but not as a leading space.If an + is entered as the first character, the system checks whether the specified number starts with a country code. If so, a warning message is displayed because the country code is automatically determined by the system and should not be stored in the Telephone number (Fax number) field.If an & is entered as the first character, the automatic check and formatting of the telephone number (fax number), as well as the determination of the country code, is suppressed.Enter the following for the number "01234/567-0":Fax: 01234/567Extension: 0Enter the following for the number "01234/567-891":Fax: 01234/567Extension: 891For the number "012-345-678" (678 as extension) enter the following:Fax: 012-345Extension: 678In the following cases, enter the complete number (without country dialing code) in the field Fax:No part of the number can be considered as an extension.You are not sure which part of the number can be considered as an extension. */ @sap.display.format : 'UpperCase' @@ -684,14 +684,14 @@ entity API_BUSINESS_PARTNER.A_BPContactToFuncAndDept { FaxNumberExtension : String(10); /** * Internet mail address, also called e-mail address. - * + * * Example: user.name@company.comThe Internet mail address is used to send mail via the Internet world-wide; the protocol used is SMTP (Simple Mail Transfer Protocol).The Internet mail address format is specified in various RFCs (Internet Request for Comment), including RFCs 821 and 822.This is not an IP address (192.56.30.6). */ @sap.label : 'Email Address' EmailAddress : String(241); /** * A relationship may exist between two business partners. The business partner relationship category characterizes the features of the relationship. - * + * * A distinction is made between a one-way and an undirected business partner relationship category. In a one-way relationship category, the relationship extends from one partner to another, but not vice versa.Marriage (undirected)Employee (one-way)Contact person (one-way) */ @sap.display.format : 'UpperCase' @@ -701,7 +701,7 @@ entity API_BUSINESS_PARTNER.A_BPContactToFuncAndDept { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Address Usage' entity API_BUSINESS_PARTNER.A_BuPaAddressUsage { @@ -716,7 +716,7 @@ entity API_BUSINESS_PARTNER.A_BuPaAddressUsage { key ValidityEndDate : DateTime not null; /** * Business partner attribute, which you can use to distinguish between various addresses by defining the address usage for communication with business partners. - * + * * Maintain the usage types for addresses (address types) in Customizing.You can create a short description and a name for the address type.When maintaining business partners you can use the function address usage to assign business partner addresses to address types.If necessary, you can set the indicator for multiple use in Customizing.Correspondence addressDelivery address */ @sap.display.format : 'UpperCase' @@ -724,7 +724,7 @@ entity API_BUSINESS_PARTNER.A_BuPaAddressUsage { key AddressUsage : String(10) not null; /** * Internal key for identifying a Business Address Services address. - * + * * For more information about the meaning and use of the address number and the Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -736,7 +736,7 @@ entity API_BUSINESS_PARTNER.A_BuPaAddressUsage { ValidityStartDate : DateTime; /** * Establishes which is the standard address for an address usage. - * + * * Several addresses per period can be assigned to an address usage.If this is the case, then this indicator controls which of the assigned addresses should be the standard address of the relevant usage. This is determined automatically when the address usage is accessed. */ @sap.display.format : 'UpperCase' @@ -745,7 +745,7 @@ entity API_BUSINESS_PARTNER.A_BuPaAddressUsage { StandardUsage : Boolean; /** * You can use authorization groups to stipulate which business partners a user is allowed to process. - * + * * Use the following authorization object:'Business partners: authorization groups' (B_BUPA_GRP).The system only checks this authorization if you made an entry in the "Authorization group" field for the business partner. Otherwise, any user may process the business partner. */ @sap.display.format : 'UpperCase' @@ -754,7 +754,7 @@ entity API_BUSINESS_PARTNER.A_BuPaAddressUsage { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Identification' entity API_BUSINESS_PARTNER.A_BuPaIdentification { @@ -765,7 +765,7 @@ entity API_BUSINESS_PARTNER.A_BuPaIdentification { key BusinessPartner : String(10) not null; /** * A document (such as an ID card or driver's license) or an entry in a system of records (such as a commercial register) whose key can be stored as an attribute for a business partner. - * + * * The identification type is for classifying identification numbers.You can define the identification types and their descriptions in Customizing.You can also specify for which business partner category an ID type should be valid.If necessary, assign the identification type to an Identification Category.You can only assign one identification type to an identification category. */ @sap.display.format : 'UpperCase' @@ -792,7 +792,7 @@ entity API_BUSINESS_PARTNER.A_BuPaIdentification { Country : String(3); /** * In some countries, the region forms part of the address. The meaning depends on the country. - * + * * The automatic address formatting function prints the region in addresses in the USA, Canada, Italy, Brazil or Australia, and the county in Great Britain.For more information, see the examples in the documentation on the Address Layout Key.Meaning of the regional code in ...Australia -> ProvinceBrazil -> StateCanada -> ProvinceGermany -> StateGreat Britain -> CountyItaly -> ProvinceJapan -> PrefectureSwitzerland -> CantonUSA -> State */ @sap.display.format : 'UpperCase' @@ -811,7 +811,7 @@ entity API_BUSINESS_PARTNER.A_BuPaIdentification { ValidityEndDate : Date; /** * You can use authorization groups to stipulate which business partners a user is allowed to process. - * + * * Use the following authorization object:'Business partners: authorization groups' (B_BUPA_GRP).The system only checks this authorization if you made an entry in the "Authorization group" field for the business partner. Otherwise, any user may process the business partner. */ @sap.display.format : 'UpperCase' @@ -820,13 +820,13 @@ entity API_BUSINESS_PARTNER.A_BuPaIdentification { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Industry' entity API_BUSINESS_PARTNER.A_BuPaIndustry { /** * Describes an industry. - * + * * An industry is a classification of companies according to their main business activity. For example, you can use Commerce, Banking, Services, Industry, Healthcare, Public Sector, Media, and so on, as industries.You can define industries along with their descriptions in Customizing.Assign the industry key to an industry key system. */ @sap.display.format : 'UpperCase' @@ -834,7 +834,7 @@ entity API_BUSINESS_PARTNER.A_BuPaIndustry { key IndustrySector : String(10) not null; /** * Serves to combine and categorize several industries into a group. - * + * * You can create different industry systems, each with its own catalog of industries, whereby an industry can be assigned to several industry systems.You have to select one industry system as the standard industry system. This is then automatically displayed in the initial screen for the maintenance of industry data.You can define an industry system along with its description in Customizing. You can assign several industry systems to a business partner.If you choose the button All Industry Systems, you can access all the industry systems defined in the Customizing using the input help. */ @sap.display.format : 'UpperCase' @@ -847,7 +847,7 @@ entity API_BUSINESS_PARTNER.A_BuPaIndustry { key BusinessPartner : String(10) not null; /** * Identifies the industry in an industry system that can be defined as the standard industry. - * + * * It is recommended that you define an industry within an industry system as the standard industry, because only the standard industries can be determined at the interfaces to BW or the APIs, for example.This means that even if only one industry exists within an industry system, it should be indicated as the standard industry as this this information cannot be determined otherwise. */ @sap.display.format : 'UpperCase' @@ -859,7 +859,7 @@ entity API_BUSINESS_PARTNER.A_BuPaIndustry { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.deletable : 'false' @sap.content.version : '1' @sap.label : 'Business Partner' @@ -885,7 +885,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { Supplier : String(10); /** * Key for academic title. - * + * * You can define a key for an academic title in Customizing. */ @sap.display.format : 'UpperCase' @@ -894,7 +894,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { AcademicTitle : String(4); /** * You can use authorization groups to stipulate which business partners a user is allowed to process. - * + * * Use the following authorization object:'Business partners: authorization groups' (B_BUPA_GRP).The system only checks this authorization if you made an entry in the "Authorization group" field for the business partner. Otherwise, any user may process the business partner. */ @sap.display.format : 'UpperCase' @@ -902,7 +902,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { AuthorizationGroup : String(4); /** * Category under which a business partner is classified. - * + * * You can distinguish between the following business partner categories:OrganizationNatural personGroup of natural persons or organizationsThe processing screens for the business partner categories are set up differently.So, for example, the screen for an organization contains the field Legal form, but this is not needed in the screen for a natural person. */ @sap.display.format : 'UpperCase' @@ -914,7 +914,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { BusinessPartnerFullName : String(81); /** * Classification assigned when creating a business partner. - * + * * Assign each business partner to a grouping when you create the business partner. The grouping determines the number range. You cannot change the assignment afterwards.You can define the groupings, their descriptions, the associated number range and other attributes in Customizing.You can define standard groupings for the internal and the external number assignment.For each grouping create a number range.When you create a business partner, the entry in the grouping field determines whether and how an entry is made in the business partner number field. */ @sap.display.format : 'UpperCase' @@ -931,7 +931,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { BusinessPartnerUUID : UUID; /** * Correspondence language (written) for business partners in the 'Person' category. Maintain the correspondence language for business partners in the 'Organization' and 'Group' category with the address (communication). - * + * * When transferring data (direct input), make sure that for a'Person', the field 'LANGU_CORR' and for an'Organization' or "Group" the field 'LANGU'has an entry. */ @sap.label : 'Correspondence lang.' @@ -959,7 +959,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { FirstName : String(40); /** * Key for form of address text. - * + * * You can also define a form of address text in Customizing.The form of address text can be maintained in different languages. */ @sap.display.format : 'UpperCase' @@ -968,7 +968,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { FormOfAddress : String(4); /** * An industry sector is the term used to classify a company according to its main business activity. - * + * * You can assign an industry sector to business partners in the category 'Organization'RetailBanksServicesIndustryHealth servicePublic sectorMedia */ @sap.display.format : 'UpperCase' @@ -976,7 +976,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { Industry : String(10); /** * Here you enter the first 7 digits of the international location number. - * + * * The International Location Number (ILN) is assigned (in Germany by the Centrale for Coorganisation GmbH)) when a company is founded. It consists of 13 digits, the last digit being the check digit. There are two categories of location numbers:Participants who only need an ILN to cleary and unmistakably identify themselves for communication with the business partner are given a category 1 ILN. This cannot be used to identify articles by means of EAN.Participants who wish to assign the location numbers for their own enterprise areas are given a category 2 ILN. For a category 2 ILN, digits 1 to 7 are described as basis number. This is used as basis for the creation of article numbers (EAN). */ @sap.display.format : 'NonNegative' @@ -985,7 +985,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { InternationalLocationNumber1 : String(7); /** * Here, you enter digits 8-12 of the 13-digit international location number. - * + * * The international location number (ILN) is assigned when establishing a company (by the "Zentrale für Coorganisation GmbH" in Germany). It consists of 13 digits, the last of which is the check digit. There are two types of international location numbers:Subscribers who only need one ILN to identify themselves in communication with the business partner are given an ILN of type 1. These cannot be used for identifying articles by means of EAN.Subscribers who need to assign location numbers for their own company areas are given an ILN of type 2. Positions 1 through 7 of the ILN type 2 are known as the basis number. This basis number forms the basis for article numbers (EAN). */ @sap.display.format : 'NonNegative' @@ -1002,7 +1002,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { IsMale : Boolean; /** * Indicator through which a distinction between natural and legal persons can be made during tax reporting. - * + * * Is used in Italy and Mexico ,among other countries.Brasil: If the indicator is not set, 'CGC' is relevant in tax number 1. If the indicator is set, 'CPF' is relevant in tax number 2.Colombia: In the case of some natural persons, the NIT number does not have a check digit. In this case you should set this indicator and the check is deactivated. */ @sap.display.format : 'UpperCase' @@ -1019,7 +1019,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { GenderCodeName : String(1); /** * Language for verbal communication with a business partner. - * + * * This language may differ from the language(s) defined for written correspondence. */ @sap.label : 'Language' @@ -1047,7 +1047,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { LastName : String(40); /** * Denotes certain legal norms that are of significance for the organization of a company. - * + * * For business partners in the category "Organization", you can state the legal form of the company. This is for information purposes only.Stock corporation (AG in Germany)Limited liability company (GmbH in Germany) */ @sap.display.format : 'UpperCase' @@ -1072,7 +1072,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { OrganizationBPName4 : String(40); /** * Indicates the official registration of a company in the Commercial Register. - * + * * If a company is not officially registered in the Commercial Register, it has to use some type of text addition, such as foundation pending, when referring to the legal form. */ @sap.display.format : 'Date' @@ -1081,7 +1081,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { OrganizationFoundationDate : Date; /** * Term for the end of bankruptcy proceedings. - * + * * This date also indicates that the company no longer exists. */ @sap.display.format : 'Date' @@ -1115,7 +1115,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { BusinessPartnerIsBlocked : Boolean; /** * You can use the business partner type to group business partners according to your own criteria in Customizing (IMG). - * + * * In Customizing you can show or hide fields for data entry, depending on the requirements of the relevant business partner type.Select a business partner type. You can obtain help by pressing the F4 key. */ @sap.display.format : 'UpperCase' @@ -1135,7 +1135,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { GroupBusinessPartnerName2 : String(40); /** * Internal key for identifying the address for communication data that spans all addresses in Business Partner. - * + * * For more information on the significance and usage of the address number, see the documentation for Business Address Services (BAS). */ @sap.display.format : 'UpperCase' @@ -1153,7 +1153,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { MiddleName : String(40); /** * The name format rule country and the name format rule key together uniquely identify a formatting rule. - * + * * A country can have several formats which correspond to different rules. Formatting rules describe the format of a person name. */ @sap.display.format : 'UpperCase' @@ -1167,14 +1167,14 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { NameFormat : String(2); /** * States the complete name of a person. - * + * * The complete name is generally generated and saved by the Business Address Services (BAS) according to country-specific rules from the individual name components (without the form of address).If, during the formatting of an address, you want to use an alternative name, you can manually format the alternative name here. */ @sap.label : 'Full Name' PersonFullName : String(80); /** * Internal key for identifying a person in Business Address Services. - * + * * For more information about the meaning and use of the person number and Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -1184,7 +1184,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { PersonNumber : String(10); /** * Establishes if the business partner is meant to be archived. - * + * * If the indicator is set, the relevant business partner can be archived from the view of the business partner administration.If the check of the data to be archived shows, for example, that there are still active business transactions the archiving of the business partner data is prevented even if the indicator is set.If the indicator is not set, the business partner will not be taken into consideration during archiving. */ @sap.display.format : 'UpperCase' @@ -1193,7 +1193,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { IsMarkedForArchiving : Boolean; /** * Business partner number from an external system or a legacy system. - * + * * If the current business partner is known under a different number in an external system, you can store this number here for information purposes.Direct input gives you the option of maintaining a business partner by specifying the external business partner number. If you maintain business partner data in your legacy system, you can transmit changes made to business partners to the SAP system without having to know the SAP business partner number in the legacy system. */ @sap.display.format : 'UpperCase' @@ -1226,7 +1226,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartner { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Address' entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { @@ -1237,7 +1237,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { key BusinessPartner : String(10) not null; /** * Internal key for identifying a Business Address Services address. - * + * * For more information about the meaning and use of the address number and the Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -1253,7 +1253,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { ValidityEndDate : DateTime; /** * You can use authorization groups to stipulate which business partners a user is allowed to process. - * + * * Use the following authorization object:'Business partners: authorization groups' (B_BUPA_GRP).The system only checks this authorization if you made an entry in the "Authorization group" field for the business partner. Otherwise, any user may process the business partner. */ @sap.display.format : 'UpperCase' @@ -1266,21 +1266,21 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { AddressUUID : UUID; /** * Additional address field which is printed above the Street line. - * + * * The Street address contains two lines above the street and two lines below the street.See Print the Street address. */ @sap.label : 'Street 3' AdditionalStreetPrefixName : String(40); /** * Additional address field which is printed under the Street line. - * + * * The Street address has two lines above the street and two lines below the steet.See Print the Street address. */ @sap.label : 'Street 5' AdditionalStreetSuffixName : String(40); /** * Time zone as part of an address. - * + * * The time zone is automatically determined by the system in address maintenance if time zone Customizing is maintained.It depends on the country and the region. (Region means state, province or county, depending on the country)The automatic determination is only made if there is no value in the time zone field. */ @sap.display.format : 'UpperCase' @@ -1289,7 +1289,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { AddressTimeZone : String(6); /** * Part of the address (c/o = care of) if the recipient is different from the occupant and the names are not similar (e.g. subtenants). - * + * * Put the country-specific code (e.g. c/o) in front of the name of the occupant. This is not automatically done in the print format, like the language-specific word "PO Box".John Smithc/o David BrownThis field is not always automatically printed, as it was subsequently added to the address structure.The print program or form may need to be adjusted.This exception applies to the following fields:Street2, Street3, Street4, Street5, c/o name, and to all address fields added after Release 4.5. */ @sap.label : 'c/o' @@ -1301,14 +1301,14 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { CityCode : String(12); /** * City name as part of the address. - * + * * The city name is saved redundantly in another database field in upper- case letters, for search help.If the Postal regional structure ('city file') is active, the city name is checked against the Cities defined in the regional structure. */ @sap.label : 'City' CityName : String(40); /** * Postal code that is assigned directly to one company (= company postal code = major customer postal code). - * + * * This field is used for countries where major companies are assigned their own postal code by the national post office.This postal code has to be entered in the field "Company Postal Code". Postal codes for group major customers, however, have to be entered in the field "PO Box Postal Code", since individual customers with a shared postal code for group major customers are differentiated by means of their PO box. */ @sap.display.format : 'UpperCase' @@ -1317,7 +1317,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { CompanyPostalCode : String(10); /** * The country key contains information which the system uses to check entries such as the length of the postal code or bank account number. - * + * * The two-character ISO code in accordance with ISO 3166, which is delivered by SAP as a default, is usually used.It could also be the vehicle license plate country-code or a typical country key, for example, in Germany the Federal statistics office key.The country keys are determined at system installation in the global settings.The definition of the country key in the SAP system does not have to match political or government entities.Since the country key does not have to correspond to the ISO code in all installations, programs that differ according to certain values of the country key cannot query the country key T005-LAND1, but have to program based on the ISO code T005 INTCA. */ @sap.display.format : 'UpperCase' @@ -1325,14 +1325,14 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { Country : String(3); /** * Specifies the county’s name - * + * * This field is used to store the county’s name. You can enter the name of the county in this field. */ @sap.label : 'County' County : String(40); /** * The delivery service is part of the PO box address. - * + * * Some countries offer different services in addition to regular postal delivery and PO boxes, for example the Private Bag or Response Bag. If an address is related to one of these delivery services, the information about this particular delivery service has to be entered in the corresponding fields.In the field "Number of Delivery Service," the number of the Private Bag, Response Bag, or other relevant service has to be entered. Entering a number is not mandatory for each delivery service.For each address, either the information about the PO box or the information about the delivery service can be entered, but not both types of information at the same time.Mr PickeringPrivate Bag 106999Timaru 7942Delivery services will only be taken into account for address formatting in countries in which they are commonly used in addition to regular postal delivery and PO boxes, for example, in Australia, New Zealand, and the USA. In all other countries, these fields will not be taken into account for address formatting. */ @sap.display.format : 'UpperCase' @@ -1341,7 +1341,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { DeliveryServiceNumber : String(10); /** * The delivery service is part of the PO box address. - * + * * Some countries offer different services in addition to regular postal delivery and PO boxes, for example the Private Bag or Response Bag. If an address is related to one of these delivery services, the information about this particular delivery service has to be entered in the corresponding fields.In the field "Type of Delivery Service," the type of the delivery service has to be entered.For each address, either the information about the PO box or the information about the delivery service can be entered, but not both types of information at the same time.Mr PickeringPrivate Bag 106999Timaru 7942Delivery services will only be taken into account for address formatting in countries in which they are commonly used in addition to regular postal delivery and PO boxes, for example, in Australia, New Zealand, and the USA. In all other countries, these fields will not be taken into account for address formatting. */ @sap.display.format : 'UpperCase' @@ -1350,14 +1350,14 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { DeliveryServiceTypeCode : String(4); /** * City or District supplement - * + * * In some countries, this entry is appended with a hyphen to the city name by the automatic address formatting, other countries, it is output on a line of its own or (e.g. in the USA) not printed.See the examples in the Address Layout Key documentation. */ @sap.label : 'District' District : String(40); /** * Key for form of address text. - * + * * You can also define a form of address text in Customizing.The form of address text can be maintained in different languages. */ @sap.display.format : 'UpperCase' @@ -1368,7 +1368,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { FormOfAddress : String(4); /** * This field contains the full name or formatted name of a party. - * + * * For organizations or document addresses, typically the fields Name1 and Name2 are concatenated.For persons the field contains the formatted name according to country specific rules. It corresponds e.g. to the content of the fields BUT000-NAME1_TEXT or ADRP-NAME_TEXT. */ @sap.label : 'Full Name' @@ -1378,7 +1378,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { FullName : String(80); /** * City of residence which is different from the postal city - * + * * In some countries, the residential city is required if it differs from the postal city.In the USA, the official street indexes, against which data can be checked, are based on the residential city, not the postal city, which may be different.It is the same in France, where a postally correct address must contain the residential city in a separate line above the postal city, if it differs from the postal city.This field is not always automatically printed, as it was subsequently added to the address structure.The print program or form may need to be adjusted.This exception applies to the following fields:Street2, Street3, Street4, Street5, c/o name, and to all address fields added after Release 4.5. */ @sap.label : 'Different City' @@ -1386,14 +1386,14 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { HomeCityName : String(40); /** * House number as part of an address. - * + * * It is printed in the Street line.Other supplementary street information can be entered in the House number supplement or one of the Street2, Street3, Street4 or Street5 fields. See Print the Street address.A house number (e.g. 117) or a house number with supplement (e.g. 117a), or a house number range (e.g. 16-20), can be maintained in this field. */ @sap.label : 'House Number' HouseNumber : String(10); /** * House number supplement as part of an address, e.g. - * + * * App. 17 orSuite 600.It is printed in the Street line.Further Street supplements can be put in one of the fields Street2, Street3, Street4 or Street5.See Print the Street address. */ @sap.label : 'Supplement' @@ -1401,14 +1401,14 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { HouseNumberSupplementText : String(10); /** * The language key indicates - * + * * - the language in which texts are displayed,- the language in which you enter texts,- the language in which the system prints texts. */ @sap.label : 'Language Key' Language : String(2); /** * PO Box number as part of an address. - * + * * Only enter the PO Box number in this field. The text "PO Box" is provided in the recipient language by the system when you print the address.When you print an address, the "Street address" and the "PO Box address" are distinguished. The print program determines which of them has priority if both are maintained in an address record.Besides the PO Box number, the PO Box address uses the following fields:PO Box postal code, if specified (otherwise the normal postal code)PO Box city, if specified (otherwise the normal city)PO Box region, if specified (otherwise the normal region)PO Box country, if specified (otherwise the normal country)If the address is a "PO Box" (without a number), do not fill the "PO Box" field. Select the "PO Box w/o Number" indicator instead.You can also enter a company postal code for organizational addresses, instead of a PO Box. A separate field is predefined for this entry.For general information and examples about address formatting, see the documentation on the Address Structure Key. */ @sap.display.format : 'UpperCase' @@ -1416,7 +1416,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { POBox : String(10); /** * Different city for the PO Box as an address component. - * + * * The PO Box city can be entered here if it is different from the address city.If the address is only a PO Box address, enter the city in the normal city field.If the address contains two different city names for the address and the PO Box address, use this field. */ @sap.label : 'PO Box City' @@ -1424,7 +1424,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { POBoxDeviatingCityName : String(40); /** * Different PO Box country in address. - * + * * The PO Box country can be entered here, if it is different from the street address country.If the address only has a PO Box address, the country is in the normal country field.Use this field if the address has two different country values for the street address and the PO Box address.This field is not always automatically printed, as it was subsequently added to the address structure.The print program or form may need to be adjusted.This exception applies to the following fields:Street2, Street3, Street4, Street5, c/o name, and to all address fields added after Release 4.5. */ @sap.display.format : 'UpperCase' @@ -1432,7 +1432,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { POBoxDeviatingCountry : String(3); /** * Different Region for PO Box in an address. - * + * * Enter the PO Box Region here, if it differs from the street address region.If the address only has a PO Box address, the Region in in the normal Region field.Use this field if the address has two different Region values for the street address and the PO Box address.This field is not always automatically printed, as it was subsequently added to the address structure.The print program or form may need to be adjusted.This exception applies to the following fields:Street2, Street3, Street4, Street5, c/o name, and to all address fields added after Release 4.5. */ @sap.display.format : 'UpperCase' @@ -1441,7 +1441,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { POBoxDeviatingRegion : String(3); /** * PO Box address without PO Box number flag. - * + * * Only the word 'PO Box' is output in PO Box addresses without PO Box number.Set this flag for a PO Box address without PO Box number.This field is not always automatically printed, as it was subsequently added to the address structure.The print program or form may need to be adjusted.This exception applies to the following fields:Street2, Street3, Street4, Street5, c/o name, and to all address fields added after Release 4.5. */ @sap.display.format : 'UpperCase' @@ -1450,14 +1450,14 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { POBoxIsWithoutNumber : Boolean; /** * The PO box lobby is part of the PO box address. - * + * * In some countries, entering a PO box, postal code and city is not sufficient to uniquely identify a PO box, because the same PO box number is assigned multiple times in some cities.Therefore, additional information might be required to determine the post office of the PO box in question. This information can be entered in the field "PO Box Lobby."Mr NellingPO Box 4099HighfieldTimaru 7942The PO box lobby will only be taken into account for address formatting in countries in which it is commonly used in addition to regular postal delivery and PO boxes, for example, in Canada or New Zealand. In all other countries, this field will not be taken into account for address formatting. */ @sap.label : 'PO Box Lobby' POBoxLobbyName : String(40); /** * Postal code that is required for a unique assignment of the PO box. - * + * * This field is used for countries where a different postal code applies to mail that is sent to the PO box rather than to the street address of a particular business partner.Postal codes for group major customers also have to be entered in the field for the PO box postal code since individual customers with a shared postal code for group major customers are differentiated by means of the PO box. Postal codes for major customers (= company postal codes), however, are assigned to one customer only and have to be entered in the field 'Company Postal Code'. */ @sap.display.format : 'UpperCase' @@ -1465,7 +1465,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { POBoxPostalCode : String(10); /** * Internal key for identifying a person in Business Address Services. - * + * * For more information about the meaning and use of the person number and Business Address Services concepts, see the function group SZA0 documentation. */ @sap.display.format : 'UpperCase' @@ -1475,7 +1475,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { Person : String(10); /** * Postal code as part of the address - * + * * If different postal codes are maintained for the PO Box and Street address of an address, this field contains the Street address postal code. */ @sap.display.format : 'UpperCase' @@ -1484,7 +1484,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { PostalCode : String(10); /** * Communication method with which you can exchange documents and messages with a business partner. - * + * * In Business Address Services, you can specify a standard communication method that can be used by programs to determine the means of communication for sending messages.One business partner wants all messages by fax, another by e-mail.The application context can restrict the possible methods of communication. For example, invitations should perhaps only be sent by post because of enclosures, whereas minutes can be sent by post, fax or e-mail.Communication strategies can be defined for this purpose and applied in application contexts. */ @sap.display.format : 'UpperCase' @@ -1493,7 +1493,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { PrfrdCommMediumType : String(3); /** * In some countries, the region forms part of the address. The meaning depends on the country. - * + * * The automatic address formatting function prints the region in addresses in the USA, Canada, Italy, Brazil or Australia, and the county in Great Britain.For more information, see the examples in the documentation on the Address Layout Key.Meaning of the regional code in ...Australia -> ProvinceBrazil -> StateCanada -> ProvinceGermany -> StateGreat Britain -> CountyItaly -> ProvinceJapan -> PrefectureSwitzerland -> CantonUSA -> State */ @sap.display.format : 'UpperCase' @@ -1502,21 +1502,21 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { Region : String(3); /** * Street name as part of the address. - * + * * The street name is saved, redundantly in upper case in another database field, for search help purposes.There are other fields for address parts which can be printed above or below the street. See Print the Street address.The house number and other supplements are usually maintained in their own fields. See Formatting the Street line. */ @sap.label : 'Street' StreetName : String(60); /** * Additional address field which is printed above the Street line. - * + * * The Street address contains two lines above the street and two lines below the street.See Print the Street address.This field is not always automatically printed, as it was subsequently added to the address structure.The print program or form may need to be adjusted.This exception applies to the following fields:Street2, Street3, Street4, Street5, c/o name, and to all address fields added after Release 4.5. */ @sap.label : 'Street 2' StreetPrefixName : String(40); /** * Additional address field which is printed below the Street line. - * + * * The Street address contains two lines above the street and two lines below the street.See Print the Street address. */ @sap.label : 'Street 4' @@ -1527,7 +1527,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { TaxJurisdiction : String(15); /** * Sales and distribution: - * + * * Regional zone of Goods recipient.Purchasing:Regional zone of supplier.You can define regional zones to suit the requirements of your own business and country.Sales and distributionthe system automatically proposes a suitable route by using the transportation zone of the goods recipient in combination with other information about the delivery, such as theCountries of origin and destinationShipping conditionsTransportation groupIn the USA, for example, you can define regional zones to correspond to the US postal zip codes. */ @sap.display.format : 'UpperCase' @@ -1536,7 +1536,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { TransportZone : String(10); /** * Address number from an external system or a legacy system - * + * * If the current address has a different number in an external system, you can save this number here for information purposes.In direct input you are able to maintain an address for a business partner by stating the external address number. If your business partner data is maintained in a legacy system, you can thus transmit changes to a BP address to the SAP system without having to know the SAP address number in the legacy system. */ @sap.display.format : 'UpperCase' @@ -1558,7 +1558,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerAddress { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Bank' entity API_BUSINESS_PARTNER.A_BusinessPartnerBank { @@ -1569,7 +1569,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerBank { key BusinessPartner : String(10) not null; /** * Key identifying a business partner's bank details. - * + * * Enter a bank details ID for each separate set of bank details for a business partner.Business Partner: H. MillerBD-ID Fin.institution Acct no. 0001 Chemical Bank, NYC 56234560002 Chemical Bank, NYC 56231220003 First Bank of Pittsburgh ...Business partner: T.Wolsey and Co.BD-ID Fin.institution Acct no.GIR0 Citibank, Charleston ...GIR1 Chemical Bank, NYC ... */ @sap.display.format : 'UpperCase' @@ -1577,7 +1577,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerBank { key BankIdentification : String(4) not null; /** * Identifies the country in which the bank is based. - * + * * The country key determines according to which rules the remaining bank data (for example, bank number and bank account number) is checked. */ @sap.display.format : 'UpperCase' @@ -1591,7 +1591,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerBank { BankName : String(60); /** * The bank key (under which the bank data is stored in the appropriate country) is specified in this field. - * + * * The country-specific meaning of this bank key is specified when defining country key.Normally banks have a bank number, which then also appears in the control data of the bank.In certain countries the bank account number assumes this function; in such a case there would be no bank numbers, the bank details are then under the account number.For data medium exchange it can be useful to be able create banks for foreign business partners without a bank number, even if the country in question has bank numbers. In such cases the bank key can be assigned internally.If the bank data is under another key, such as the SWIFT code for example, numbers can also be assigned externally. */ @sap.display.format : 'UpperCase' @@ -1599,7 +1599,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerBank { BankNumber : String(15); /** * Uniquely identifies a bank throughout the world. - * + * * SWIFT stands for Society for Worldwide Interbank Financial Telecommunication.BIC stands for Bank Identifier Code.This globally unique code can be used in international payment transactions to identify the bank without the need to specify an address or bank number. Specification of the SWIFT code/BIC is mainly relevant for automatic payment transactions. */ @sap.display.format : 'UpperCase' @@ -1610,7 +1610,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerBank { SWIFTCode : String(11); /** * Brazil, France, Spain, Portugal and Italy - * + * * The field contains a check key for the combination bank number and bank account number.USAIn USA this field is used to differentiate between a savings and a current account (if no value is entered, the default value 01 is used).01 Current account02 Savings account03 Loan account04 General ledgerJapanIn Japan this field specifies the type of account. This information is is copied from the payment medium print program into payment medium. The following is an example of the account types used:01 FUTSU (similar to a savings account)02 TOUZA (similar to a current account)04 CHOCHIKU (similar to an investment account)09 Other types of bank accountsSouth AfricaIn South Africa this field specifies the type of account. The information entered here is forwarded to the bank that carries out the payment order. The following account types are permitted in ABC format:01 Current (Cheque) Account02 Savings Account03 Transmission Account04 Bond Account06 Subscription Share AccountArgentinaIn Argentina this field specifies the type of account:CC Current Account (Cuenta corriente)CA Saving Account (Caja de ahorro)CE Special Saving Account (Caja de ahorro especial)CS Salary Account (Cuenta sueldos)VenezuelaIn Venezuela this field specifies the type of account:CC Checking Account (Cuenta corriente)CA Saving Account (Cuenta de ahorro)CE Special Saving Account (Cuenta de ahorro especial)CS Salary Account (Cuenta sueldos)MexicoIn Mexico this field contains a two-digit key for classifying the bank account (for example, as a savings or current account). This key have different definitions, depending on the bank.NoteFor countries that are not listed here, this field can be used for account-specific information. */ @sap.display.format : 'UpperCase' @@ -1633,7 +1633,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerBank { ValidityEndDate : DateTime; /** * A uniform standardized ID number for representing bank details that is in accordance with the ECBS (European Committee for Banking Standards). An IBAN has a maximum of 34 alphanumeric characters and is a combination of the following elements: - * + * * Country key of the bank (ISO code)Two-digit check numberCountry-specific account number (in Germany this consists of the bank number and account number, in France the bank number, account number and check key).The IBAN not only makes international payments easier, in some countries it has advantages for domestic payments as well. Depending on the country, it can mean advantages for value and fees.The IBAN can be maintained in parallel with the bank details but does not replace them. It is stored under the master data of the business partner and can then be used when creating the payment medium.Since it is only the bank that has the account that may generate the IBAN corresponding to an account number, the SAP system only generates a proposal. You can confirm or change this proposal. If no proposal is generated, enter the IBAN manually.An IBAN in Belgium may look like this:Electronic Form:BE62510007547061Printed form, as it would appear on an invoice:IBAN BE62 5100 0754 7061 */ @sap.display.format : 'UpperCase' @@ -1651,7 +1651,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerBank { BankAccount : String(18); /** * Additional details for the bank details of the business partner. - * + * * In some countries the data for the bank details of the business partner (bank number, bank account number, name of the account holder) have to supplemented by other details in order to be able to use certain payment processes. This supplementary details are defined here.If additional data is required for the bank details for payment transactions in your country (see the following examples), enter the reference information.If for an automatic debit the bank requires the reference number of the collection authorization in Norway or Great Britain, specify this number here.In Great Britain when making payments to an account in a 'Building Society' you must specify which number payment recipient has. These details must be defined in the reference field, whereas the fields Bank Key and Account Number are to be used for the bank details of the 'Building Society'.In Great Britain when entering a building society account number, the name of the building society should also be maintained in the system. */ @sap.display.format : 'UpperCase' @@ -1660,7 +1660,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerBank { BankAccountReferenceText : String(20); /** * States that the bank has collection authorization from the business partner for the account. - * + * * Set this indicator if the bank has collection authorization.Note for Accounts Receivable (FI-AR)If this indicator is not set, there is no bank collection.Note for Contract Accounts Receivable and Payable (FI-CA)This indicator is not relevant. */ @sap.display.format : 'UpperCase' @@ -1674,7 +1674,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerBank { CityName : String(35); /** * You can use authorization groups to stipulate which business partners a user is allowed to process. - * + * * Use the following authorization object:'Business partners: authorization groups' (B_BUPA_GRP).The system only checks this authorization if you made an entry in the "Authorization group" field for the business partner. Otherwise, any user may process the business partner. */ @sap.display.format : 'UpperCase' @@ -1683,7 +1683,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerBank { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Contact' entity API_BUSINESS_PARTNER.A_BusinessPartnerContact { @@ -1712,7 +1712,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerContact { ValidityStartDate : Date; /** * States whether the relationship is a standard relationship. - * + * * If several relationships of the BP relationship category contact person have been defined for, you can set the indicator standard relationship for one of these relationships.A relationship that is marked as a standard relationship can be used whenA certain scenario automatically selects a contact personThe contact person responsible is not knownYou can give this indicator to only one business partner relationship of a BP relationship category for a particular period. Another relationship of the same relationship category can be indicated as the standard relationship only if the periods for the relationship do not overlap or coincide. */ @sap.display.format : 'UpperCase' @@ -1721,7 +1721,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerContact { IsStandardRelationship : Boolean; /** * A relationship may exist between two business partners. The business partner relationship category characterizes the features of the relationship. - * + * * A distinction is made between a one-way and an undirected business partner relationship category. In a one-way relationship category, the relationship extends from one partner to another, but not vice versa.Marriage (undirected)Employee (one-way)Contact person (one-way) */ @sap.display.format : 'UpperCase' @@ -1735,7 +1735,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerContact { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.deletable : 'false' @sap.content.version : '1' @sap.label : 'Role' @@ -1747,7 +1747,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerRole { key BusinessPartner : String(10) not null; /** * Function that a business partner takes on, depending on a business transaction. - * + * * You can define business partner roles along with their attributes in Customizing.You can create an alphanumeric, 6-digit key for the BP role. You can also choose a title as the short form and a description as the long form for the role text.Screen control in the dialog takes place by assigning a BP view.A program can access specific business partner roles for a business partner using thebusiness partner role category . The role categories are also in the TB003 table. */ @sap.display.format : 'UpperCase' @@ -1763,7 +1763,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerRole { ValidTo : DateTime; /** * You can use authorization groups to stipulate which business partners a user is allowed to process. - * + * * Use the following authorization object:'Business partners: authorization groups' (B_BUPA_GRP).The system only checks this authorization if you made an entry in the "Authorization group" field for the business partner. Otherwise, any user may process the business partner. */ @sap.display.format : 'UpperCase' @@ -1772,7 +1772,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerRole { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Tax Number' entity API_BUSINESS_PARTNER.A_BusinessPartnerTaxNumber { @@ -1792,7 +1792,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerTaxNumber { BPTaxNumber : String(20); /** * Specifies the tax number. - * + * * You can enter up to 60 characters in this field. */ @sap.display.format : 'UpperCase' @@ -1801,7 +1801,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerTaxNumber { BPTaxLongNumber : String(60); /** * You can use authorization groups to stipulate which business partners a user is allowed to process. - * + * * Use the following authorization object:'Business partners: authorization groups' (B_BUPA_GRP).The system only checks this authorization if you made an entry in the "Authorization group" field for the business partner. Otherwise, any user may process the business partner. */ @sap.display.format : 'UpperCase' @@ -1810,7 +1810,7 @@ entity API_BUSINESS_PARTNER.A_BusinessPartnerTaxNumber { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.creatable : 'false' @sap.deletable : 'false' @sap.content.version : '1' @@ -1828,7 +1828,7 @@ entity API_BUSINESS_PARTNER.A_Customer { AuthorizationGroup : String(4); /** * Indicates if the processing of billing documents is blocked for the customer in all sales areas (company-wide, for example). - * + * * You can define different kinds of block, according to the needs of your organization. You can, for example, automatically block the processing of all credit memos to a certain customer, pending manual approval. */ @sap.display.format : 'UpperCase' @@ -1851,7 +1851,7 @@ entity API_BUSINESS_PARTNER.A_Customer { CreationDate : Date; /** * The account group is a classifying feature within customer master records. The account group determines: - * + * * in which number range the customer account number should be;whether the number is assigned by the user or by the system;which specifications are necessary or possible in the master record. */ @sap.display.format : 'UpperCase' @@ -1860,7 +1860,7 @@ entity API_BUSINESS_PARTNER.A_Customer { CustomerAccountGroup : String(4); /** * Specifies a classification of the customer (for example, classifies the customer as a bulk purchaser). - * + * * The classifications are freely definable according to the needs of your organization. */ @sap.display.format : 'UpperCase' @@ -1879,7 +1879,7 @@ entity API_BUSINESS_PARTNER.A_Customer { CustomerName : String(80); /** * Indicates if delivery processing is blocked for the customer in all sales areas (company-wide, for example). - * + * * You can define different kinds of block, according to the needs of your organization. You can, for example, automatically block all deliveries to a certain customer for credit reasons. */ @sap.display.format : 'UpperCase' @@ -1888,7 +1888,7 @@ entity API_BUSINESS_PARTNER.A_Customer { DeliveryIsBlocked : String(2); /** * Denotes a natural person. - * + * * In the following countries, the system needs to know whether the taxpayer is a legal or natural person so that it can check the tax numbers correctly:BrazilBulgariaColombiaCroatiaGreeceItalyMexicoPeruSloveniaThailandUkraineThe flag is also used in conjunction with the Statement of Payments to Natural Persons report, as used in the Czech Republic and in Slovakia. This report only covers customers and vendors for whom you have set this indicator.In South Korea, it is used in conjunction with the Generic Withholding Tax Reporting program. */ @sap.display.format : 'UpperCase' @@ -1896,7 +1896,7 @@ entity API_BUSINESS_PARTNER.A_Customer { NFPartnerIsNaturalPerson : String(1); /** * Indicates if sales order processing is blocked for the customer in all sales areas (company-wide, for example). - * + * * If you block sales order processing, the block counts for the following partner functions of the customer:Sold-to partyShip-to partyPayerIf you want to process an order where the ship-to party differs from the sold-to party, and the ship-to party is blocked, you cannot process the order.You can define different kinds of block, according to the needs of your organization. You can, for example, automatically block all free of charge deliveries and credit memo requests for a certain customer, pending manual approval before further processing can take place. */ @sap.display.format : 'UpperCase' @@ -1905,7 +1905,7 @@ entity API_BUSINESS_PARTNER.A_Customer { OrderIsBlockedForCustomer : String(2); /** * Indicates that the account is blocked for posting for all company codes. - * + * * If you set this indicator, the system prevents users from posting items to this account and issues an error message to inform them that the account is blocked. */ @sap.display.format : 'UpperCase' @@ -1919,7 +1919,7 @@ entity API_BUSINESS_PARTNER.A_Customer { Supplier : String(10); /** * If the customer or the vendor belongs to a group, you can enter a group key here. The group key is freely assignable. - * + * * If you create a matchcode using this group key, group evaluations are possible. */ @sap.display.format : 'UpperCase' @@ -1932,7 +1932,7 @@ entity API_BUSINESS_PARTNER.A_Customer { FiscalAddress : String(10); /** * An industry is a distinct group of companies with the same basic business activity. The industry key is used in selecting data for evaluations (for example, a vendor master data list). You can specify industries such as trade, banking, service, manufacturing, health care, public service, media and so on. - * + * * The industry field belongs to the general data area of customer and vendor master records. */ @sap.display.format : 'UpperCase' @@ -1943,7 +1943,7 @@ entity API_BUSINESS_PARTNER.A_Customer { Industry : String(4); /** * Specifies the code that uniquely identifies the industry (or industries) of the customer. - * + * * Depending on the standards your organization uses (for example, Standard Industry Codes (SIC)), enter the appropriate code. You can assign more than one industry code to a customer by choosing Create more. */ @sap.display.format : 'UpperCase' @@ -1953,7 +1953,7 @@ entity API_BUSINESS_PARTNER.A_Customer { IndustryCode1 : String(10); /** * Specifies an additional code that identifies the industry (or industries) of the customer. - * + * * Depending on the standards your organization uses (for example, Standard Industry Codes (SIC)), enter the appropriate code. */ @sap.display.format : 'UpperCase' @@ -1963,7 +1963,7 @@ entity API_BUSINESS_PARTNER.A_Customer { IndustryCode2 : String(10); /** * Specifies an additional code that identifies the industry (or industries) of the customer. - * + * * Depending on the standards your organization uses (for example, Standard Industry Codes (SIC)), enter the appropriate code. */ @sap.display.format : 'UpperCase' @@ -1973,7 +1973,7 @@ entity API_BUSINESS_PARTNER.A_Customer { IndustryCode3 : String(10); /** * Specifies an additional code that identifies the industry (or industries) of the customer. - * + * * Depending on the standards your organization uses (for example, Standard Industry Codes (SIC)), enter the appropriate code. */ @sap.display.format : 'UpperCase' @@ -1983,7 +1983,7 @@ entity API_BUSINESS_PARTNER.A_Customer { IndustryCode4 : String(10); /** * Specifies an additional code that identifies the industry (or industries) of the customer. - * + * * Depending on the standards your organization uses (for example, Standard Industry Codes (SIC)), enter the appropriate code. */ @sap.display.format : 'UpperCase' @@ -1993,7 +1993,7 @@ entity API_BUSINESS_PARTNER.A_Customer { IndustryCode5 : String(10); /** * Here you enter the first 7 digits of the international location number. - * + * * The International Location Number (ILN) is assigned (in Germany by the Centrale for Coorganisation GmbH)) when a company is founded. It consists of 13 digits, the last digit being the check digit. There are two categories of location numbers:Participants who only need an ILN to cleary and unmistakably identify themselves for communication with the business partner are given a category 1 ILN. This cannot be used to identify articles by means of EAN.Participants who wish to assign the location numbers for their own enterprise areas are given a category 2 ILN. For a category 2 ILN, digits 1 to 7 are described as basis number. This is used as basis for the creation of article numbers (EAN). */ @sap.display.format : 'NonNegative' @@ -2002,7 +2002,7 @@ entity API_BUSINESS_PARTNER.A_Customer { InternationalLocationNumber1 : String(7); /** * Specifies a regional division according to the market categories created by the A. C. Nielsen company. - * + * * By allocating a Nielsen division, you can use the services of the Nielsen Institute to create a market analysis of your customers. */ @sap.display.format : 'UpperCase' @@ -2015,7 +2015,7 @@ entity API_BUSINESS_PARTNER.A_Customer { ResponsibleType : String(2); /** * Specifies the tax number. - * + * * Enter the appropriate tax number:Country Tax NumberArgentina CUIT number or CUIL numberBelgium Enterprise numberBrazil CNPJ numberBulgaria Unified identification codeChile RUT numberChina VAT registration number (shui wu deng ji hao)Colombia NIT numberCroatia Legal persons: company identification numberNatural persons: JMBG numberCzech Republic DIC numberFrance SIRET numberGreece Personal IDHungary Tax numberItaly Fiscal codeKazakhstan RNN (obsolete)Mexico RFC numberNetherlands SI registration number (Aansluitnummer UWV) of chain- liability vendorNorway VAT numberPeru RUC numberPhilippines Taxpayer identification number (see below)Poland NIP numberPortugal NIF numberRomania Tax numberRussia INNSlovakia DIC numberSlovenia Tax numberSouth Korea Natural persons: Personal identification numberLegal persons: Corporation IDSpain NIF numberSwitzerland UID numberTaiwan - China GUI registration numberThailand Personal IDTurkey Name of business partner's tax officeUkraine Taxpayer identification numberUnited Kingdom Company registration numberUnited States Social security numberVenezuela RIF numberIn the Philippines, enter the taxpayer identification number with a V or N at the end, as follows:If the business partner is liable to VAT: 999-999-999-999VIf the business partner is not liable to VAT: 999-999-999-999N */ @sap.display.format : 'UpperCase' @@ -2025,7 +2025,7 @@ entity API_BUSINESS_PARTNER.A_Customer { TaxNumber1 : String(16); /** * Specifies the tax number. - * + * * Enter the appropriate tax number:Country Tax NumberArgentina NIP number or CM numberBelgium VAT numberBrazil CPF numberBulgaria Legal persons: tax numberNatural persons: personal IDCroatia OIB number Czech Republic ICO numberFrance SIREN numberGreece AFM numberIndia TINItaly VAT numberKazakhstan BC (Beneficiary Code)Netherlands BSN numberRussia OKPO codeSlovakia ICO numberSouth Korea VAT registration numberSweden Organization registration numberSwitzerland VAT numberTaiwan - China Tax registration numberUkraine Legal persons: USREOU numberNatural persons: SRNP numberTurkey Tax numberUnited Kingdom NI numberUnited States Employer identification numberVenezuela NIT number */ @sap.display.format : 'UpperCase' @@ -2035,7 +2035,7 @@ entity API_BUSINESS_PARTNER.A_Customer { TaxNumber2 : String(11); /** * Specifies the tax number. - * + * * Enter the tax number that applies:Country Tax numberArgentina Withholding agent numberBrazil State tax numberBulgaria Social security numberMexico CURP numberKazakhstan BINNetherlands Tax registration number (Loonbelastingnummer) of the chain-liability vendorRussia KPP numberThailand Tax ID Ukraine VAT registration number */ @sap.display.format : 'UpperCase' @@ -2045,7 +2045,7 @@ entity API_BUSINESS_PARTNER.A_Customer { TaxNumber3 : String(18); /** * Specifies the tax number. - * + * * Enter the appropriate tax number:Country Tax NumberBrazil Municipal tax numberKazakhstan IINRussia OFK number (for public bodies only) */ @sap.display.format : 'UpperCase' @@ -2055,7 +2055,7 @@ entity API_BUSINESS_PARTNER.A_Customer { TaxNumber4 : String(18); /** * Kazakhstan - * + * * Specifies the certificate of registration as VAT payer in the following format: XXXXXYYYYYYYZZZZZZZZ, where: XXXXX is the certificate serial number, YYYYYYY is the certificate number and ZZZZZZZZ is the date of certificate issue. */ @sap.display.format : 'UpperCase' @@ -2065,7 +2065,7 @@ entity API_BUSINESS_PARTNER.A_Customer { TaxNumber5 : String(60); /** * Taxes in Argentina: - * + * * The format and the check of tax number 1 depend on the two-digit tax number type.The tax number type is an identification type for tax in Argentina (for example, 80 for CUIT) and is used for the DGI tax report. */ @sap.display.format : 'UpperCase' @@ -2073,7 +2073,7 @@ entity API_BUSINESS_PARTNER.A_Customer { TaxNumberType : String(2); /** * VAT registration number (VAT reg.no.) of the customer, vendor or your company code. - * + * * The VAT registration number is used within the EU for tax-exempt deliveries for the "EC sales list". The check rules are defined for each EU country and cannot be changed. */ @sap.display.format : 'UpperCase' @@ -2082,7 +2082,7 @@ entity API_BUSINESS_PARTNER.A_Customer { VATRegistration : String(20); /** * Indicates that all data in this master record is to be deleted. - * + * * To delete this data, you have to run the archiving program for Accounts Receivable or Payable. This program will archive all master records marked for deletion provided that there is no dependent data in them.Deletion flags can also be used in the program for deleting master data. You should, however, run this program only to delete test data prior to production startup. */ @sap.display.format : 'UpperCase' @@ -2096,7 +2096,7 @@ entity API_BUSINESS_PARTNER.A_Customer { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.deletable : 'false' @sap.content.version : '1' @sap.label : 'Customer Company' @@ -2122,7 +2122,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { AccountByCustomer : String(12); /** * Identification code for the accounting clerk. - * + * * The name of the accounting clerk defined by this identification code can be used in the payment program for correspondence and reporting (for example, open item lists). */ @sap.display.format : 'UpperCase' @@ -2140,8 +2140,8 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { @sap.quickinfo : 'Accounting clerk''s telephone number at business partner' AccountingClerkPhoneNumber : String(30); /** - * - * + * + * * Account number of the customer for whom automatic payment transactions are to be carried out.The account number is only needed if bank collections are not to be made via the customer who owes the receivables. The same applies to refunds of payables.The specification in this field only applies to this company code. There is another field in which you can enter an alternative payee for all company codes. If both fields are filled, the specification for the company code has priority. */ @sap.display.format : 'UpperCase' @@ -2160,7 +2160,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { CollectiveInvoiceVariant : String(1); /** * Internal memo of the accounting department. - * + * * The memo serves only as information on special features of the customer/vendor. */ @sap.label : 'Account Memo' @@ -2168,7 +2168,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { CustomerAccountNote : String(30); /** * This field contains the account number of the head office. - * + * * This account number is only specified for branch accounts. All postings for which the account number of the branch is specified, are automatically posted to the head office account. The account number of the branch affected is noted in the line items.No line items or balances are managed in the branch account. */ @sap.display.format : 'UpperCase' @@ -2177,7 +2177,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { CustomerHeadOffice : String(10); /** * Indicates that during automatic payment transactions clearing is made with the corresponding vendor account, and that during manual clearing procedures, the items of that vendor account are also selected. - * + * * To use this function in automatic payment transactions, you have toenter the vendor account number in the customer master record,enter the customer account number in the vendor master record, andselect the "Clearing with customer" indicator in the vendor master record.If you set this indicator, the system will also include items of the vendor account in customer dunning. */ @sap.display.format : 'UpperCase' @@ -2196,7 +2196,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { InterestCalculationCode : String(2); /** * The date in this field displays the last time the interest calculation program processed this account. This is generally the upper limit of the last interest run. - * + * * Generally, this date is automatically maintained by the program (batch input). A manual entry in this field should only be made if an error has occurred or when implementing the interest calculation. */ @sap.display.format : 'Date' @@ -2205,7 +2205,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { InterestCalculationDate : Date; /** * Indicates that payment transactions and dunning notices are created for the branch. - * + * * Normally automatic payment transactions and dunning notices are created for the head office.NoteSelect this indicator only if this account is a head office account. */ @sap.display.format : 'UpperCase' @@ -2219,7 +2219,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { ItemIsToBePaidSeparately : Boolean; /** * Indicates the layout rule for the Allocation field in the document line item. - * + * * The system uses a standard sort sequence for displaying line items. Among other things, it sorts the items according to the content of the Allocation field. This field can be filled either manually or automatically (by the system) when a document line item is entered.For this purpose, the system requires rules that determine which information is to be taken from the document header or from the document line item and placed in the field. The rules can be stored in the master record of an account which enables you to determine the standard sort sequence on an account-specific basis.NoteField information from another document line item cannot be adopted into the field of a particular item. */ @sap.display.format : 'UpperCase' @@ -2228,7 +2228,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { LayoutSortingRule : String(3); /** * Block key (enqueue key) that is used to block an open item or an account to payment transactions. - * + * * You can use the block key as described below.Automatic Payment TransactionsIn automatic payment transactions, the block takes effect when it is entered in the system as follows:In the master recordIn the documentIf you enter the block in the master record then all open items for this account are contained in the exception list.The following block keys have a special meaning in the master record:The block key * has the effect that all items of the account are skipped in automatic payment transactions.The block key + has the effect that all items are skipped in which a payment method was not entered explicitly.The block key A is always set automatically when a down payment is entered. Therefore, you must not delete the block key A or use it for other purposes.Whether a block key can be set or removed in payment proposal processing depends on the attribute Changeable in payment proposal of the block key.Manual PaymentsManual payments are only affected by a block key in the document if you set the attribute Blocked for manual payments in the block key.A block key that was set in the master record does not have any effect on manual payments. You can have the system issue a warning message in that case. To do so, you have to make system settings. Set up message 671 of work area F5 in message control accordingly. */ @sap.display.format : 'UpperCase' @@ -2237,7 +2237,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { PaymentBlockingReason : String(1); /** * List of payment methods which may be used in automatic payment transactions with this customer/vendor if you do not specify a payment method in the item to be paid. - * + * * If you do specify a particular payment method in the item to be paid, this specification has priority over the specifications in the master record. You may also specify payment methods in the item which are not listed in the master record. */ @sap.display.format : 'UpperCase' @@ -2246,7 +2246,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { PaymentMethodsList : String(10); /** * Key for defining payment terms composed of cash discount percentages and payment periods. - * + * * It is used in sales orders, purchase orders, and invoices. Terms of payment provide information for:Cash managementDunning proceduresPayment transactionsData can be entered in the field for the terms of payment key in various ways as you enter a business transaction:In most business transactions, the system defaults the key specified in the master record of the customer/vendor in question.In some transactions (for example, credit memos), however, the system does not default the key from the master record. Despite this, you can use the key from the customer/vendor master record by entering "*" in the field.Regardless of whether or not a key is defaulted from the master record, you can manually enter a key during document entry at:item level in sales ordersheader level in purchase orders and invoicesMaster records have separate areas for Financial Accounting, Sales, and Purchasing. You can specify different terms of payment keys in each of these areas. When you then enter a business transaction, the application in question will use the key specified in its area of the master record. */ @sap.display.format : 'UpperCase' @@ -2260,7 +2260,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { PaytAdviceIsSentbyEDI : Boolean; /** * Indicates that the account is blocked for posting in the specified company code. - * + * * If you set this indicator, the system prevents users from posting items to this account and issues an error message to inform them that the account is blocked. */ @sap.display.format : 'UpperCase' @@ -2269,7 +2269,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { PhysicalInventoryBlockInd : Boolean; /** * The reconciliation account in G/L accounting is the account which is updated parallel to the subledger account for normal postings (for example, invoice or payment). - * + * * For special postings (for example, down payment or bill of exchange), this account is replaced by another account (for example, 'down payments received' instead of 'receivables').The replacement takes place due to the special G/L indicator which you must specify for these types of postings. */ @sap.display.format : 'UpperCase' @@ -2278,7 +2278,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { ReconciliationAccount : String(10); /** * Indicator that the payment history of the customer is to be recorded. - * + * * The amount and number of payments are then recorded per calendar month, as well as the average days in arrears.Information about cash discount payments and net payments is recorded separately.The indicator should not be set for one-time accounts and accounts which are paid automatically (bank collection or bank bill in Germany, bill of exchange payment request in France).You can only carry out evaluation of the payment history, for example, with the report for customer evaluation with OI listing, if you have selected this field. */ @sap.display.format : 'UpperCase' @@ -2290,7 +2290,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { UserAtCustomer : String(15); /** * Indicates that the company code data in this master record is to be deleted. - * + * * To delete this data, you have to run the archiving program for Accounts Receivable or Payable. This program will archive all master records marked for deletion provided that there is no dependent data in them.This deletion flag cannot be used in the program that deletes master data. You should, however, run this program only to delete test data prior to production startup. */ @sap.display.format : 'UpperCase' @@ -2299,7 +2299,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { DeletionIndicator : Boolean; /** * In cash management, customers and vendors are allocated to planning groups by means of an entry made in the master record. - * + * * You can define these planning groups in Customizing or the Implementation Guide (you will need to ensure that they are all the same length). In order to improve the liquidity forecast display for major customers and vendors, it can be advisable to enter their account number as the planning group.For the planning groups themselves a naming convention should be set up to improve liquidity forecasting. In the following examples, the customer planning groups begin with an "R" for receipts, and the vendor planning groups begin with an "E" for expenses.R1 Customers paying by bank collectionR2 Other domestic customersR3 Customers abroadR4 Affiliated company customersR5 High risk customersR6 Major customersR7 Rental incomeR8 Repayment of loans...E1 Domestic vendorsE2 Vendors abroadE3 Affiliated company vendorsE4 Major vendorsE5 Personnel costsE6 TaxesE7 Investments... */ @sap.display.format : 'UpperCase' @@ -2317,7 +2317,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { ValueAdjustmentKey : String(2); /** * The account group is a classifying feature within customer master records. The account group determines: - * + * * in which number range the customer account number should be;whether the number is assigned by the user or by the system;which specifications are necessary or possible in the master record. */ @sap.display.format : 'UpperCase' @@ -2331,7 +2331,7 @@ entity API_BUSINESS_PARTNER.A_CustomerCompany { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Customer Dunning' entity API_BUSINESS_PARTNER.A_CustomerDunning { @@ -2346,7 +2346,7 @@ entity API_BUSINESS_PARTNER.A_CustomerDunning { key CompanyCode : String(4) not null; /** * The dunning area represents an organizational entity that is responsible for dunning. The dunning areas represent a sub-structure of the company codes. - * + * * If different responsibilities or different dunning procedures exist within a company code, you can set up corresponding dunning areas.All dunning notices are made separately according to dunning areas, and if necessary with different dunning procedures.The dunning area must be noted in the line items. As long as documents are copied from preliminary work areas (billing documents), the dunning area can be derived from details such as division or sales area, if necessary. */ @sap.display.format : 'UpperCase' @@ -2358,7 +2358,7 @@ entity API_BUSINESS_PARTNER.A_CustomerDunning { DunningBlock : String(1); /** * Number that specifies how often an item or account has been dunned. - * + * * The business partner has received the dunning level from the last dunning run.If you use dunning areas, it is the dunning level that the business partner received from the last dunning run in the dunning area assigned.The dunning program sets the dunning level automatically when the customer or vendor receives a dunning notice. */ @sap.display.format : 'NonNegative' @@ -2370,7 +2370,7 @@ entity API_BUSINESS_PARTNER.A_CustomerDunning { DunningProcedure : String(4); /** * Account number of the customer who is to be the recipient of the dunning letters. - * + * * The account number is only needed if dunning letters are not sent to the customer who owes the receivables. */ @sap.display.format : 'UpperCase' @@ -2384,7 +2384,7 @@ entity API_BUSINESS_PARTNER.A_CustomerDunning { LastDunnedOn : Date; /** * Date on which a legal dunning procedure was initiated. - * + * * The printing of dunning notices in the legal dunning procedure generates an internal notice about any further account movements. A dunning notice is not created for the customer.If the Legal dunning procedure field in the master record contains a date, this means that the account is involved in a legal dunning procedure. The relationship between this date and the dunning date does not affect how the account is processed.The printing of account movements in the legal dunning procedure differs from the normal printing of dunning notices as follows:You must specify a separate form for your dunning procedure in Customizing. For more information, see Customizing (IMG) under Dunning Forms.The dunning program also displays text element 520 "Legal dunning procedure". This makes it possible to display the date of the legal dunning procedure from the master record.The program also displays the documents blocked for dunning and those with a payment method (automatic debit, bank direct debit).Although dunning notices are printed, the dunning level does not change in the master record or in the items. New dunning level = old dunning level.The program only updates the date of the last dunning run.Enter the date manually. */ @sap.display.format : 'Date' @@ -2393,7 +2393,7 @@ entity API_BUSINESS_PARTNER.A_CustomerDunning { LegDunningProcedureOn : Date; /** * Identification code for the accounting clerk dealing with dunning letters. - * + * * Using this identification code, the accounting clerk whose name is printed on the dunning letters is determined.If this field is not filled, then the entry from the Accounting clerk field is used. */ @sap.display.format : 'UpperCase' @@ -2406,7 +2406,7 @@ entity API_BUSINESS_PARTNER.A_CustomerDunning { AuthorizationGroup : String(4); /** * The account group is a classifying feature within customer master records. The account group determines: - * + * * in which number range the customer account number should be;whether the number is assigned by the user or by the system;which specifications are necessary or possible in the master record. */ @sap.display.format : 'UpperCase' @@ -2416,7 +2416,7 @@ entity API_BUSINESS_PARTNER.A_CustomerDunning { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.deletable : 'false' @sap.content.version : '1' @sap.label : 'Sales Area' @@ -2428,7 +2428,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { key Customer : String(10) not null; /** * An organizational unit responsible for the sale of certain products or services. The responsibility of a sales organization may include legal liability for products and customer claims. - * + * * You can assign any number of distribution channels and divisions to a sales organization. A particular combination of sales organization, distribution channel, and division is known as a sales area. */ @sap.display.format : 'UpperCase' @@ -2436,7 +2436,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { key SalesOrganization : String(4) not null; /** * The way in which products or services reach the customer. Typical examples of distribution channels are wholesale, retail, or direct sales. - * + * * You can maintain information about customers and materials by sales organization and distribution channel. Within a sales organization you can deliver goods to a given customer through more than one distribution channel.You can assign a distribution channel to one or more sales organizations. If, for example, you have numerous sales organizations, each sales organization may use the "Wholesale" distribution channel.For each combination of sales organization and distribution channel, you can further assign one or more of the divisions that are defined for the sales organization. You can, for example, assign "Food" and "Non-food" divisions to the "Wholesale" distribution channel. A particular combination of sales organization, distribution channel, and division is known as a sales area. */ @sap.display.format : 'UpperCase' @@ -2444,7 +2444,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { key DistributionChannel : String(2) not null; /** * A way of grouping materials, products, or services. The system uses divisions to determine the sales areas and the business areas for a material, product, or service. - * + * * A product or service is always assigned to just one division. From the point of view of sales and distribution, the use of divisions lets you organize your sales structure around groups of similar products or product lines. This allows the people in a division who process orders and service customers to specialize within a manageable area of expertise.If a sales organization sells food and non-food products through both retail and wholesaledistribution channels each distribution channel could then be further split into food and non-food divisions. */ @sap.display.format : 'UpperCase' @@ -2457,7 +2457,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { AccountByCustomer : String(12); /** * The authorization group enables you protect access to certain objects. - * + * * In order to carry out a specific activity, the user must have authorization for the combination of the activity and the authorization group. */ @sap.display.format : 'UpperCase' @@ -2465,7 +2465,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { AuthorizationGroup : String(4); /** * Indicates if further billing activities are blocked for the customer. The block applies throughout the specified sales area. - * + * * If you enter a blocking indicator, billing that is already underway is continued. However, you cannot process the document further.Enter one of the values predefined for your system. If you want to block billing for a customer throughout an entire sales organization, you must enter a blocking indicator for each sales area in which the sales organization is defined.You can block billing for a customer if, for example, there are credit-related or legal problems to be resolved. */ @sap.display.format : 'UpperCase' @@ -2487,7 +2487,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { CustomerABCClassification : String(2); /** * The account assignment group to which the system automatically posts the sales document. - * + * * The system uses the account assignment group as one of the criteria during the automatic determination of revenue accounts.The system automatically proposes the account assignment group from the customer master record of the payer. You can change the default value in the sales document or the billing document. */ @sap.display.format : 'UpperCase' @@ -2500,7 +2500,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { CustomerGroup : String(2); /** * Key for defining payment terms composed of cash discount percentages and payment periods. - * + * * It is used in sales orders, purchase orders, and invoices. Terms of payment provide information for:Cash managementDunning proceduresPayment transactionsData can be entered in the field for the terms of payment key in various ways as you enter a business transaction:In most business transactions, the system defaults the key specified in the master record of the customer/vendor in question.In some transactions (for example, credit memos), however, the system does not default the key from the master record. Despite this, you can use the key from the customer/vendor master record by entering "*" in the field.Regardless of whether or not a key is defaulted from the master record, you can manually enter a key during document entry at:item level in sales ordersheader level in purchase orders and invoicesMaster records have separate areas for Financial Accounting, Sales, and Purchasing. You can specify different terms of payment keys in each of these areas. When you then enter a business transaction, the application in question will use the key specified in its area of the master record. */ @sap.display.format : 'UpperCase' @@ -2509,7 +2509,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { CustomerPaymentTerms : String(4); /** * A grouping of customers who share the same pricing requirements. - * + * * You can define price groups according to the needs of your organization and create pricing records for each group. You can, for example, define a group of customers to whom you want to give the same kind of discount. You can assign a price group to an individual customer either in the customer master record or in the sales document.The system can propose the price group from the customer master record. You can change the proposed value manually in the sales document at both header and item level. */ @sap.display.format : 'UpperCase' @@ -2517,7 +2517,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { CustomerPriceGroup : String(2); /** * Determines which pricing procedure the system should apply when you create a sales document for the customer. - * + * * You can define different pricing procedures for your system. A pricing procedure determines the type and sequence of conditions that the system uses for pricing in, for example, a sales order. */ @sap.display.format : 'UpperCase' @@ -2526,7 +2526,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { CustomerPricingProcedure : String(2); /** * Indicates if further delivery processing is blocked for the customer. The block applies throughout the specified sales area. - * + * * If you enter a blocking indicator, delivery processing that is already underway is continued. However, no new processing can take place.Enter one of the values predefined for your system. If you want to block delivery processing for a customer within a particular sales organization, you must enter a blocking indicator for each sales area in which the sales organization is defined.You can block delivery processing for a customer if, for example, there are credit-related or legal problems to be resolved. */ @sap.display.format : 'UpperCase' @@ -2535,7 +2535,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { DeliveryIsBlockedForCustomer : String(2); /** * The delivery priority assigned to an item. - * + * * You can assign delivery priority to either a particular material or to a combination of customer and material. When you process deliveries collectively, you can use delivery priority as one of the selection criteria. */ @sap.display.format : 'NonNegative' @@ -2543,7 +2543,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { DeliveryPriority : String(2); /** * Commonly used trading terms that comply with the standards established by the International Chamber of Commerce (ICC). - * + * * Incoterms specify internationally recognized procedures that the shipper and the receiving party must follow for the shipping transaction to be completed successfully.If goods are shipped through a port of departure, the appropriate Incoterm might be: FOB ("Free On Board"). You can provide further details (for example, the name of the port) in the secondary Incoterm field: FOB Boston, for example. */ @sap.display.format : 'UpperCase' @@ -2552,7 +2552,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { IncotermsClassification : String(3); /** * Provides additional information for the Incoterms. This field is only available for C-Clauses (if customized appropriately). Note the following for the incoterms versions below: - * + * * No Version:This field is disabledIncoterm Version 2000This field is disabled as part of standard delivery unless a customer decides to enable it by the way of Customizing for Sales and Distribution under Master Data -> Business Partners -> Customers -> Billing Document -> Incoterms -> Map Incoterms to Versions.Incoterm Version 2010For this version, the field represents:Sea and inland waterway transport - Port of DestinationAny mode of transport - Place of Destination2010 Incoterms are divided as follows:Group 1: Rules for any mode or modes of transport (including by vessel)Incoterms Incoterms Description Location 2CPT Carriage Paid To Place of DestinationCIP Carriage & Insurance Paid To Place of DestinationGroup 2: Rules for sea and inland waterwaysIncoterms Incoterms Description Location 2CFR Cost & Freight Port of DestinationCIF Cost Insurance & Freight Port of Destination */ @sap.label : 'Incoterms Location 2' @@ -2563,7 +2563,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { IncotermsVersion : String(4); /** * Provides additional information for the primary Incoterm. For Incoterms 2010, this field represents: - * + * * 1. For sea and inland waterway transport - Port of Shipment2. For any mode of transport - Place of Delivery 2010Incoterms are divided as follows:Group 1: Rules for any mode or modes of transport (including by vessel)Incoterms Incoterms Description Location 1 EXW Ex Works Place of DeliveryFCA Free Carrier Place of DeliveryCPT Carriage Paid To Place of DestinationCIP Carriage & Insurance Paid To Place of DestinationDAF Delivered at Frontier Place of DeliveryDDP Delivered Duty Paid Place of DestinationDDU Delivered Duty Unpaid Place of DestinationGroup 2: Rules for sea and inland waterwaysIncoterms Incoterms Description Location 1 FAS Free Alongside Ship Port of ShipmentFOB Free On Board Port of ShipmentCFR Cost & Freight Port of DestinationCIF Cost Insurance & Freight Port of DestinationDEQ Delivered Eq Quay (Duty Paid) Port of DestinationDES Delivered Ex Ship Port of DestinationIf the primary incoterm is specified as FOB “Free on Board”, the second field provides details of the port from which the delivery leaves, such as FOB Boston. */ @sap.label : 'Incoterms Location 1' @@ -2575,14 +2575,14 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { DeletionIndicator : Boolean; /** * Additional information for the primary Incoterm. - * + * * If the primary Incoterm is, for example, FOB ("Free on Board"), then the second field provides details of the port from which the delivery leaves (for example, "FOB Boston"). */ @sap.label : 'Incoterms (Part 2)' IncotermsTransferLocation : String(28); /** * Identifies the calendar that determines the schedule of billing dates for the customer. - * + * * If, for example, a customer wants to consolidate the invoices you send out, you can predefine the billing schedule in a calendar in the system. During billing, the system automatically proposes the appropriate billing date from the calendar.The system proposes the billing schedule from the customer master record of the payer. You can change the value manually in the sales document. */ @sap.display.format : 'UpperCase' @@ -2591,7 +2591,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { InvoiceDate : String(2); /** * The probability (expressed as a percentage) of the customer confirming the inquiry or quotation item as part of a sales order. - * + * * The system combines the probability factors from the sales document type and from the customer master record of the sold-to party.If probability is 80% for the sales document type and 50% in the customer master record, the system combines the two values. In this case, the system takes 50% of 80% and proposes 40% for the item.The system proposes the probability. You can change the value manually for the item.You can generate requirements from quotations. Accordingly, the probability of quotation items affects how requirements are passed on. For example, a quotation for 100 pieces and a probability of 50% will generate requirements for 50 pieces. */ @sap.display.format : 'NonNegative' @@ -2600,7 +2600,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { ItemOrderProbabilityInPercent : String(3); /** * Indicates whether you are allowed to combine orders during delivery processing. - * + * * The system proposes the indicator from the customer master record. You can change the value manually in the sales document at both header and item level. */ @sap.display.format : 'UpperCase' @@ -2609,7 +2609,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { OrderCombinationIsAllowed : Boolean; /** * Indicates if further sales order processing is blocked for the customer. The block applies throughout the specified sales area. - * + * * You can define blocks according to the needs of your organization. If you enter a blocking indicator, sales order processing that is already underway is continued. However, no new processing can occur.Enter one of the values predefined for your system. If you want to block sales order processing for a customer within a particular sales organization, you must enter a blocking indicator for each sales area in which the sale organization is defined.You can block sales order processing for a customer if, for example, there are credit-related or legal problems to be resolved. */ @sap.display.format : 'UpperCase' @@ -2618,7 +2618,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { OrderIsBlockedForCustomer : String(2); /** * Specifies whether the customer requires full or partial delivery for the item. - * + * * You use this field to control partial deliveries at the item level. If the customer allows partial delivery, you can choose from different partial delivery options. For example, you can specify whether the customer allows you to make one delivery attempt only on the requested delivery date or whether unlimited delivery attempts are possible.When partial delivery indicator 'D' is set, the order can never have status 'fully delivered'. You must complete each item by entering a reason for rejection. This could be applied to scheduling agreements, for example.You can enter a value in this field only if the customer allows partial deliveries for the entire sales document. */ @sap.display.format : 'UpperCase' @@ -2627,7 +2627,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { PartialDeliveryIsAllowed : String(1); /** * Identifies a price list or other condition type (for example, a surcharge or discount). - * + * * You can define price list types according to the needs of your own organization. Price list types can be grouped according to:the kind of price list (for example, wholesale or retail)the currency in which the price appearsthe number of the price list typeYou can use price list types to apply conditions during pricing or to generate statistics.In the customer master record, enter one of the values predefined for your system. The system proposes the value automatically during sales order processing. You can change the value manually in the sales document header. */ @sap.display.format : 'UpperCase' @@ -2635,7 +2635,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { PriceListType : String(2); /** * A group of sales people who are responsible for processing sales of certain products or services. - * + * * By using sales groups you can designate different areas of responsibility within a sales office. When you generate sales statistics, you can use the sales group as one of the selection criteria.If sales office personnel service both retail and wholesale markets, you can assign a sales group to each market.You assign each salesperson to a sales group in his or her user master record. You assign each customer to a particular sales group in the customer's master record. */ @sap.display.format : 'UpperCase' @@ -2643,7 +2643,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { SalesGroup : String(3); /** * A physical location (for example, a branch office) that has responsibility for the sale of certain products or services within a given geographical area. - * + * * When you create sales statistics, you can use a sales office as one of the selection criteria. When you print out order confirmations, you can include the address of the sales office.You can assign each customer to a sales office in the customer master record.Within a sales office you can establish sales groups (for example, departments) with specific sales responsibilities. Each person who works in the sales office can be assigned to a sales group in his or her user master record. Each customer can also be assigned to a particular sales group in the customer master record. */ @sap.display.format : 'UpperCase' @@ -2651,7 +2651,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { SalesOffice : String(4); /** * General shipping strategy for the delivery of goods from the vendor to the customer. - * + * * You can define shipping conditions in your system which correspond to the requirements of your company. You can specify a shipping condition in the customer master and in the vendor master.Shipping point determination (outbound delivery):The loading group, the plant and the shipping condition determine the shipping point that will be proposed by the system.Route determination (outbound delivery):Apart from the country and the geographical region of the shipping point, the ship-to party and the transportation group, the shipping condition determines the route that the system proposes in the order for the delivery of the goods. In the delivery, the route proposal also takes the weight group into account.A particular customer always requires immediate delivery. You enter the appropriate shipping condition into the customer master record. This means that when you process orders for this customer, the system automatically proposes the express mail room as a shipping point and the quickest way to the airport as a route.If a shipping condition has been assigned to a sales document type in Customizing, this condition will be proposed by the system in the corresponding sales document. If there is no assignment, the system copies the relevant data from the corresponding customer master record of the sold-to party. You cannot change this value during delivery processing. The shipping condition will not be copied from the delivery into the shipment. The shipping condition is one of several criteria for selecting deliveries when you create a shipment. You can enter a shipping condition manually in the shipment where it only serves as a characteristic for grouping shipments. */ @sap.display.format : 'UpperCase' @@ -2659,7 +2659,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { ShippingCondition : String(2); /** * Plant from which the goods should be delivered to the customer. - * + * * This plant is automatically copied into the sales order item as the default value.If there is no default value when you process the sales order item, enter a delivering plant.The value proposed in the item is eitherfrom the customer master record of the goods recipient, orfrom the material master recordThe system checks whether it can propose a value (and for your own plants, whether the material has been created in the plant). If the system can propose a value, the plant is copied to the sales order item where you can change it as required. */ @sap.display.format : 'UpperCase' @@ -2668,7 +2668,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { SupplyingPlant : String(4); /** * A geographical sales district or region. - * + * * Each customer can be assigned to a sales district. You can use sales districts to apply pricing conditions. When you want to generate sales statistics, you can use sales districts as a selection criteria.The system can propose a value from the customer master record of the sold-to party. You can change the value manually in the document at the header or item level. */ @sap.display.format : 'UpperCase' @@ -2676,7 +2676,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { SalesDistrict : String(6); /** * Identifies the customer's factory calendar that is used during the processing of invoice lists. - * + * * An invoice list is a list of invoices (single or collective) that you create for the customer either periodically or on predefined dates. The periods and dates are defined in the customer's factory calendar. Typically, the recipient of an invoice list takes on the responsibility for collecting payments from numerous individual customers and receives a factoring or del credere discount for the service.If you want to create invoice lists for the customer, you must enter an identifier for a predefined factory calendar. */ @sap.display.format : 'UpperCase' @@ -2685,7 +2685,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { InvoiceListSchedule : String(2); /** * Key representing a type of exchange rate in the system. - * + * * You enter the exchange rate type to store different exchange rates.You can use the exchange rate type to define a buying rate, selling rate, or average rate for translating foreign currency amounts. You can use the average rate for the currency translation, and the bank buying and selling rates for valuation of foreign currency amounts. */ @sap.display.format : 'UpperCase' @@ -2693,7 +2693,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { ExchangeRateType : String(4); /** * Specifies a customer-defined group of customers. - * + * * You can define up to five different groups of customers, according to the needs of your organization. You specify the groups in the customer master record under "Additional data". If you assign a particular customer to one or more groups, the system automatically displays the groups in the header data of corresponding sales orders.You can define customer groups in Tables TVV1 through TVV5 and assign them to specific languages in Tables TVV1T through TVV5T. */ @sap.display.format : 'UpperCase' @@ -2702,7 +2702,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { AdditionalCustomerGroup1 : String(3); /** * Specifies a customer-defined group of customers. - * + * * You can define up to five different groups of customers, according to the needs of your organization. You specify the groups in the customer master record under "Additional data". If you assign a particular customer to one or more groups, the system automatically displays the groups in the header data of corresponding sales orders.You can define customer groups in Tables TVV1 through TVV5 and assign them to specific languages in Tables TVV1T through TVV5T. */ @sap.display.format : 'UpperCase' @@ -2711,7 +2711,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { AdditionalCustomerGroup2 : String(3); /** * Specifies a customer-defined group of customers. - * + * * You can define up to five different groups of customers, according to the needs of your organization. You specify the groups in the customer master record under "Additional data". If you assign a particular customer to one or more groups, the system automatically displays the groups in the header data of corresponding sales orders.You can define customer groups in Tables TVV1 through TVV5 and assign them to specific languages in Tables TVV1T through TVV5T. */ @sap.display.format : 'UpperCase' @@ -2720,7 +2720,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { AdditionalCustomerGroup3 : String(3); /** * Specifies a customer-defined group of customers. - * + * * You can define up to five different groups of customers, according to the needs of your organization. You specify the groups in the customer master record under "Additional data". If you assign a particular customer to one or more groups, the system automatically displays the groups in the header data of corresponding sales orders.You can define customer groups in Tables TVV1 through TVV5 and assign them to specific languages in Tables TVV1T through TVV5T. */ @sap.display.format : 'UpperCase' @@ -2729,7 +2729,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { AdditionalCustomerGroup4 : String(3); /** * Specifies a customer-defined group of customers. - * + * * You can define up to five different groups of customers, according to the needs of your organization. You specify the groups in the customer master record under "Additional data". If you assign a particular customer to one or more groups, the system automatically displays the groups in the header data of corresponding sales orders.You can define customer groups in Tables TVV1 through TVV5 and assign them to specific languages in Tables TVV1T through TVV5T. */ @sap.display.format : 'UpperCase' @@ -2738,7 +2738,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { AdditionalCustomerGroup5 : String(3); /** * This key identifies the customer payment guarantee procedure. - * + * * The customer payment guarantee procedure determines which payment guarantee procedure the system automatically uses when you create a sales document for the customer.In receivables risk management, the system determines the payment guarantee procedure taking into account:the key for the document payment guarantee procedure in the header for the sales document type.the customer payment guarantee procedure key in the customer master.You can define different payment guarantee procedures for your system. The payment guarantee procedure defines the type and sequence of forms of payment guarantee that the system assigns to the sales document items. */ @sap.display.format : 'UpperCase' @@ -2747,7 +2747,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { PaymentGuaranteeProcedure : String(4); /** * The account group is a classifying feature within customer master records. The account group determines: - * + * * in which number range the customer account number should be;whether the number is assigned by the user or by the system;which specifications are necessary or possible in the master record. */ @sap.display.format : 'UpperCase' @@ -2761,7 +2761,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesArea { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.deletable : 'false' @sap.content.version : '1' @sap.label : 'Sales Area Tax' @@ -2773,7 +2773,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesAreaTax { key Customer : String(10) not null; /** * An organizational unit responsible for the sale of certain products or services. The responsibility of a sales organization may include legal liability for products and customer claims. - * + * * You can assign any number of distribution channels and divisions to a sales organization. A particular combination of sales organization, distribution channel, and division is known as a sales area. */ @sap.display.format : 'UpperCase' @@ -2781,7 +2781,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesAreaTax { key SalesOrganization : String(4) not null; /** * Specifies a distribution channel that you want to use as a reference for customer and material master data for other distribution channels. - * + * * You can specify one distribution channel as the source of customer and material master data for other distribution channels. You need then only to maintain the data in one place.Distrib.channel Ref.distrib.channel01 0102 0103 0104 04In this example, only distribution channels 01 and 04 have customer and material master data defined. Distribution channels 01, 02, and 03 share the master data that you defined for distribution channel 01. Distribution channel 04 has its own master data. When you create a sales order in distribution channel 03, the system checks the customer and material master data against the data defined for distribution channel 01. */ @sap.display.format : 'UpperCase' @@ -2790,7 +2790,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesAreaTax { key DistributionChannel : String(2) not null; /** * A way of grouping materials, products, or services. The system uses divisions to determine the sales areas and the business areas for a material, product, or service. - * + * * A product or service is always assigned to just one division. From the point of view of sales and distribution, the use of divisions lets you organize your sales structure around groups of similar products or product lines. This allows the people in a division who process orders and service customers to specialize within a manageable area of expertise.If a sales organization sells food and non-food products through both retail and wholesaledistribution channels each distribution channel could then be further split into food and non-food divisions. */ @sap.display.format : 'UpperCase' @@ -2798,7 +2798,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesAreaTax { key Division : String(2) not null; /** * Identifies the country in which the delivery originates. - * + * * You can define the country key in a table. As a rule, it is a good idea to use the existing international standards for identifying vehicles from different countries (for example: USA = United States, I = Italy, and so on). The system uses the key tohelp determine the relevant taxes during pricingdetermine important country-specific standards (the length of postal codes and bank account numbers, for example) */ @sap.display.format : 'UpperCase' @@ -2807,7 +2807,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesAreaTax { key DepartureCountry : String(3) not null; /** * Identifies the condition that the system uses to automatically determine country-specific taxes during pricing. - * + * * You can define one or more tax categories for each country. During sales order processing, the system applies the tax category according tothe geographical location of your delivering plant and the location of the customer receiving the goodstax classifications in the customer master record and the material master record.In the USA, for example, you can define tax categories for Federal Sales Tax and Federal Excise Tax. In the U.K., you can define a tax category for Value Added Tax (VAT). */ @sap.display.format : 'UpperCase' @@ -2816,7 +2816,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesAreaTax { key CustomerTaxCategory : String(4) not null; /** * Specifies the tax liability of the customer, based on the tax structure of the customer's country. - * + * * You can use the tax classification to specify, for example, whether a customer is liable for sales taxes, such as VAT or state sales taxes.During sales order processing, the system copies the tax classification from the tax information stored in thecustomer master record of the payer, if the payer is different from the sold-to party and the sales tax identification number is maintained for the payer.ship to party, if the sales tax identification number of the ship-to party is maintained.sold-to party, if none of the criteria for the payer or the ship-to party are met.During pricing, the system calculates any relevant taxes by taking the following factors into account:The tax classification of the customer and the materialThe country keys of the customer and the delivering plant */ @sap.display.format : 'UpperCase' @@ -2826,7 +2826,7 @@ entity API_BUSINESS_PARTNER.A_CustomerSalesAreaTax { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Withholding Tax' entity API_BUSINESS_PARTNER.A_CustomerWithHoldingTax { @@ -2841,7 +2841,7 @@ entity API_BUSINESS_PARTNER.A_CustomerWithHoldingTax { key CompanyCode : String(4) not null; /** * This indicator is used to classify the different types of withholding tax. - * + * * Withholding tax types classify particular features of a withholding tax including:The time at which the withholding tax is postedThe basis on which the base amount is calculatedThe basis for accumulation (if applicable)Withholding tax types are to be distinguished from withholding tax codes, to which are allocated the withholding tax percentage rate example.Whether a withholding tax can be defined as an existing type by means of a new code, or if a new type needs to be defined will depend on the type of transaction (see below).Note that a business transaction can only be assigned one withholding tax code per withholding tax type. If the business transaction is subject to several withholding taxes simultaneously, these must be represented by different types.This is the case in Argentina for example, where up to four kinds of withholding tax per business transaction are possible. */ @sap.display.format : 'UpperCase' @@ -2850,7 +2850,7 @@ entity API_BUSINESS_PARTNER.A_CustomerWithHoldingTax { key WithholdingTaxType : String(2) not null; /** * One or more "withholding tax codes" are assigned to each withholding tax type. One of the things these codes determine is the various percentage rates for the withholding tax type. - * + * * Note that when processing a business transaction, no more than one withholding tax code can be assigned per withholding tax type. If the business transaction is subject to more than one withholding taxes, these must be represented in the system by defining various withholding tax types. */ @sap.display.format : 'UpperCase' @@ -2863,7 +2863,7 @@ entity API_BUSINESS_PARTNER.A_CustomerWithHoldingTax { WithholdingTaxAgent : Boolean; /** * Date from which: - * + * * The company code is obligated to withhold tax for the given withholding tax type.This date must be entered in Customizing under the withholding tax information for the company code.The customer is obligated to withhold tax for the withholding tax type.This date must be defined in the customer master record. */ @sap.display.format : 'Date' @@ -2872,7 +2872,7 @@ entity API_BUSINESS_PARTNER.A_CustomerWithHoldingTax { ObligationDateBegin : Date; /** * Date to which: - * + * * The company code is obligated to withhold tax for the withholding tax type.This date must be entered in Customizing under the withholding tax information for the company code.The customer is obigated to withhold tax for the withholding tax type. */ @sap.display.format : 'Date' @@ -2881,7 +2881,7 @@ entity API_BUSINESS_PARTNER.A_CustomerWithHoldingTax { ObligationDateEnd : Date; /** * This is a number issued by the tax authorities per withholding tax type. - * + * * This number must be specified in Customizing either:(a) As part of the withholding tax information defined for the company code, or(b) As part of the withholding tax information defined in the customer or vendor master record. */ @sap.display.format : 'UpperCase' @@ -2890,7 +2890,7 @@ entity API_BUSINESS_PARTNER.A_CustomerWithHoldingTax { WithholdingTaxNumber : String(16); /** * Numbered assigned by the relevant authorities for exemption from withholding tax. - * + * * This number must be entered in the system as follows:In the vendor master record in the case of vendorsFor customers, in Customizing under the settings for withholding tax information for the company code per withholding tax type. */ @sap.display.format : 'UpperCase' @@ -2899,7 +2899,7 @@ entity API_BUSINESS_PARTNER.A_CustomerWithHoldingTax { WithholdingTaxCertificate : String(25); /** * Rate of exemption from withholding tax. - * + * * Those persons/activities subject to withholding tax can be exempted from withholding tax up to the percentage rate you enter here. This exemption rate refers to the withholding tax amount itself and not to the whole amount liable to withholding tax (withholding tax base amount).The gross amount of an invoice is 100.00 and the withholding tax base amount is defined as gross. The withholding tax rate is 10% meaning that the withholding tax amount is 10.00. Given an exemption rate of 30%, the withholding tax amount is reduced to 7.00. */ @sap.label : 'Exemption Rate' @@ -2916,7 +2916,7 @@ entity API_BUSINESS_PARTNER.A_CustomerWithHoldingTax { ExemptionDateEnd : Date; /** * Indicator used to classify different types of exemption from liability to a particular withholding tax. - * + * * These indicators can be defined per withholding tax type in the vendor master record. */ @sap.display.format : 'UpperCase' @@ -2931,7 +2931,7 @@ entity API_BUSINESS_PARTNER.A_CustomerWithHoldingTax { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Sales Partner Functions' entity API_BUSINESS_PARTNER.A_CustSalesPartnerFunc { @@ -2942,7 +2942,7 @@ entity API_BUSINESS_PARTNER.A_CustSalesPartnerFunc { key Customer : String(10) not null; /** * An organizational unit responsible for the sale of certain products or services. The responsibility of a sales organization may include legal liability for products and customer claims. - * + * * You can assign any number of distribution channels and divisions to a sales organization. A particular combination of sales organization, distribution channel, and division is known as a sales area. */ @sap.display.format : 'UpperCase' @@ -2950,7 +2950,7 @@ entity API_BUSINESS_PARTNER.A_CustSalesPartnerFunc { key SalesOrganization : String(4) not null; /** * The way in which products or services reach the customer. Typical examples of distribution channels are wholesale, retail, or direct sales. - * + * * You can maintain information about customers and materials by sales organization and distribution channel. Within a sales organization you can deliver goods to a given customer through more than one distribution channel.You can assign a distribution channel to one or more sales organizations. If, for example, you have numerous sales organizations, each sales organization may use the "Wholesale" distribution channel.For each combination of sales organization and distribution channel, you can further assign one or more of the divisions that are defined for the sales organization. You can, for example, assign "Food" and "Non-food" divisions to the "Wholesale" distribution channel. A particular combination of sales organization, distribution channel, and division is known as a sales area. */ @sap.display.format : 'UpperCase' @@ -2958,7 +2958,7 @@ entity API_BUSINESS_PARTNER.A_CustSalesPartnerFunc { key DistributionChannel : String(2) not null; /** * A way of grouping materials, products, or services. The system uses divisions to determine the sales areas and the business areas for a material, product, or service. - * + * * A product or service is always assigned to just one division. From the point of view of sales and distribution, the use of divisions lets you organize your sales structure around groups of similar products or product lines. This allows the people in a division who process orders and service customers to specialize within a manageable area of expertise.If a sales organization sells food and non-food products through both retail and wholesaledistribution channels each distribution channel could then be further split into food and non-food divisions. */ @sap.display.format : 'UpperCase' @@ -2966,7 +2966,7 @@ entity API_BUSINESS_PARTNER.A_CustSalesPartnerFunc { key Division : String(2) not null; /** * The sequential number that the system applies when there is more than one partner for a particular partner function. - * + * * When you create a sales order for a particular customer, there may be more than one ship-to party defined. The different ship-to parties are numbered sequentially. */ @sap.display.format : 'NonNegative' @@ -2982,7 +2982,7 @@ entity API_BUSINESS_PARTNER.A_CustSalesPartnerFunc { BPCustomerNumber : String(10); /** * Sold-to party number sent in by the customer in delivery schedules. - * + * * The system uses this number to automatically determine the ship-to party. */ @sap.label : 'Partner Description' @@ -2990,7 +2990,7 @@ entity API_BUSINESS_PARTNER.A_CustSalesPartnerFunc { CustomerPartnerDescription : String(30); /** * Specifies a partner as the default for a particular partner function. - * + * * When you enter more than one partner for a particular partner function (for example, you define three different ship-to parties), you can select one partner as the default. During sales or purchasing processing, if you have defined multiple partners for a partner function, the system prompts you to choose just one partner. The system presents the default partner as the first choice in the pop-up window. */ @sap.display.format : 'UpperCase' @@ -3004,7 +3004,7 @@ entity API_BUSINESS_PARTNER.A_CustSalesPartnerFunc { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.creatable : 'false' @sap.deletable : 'false' @sap.content.version : '1' @@ -3017,7 +3017,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { key Supplier : String(10) not null; /** * The account number of the vendor with whom automatic payment transactions are carried out. - * + * * The field is only needed if payments are not to be made directly to the vendor to whom the payable is owed. The same applies to bank collections of receivables.The specification in this field applies to all company codes. There is a further field in which every company code can enter an alternative payee separately. If both fields are filled, the company code specification has priority. */ @sap.display.format : 'UpperCase' @@ -3054,7 +3054,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { PaymentIsBlockedForSupplier : Boolean; /** * Indicates that the account is blocked for posting for all company codes. - * + * * If you set this indicator, the system prevents users from posting items to this account and issues an error message to inform them that the account is blocked. */ @sap.display.format : 'UpperCase' @@ -3068,7 +3068,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { PurchasingIsBlocked : Boolean; /** * The account group is a classifying feature within vendor master records. The account group determines: - * + * * the number interval for the account number of the vendor,whether the number is assigned by the user or by the system,which specifications are necessary and/or possible in the master record. */ @sap.display.format : 'UpperCase' @@ -3087,7 +3087,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { SupplierName : String(80); /** * VAT registration number (VAT reg.no.) of the customer, vendor or your company code. - * + * * The VAT registration number is used within the EU for tax-exempt deliveries for the "EC sales list". The check rules are defined for each EU country and cannot be changed. */ @sap.display.format : 'UpperCase' @@ -3105,7 +3105,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { ConcatenatedInternationalLocNo : String(20); /** * Indicates that all data in this master record is to be deleted. - * + * * To delete this data, you have to run the archiving program for Accounts Receivable or Payable. This program will archive all master records marked for deletion provided that there is no dependent data in them.Deletion flags can also be used in the program for deleting master data. You should, however, run this program only to delete test data prior to production startup. */ @sap.display.format : 'UpperCase' @@ -3114,7 +3114,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { DeletionIndicator : Boolean; /** * Specifies an additional master record in which the official address is stored. - * + * * This address is used in Italy for business transactions with the tax office in Italy. */ @sap.display.format : 'UpperCase' @@ -3123,7 +3123,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { FiscalAddress : String(10); /** * An industry is a distinct group of companies with the same basic business activity. The industry key is used in selecting data for evaluations (for example, a vendor master data list). You can specify industries such as trade, banking, service, manufacturing, health care, public service, media and so on. - * + * * The industry field belongs to the general data area of customer and vendor master records. */ @sap.display.format : 'UpperCase' @@ -3134,7 +3134,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { Industry : String(4); /** * Here you enter the first 7 digits of the international location number. - * + * * The International Location Number (ILN) is assigned (in Germany by the Centrale for Coorganisation GmbH)) when a company is founded. It consists of 13 digits, the last digit being the check digit. There are two categories of location numbers:Participants who only need an ILN to cleary and unmistakably identify themselves for communication with the business partner are given a category 1 ILN. This cannot be used to identify articles by means of EAN.Participants who wish to assign the location numbers for their own enterprise areas are given a category 2 ILN. For a category 2 ILN, digits 1 to 7 are described as basis number. This is used as basis for the creation of article numbers (EAN). */ @sap.display.format : 'NonNegative' @@ -3143,7 +3143,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { InternationalLocationNumber1 : String(7); /** * Here, you enter digits 8-12 of the 13-digit international location number. - * + * * The international location number (ILN) is assigned when establishing a company (by the "Zentrale für Coorganisation GmbH" in Germany). It consists of 13 digits, the last of which is the check digit. There are two types of international location numbers:Subscribers who only need one ILN to identify themselves in communication with the business partner are given an ILN of type 1. These cannot be used for identifying articles by means of EAN.Subscribers who need to assign location numbers for their own company areas are given an ILN of type 2. Positions 1 through 7 of the ILN type 2 are known as the basis number. This basis number forms the basis for article numbers (EAN). */ @sap.display.format : 'NonNegative' @@ -3157,7 +3157,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { InternationalLocationNumber3 : String(1); /** * Denotes a natural person. - * + * * In the following countries, the system needs to know whether the taxpayer is a legal or natural person so that it can check the tax numbers correctly:BrazilBulgariaColombiaCroatiaGreeceItalyMexicoPeruSloveniaThailandUkraineThe flag is also used in conjunction with the Statement of Payments to Natural Persons report, as used in the Czech Republic and in Slovakia. This report only covers customers and vendors for whom you have set this indicator.In South Korea, it is used in conjunction with the Generic Withholding Tax Reporting program. */ @sap.display.format : 'UpperCase' @@ -3174,7 +3174,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { SuplrQltyInProcmtCertfnValidTo : Date; /** * If a QM system is maintained by the supplier, you can store a description of the QM system here. - * + * * If a material is activated for QM in procurement, the system initiates the following check whenever purchasing functions are carried out (for example, when a request for a quotation is made or if a purchase order is created):Whether the supplier's verified QM system, according to supplier master record or quality info-record (for a combination of supplier/material) meets the requirements for QM systems as specified in the material masterIn carrying out the check, the system relies on the defined assignments for target QM systems and actual QM systems in the Customizing application.If the check is unsuccessful, a warning message is issued when a request for quotation is initiated and an error message is issued for all other procurement activities. */ @sap.display.format : 'UpperCase' @@ -3183,7 +3183,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { SuplrQualityManagementSystem : String(4); /** * If the customer or the vendor belongs to a group, you can enter a group key here. The group key is freely assignable. - * + * * If you create a matchcode using this group key, group evaluations are possible. */ @sap.display.format : 'UpperCase' @@ -3191,7 +3191,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { SupplierCorporateGroup : String(10); /** * Key that determines which procurement functions (for example, request for quotation, purchase order, or goods receipt) should be blocked for quality reasons. - * + * * You can enter a block key in the:Supplier master recordIn this case, the supplier block applies to all materials and plants.Quality info record for QM in procurementIn this case, the supplier block applies to a single material and plant.A block for quality reasons applies only to those materials for which QM in procurement is active. */ @sap.display.format : 'UpperCase' @@ -3200,7 +3200,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { SupplierProcurementBlock : String(2); /** * Specifies the tax number. - * + * * Enter the appropriate tax number:Country Tax NumberArgentina CUIT number or CUIL numberBelgium Enterprise numberBrazil CNPJ numberBulgaria Unified identification codeChile RUT numberChina VAT registration number (shui wu deng ji hao)Colombia NIT numberCroatia Legal persons: company identification numberNatural persons: JMBG numberCzech Republic DIC numberFrance SIRET numberGreece Personal IDHungary Tax numberItaly Fiscal codeKazakhstan RNN (obsolete)Mexico RFC numberNetherlands SI registration number (Aansluitnummer UWV) of chain- liability vendorNorway VAT numberPeru RUC numberPhilippines Taxpayer identification number (see below)Poland NIP numberPortugal NIF numberRomania Tax numberRussia INNSlovakia DIC numberSlovenia Tax numberSouth Korea Natural persons: Personal identification numberLegal persons: Corporation IDSpain NIF numberSwitzerland UID numberTaiwan - China GUI registration numberThailand Personal IDTurkey Name of business partner's tax officeUkraine Taxpayer identification numberUnited Kingdom Company registration numberUnited States Social security numberVenezuela RIF numberIn the Philippines, enter the taxpayer identification number with a V or N at the end, as follows:If the business partner is liable to VAT: 999-999-999-999VIf the business partner is not liable to VAT: 999-999-999-999N */ @sap.display.format : 'UpperCase' @@ -3210,7 +3210,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { TaxNumber1 : String(16); /** * Specifies the tax number. - * + * * Enter the appropriate tax number:Country Tax NumberArgentina NIP number or CM numberBelgium VAT numberBrazil CPF numberBulgaria Legal persons: tax numberNatural persons: personal IDCroatia OIB number Czech Republic ICO numberFrance SIREN numberGreece AFM numberIndia TINItaly VAT numberKazakhstan BC (Beneficiary Code)Netherlands BSN numberRussia OKPO codeSlovakia ICO numberSouth Korea VAT registration numberSweden Organization registration numberSwitzerland VAT numberTaiwan - China Tax registration numberUkraine Legal persons: USREOU numberNatural persons: SRNP numberTurkey Tax numberUnited Kingdom NI numberUnited States Employer identification numberVenezuela NIT number */ @sap.display.format : 'UpperCase' @@ -3220,7 +3220,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { TaxNumber2 : String(11); /** * Specifies the tax number. - * + * * Enter the tax number that applies:Country Tax numberArgentina Withholding agent numberBrazil State tax numberBulgaria Social security numberMexico CURP numberKazakhstan BINNetherlands Tax registration number (Loonbelastingnummer) of the chain-liability vendorRussia KPP numberThailand Tax ID Ukraine VAT registration number */ @sap.display.format : 'UpperCase' @@ -3230,7 +3230,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { TaxNumber3 : String(18); /** * Specifies the tax number. - * + * * Enter the appropriate tax number:Country Tax NumberBrazil Municipal tax numberKazakhstan IINRussia OFK number (for public bodies only) */ @sap.display.format : 'UpperCase' @@ -3240,7 +3240,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { TaxNumber4 : String(18); /** * Kazakhstan - * + * * Specifies the certificate of registration as VAT payer in the following format: XXXXXYYYYYYYZZZZZZZZ, where: XXXXX is the certificate serial number, YYYYYYY is the certificate number and ZZZZZZZZ is the date of certificate issue. */ @sap.display.format : 'UpperCase' @@ -3255,7 +3255,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { TaxNumberResponsible : String(18); /** * Taxes in Argentina: - * + * * The format and the check of tax number 1 depend on the two-digit tax number type.The tax number type is an identification type for tax in Argentina (for example, 80 for CUIT) and is used for the DGI tax report. */ @sap.display.format : 'UpperCase' @@ -3263,7 +3263,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { TaxNumberType : String(2); /** * This indicator controls the process of proof of delivery during the incoming goods process for inbound deliveries. Processing is activating by switching on this indicator in the supplier master and by switching on the corresponding indicator in the delivery item category. - * + * * There are the following different characteristics:' ': not relevant for POD'A': generally relevant for POD'B': only relevant for POD if differences(Difference between notified quantity and actual quantity received) */ @sap.display.format : 'UpperCase' @@ -3272,7 +3272,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { SuplrProofOfDelivRlvtCode : String(1); /** * Tax calculation for Brazil: - * + * * The IPI tax value is split up for this vendor. 50% of the calculated IPI tax value is posted as deductible input tax, 50% is deducted from the inventory posting or posting to expense account. */ @sap.display.format : 'UpperCase' @@ -3286,7 +3286,7 @@ entity API_BUSINESS_PARTNER.A_Supplier { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.deletable : 'false' @sap.content.version : '1' @sap.label : 'Supplier Company' @@ -3312,7 +3312,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { CompanyCodeName : String(25); /** * Block key (enqueue key) that is used to block an open item or an account to payment transactions. - * + * * You can use the block key as described below.Automatic Payment TransactionsIn automatic payment transactions, the block takes effect when it is entered in the system as follows:In the master recordIn the documentIf you enter the block in the master record then all open items for this account are contained in the exception list.The following block keys have a special meaning in the master record:The block key * has the effect that all items of the account are skipped in automatic payment transactions.The block key + has the effect that all items are skipped in which a payment method was not entered explicitly.The block key A is always set automatically when a down payment is entered. Therefore, you must not delete the block key A or use it for other purposes.Whether a block key can be set or removed in payment proposal processing depends on the attribute Changeable in payment proposal of the block key.Manual PaymentsManual payments are only affected by a block key in the document if you set the attribute Blocked for manual payments in the block key.A block key that was set in the master record does not have any effect on manual payments. You can have the system issue a warning message in that case. To do so, you have to make system settings. Set up message 671 of work area F5 in message control accordingly. */ @sap.display.format : 'UpperCase' @@ -3321,7 +3321,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { PaymentBlockingReason : String(1); /** * Indicates that the account is blocked for posting in the specified company code. - * + * * If you set this indicator, the system prevents users from posting items to this account and issues an error message to inform them that the account is blocked. */ @sap.display.format : 'UpperCase' @@ -3330,7 +3330,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { SupplierIsBlockedForPosting : Boolean; /** * Identification code for the accounting clerk. - * + * * The name of the accounting clerk defined by this identification code can be used in the payment program for correspondence and reporting (for example, open item lists). */ @sap.display.format : 'UpperCase' @@ -3352,7 +3352,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { SupplierClerkURL : String(130); /** * List of payment methods which may be used in automatic payment transactions with this customer/vendor if you do not specify a payment method in the item to be paid. - * + * * If you do specify a particular payment method in the item to be paid, this specification has priority over the specifications in the master record. You may also specify payment methods in the item which are not listed in the master record. */ @sap.display.format : 'UpperCase' @@ -3361,7 +3361,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { PaymentMethodsList : String(10); /** * Key for defining payment terms composed of cash discount percentages and payment periods. - * + * * It is used in sales orders, purchase orders, and invoices. Terms of payment provide information for:Cash managementDunning proceduresPayment transactionsData can be entered in the field for the terms of payment key in various ways as you enter a business transaction:In most business transactions, the system defaults the key specified in the master record of the customer/vendor in question.In some transactions (for example, credit memos), however, the system does not default the key from the master record. Despite this, you can use the key from the customer/vendor master record by entering "*" in the field.Regardless of whether or not a key is defaulted from the master record, you can manually enter a key during document entry at:item level in sales ordersheader level in purchase orders and invoicesMaster records have separate areas for Financial Accounting, Sales, and Purchasing. You can specify different terms of payment keys in each of these areas. When you then enter a business transaction, the application in question will use the key specified in its area of the master record. */ @sap.display.format : 'UpperCase' @@ -3370,7 +3370,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { PaymentTerms : String(4); /** * Indicates that during automatic payment transactions, clearing is made with the corresponding customer account, and that during manual clearing procedures, the items of that customer account are also selected. - * + * * To use this function in automatic payment transactions, you have toenter the customer account number in the vendor master record,enter the vendor account number in the customer master record, andselect the "Clearing with vendor" indicator in the customer master record.If this indicator is set, items belonging to the customer account will be included in any dunning run. */ @sap.display.format : 'UpperCase' @@ -3379,7 +3379,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { ClearCustomerSupplier : Boolean; /** * Indicates that payment transactions and dunning notices are created for the branch. - * + * * Normally automatic payment transactions and dunning notices are created for the head office.NoteSelect this indicator only if this account is a head office account. */ @sap.display.format : 'UpperCase' @@ -3403,7 +3403,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { HouseBank : String(5); /** * Number of days which usually pass until the vendor has cashed your check. - * + * * During automatic payment transactions, the system calculates the value date for check payments using this information and stores the date in the line item. The date is calculated as follows:Value date = posting date + check cashing timeIn Cash Management, the value date is used as information about the expected cash outflow. */ @sap.label : 'Check Cashing Time' @@ -3416,7 +3416,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { Currency : String(5); /** * Maximum amount which may be issued on a bill of exchange if it is to be used in payment transactions with the business partner. - * + * * The amount limit is taken into consideration in automatic payment transactions for payments by bill of exchange and bill of exchange payment requests. Several bill of exchange forms are created if the amount to be settled is higher than the maximum amount given here. Each of these bills of exchange is issued for the maximum amount or for a smaller amount.Amount limits for bills of exchange are used in Spain, for example. */ @sap.unit : 'Currency' @@ -3430,7 +3430,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { SupplierClerkIDBySupplier : String(12); /** * The reconciliation account in G/L accounting is the account which is updated parallel to the subledger account for normal postings (for example, invoice or payment). - * + * * For special postings (for example, down payment or bill of exchange), this account is replaced by another account (for example, 'down payments received' instead of 'receivables').The replacement takes place due to the special G/L indicator which you must specify for these types of postings. */ @sap.display.format : 'UpperCase' @@ -3444,7 +3444,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { InterestCalculationCode : String(2); /** * The date in this field displays the last time the interest calculation program processed this account. This is generally the upper limit of the last interest run. - * + * * Generally, this date is automatically maintained by the program (batch input). A manual entry in this field should only be made if an error has occurred or when implementing the interest calculation. */ @sap.display.format : 'Date' @@ -3453,7 +3453,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { InterestCalculationDate : Date; /** * This field contains the account number of the master record for the head office account. - * + * * You specify this account number only for branch accounts. Items that you post using the branch account number are automatically posted to the head office account. The system records the branch account number in the line items.Neither transactions nor balances are kept in the branch account. */ @sap.display.format : 'UpperCase' @@ -3462,7 +3462,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { SupplierHeadOffice : String(10); /** * The account number of the vendor with whom automatic payment transactions are to be carried out. - * + * * The field is only needed if payments are not to be made directly to the vendor to whom the payable is owed. The same applies to bank collections of receivables.The specification in this field applies only to the company code. There is a further field in which you can enter an alternative payee for each company code. If both fields are filled, the company code specified has priority. */ @sap.display.format : 'UpperCase' @@ -3471,7 +3471,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { AlternativePayee : String(10); /** * Indicates the layout rule for the Allocation field in the document line item. - * + * * The system uses a standard sort sequence for displaying line items. Among other things, it sorts the items according to the content of the Allocation field. This field can be filled either manually or automatically (by the system) when a document line item is entered.For this purpose, the system requires rules that determine which information is to be taken from the document header or from the document line item and placed in the field. The rules can be stored in the master record of an account which enables you to determine the standard sort sequence on an account-specific basis.NoteField information from another document line item cannot be adopted into the field of a particular item. */ @sap.display.format : 'UpperCase' @@ -3485,7 +3485,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { APARToleranceGroup : String(4); /** * US government requirement. - * + * * Date field in which to enter certification date for small companies run by women or minorities. This certificate must be renewed every two years. */ @sap.display.format : 'Date' @@ -3493,7 +3493,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { SupplierCertificationDate : Date; /** * Internal memo of the accounting department. - * + * * The memo serves only as information on special features of the customer/vendor. */ @sap.label : 'Account Memo' @@ -3501,7 +3501,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { SupplierAccountNote : String(30); /** * In some countries, an additional country is needed for calculating or reporting withholding tax. - * + * * The calculation can depend on the payee's country.A particular country key can be required by law for reporting which may possibly be different to the key used in the address.Examples: Japan, USA (1042), Argentina */ @sap.display.format : 'UpperCase' @@ -3510,7 +3510,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { WithholdingTaxCountry : String(3); /** * Indicates that the company code data in this master record is to be deleted. - * + * * To delete this data, you have to run the archiving program for Accounts Receivable or Payable. This program will archive all master records marked for deletion provided that there is no dependent data in them.This deletion flag cannot be used in the program that deletes master data. You should, however, run this program only to delete test data prior to production startup. */ @sap.display.format : 'UpperCase' @@ -3519,7 +3519,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { DeletionIndicator : Boolean; /** * In cash management, customers and vendors are allocated to planning groups by means of an entry made in the master record. - * + * * You can define these planning groups in Customizing or the Implementation Guide (you will need to ensure that they are all the same length). In order to improve the liquidity forecast display for major customers and vendors, it can be advisable to enter their account number as the planning group.For the planning groups themselves a naming convention should be set up to improve liquidity forecasting. In the following examples, the customer planning groups begin with an "R" for receipts, and the vendor planning groups begin with an "E" for expenses.R1 Customers paying by bank collectionR2 Other domestic customersR3 Customers abroadR4 Affiliated company customersR5 High risk customersR6 Major customersR7 Rental incomeR8 Repayment of loans...E1 Domestic vendorsE2 Vendors abroadE3 Affiliated company vendorsE4 Major vendorsE5 Personnel costsE6 TaxesE7 Investments... */ @sap.display.format : 'UpperCase' @@ -3527,7 +3527,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { CashPlanningGroup : String(10); /** * When incoming invoices are entered or when memos are entered in Financial Accounting (FI), the system checks whether an invoice or credit memo has already been entered for the same date. - * + * * Checking Logistics DocumentsThe system checks whether the invoice documents have already been entered in the Logistics invoice verification. For this, the system checks invoices that have been held or parked or that contain errors, or invoices that were entered for invoice verification in the background. The check is performed only if you specify the reference document number when you enter the invoices.When checking for duplicate invoices, the system compares the following specified characteristics:VendorCurrencyCompany CodeGross Invoice AmountReference Document NumberInvoice Document DateIf all of these characteristics are the same, the system issues a message for which you can change the message type in Customizing.When you enter credit memos or subsequent adjustments, the system does not check for duplicate invoices.Exception: The exception is the Argentina country version, where the system checks for duplicate invoices and credit memos.No message is issued if you enter a document that has previously been reversed.In Customizing for Logistics Invoice Verification under Incoming Invoice -> Set Check for Duplicate Invoices, you can specify that the following characteristics are not checked:Reference Document NumberInvoice Document DateCompany CodeHaving fewer attributes to check increases the likelihood that the system will find a duplicate invoice.Example:The following document has already been entered and posted:Reference Document Number 333Invoice Date: 4/28/2000Gross Invoice Amount 100.00Currency: EURVendor: SpencerCompany Code: ChicagoYou have set up the check for duplicate invoices as follows in Customizing:The characteristics Reference Document Number and Company Code are not activated. Consequently, these characteristics are not checked.Now you enter the following invoice:Reference Document Number 334Invoice Date: 4/28/2000Gross Invoice Amount 100.00Currency: EURVendor: SpencerCompany Code: FlagstaffResultBecause you entered a reference document when you entered the invoice, the system checks for duplicate invoices. Compared against the invoice entered earlier, the invoice just entered has different values in the characteristics Reference and Company Code. However, these characteristics are not checked due to the settings that you have made in Customizing. All other characteristics are the same. The system issues a message telling you that an invoice has been entered twice.If the characteristic "Reference Document Number" had been selected in Customizing, the system would have checked the reference document number and established that it was different from the invoice entered earlier, and it consequently would not have issued a message.Checking FI DocumentsThe system checks whether there are FI documents that were posted or parked with the Logistics invoice verification or with an FI invoice transaction. Depending on the entry in the Reference field, one of the following checks is performed:If a reference number was specified in the sequential invoice/credit memo, the system checks whether an invoice/credit memo has already been posted for which all the following attributes agree:Company CodeVendorCurrencyDocument DateReference NumberIf no reference number was specified in the sequential invoice/credit memo, the system checks whether an invoice/credit memo has already been posted for which all the following attributes agree:Company CodeVendorCurrencyDocument DateAmount in Document CurrencyIn Materials Management, the system applies the check for duplicate invoices for invoices only, not for credit memos. */ @sap.display.format : 'UpperCase' @@ -3539,7 +3539,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { MinorityGroup : String(3); /** * The account group is a classifying feature within vendor master records. The account group determines: - * + * * the number interval for the account number of the vendor,whether the number is assigned by the user or by the system,which specifications are necessary and/or possible in the master record. */ @sap.display.format : 'UpperCase' @@ -3553,7 +3553,7 @@ entity API_BUSINESS_PARTNER.A_SupplierCompany { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Supplier Dunning' entity API_BUSINESS_PARTNER.A_SupplierDunning { @@ -3568,7 +3568,7 @@ entity API_BUSINESS_PARTNER.A_SupplierDunning { key CompanyCode : String(4) not null; /** * The dunning area represents an organizational entity that is responsible for dunning. The dunning areas represent a sub-structure of the company codes. - * + * * If different responsibilities or different dunning procedures exist within a company code, you can set up corresponding dunning areas.All dunning notices are made separately according to dunning areas, and if necessary with different dunning procedures.The dunning area must be noted in the line items. As long as documents are copied from preliminary work areas (billing documents), the dunning area can be derived from details such as division or sales area, if necessary. */ @sap.display.format : 'UpperCase' @@ -3580,7 +3580,7 @@ entity API_BUSINESS_PARTNER.A_SupplierDunning { DunningBlock : String(1); /** * Number that specifies how often an item or account has been dunned. - * + * * The business partner has received the dunning level from the last dunning run.If you use dunning areas, it is the dunning level that the business partner received from the last dunning run in the dunning area assigned.The dunning program sets the dunning level automatically when the customer or vendor receives a dunning notice. */ @sap.display.format : 'NonNegative' @@ -3592,7 +3592,7 @@ entity API_BUSINESS_PARTNER.A_SupplierDunning { DunningProcedure : String(4); /** * Account number of the vendor who is to receive the dunning notice. - * + * * Note:If an entry is not made in this field, the dunning notice is sent to the address of the vendor to be processed. */ @sap.display.format : 'UpperCase' @@ -3606,7 +3606,7 @@ entity API_BUSINESS_PARTNER.A_SupplierDunning { LastDunnedOn : Date; /** * Date on which a legal dunning procedure was initiated. - * + * * The printing of dunning notices in the legal dunning procedure generates an internal notice about any further account movements. A dunning notice is not created for the customer.If the Legal dunning procedure field in the master record contains a date, this means that the account is involved in a legal dunning procedure. The relationship between this date and the dunning date does not affect how the account is processed.The printing of account movements in the legal dunning procedure differs from the normal printing of dunning notices as follows:You must specify a separate form for your dunning procedure in Customizing. For more information, see Customizing (IMG) under Dunning Forms.The dunning program also displays text element 520 "Legal dunning procedure". This makes it possible to display the date of the legal dunning procedure from the master record.The program also displays the documents blocked for dunning and those with a payment method (automatic debit, bank direct debit).Although dunning notices are printed, the dunning level does not change in the master record or in the items. New dunning level = old dunning level.The program only updates the date of the last dunning run.Enter the date manually. */ @sap.display.format : 'Date' @@ -3615,7 +3615,7 @@ entity API_BUSINESS_PARTNER.A_SupplierDunning { LegDunningProcedureOn : Date; /** * Identification code for the accounting clerk dealing with dunning letters. - * + * * Using this identification code, the accounting clerk whose name is printed on the dunning letters is determined.If this field is not filled, then the entry from the Accounting clerk field is used. */ @sap.display.format : 'UpperCase' @@ -3628,7 +3628,7 @@ entity API_BUSINESS_PARTNER.A_SupplierDunning { AuthorizationGroup : String(4); /** * The account group is a classifying feature within vendor master records. The account group determines: - * + * * the number interval for the account number of the vendor,whether the number is assigned by the user or by the system,which specifications are necessary and/or possible in the master record. */ @sap.display.format : 'UpperCase' @@ -3638,7 +3638,7 @@ entity API_BUSINESS_PARTNER.A_SupplierDunning { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Purchasing Partner Functions' entity API_BUSINESS_PARTNER.A_SupplierPartnerFunc { @@ -3654,7 +3654,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPartnerFunc { key PurchasingOrganization : String(4) not null; /** * Subdivision of a supplier's overall product range according to various criteria. - * + * * For each supplier sub-range:The master data is kept on a common basisCertain conditions applyIn the supplier master, you can create different purchasing data and different partner functions for each supplier sub-range.You can also maintain and change the conditions for each supplier sub-range. You assign a material to a supplier sub-range in the info record.In the supplier master, you can maintain different data for particular supplier sub-ranges, such as ordering addresses or terms of payment, for example.When creating a purchase order with a known supplier, different data is only determined if the supplier sub-range is entered in the initial screen.Your supplier Smith in Houston has two sub-ranges: paint and glue.All materials from the "paint" sub-range are ordered in Houston.You have maintained an alternative ordering address in Detroit for the "glue" sub-range.If you order materials from the "glue" sub-range, the supplier sub-range finds the Detroit ordering address. */ @sap.display.format : 'UpperCase' @@ -3670,7 +3670,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPartnerFunc { key PartnerFunction : String(2) not null; /** * The sequential number that the system applies when there is more than one partner for a particular partner function. - * + * * When you create a sales order for a particular customer, there may be more than one ship-to party defined. The different ship-to parties are numbered sequentially. */ @sap.display.format : 'NonNegative' @@ -3678,7 +3678,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPartnerFunc { key PartnerCounter : String(3) not null; /** * Specifies a partner as the default for a particular partner function. - * + * * When you enter more than one partner for a particular partner function (for example, you define three different ship-to parties), you can select one partner as the default. During sales or purchasing processing, if you have defined multiple partners for a partner function, the system prompts you to choose just one partner. The system presents the default partner as the first choice in the pop-up window. */ @sap.display.format : 'UpperCase' @@ -3708,14 +3708,14 @@ entity API_BUSINESS_PARTNER.A_SupplierPartnerFunc { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.deletable : 'false' @sap.content.version : '1' @sap.label : 'Purchasing Organization' entity API_BUSINESS_PARTNER.A_SupplierPurchasingOrg { /** * Alphanumeric key uniquely identifying the document. - * + * * With the supplier number, information from the supplier master record (such as the supplier's address and bank details) is copied into a purchasing document (such as a request for quotation or a purchase order).You can use the supplier number to keep track of requests for quotation, purchase orders and outline agreements. */ @sap.display.format : 'UpperCase' @@ -3729,7 +3729,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPurchasingOrg { key PurchasingOrganization : String(4) not null; /** * Determines which calculation schema (pricing procedure) is to be used in purchasing documents containing this supplier number. - * + * * You can use the schema group to specify the calculation schema per purchasing organization or supplier. The relevant calculation schema is determined by reference to the schema group.The effect of this is that the conditions to be maintained in a purchasing document can differ depending on the relevant purchasing organization or supplier.If a calculation schema is only to be valid for certain purchasing organizations or suppliers, proceed as follows:Define the schema group for the purchasing organization or the supplier using the relevant function in the menu "Calculation schema -> Schema groups".Assign the schema group to the calculation schema via "Calculation schema -> Determine schema".Enter the schema group for the supplier in the supplier master records to which the calculation schema is to be assigned. Assign the schema group of the purchasing organization to the relevant purchasing organization using "Calculation schema -> Schema group -> Assign to purch. org.". */ @sap.display.format : 'UpperCase' @@ -3743,7 +3743,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPurchasingOrg { DeletionIndicator : Boolean; /** * Commonly used trading terms that comply with the standards established by the International Chamber of Commerce (ICC). - * + * * Incoterms specify internationally recognized procedures that the shipper and the receiving party must follow for the shipping transaction to be completed successfully.If goods are shipped through a port of departure, the appropriate Incoterm might be: FOB ("Free On Board"). You can provide further details (for example, the name of the port) in the secondary Incoterm field: FOB Boston, for example. */ @sap.display.format : 'UpperCase' @@ -3752,7 +3752,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPurchasingOrg { IncotermsClassification : String(3); /** * Additional information for the primary Incoterm. - * + * * If the primary Incoterm is, for example, FOB ("Free on Board"), then the second field provides details of the port from which the delivery leaves (for example, "FOB Boston"). */ @sap.label : 'Incoterms (Part 2)' @@ -3763,14 +3763,14 @@ entity API_BUSINESS_PARTNER.A_SupplierPurchasingOrg { IncotermsVersion : String(4); /** * Provides additional information for the primary Incoterm. For Incoterms 2010, this field represents: - * + * * 1. For sea and inland waterway transport - Port of Shipment2. For any mode of transport - Place of Delivery 2010Incoterms are divided as follows:Group 1: Rules for any mode or modes of transport (including by vessel)Incoterms Incoterms Description Location 1 EXW Ex Works Place of DeliveryFCA Free Carrier Place of DeliveryCPT Carriage Paid To Place of DestinationCIP Carriage & Insurance Paid To Place of DestinationDAF Delivered at Frontier Place of DeliveryDDP Delivered Duty Paid Place of DestinationDDU Delivered Duty Unpaid Place of DestinationGroup 2: Rules for sea and inland waterwaysIncoterms Incoterms Description Location 1 FAS Free Alongside Ship Port of ShipmentFOB Free On Board Port of ShipmentCFR Cost & Freight Port of DestinationCIF Cost Insurance & Freight Port of DestinationDEQ Delivered Eq Quay (Duty Paid) Port of DestinationDES Delivered Ex Ship Port of DestinationIf the primary incoterm is specified as FOB “Free on Board”, the second field provides details of the port from which the delivery leaves, such as FOB Boston. */ @sap.label : 'Incoterms Location 1' IncotermsLocation1 : String(70); /** * Provides additional information for the Incoterms. This field is only available for C-Clauses (if customized appropriately). Note the following for the incoterms versions below: - * + * * No Version:This field is disabledIncoterm Version 2000This field is disabled as part of standard delivery unless a customer decides to enable it by the way of Customizing for Sales and Distribution under Master Data -> Business Partners -> Customers -> Billing Document -> Incoterms -> Map Incoterms to Versions.Incoterm Version 2010For this version, the field represents:Sea and inland waterway transport - Port of DestinationAny mode of transport - Place of Destination2010 Incoterms are divided as follows:Group 1: Rules for any mode or modes of transport (including by vessel)Incoterms Incoterms Description Location 2CPT Carriage Paid To Place of DestinationCIP Carriage & Insurance Paid To Place of DestinationGroup 2: Rules for sea and inland waterwaysIncoterms Incoterms Description Location 2CFR Cost & Freight Port of DestinationCIF Cost Insurance & Freight Port of Destination */ @sap.label : 'Incoterms Location 2' @@ -3782,7 +3782,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPurchasingOrg { InvoiceIsGoodsReceiptBased : Boolean; /** * Number of calendar days needed to obtain the material or service if it is procured externally. - * + * * If you have different vendors for a material, you must specify an average value. The same applies if you order the material from a fixed vendor that has varying delivery times.If you use the SAP Retail System, the planned delivery time can be suggested from the vendor sub-range in the vendor master record. */ @sap.label : 'Planned Deliv. Time' @@ -3794,7 +3794,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPurchasingOrg { MinimumOrderAmount : Decimal(14, 3); /** * Key for defining payment terms composed of cash discount percentages and payment periods. - * + * * It is used in sales orders, purchase orders, and invoices. Terms of payment provide information for:Cash managementDunning proceduresPayment transactionsData can be entered in the field for the terms of payment key in various ways as you enter a business transaction:In most business transactions, the system defaults the key specified in the master record of the customer/vendor in question.In some transactions (for example, credit memos), however, the system does not default the key from the master record. Despite this, you can use the key from the customer/vendor master record by entering "*" in the field.Regardless of whether or not a key is defaulted from the master record, you can manually enter a key during document entry at:item level in sales ordersheader level in purchase orders and invoicesMaster records have separate areas for Financial Accounting, Sales, and Purchasing. You can specify different terms of payment keys in each of these areas. When you then enter a business transaction, the application in question will use the key specified in its area of the master record. */ @sap.display.format : 'UpperCase' @@ -3803,7 +3803,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPurchasingOrg { PaymentTerms : String(4); /** * Determines which date is to be used for price determination (pricing) purposes. - * + * * Enter the key for the desired date.If you choose the date of goods receipt, for example, a new price will be determined upon the arrival of the goods, causing the item to be revaluated at this time.NoteIf you have chosen the delivery date as the date for price determination and an item contains several delivery dates (i.e. has a delivery schedule), the first delivery date (the delivery date specified in the first schedule line) is taken. */ @sap.display.format : 'UpperCase' @@ -3812,7 +3812,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPurchasingOrg { PricingDateControl : String(1); /** * Allows you to automatically generate purchase orders from purchase requisitions if the requisition has been assigned to a supplier (source of supply). - * + * * If you want to use automatic conversion, note the following additional conditions:In the case of purchase requisitions for materials, you should also select the indicator Autom.purch.ord. in the Purchasing view in the material master record.In the case of purchase requisitions for services, you should also select the indicator Automatic creation of POs for service PReqs in Customizing for Services by choosing:IMG -> MM -> External Services Management -> Source Determination and Default Values- for Client or- for Purchasing Organization */ @sap.display.format : 'UpperCase' @@ -3826,7 +3826,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPurchasingOrg { PurchaseOrderCurrency : String(5); /** * Key for a buyer or a group of buyers, who is/are responsible for certain purchasing activities. - * + * * Internally, the purchasing group is responsible for the procurement of a material or a class of materials.Externally, it is the medium through which contacts with the vendor are maintained. */ @sap.display.format : 'UpperCase' @@ -3839,7 +3839,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPurchasingOrg { PurchasingIsBlockedForSupplier : Boolean; /** * General shipping strategy for the delivery of goods from the vendor to the customer. - * + * * You can define shipping conditions in your system which correspond to the requirements of your company. You can specify a shipping condition in the customer master and in the vendor master.Shipping point determination (outbound delivery):The loading group, the plant and the shipping condition determine the shipping point that will be proposed by the system.Route determination (outbound delivery):Apart from the country and the geographical region of the shipping point, the ship-to party and the transportation group, the shipping condition determines the route that the system proposes in the order for the delivery of the goods. In the delivery, the route proposal also takes the weight group into account.A particular customer always requires immediate delivery. You enter the appropriate shipping condition into the customer master record. This means that when you process orders for this customer, the system automatically proposes the express mail room as a shipping point and the quickest way to the airport as a route.If a shipping condition has been assigned to a sales document type in Customizing, this condition will be proposed by the system in the corresponding sales document. If there is no assignment, the system copies the relevant data from the corresponding customer master record of the sold-to party. You cannot change this value during delivery processing. The shipping condition will not be copied from the delivery into the shipment. The shipping condition is one of several criteria for selecting deliveries when you create a shipment. You can enter a shipping condition manually in the shipment where it only serves as a characteristic for grouping shipments. */ @sap.display.format : 'UpperCase' @@ -3847,7 +3847,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPurchasingOrg { ShippingCondition : String(2); /** * Means of classifying suppliers according to their significance to your company. - * + * * The indicator serves to assign the supplier to one of the categories A, B or C, in accordance with ABC analysis.'A' category suppliers, for instance, are those accounting for the greatest share of the company's total annual spend (in value terms). */ @sap.display.format : 'UpperCase' @@ -3867,7 +3867,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPurchasingOrg { AuthorizationGroup : String(4); /** * The account group is a classifying feature within vendor master records. The account group determines: - * + * * the number interval for the account number of the vendor,whether the number is assigned by the user or by the system,which specifications are necessary and/or possible in the master record. */ @sap.display.format : 'UpperCase' @@ -3879,7 +3879,7 @@ entity API_BUSINESS_PARTNER.A_SupplierPurchasingOrg { }; @cds.external : true -@cds.persistence.skip : true +//@cds.persistence.skip : true @sap.content.version : '1' @sap.label : 'Company Withholding Tax' entity API_BUSINESS_PARTNER.A_SupplierWithHoldingTax { @@ -3894,7 +3894,7 @@ entity API_BUSINESS_PARTNER.A_SupplierWithHoldingTax { key CompanyCode : String(4) not null; /** * This indicator is used to classify the different types of withholding tax. - * + * * Withholding tax types classify particular features of a withholding tax including:The time at which the withholding tax is postedThe basis on which the base amount is calculatedThe basis for accumulation (if applicable)Withholding tax types are to be distinguished from withholding tax codes, to which are allocated the withholding tax percentage rate example.Whether a withholding tax can be defined as an existing type by means of a new code, or if a new type needs to be defined will depend on the type of transaction (see below).Note that a business transaction can only be assigned one withholding tax code per withholding tax type. If the business transaction is subject to several withholding taxes simultaneously, these must be represented by different types.This is the case in Argentina for example, where up to four kinds of withholding tax per business transaction are possible. */ @sap.display.format : 'UpperCase' @@ -3913,7 +3913,7 @@ entity API_BUSINESS_PARTNER.A_SupplierWithHoldingTax { ExemptionDateEnd : Date; /** * Indicator used to classify different types of exemption from liability to a particular withholding tax. - * + * * These indicators can be defined per withholding tax type in the vendor master record. */ @sap.display.format : 'UpperCase' @@ -3926,7 +3926,7 @@ entity API_BUSINESS_PARTNER.A_SupplierWithHoldingTax { IsWithholdingTaxSubject : Boolean; /** * The type of recipient can be defined in the vendor master record. - * + * * It is used to group vendors together according to particular characteristics such as occupations that may be subject to the same withholding tax type, but which are required to pay different percentage rates (as defined by the withholding tax code).Application in ThailandThis corresponds to the official Thai form number (Phaw.Ngor.Daw) and is used to determine the sequential numbering of a withholding tax certificate. The form number is defined in the vendor master record. */ @sap.display.format : 'UpperCase' @@ -3935,7 +3935,7 @@ entity API_BUSINESS_PARTNER.A_SupplierWithHoldingTax { RecipientType : String(2); /** * Numbered assigned by the relevant authorities for exemption from withholding tax. - * + * * This number must be entered in the system as follows:In the vendor master record in the case of vendorsFor customers, in Customizing under the settings for withholding tax information for the company code per withholding tax type. */ @sap.display.format : 'UpperCase' @@ -3944,7 +3944,7 @@ entity API_BUSINESS_PARTNER.A_SupplierWithHoldingTax { WithholdingTaxCertificate : String(25); /** * One or more "withholding tax codes" are assigned to each withholding tax type. One of the things these codes determine is the various percentage rates for the withholding tax type. - * + * * Note that when processing a business transaction, no more than one withholding tax code can be assigned per withholding tax type. If the business transaction is subject to more than one withholding taxes, these must be represented in the system by defining various withholding tax types. */ @sap.display.format : 'UpperCase' @@ -3953,14 +3953,14 @@ entity API_BUSINESS_PARTNER.A_SupplierWithHoldingTax { WithholdingTaxCode : String(2); /** * Rate of exemption from withholding tax. - * + * * Those persons/activities subject to withholding tax can be exempted from withholding tax up to the percentage rate you enter here. This exemption rate refers to the withholding tax amount itself and not to the whole amount liable to withholding tax (withholding tax base amount).The gross amount of an invoice is 100.00 and the withholding tax base amount is defined as gross. The withholding tax rate is 10% meaning that the withholding tax amount is 10.00. Given an exemption rate of 30%, the withholding tax amount is reduced to 7.00. */ @sap.label : 'Exemption Rate' WithholdingTaxExmptPercent : Decimal(5, 2); /** * This is a number issued by the tax authorities per withholding tax type. - * + * * This number must be specified in Customizing either:(a) As part of the withholding tax information defined for the company code, or(b) As part of the withholding tax information defined in the customer or vendor master record. */ @sap.display.format : 'UpperCase' From 574a8effbba09541bb50da0b30b30ff3a8f5f384 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Tue, 5 Sep 2023 11:10:35 +0200 Subject: [PATCH 25/84] added MT feature --- srv/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/srv/pom.xml b/srv/pom.xml index 87199206..6c58d661 100644 --- a/srv/pom.xml +++ b/srv/pom.xml @@ -22,6 +22,12 @@ cds-starter-spring-boot + + com.sap.cds + cds-feature-mt + runtime + + com.sap.cds cds-adapter-api From f0a613679e25c7457162c0c3a217f0f8f3dfb012 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Wed, 6 Sep 2023 07:32:21 +0200 Subject: [PATCH 26/84] added profile kafka-messaging-cloud to components --- .../my/bookshop/config/CustomFeatureToggleProvider.java | 2 +- .../java/my/bookshop/handlers/SubscriptionHandler.java | 2 +- srv/src/main/resources/logback-spring.xml | 8 ++++++++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/srv/src/main/java/my/bookshop/config/CustomFeatureToggleProvider.java b/srv/src/main/java/my/bookshop/config/CustomFeatureToggleProvider.java index af294e38..7bb81259 100644 --- a/srv/src/main/java/my/bookshop/config/CustomFeatureToggleProvider.java +++ b/srv/src/main/java/my/bookshop/config/CustomFeatureToggleProvider.java @@ -12,7 +12,7 @@ import com.sap.cds.services.runtime.FeatureTogglesInfoProvider; @Component -@Profile("cloud") // locally, feature toggles are configured directly with mock users +@Profile({"cloud", "kafka-messaging-cloud"}) // locally, feature toggles are configured directly with mock users public class CustomFeatureToggleProvider implements FeatureTogglesInfoProvider { @Override diff --git a/srv/src/main/java/my/bookshop/handlers/SubscriptionHandler.java b/srv/src/main/java/my/bookshop/handlers/SubscriptionHandler.java index 8b70715f..288f8f34 100644 --- a/srv/src/main/java/my/bookshop/handlers/SubscriptionHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/SubscriptionHandler.java @@ -15,7 +15,7 @@ * Handler that implements subscription logic */ @Component -@Profile("cloud") +@Profile({"cloud", "kafka-messaging-cloud"}) @ServiceName(DeploymentService.DEFAULT_NAME) class SubscriptionHandler implements EventHandler { diff --git a/srv/src/main/resources/logback-spring.xml b/srv/src/main/resources/logback-spring.xml index bef4441a..3b10e1df 100644 --- a/srv/src/main/resources/logback-spring.xml +++ b/srv/src/main/resources/logback-spring.xml @@ -9,6 +9,14 @@ + + + + + + + + From b2841d35a141e33ff6947f20a8fc29690779656e Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Wed, 6 Sep 2023 11:20:37 +0200 Subject: [PATCH 27/84] added log levels --- srv/src/main/resources/application.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 88017670..5c042367 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -2,6 +2,8 @@ logging: level: '[com.sap.cds.auditlog]': DEBUG + '[com.sap.cds.persistence.sql]': DEBUG + '[com.sap.cds.persistence.sql-tx]': DEBUG spring: web.resources.static-locations: "file:./app" jmx: From 23a63cfb8fd72670a0f91932a33cf35c0b62ec23 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Wed, 6 Sep 2023 12:15:10 +0200 Subject: [PATCH 28/84] disbaled H2 and SQLite DB --- srv/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srv/pom.xml b/srv/pom.xml index 6c58d661..5f123c56 100644 --- a/srv/pom.xml +++ b/srv/pom.xml @@ -91,7 +91,7 @@ - + com.sap.hcp.cf.logging From 94e3ced9f699e987b6f11da4af647f041ba07f96 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Wed, 6 Sep 2023 12:43:00 +0200 Subject: [PATCH 29/84] Revert "disbaled H2 and SQLite DB" This reverts commit 23a63cfb8fd72670a0f91932a33cf35c0b62ec23. --- srv/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/srv/pom.xml b/srv/pom.xml index 5f123c56..6c58d661 100644 --- a/srv/pom.xml +++ b/srv/pom.xml @@ -91,7 +91,7 @@ - + com.sap.hcp.cf.logging From db4ec14454b2e7e6fa6aff19cc49c9a2ba771be7 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Wed, 6 Sep 2023 13:29:59 +0200 Subject: [PATCH 30/84] changed auto-config enable for profile kafka-messaging-cloud --- srv/src/main/resources/application.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 5c042367..d761cec7 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -104,7 +104,7 @@ cds: security: authentication.normalize-provider-tenant: false data-source: - auto-config.enabled: false + auto-config.enabled: true messaging.services: bupa-messaging: binding: bookshop-mt-messaging-kafka From 9ece426c2d1914c9818fc639532d45a59b83e93e Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Wed, 6 Sep 2023 16:47:10 +0200 Subject: [PATCH 31/84] set logger for com.sap.cds.messaging to debug --- srv/src/main/resources/application.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index d761cec7..47c00a61 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -4,6 +4,7 @@ logging: '[com.sap.cds.auditlog]': DEBUG '[com.sap.cds.persistence.sql]': DEBUG '[com.sap.cds.persistence.sql-tx]': DEBUG + '[com.sap.cds.messaging]': DEBUG spring: web.resources.static-locations: "file:./app" jmx: From 1b8c4c91b3f8cabe16fc37e589b20bcf78c02e3f Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 7 Sep 2023 07:59:34 +0200 Subject: [PATCH 32/84] removed spring logger profile --- srv/src/main/resources/logback-spring.xml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/srv/src/main/resources/logback-spring.xml b/srv/src/main/resources/logback-spring.xml index 3b10e1df..bef4441a 100644 --- a/srv/src/main/resources/logback-spring.xml +++ b/srv/src/main/resources/logback-spring.xml @@ -9,14 +9,6 @@ - - - - - - - - From 0ef20eb89b3e6143127f6742cc1aa7bce8fca545 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 7 Sep 2023 08:03:34 +0200 Subject: [PATCH 33/84] added log message --- .../main/java/my/bookshop/config/DestinationConfiguration.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index 4469c465..d874a981 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -51,6 +51,8 @@ void applicationReady(ApplicationReadyEvent ready) { private void registerCloudDestination(String applicationUrl) { String destinationName = environment.getProperty("cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name"); + logger.info("Destination name for mocked API_BUSINESS_PARTNER: {}", destinationName); + ServiceBinding uaaBinding = runtime.getEnvironment().getServiceBindings().filter(b -> b.getServiceName().get().equals("xsuaa")).findFirst().get(); logger.info("UAA Service Binding: {} / {}", uaaBinding.getName().get(), uaaBinding.getServiceName().get()); From 759cf40af46d811ae341fdaee9a612a391ab53e9 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 7 Sep 2023 10:58:15 +0200 Subject: [PATCH 34/84] logging tenant for BusinessPartnerChanged event handler --- .../java/my/bookshop/handlers/AdminServiceAddressHandler.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java index 12573db0..ab6746cf 100644 --- a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java @@ -124,6 +124,8 @@ public void patchAddressId(EventContext context, Stream orders) { @On(service = ApiBusinessPartner_.CDS_NAME) public void updateBusinessPartnerAddresses(BusinessPartnerChangedContext context) { logger.info(">> received: " + context.getData()); + logger.info("BusinessPartnerChanged event received for tenant with id = {}", context.getUserInfo().getTenant()); + String businessPartner = context.getData().getBusinessPartner(); // fetch affected entries from local replicas From 1908f2239e94e4c40dc6ec68ee1ec2149c2dce62 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 7 Sep 2023 12:48:34 +0200 Subject: [PATCH 35/84] temporarily disabling outbox for kafka messaging --- srv/src/main/resources/application.yaml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 47c00a61..1e6cc8e5 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -113,6 +113,10 @@ cds: config: channel: cds.default.cdsjava-testing enabled: true + outbox: + enabled: false + persistent: + enabled: false application.services: api-business-partner-mocked: model: API_BUSINESS_PARTNER From e6c00772228df02143be0952ddd14548f37eed1f Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 7 Sep 2023 13:29:17 +0200 Subject: [PATCH 36/84] extended log message --- .../java/my/bookshop/handlers/AdminServiceAddressHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java index ab6746cf..c30d1e91 100644 --- a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java @@ -124,7 +124,7 @@ public void patchAddressId(EventContext context, Stream orders) { @On(service = ApiBusinessPartner_.CDS_NAME) public void updateBusinessPartnerAddresses(BusinessPartnerChangedContext context) { logger.info(">> received: " + context.getData()); - logger.info("BusinessPartnerChanged event received for tenant with id = {}", context.getUserInfo().getTenant()); + logger.info("BusinessPartnerChanged event received for tenant id = {} and user = {}", context.getUserInfo().getTenant(), context.getUserInfo().getName()); String businessPartner = context.getData().getBusinessPartner(); From 6e0173f5614702a31d4d40a4b4d388de43aced3e Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 7 Sep 2023 14:28:37 +0200 Subject: [PATCH 37/84] extended log message --- .../java/my/bookshop/handlers/AdminServiceAddressHandler.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java index c30d1e91..016fa9be 100644 --- a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java @@ -124,7 +124,9 @@ public void patchAddressId(EventContext context, Stream orders) { @On(service = ApiBusinessPartner_.CDS_NAME) public void updateBusinessPartnerAddresses(BusinessPartnerChangedContext context) { logger.info(">> received: " + context.getData()); - logger.info("BusinessPartnerChanged event received for tenant id = {} and user = {}", context.getUserInfo().getTenant(), context.getUserInfo().getName()); + logger.info("BusinessPartnerChanged event received for tenant id = {}. User Info: name = {}, id = {}, attributes = {}, additional attributes = {}", + context.getUserInfo().getTenant(), context.getUserInfo().getName(), context.getUserInfo().getId(), + context.getUserInfo().getAttributes(), context.getUserInfo().getAdditionalAttributes()); String businessPartner = context.getData().getBusinessPartner(); From 9dfc4c4e9b8d72fdaaba1e770311fb9e08f4ee59 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Fri, 8 Sep 2023 08:20:45 +0200 Subject: [PATCH 38/84] fixed token endpoint url --- .../java/my/bookshop/config/DestinationConfiguration.java | 2 +- .../my/bookshop/handlers/AdminServiceAddressHandler.java | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index d874a981..7044d696 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -58,7 +58,7 @@ private void registerCloudDestination(String applicationUrl) { Map credentials = uaaBinding.getCredentials(); Object client = new ClientCredentials((String)credentials.get("clientid"), (String)credentials.get("clientsecret")); - String tokenUrl = (String)credentials.get("url"); + String tokenUrl = (String)credentials.get("url") + "/oauth/token"; DestinationAccessor.prependDestinationLoader( new DefaultDestinationLoader() diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java index 016fa9be..3a62421f 100644 --- a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressHandler.java @@ -124,9 +124,10 @@ public void patchAddressId(EventContext context, Stream orders) { @On(service = ApiBusinessPartner_.CDS_NAME) public void updateBusinessPartnerAddresses(BusinessPartnerChangedContext context) { logger.info(">> received: " + context.getData()); - logger.info("BusinessPartnerChanged event received for tenant id = {}. User Info: name = {}, id = {}, attributes = {}, additional attributes = {}", - context.getUserInfo().getTenant(), context.getUserInfo().getName(), context.getUserInfo().getId(), - context.getUserInfo().getAttributes(), context.getUserInfo().getAdditionalAttributes()); + logger.info("BusinessPartnerChanged event received for tenant id = {}. User Info: name = {}, id = {}", + context.getUserInfo().getTenant(), + context.getUserInfo().getName(), + context.getUserInfo().getId()); String businessPartner = context.getData().getBusinessPartner(); From 823323e804a631f827be985f78033913ebce9754 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Fri, 8 Sep 2023 11:32:54 +0200 Subject: [PATCH 39/84] using technical user for API_BUSINESS_PARTNER destination --- .../main/java/my/bookshop/config/DestinationConfiguration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index 7044d696..eadf80d0 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -66,7 +66,7 @@ private void registerCloudDestination(String applicationUrl) { OAuth2DestinationBuilder .forTargetUrl("https://" + applicationUrl + "/") .withTokenEndpoint(tokenUrl) - .withClient((ClientIdentity)client, OnBehalfOf.NAMED_USER_CURRENT_TENANT) + .withClient((ClientIdentity)client, OnBehalfOf.TECHNICAL_USER_CURRENT_TENANT) .withProperties(Collections.singletonMap(DestinationProperty.NAME.getKeyName(), destinationName)) .build())); } From 0735c0a6e8e2a670f045607d9aeecc84f7745481 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Fri, 8 Sep 2023 12:46:18 +0200 Subject: [PATCH 40/84] enabling outbox again --- srv/src/main/resources/application.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 1e6cc8e5..b192c7ba 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -113,10 +113,10 @@ cds: config: channel: cds.default.cdsjava-testing enabled: true - outbox: - enabled: false - persistent: - enabled: false +# outbox: +# enabled: false +# persistent: +# enabled: false application.services: api-business-partner-mocked: model: API_BUSINESS_PARTNER From ffc0793019a17f0b83f6b7a0afbfd49939e9dd17 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Fri, 8 Sep 2023 13:09:34 +0200 Subject: [PATCH 41/84] added logger for com.sap.cds.services --- srv/src/main/resources/application.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index b192c7ba..b56b95d5 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -5,6 +5,7 @@ logging: '[com.sap.cds.persistence.sql]': DEBUG '[com.sap.cds.persistence.sql-tx]': DEBUG '[com.sap.cds.messaging]': DEBUG + '[com.sap.cds.services]': DEBUG spring: web.resources.static-locations: "file:./app" jmx: From d609d9c267c5691c0c7965b0986f2b6462d341b9 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Fri, 8 Sep 2023 13:24:08 +0200 Subject: [PATCH 42/84] Setting tenants-info-refresh-interval to 5 seconds --- srv/src/main/resources/application.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index b56b95d5..4489fb9a 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -118,6 +118,9 @@ cds: # enabled: false # persistent: # enabled: false + outbox: + persistent: + tenants-info-refresh-interval: 5 application.services: api-business-partner-mocked: model: API_BUSINESS_PARTNER From 6cd9eac8f1d8c66a22351ce2d7769236b04a3fd6 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Fri, 8 Sep 2023 13:41:38 +0200 Subject: [PATCH 43/84] Setting tenants-info-refresh-interval --- srv/src/main/resources/application.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 4489fb9a..741b3e8d 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -120,7 +120,7 @@ cds: # enabled: false outbox: persistent: - tenants-info-refresh-interval: 5 + tenantsInfoRefreshInterval: 1 application.services: api-business-partner-mocked: model: API_BUSINESS_PARTNER From 8ce4eb3b44fcc8e6e49342df923433266588664a Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Fri, 8 Sep 2023 13:53:28 +0200 Subject: [PATCH 44/84] disabling outbox again --- srv/src/main/resources/application.yaml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 741b3e8d..7a88c0f3 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -114,13 +114,10 @@ cds: config: channel: cds.default.cdsjava-testing enabled: true -# outbox: -# enabled: false -# persistent: -# enabled: false outbox: + enabled: false persistent: - tenantsInfoRefreshInterval: 1 + enabled: false application.services: api-business-partner-mocked: model: API_BUSINESS_PARTNER From 5624ea75e7b1982eefc435d141376d225e946dd5 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 14 Sep 2023 10:03:24 +0200 Subject: [PATCH 45/84] refactored spring profiles for messaging --- .../config/CustomFeatureToggleProvider.java | 2 +- .../handlers/SubscriptionHandler.java | 2 +- srv/src/main/resources/application.yaml | 27 +++++++++++-------- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/srv/src/main/java/my/bookshop/config/CustomFeatureToggleProvider.java b/srv/src/main/java/my/bookshop/config/CustomFeatureToggleProvider.java index 7bb81259..0b85d48b 100644 --- a/srv/src/main/java/my/bookshop/config/CustomFeatureToggleProvider.java +++ b/srv/src/main/java/my/bookshop/config/CustomFeatureToggleProvider.java @@ -12,7 +12,7 @@ import com.sap.cds.services.runtime.FeatureTogglesInfoProvider; @Component -@Profile({"cloud", "kafka-messaging-cloud"}) // locally, feature toggles are configured directly with mock users +@Profile({"cloud", "messaging-cloud"}) // locally, feature toggles are configured directly with mock users public class CustomFeatureToggleProvider implements FeatureTogglesInfoProvider { @Override diff --git a/srv/src/main/java/my/bookshop/handlers/SubscriptionHandler.java b/srv/src/main/java/my/bookshop/handlers/SubscriptionHandler.java index 288f8f34..0b33c9bb 100644 --- a/srv/src/main/java/my/bookshop/handlers/SubscriptionHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/SubscriptionHandler.java @@ -15,7 +15,7 @@ * Handler that implements subscription logic */ @Component -@Profile({"cloud", "kafka-messaging-cloud"}) +@Profile({"cloud", "messaging-cloud"}) @ServiceName(DeploymentService.DEFAULT_NAME) class SubscriptionHandler implements EventHandler { diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 7a88c0f3..45fb6a4b 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -101,12 +101,27 @@ cds: --- spring: - config.activate.on-profile: kafka-messaging-cloud + config.activate.on-profile: messaging-cloud cds: security: authentication.normalize-provider-tenant: false data-source: auto-config.enabled: true + application.services: + api-business-partner-mocked: + model: API_BUSINESS_PARTNER + serve: + path: API_BUSINESS_PARTNER + remote.services: + '[API_BUSINESS_PARTNER]': + destination: + name: "myself" + suffix: "/api" + +--- +spring: + config.activate.on-profile: kafka-messaging-cloud +cds: messaging.services: bupa-messaging: binding: bookshop-mt-messaging-kafka @@ -118,16 +133,6 @@ cds: enabled: false persistent: enabled: false - application.services: - api-business-partner-mocked: - model: API_BUSINESS_PARTNER - serve: - path: API_BUSINESS_PARTNER - remote.services: - '[API_BUSINESS_PARTNER]': - destination: - name: "myself" - suffix: "/api" --- spring: From 70f3f762fa1f2c510888d6089f95a68928f85395 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 14 Sep 2023 14:05:22 +0200 Subject: [PATCH 46/84] added event mesh configuration --- bookshop-mt-messaging-em.json | 30 +++++++++++++++++++++++++ mta-multi-tenant-messaging.yaml | 7 ++++++ srv/src/main/resources/application.yaml | 19 ++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 bookshop-mt-messaging-em.json diff --git a/bookshop-mt-messaging-em.json b/bookshop-mt-messaging-em.json new file mode 100644 index 00000000..994d984a --- /dev/null +++ b/bookshop-mt-messaging-em.json @@ -0,0 +1,30 @@ +{ + "emname": "bookshop-mt-messaging-em", + "namespace": "z/bookshopmtmessagingem/-", + "instanceType": "reuse", + "authorities": ["$ACCEPT_GRANTED_AUTHORITIES"], + "version": "1.1.0", + "options": { + "management": true, + "messaging": true, + "messagingrest": true + }, + "rules": { + "queueRules": { + "publishFilter": [ + "${namespace}/*" + ], + "subscribeFilter": [ + "${namespace}/*" + ] + }, + "topicRules": { + "publishFilter": [ + "${namespace}/*" + ], + "subscribeFilter": [ + "${namespace}/*" + ] + } + } +} diff --git a/mta-multi-tenant-messaging.yaml b/mta-multi-tenant-messaging.yaml index 23355329..fa0e0dcf 100644 --- a/mta-multi-tenant-messaging.yaml +++ b/mta-multi-tenant-messaging.yaml @@ -25,6 +25,7 @@ modules: build-result: target/*-exec.jar requires: - name: bookshop-mt-messaging-kafka + - name: bookshop-mt-messaging-em - name: bookshop-mt-messaging-service-manager - name: bookshop-mt-messaging-uaa - name: bookshop-mt-messaging-saas-registry @@ -97,6 +98,12 @@ resources: service-plan: reference config: advertisement: "3315eb2d-3142-4ed5-91ab-1c3665fef3a8" + - name: bookshop-mt-messaging-em + type: org.cloudfoundry.managed-service + parameters: + service: enterprise-messaging + service-plan: default + path: bookshop-mt-messaging-em.json - name: bookshop-mt-messaging-uaa type: org.cloudfoundry.managed-service parameters: diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 45fb6a4b..9c54a39e 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -133,6 +133,25 @@ cds: enabled: false persistent: enabled: false + em-messaging: + binding: bookshop-mt-messaging-em + enabled: false + +--- +spring: + config.activate.on-profile: em-messaging-cloud +cds: + messaging.services: + kafka-messaging: + binding: bookshop-mt-messaging-kafka + enabled: false + bupa-messaging: + binding: bookshop-mt-messaging-em + enabled: true + outbox: + enabled: false + persistent: + enabled: false --- spring: From ca643df7b8de3d70842a4862c8b2486c3b7e7c26 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 14 Sep 2023 15:39:54 +0200 Subject: [PATCH 47/84] added mq configuration --- bookshop-mt-messaging-mq.json | 14 ++++++++++++++ mta-multi-tenant-messaging.yaml | 7 +++++++ srv/src/main/resources/application.yaml | 25 +++++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 bookshop-mt-messaging-mq.json diff --git a/bookshop-mt-messaging-mq.json b/bookshop-mt-messaging-mq.json new file mode 100644 index 00000000..8d8a6516 --- /dev/null +++ b/bookshop-mt-messaging-mq.json @@ -0,0 +1,14 @@ +{ + "notificationsEnabled": false, + "resources": { + "units": "100" + }, + "sourceIPs": "0.0.0.0/0", + "xs-security": { + "oauth2-configuration": { + "credential-types": [ + "binding-secret" + ] + } + } +} diff --git a/mta-multi-tenant-messaging.yaml b/mta-multi-tenant-messaging.yaml index fa0e0dcf..c8b632cb 100644 --- a/mta-multi-tenant-messaging.yaml +++ b/mta-multi-tenant-messaging.yaml @@ -26,6 +26,7 @@ modules: requires: - name: bookshop-mt-messaging-kafka - name: bookshop-mt-messaging-em + - name: bookshop-mt-messaging-mq - name: bookshop-mt-messaging-service-manager - name: bookshop-mt-messaging-uaa - name: bookshop-mt-messaging-saas-registry @@ -104,6 +105,12 @@ resources: service: enterprise-messaging service-plan: default path: bookshop-mt-messaging-em.json + - name: bookshop-mt-messaging-mq + type: org.cloudfoundry.managed-service + parameters: + service: message-queuing + service-plan: standard + path: bookshop-mt-messaging-mq.json - name: bookshop-mt-messaging-uaa type: org.cloudfoundry.managed-service parameters: diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 9c54a39e..94c7538b 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -136,6 +136,9 @@ cds: em-messaging: binding: bookshop-mt-messaging-em enabled: false + mq-messaging: + binding: bookshop-mt-messaging-mq + enabled: false --- spring: @@ -152,6 +155,28 @@ cds: enabled: false persistent: enabled: false + mq-messaging: + binding: bookshop-mt-messaging-mq + enabled: false + +--- +spring: + config.activate.on-profile: mq-messaging-cloud +cds: + messaging.services: + kafka-messaging: + binding: bookshop-mt-messaging-kafka + enabled: false + em-messaging: + binding: bookshop-mt-messaging-em + enabled: false + bupa-messaging: + binding: bookshop-mt-messaging-mq + enabled: true + outbox: + enabled: false + persistent: + enabled: false --- spring: From 2a5d30c41470671b61eeca9adf1dbc4584c278b6 Mon Sep 17 00:00:00 2001 From: Thomas Bonk Date: Thu, 14 Sep 2023 15:54:51 +0200 Subject: [PATCH 48/84] disabling message brokers by default --- srv/src/main/resources/application.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 94c7538b..376e3a20 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -209,3 +209,13 @@ spring: cds: data-source: auto-config.enabled: false + messaging.services: + kafka-messaging: + binding: bookshop-mt-messaging-kafka + enabled: false + em-messaging: + binding: bookshop-mt-messaging-em + enabled: false + mq-messaging: + binding: bookshop-mt-messaging-mq + enabled: false From 8af2a4cb3e6f01ba74499086fdd2ddbfb0087a9d Mon Sep 17 00:00:00 2001 From: Vladimir Mikhaylenko Date: Mon, 23 Oct 2023 13:41:30 +0200 Subject: [PATCH 49/84] Use offline SAPMachine 17 in messaging test --- mta-multi-tenant-messaging.yaml | 2 +- mta-multi-tenant.yaml | 2 +- mta-single-tenant.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mta-multi-tenant-messaging.yaml b/mta-multi-tenant-messaging.yaml index c8b632cb..1668b33f 100644 --- a/mta-multi-tenant-messaging.yaml +++ b/mta-multi-tenant-messaging.yaml @@ -17,7 +17,7 @@ modules: properties: CDS_MULTITENANCY_APPUI_TENANTSEPARATOR: "-" JBP_CONFIG_COMPONENTS: "jres: ['com.sap.xs.java.buildpack.jre.SAPMachineJRE']" - JBP_CONFIG_SAP_MACHINE_JRE: '{ use_offline_repository: false, version: 17.+ }' + JBP_CONFIG_SAP_MACHINE_JRE: '{ version: 17.+ }' build-parameters: builder: custom commands: diff --git a/mta-multi-tenant.yaml b/mta-multi-tenant.yaml index 7ca6504b..237e5f21 100644 --- a/mta-multi-tenant.yaml +++ b/mta-multi-tenant.yaml @@ -18,7 +18,7 @@ modules: SPRING_PROFILES_ACTIVE: cloud,sandbox CDS_MULTITENANCY_APPUI_TENANTSEPARATOR: "-" JBP_CONFIG_COMPONENTS: "jres: ['com.sap.xs.java.buildpack.jre.SAPMachineJRE']" - JBP_CONFIG_SAP_MACHINE_JRE: '{ use_offline_repository: false, version: 17.+ }' + JBP_CONFIG_SAP_MACHINE_JRE: '{ version: 17.+ }' build-parameters: builder: custom commands: diff --git a/mta-single-tenant.yaml b/mta-single-tenant.yaml index 9282f729..4e87383a 100644 --- a/mta-single-tenant.yaml +++ b/mta-single-tenant.yaml @@ -17,7 +17,7 @@ modules: properties: SPRING_PROFILES_ACTIVE: cloud,sandbox JBP_CONFIG_COMPONENTS: "jres: ['com.sap.xs.java.buildpack.jre.SAPMachineJRE']" - JBP_CONFIG_SAP_MACHINE_JRE: '{ use_offline_repository: false, version: 17.+ }' + JBP_CONFIG_SAP_MACHINE_JRE: '{ version: 17.+ }' build-parameters: builder: custom commands: From 8809f57a8903d87e33670eb2c27360eab21d3665 Mon Sep 17 00:00:00 2001 From: Marc Becker Date: Tue, 24 Oct 2023 15:30:28 +0200 Subject: [PATCH 50/84] Update versions --- pom.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index b2e2e989..76859b57 100644 --- a/pom.xml +++ b/pom.xml @@ -16,12 +16,12 @@ 17 - 2.1.1 - 3.1.2 - 4.20.0 - 3.1.2 + 2.3.0 + 3.1.4 + 4.24.0 + 3.1.3 3.7.0 - 7.1.1 + 7.2.0 From d6eb5f8a2a604515c46693f002d3be47ac1d7966 Mon Sep 17 00:00:00 2001 From: D040882 Date: Wed, 29 Nov 2023 17:08:27 +0100 Subject: [PATCH 51/84] Update node.js version to 18 as 16 is deprecated --- db/package.json | 2 +- mtx/sidecar/package.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/db/package.json b/db/package.json index 5988fc9c..a969895f 100644 --- a/db/package.json +++ b/db/package.json @@ -4,7 +4,7 @@ "@sap/hdi-deploy": "^4" }, "engines": { - "node": "^16" + "node": "^18" }, "scripts": { "start": "node node_modules/@sap/hdi-deploy/deploy.js", diff --git a/mtx/sidecar/package.json b/mtx/sidecar/package.json index 25f90de5..b3c7547f 100644 --- a/mtx/sidecar/package.json +++ b/mtx/sidecar/package.json @@ -12,7 +12,7 @@ "pm2": "^5.3.0" }, "engines": { - "node": "^16" + "node": "^18" }, "cds": { "profile": "mtx-sidecar", From 448e970143f5652c584f16e8352045c292c3d715 Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Thu, 14 Dec 2023 09:35:35 +0100 Subject: [PATCH 52/84] downgrade due to bug in 4.9.0 --- db/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db/package.json b/db/package.json index a969895f..491f7082 100644 --- a/db/package.json +++ b/db/package.json @@ -1,7 +1,7 @@ { "name": "deploy", "dependencies": { - "@sap/hdi-deploy": "^4" + "@sap/hdi-deploy": "4.8.2" }, "engines": { "node": "^18" From 5b0817d4fbfe60b11c3cbc3403c8fd7b9d63fc28 Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Thu, 14 Dec 2023 09:53:34 +0100 Subject: [PATCH 53/84] Update package.json --- mtx/sidecar/package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mtx/sidecar/package.json b/mtx/sidecar/package.json index b3c7547f..592c2c7f 100644 --- a/mtx/sidecar/package.json +++ b/mtx/sidecar/package.json @@ -5,7 +5,8 @@ "@sap/xssec": "^3", "express": "^4", "hdb": "^0", - "passport": "^0" + "passport": "^0", + "@sap/hdi-deploy": "4.8.2" }, "devDependencies": { "sqlite3": "^5", From 419a236416afc10de75da122b37412434314fbaf Mon Sep 17 00:00:00 2001 From: Thomas Bonk <130759028+t-bonk@users.noreply.github.com> Date: Tue, 6 Feb 2024 09:38:59 +0100 Subject: [PATCH 54/84] Update application.yaml Setting queue name to avoid creation of new queues. --- srv/src/main/resources/application.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 376e3a20..dd4de8ef 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -151,6 +151,8 @@ cds: bupa-messaging: binding: bookshop-mt-messaging-em enabled: true + queue: + name: "$namespace/bookshop-mt-messaging-em-queue" outbox: enabled: false persistent: From 5848596d36c37a9f13e43f994a0af483a124d6e7 Mon Sep 17 00:00:00 2001 From: Thomas Bonk <130759028+t-bonk@users.noreply.github.com> Date: Wed, 27 Mar 2024 09:25:04 +0100 Subject: [PATCH 55/84] Update pom.xml Updated dependency versions --- pom.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pom.xml b/pom.xml index 76859b57..013ab45a 100644 --- a/pom.xml +++ b/pom.xml @@ -16,12 +16,12 @@ 17 - 2.3.0 - 3.1.4 + 2.8.1 + 3.2.4 4.24.0 - 3.1.3 - 3.7.0 - 7.2.0 + 3.3.5 + 3.8.3 + 7.8.0 From f656bf76c7e12c7eb92b744167c4ad8fe525ce77 Mon Sep 17 00:00:00 2001 From: Marc Becker Date: Thu, 4 Apr 2024 09:37:26 +0000 Subject: [PATCH 56/84] Fix compilation error --- .../java/my/bookshop/config/DestinationConfiguration.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index eadf80d0..a0fba427 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -1,6 +1,5 @@ package my.bookshop.config; -import java.util.Collections; import java.util.Map; import org.slf4j.Logger; @@ -17,7 +16,6 @@ import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultDestinationLoader; import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor; -import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationProperty; import com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2DestinationBuilder; import com.sap.cloud.sdk.cloudplatform.connectivity.OnBehalfOf; import com.sap.cloud.sdk.cloudplatform.security.BasicCredentials; @@ -67,7 +65,7 @@ private void registerCloudDestination(String applicationUrl) { .forTargetUrl("https://" + applicationUrl + "/") .withTokenEndpoint(tokenUrl) .withClient((ClientIdentity)client, OnBehalfOf.TECHNICAL_USER_CURRENT_TENANT) - .withProperties(Collections.singletonMap(DestinationProperty.NAME.getKeyName(), destinationName)) + .name(destinationName) .build())); } From f1b2ec7ab72dcc72496a140360e0cdce503b39ef Mon Sep 17 00:00:00 2001 From: D040882 Date: Wed, 21 Aug 2024 13:34:12 +0200 Subject: [PATCH 57/84] update package-lock.json --- db/package-lock.json | 24 +++--- mtx/sidecar/package-lock.json | 152 +++++++++++++++++++--------------- 2 files changed, 95 insertions(+), 81 deletions(-) diff --git a/db/package-lock.json b/db/package-lock.json index 602573e1..5762e03e 100644 --- a/db/package-lock.json +++ b/db/package-lock.json @@ -14,14 +14,14 @@ } }, "node_modules/@sap/hdi-deploy": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@sap/hdi-deploy/-/hdi-deploy-5.2.0.tgz", - "integrity": "sha512-/ihTFLyiN/m3jF2uxeFgR7eR0i057nqc2Dc3qC2GP0LKueUEeIpLcPuorDiBJ8XtV2BMpWxmm9ZizQ4HVi9gnA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@sap/hdi-deploy/-/hdi-deploy-5.2.1.tgz", + "integrity": "sha512-yfwII5sWY3ykhOvqY0BVEI0dV29rfSLIgbtjGXz4+wtrddg4WQryFwerpBVjBRSjRPZSYTfS7VUqotlP00bqLQ==", "hasInstallScript": true, "hasShrinkwrap": true, "dependencies": { "@sap/hdi": "4.5.2", - "@sap/xsenv": "5.1.0", + "@sap/xsenv": "5.2.0", "async": "3.2.5", "dotenv": "16.4.5", "handlebars": "4.7.8", @@ -44,7 +44,7 @@ } }, "node_modules/@sap/hdi-deploy/node_modules/@sap/hana-client": { - "version": "2.20.22", + "version": "2.20.23", "hasInstallScript": true, "optional": true, "peer": true, @@ -80,9 +80,9 @@ "version": "3.2.3" }, "node_modules/@sap/hdi-deploy/node_modules/@sap/xsenv": { - "version": "5.1.0", + "version": "5.2.0", "dependencies": { - "debug": "4.3.4", + "debug": "4.3.5", "node-cache": "^5.1.0", "verror": "1.10.1" }, @@ -91,7 +91,7 @@ } }, "node_modules/@sap/hdi-deploy/node_modules/@sap/xsenv/node_modules/debug": { - "version": "4.3.4", + "version": "4.3.5", "dependencies": { "ms": "2.1.2" }, @@ -266,7 +266,7 @@ } }, "node_modules/@sap/hdi-deploy/node_modules/uglify-js": { - "version": "3.17.4", + "version": "3.19.1", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -290,9 +290,9 @@ "version": "1.0.0" }, "node_modules/hdb": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/hdb/-/hdb-0.19.8.tgz", - "integrity": "sha512-8Xjr6sLdG9g3H7iHY/d/FrNnHumkNIwvWDo8A2LVAAaKPu7OS4plRJTMRFd5kqJKcmbeyEtFtlTorDZdcSuyJw==", + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/hdb/-/hdb-0.19.9.tgz", + "integrity": "sha512-YtmP4mUmPLANF/HTdvIDIwELYl3H1ld21qRHYfcCW2ol1MXEnze504LoDXxBIuZD7i9LXCT62Bp0Ey5kSRocsg==", "dependencies": { "iconv-lite": "^0.4.18" }, diff --git a/mtx/sidecar/package-lock.json b/mtx/sidecar/package-lock.json index 7023c294..c8f2e0b3 100644 --- a/mtx/sidecar/package-lock.json +++ b/mtx/sidecar/package-lock.json @@ -20,17 +20,20 @@ } }, "node_modules/@cap-js/db-service": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/@cap-js/db-service/-/db-service-1.11.0.tgz", - "integrity": "sha512-7IbDaFVCbRZ0tXN8xisbIt3Aecp3RjbSdL4J8HzLUhvC1Rm4Qtadxm298gJM6kn8KOKjOf5UowmEHZCJg6KgxA==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/@cap-js/db-service/-/db-service-1.12.0.tgz", + "integrity": "sha512-SG0RT9lxN+cpGzj119yKcdecgV04rUe5Pr54O9cWrx4usAMfd5Pu6J1vCAo6gzLhep0MMByAXpp2DR5JmQj9YA==", + "dependencies": { + "generic-pool": "^3.9.0" + }, "peerDependencies": { "@sap/cds": ">=7.9" } }, "node_modules/@cap-js/hana": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@cap-js/hana/-/hana-1.1.0.tgz", - "integrity": "sha512-6PDRPvJ+8Hknh6XxFl94+FxnUBHbMadTCZrQkHm8uTvK10tVi2FzOwJLKfO1OquZybbDooyxb+idDipCrmPN5Q==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@cap-js/hana/-/hana-1.1.1.tgz", + "integrity": "sha512-wU9ypqRIwkw15leEoeTqzyeUaaZSgyjyb6BSMwrGqny/B/cOfXiL7z4Qd0ckIMrTy+Ce+hLnaGi5ENduTWxxIQ==", "dependencies": { "@cap-js/db-service": "^1.9.0", "hdb": "^0.19.5" @@ -59,9 +62,9 @@ } }, "node_modules/@sap/cds": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-8.0.4.tgz", - "integrity": "sha512-awDV9M4V7LTWBGCgnJqvczJOWCOYJT5/Fes3Y882VHbNe8mMQrA73XIrfc6cMrXBazwXOBxPhYM3/KHKhjR5qw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@sap/cds/-/cds-8.1.1.tgz", + "integrity": "sha512-GXo/r0tg5f6HYBuQg8fpq2fjmTPpuoYgpVE52vAbvFFtTz4Go9w/9WoCwLOiJYhzBbr/F4CZOTRFgky4/JagQw==", "dependencies": { "@sap/cds-compiler": ">=5", "@sap/cds-fiori": "^1", @@ -86,9 +89,9 @@ } }, "node_modules/@sap/cds-compiler": { - "version": "5.0.6", - "resolved": "https://registry.npmjs.org/@sap/cds-compiler/-/cds-compiler-5.0.6.tgz", - "integrity": "sha512-OxLlK3hGWQdMBOYmLw18tpusfb+5G+44yFq28cGegNVlUu1jKtnSu/VIb9fIDYExxbIs9E9J4R2bGmQzaawFFQ==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@sap/cds-compiler/-/cds-compiler-5.1.2.tgz", + "integrity": "sha512-rVBu58/FckieqQ287e9zl0ViFF0Uj5NebVUAT4XJpKrbH0US6uNz5egVKXZEIO2T5sIVDpYs13Wor2GKenHPig==", "dependencies": { "antlr4": "4.9.3" }, @@ -102,9 +105,9 @@ } }, "node_modules/@sap/cds-dk": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/@sap/cds-dk/-/cds-dk-8.0.3.tgz", - "integrity": "sha512-jPExMAET90fbj6UlJzOvdrxyen+mPkkKMzbAFHhLX9+RA0AwFQL7n5YJGqNHZ44dny9hBxWnC3s+Y7Dhs3i1lw==", + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/@sap/cds-dk/-/cds-dk-8.1.2.tgz", + "integrity": "sha512-d/TqkkayS3SRM8Cb2sfWVxBrnXXCOrLwBsQ986e5S9lb4IW2nGQU40j3l2WjVa3bVMTd+NcR+A7DMcZ3pucdQA==", "dev": true, "hasShrinkwrap": true, "dependencies": { @@ -142,23 +145,26 @@ } }, "node_modules/@sap/cds-dk/node_modules/@cap-js/db-service": { - "version": "1.11.0", + "version": "1.12.0", "dev": true, "license": "SEE LICENSE", "optional": true, + "dependencies": { + "generic-pool": "^3.9.0" + }, "peerDependencies": { "@sap/cds": ">=7.9" } }, "node_modules/@sap/cds-dk/node_modules/@cap-js/openapi": { - "version": "1.0.4", + "version": "1.0.5", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { "pluralize": "^8.0.0" }, "peerDependencies": { - "@sap/cds": ">=7.3" + "@sap/cds": ">=7.6" } }, "node_modules/@sap/cds-dk/node_modules/@cap-js/sqlite": { @@ -208,7 +214,7 @@ } }, "node_modules/@sap/cds-dk/node_modules/@eslint/config-array": { - "version": "0.17.0", + "version": "0.17.1", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -243,7 +249,7 @@ } }, "node_modules/@sap/cds-dk/node_modules/@eslint/js": { - "version": "9.7.0", + "version": "9.9.0", "dev": true, "license": "MIT", "engines": { @@ -315,7 +321,7 @@ } }, "node_modules/@sap/cds-dk/node_modules/@sap/cds": { - "version": "8.0.4", + "version": "8.1.1", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { @@ -342,7 +348,7 @@ } }, "node_modules/@sap/cds-dk/node_modules/@sap/cds-compiler": { - "version": "5.0.6", + "version": "5.1.2", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { @@ -381,7 +387,7 @@ } }, "node_modules/@sap/cds-dk/node_modules/@sap/cds-mtxs": { - "version": "2.0.3", + "version": "2.0.5", "dev": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { @@ -432,13 +438,13 @@ } }, "node_modules/@sap/cds-dk/node_modules/@sap/hdi-deploy": { - "version": "5.2.0", + "version": "5.2.1", "dev": true, "hasInstallScript": true, "license": "See LICENSE file", "dependencies": { "@sap/hdi": "4.5.2", - "@sap/xsenv": "5.1.0", + "@sap/xsenv": "5.2.0", "async": "3.2.5", "dotenv": "16.4.5", "handlebars": "4.7.8", @@ -466,11 +472,11 @@ "license": "MIT" }, "node_modules/@sap/cds-dk/node_modules/@sap/xsenv": { - "version": "5.1.0", + "version": "5.2.0", "dev": true, "license": "SEE LICENSE IN LICENSE file", "dependencies": { - "debug": "4.3.4", + "debug": "4.3.5", "node-cache": "^5.1.0", "verror": "1.10.1" }, @@ -583,7 +589,7 @@ "license": "MIT" }, "node_modules/@sap/cds-dk/node_modules/axios": { - "version": "1.7.2", + "version": "1.7.4", "dev": true, "license": "MIT", "dependencies": { @@ -886,7 +892,7 @@ } }, "node_modules/@sap/cds-dk/node_modules/debug": { - "version": "4.3.4", + "version": "4.3.5", "dev": true, "license": "MIT", "dependencies": { @@ -1049,15 +1055,15 @@ } }, "node_modules/@sap/cds-dk/node_modules/eslint": { - "version": "9.7.0", + "version": "9.9.0", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.11.0", - "@eslint/config-array": "^0.17.0", + "@eslint/config-array": "^0.17.1", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.7.0", + "@eslint/js": "9.9.0", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", @@ -1096,6 +1102,14 @@ }, "funding": { "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/@sap/cds-dk/node_modules/eslint-scope": { @@ -1570,7 +1584,7 @@ } }, "node_modules/@sap/cds-dk/node_modules/hdb": { - "version": "0.19.8", + "version": "0.19.9", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -1627,7 +1641,7 @@ "optional": true }, "node_modules/@sap/cds-dk/node_modules/ignore": { - "version": "5.3.1", + "version": "5.3.2", "dev": true, "license": "MIT", "engines": { @@ -2632,7 +2646,7 @@ } }, "node_modules/@sap/cds-dk/node_modules/uglify-js": { - "version": "3.19.0", + "version": "3.19.2", "dev": true, "license": "BSD-2-Clause", "optional": true, @@ -2767,7 +2781,7 @@ } }, "node_modules/@sap/cds-dk/node_modules/yaml": { - "version": "2.4.5", + "version": "2.5.0", "dev": true, "license": "ISC", "bin": { @@ -2812,9 +2826,9 @@ } }, "node_modules/@sap/cds-mtxs": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@sap/cds-mtxs/-/cds-mtxs-2.0.3.tgz", - "integrity": "sha512-NoH25qp60zgNfDkCA32+48/78/A65kHte3XDILI6Nl6ftCE/ra8dhswoqcSfaUhVgbFcrdlp7W3ObV0Ao2MOgA==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@sap/cds-mtxs/-/cds-mtxs-2.0.6.tgz", + "integrity": "sha512-7y5nk0GFn2Pl1xUheQjI3HSCj0Vncdl3nfvfTd+zjA7cOsy1iXE0DyayQFBcZvnANP5j+0299/EC1lBIFDPhNQ==", "dependencies": { "@sap/hdi-deploy": ">=4", "axios": "^1" @@ -2825,14 +2839,14 @@ } }, "node_modules/@sap/hdi-deploy": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@sap/hdi-deploy/-/hdi-deploy-5.2.0.tgz", - "integrity": "sha512-/ihTFLyiN/m3jF2uxeFgR7eR0i057nqc2Dc3qC2GP0LKueUEeIpLcPuorDiBJ8XtV2BMpWxmm9ZizQ4HVi9gnA==", + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/@sap/hdi-deploy/-/hdi-deploy-5.2.1.tgz", + "integrity": "sha512-yfwII5sWY3ykhOvqY0BVEI0dV29rfSLIgbtjGXz4+wtrddg4WQryFwerpBVjBRSjRPZSYTfS7VUqotlP00bqLQ==", "hasInstallScript": true, "hasShrinkwrap": true, "dependencies": { "@sap/hdi": "4.5.2", - "@sap/xsenv": "5.1.0", + "@sap/xsenv": "5.2.0", "async": "3.2.5", "dotenv": "16.4.5", "handlebars": "4.7.8", @@ -2855,7 +2869,7 @@ } }, "node_modules/@sap/hdi-deploy/node_modules/@sap/hana-client": { - "version": "2.20.22", + "version": "2.20.23", "hasInstallScript": true, "optional": true, "peer": true, @@ -2891,9 +2905,9 @@ "version": "3.2.3" }, "node_modules/@sap/hdi-deploy/node_modules/@sap/xsenv": { - "version": "5.1.0", + "version": "5.2.0", "dependencies": { - "debug": "4.3.4", + "debug": "4.3.5", "node-cache": "^5.1.0", "verror": "1.10.1" }, @@ -2902,7 +2916,7 @@ } }, "node_modules/@sap/hdi-deploy/node_modules/@sap/xsenv/node_modules/debug": { - "version": "4.3.4", + "version": "4.3.5", "dependencies": { "ms": "2.1.2" }, @@ -3077,7 +3091,7 @@ } }, "node_modules/@sap/hdi-deploy/node_modules/uglify-js": { - "version": "3.17.4", + "version": "3.19.1", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -3101,9 +3115,9 @@ "version": "1.0.0" }, "node_modules/@sap/xssec": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/@sap/xssec/-/xssec-4.2.0.tgz", - "integrity": "sha512-TAKTOTjGVcI9z5l0I7AM90lxm6pzLXm+QAPI0nh82JeLIJHa7ONjzpTjdQ7pQHXxP85wM3sr22hJ+bsJu21NBg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@sap/xssec/-/xssec-4.2.1.tgz", + "integrity": "sha512-NEZ28d6Mns5AMTSB82I1iB5ESgZRJPgo33Z/paX3vpJuYji7aK7obWR9FeVMu1OYNAeXhg+44VLdw/AAc3BiJg==", "dependencies": { "debug": "^4.3.4", "jwt-decode": "^4", @@ -3144,9 +3158,9 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" }, "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz", + "integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -3174,9 +3188,9 @@ ] }, "node_modules/better-sqlite3": { - "version": "11.1.2", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.1.2.tgz", - "integrity": "sha512-gujtFwavWU4MSPT+h9B+4pkvZdyOUkH54zgLdIrMmmmd4ZqiBIrRNBzNzYVFO417xo882uP5HBu4GjOfaSrIQw==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-11.2.0.tgz", + "integrity": "sha512-3Dz8d4CoIf0aa8hLnGRVoLicHEp6Js5LRxXHNmOaUhOM8WLbnNkGdzc2soEwR3YFap49s0k4u5JFNaRbW2BYQw==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -3352,9 +3366,9 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -3744,9 +3758,9 @@ } }, "node_modules/hdb": { - "version": "0.19.8", - "resolved": "https://registry.npmjs.org/hdb/-/hdb-0.19.8.tgz", - "integrity": "sha512-8Xjr6sLdG9g3H7iHY/d/FrNnHumkNIwvWDo8A2LVAAaKPu7OS4plRJTMRFd5kqJKcmbeyEtFtlTorDZdcSuyJw==", + "version": "0.19.9", + "resolved": "https://registry.npmjs.org/hdb/-/hdb-0.19.9.tgz", + "integrity": "sha512-YtmP4mUmPLANF/HTdvIDIwELYl3H1ld21qRHYfcCW2ol1MXEnze504LoDXxBIuZD7i9LXCT62Bp0Ey5kSRocsg==", "dependencies": { "iconv-lite": "^0.4.18" }, @@ -3925,9 +3939,9 @@ } }, "node_modules/node-abi": { - "version": "3.65.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.65.0.tgz", - "integrity": "sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA==", + "version": "3.67.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.67.0.tgz", + "integrity": "sha512-bLn/fU/ALVBE9wj+p4Y21ZJWYFjUXLXPi/IewyLZkx3ApxKDNBWCKdReeKOtD8dWpOdDCeMyLh6ZewzcLsG2Nw==", "dev": true, "dependencies": { "semver": "^7.3.5" @@ -4441,9 +4455,9 @@ } }, "node_modules/yaml": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", - "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", + "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", "bin": { "yaml": "bin.mjs" }, From fe577e7733f8e8791ce3a33a59d9fdf821a133ef Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Mon, 14 Oct 2024 19:38:10 +0200 Subject: [PATCH 58/84] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 80ff8d33..371507f2 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ 17 3.1.0 - 5.10.0 + 5.13.0 3.5.2 3.8.4 8.1.0 From f7c3ca9f6bdfb6d559e4ac5416f52511338b4478 Mon Sep 17 00:00:00 2001 From: Marc Becker Date: Thu, 19 Dec 2024 16:04:12 +0100 Subject: [PATCH 59/84] Use Java 21 --- mta-multi-tenant-messaging.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mta-multi-tenant-messaging.yaml b/mta-multi-tenant-messaging.yaml index 1668b33f..ac82748a 100644 --- a/mta-multi-tenant-messaging.yaml +++ b/mta-multi-tenant-messaging.yaml @@ -13,11 +13,11 @@ modules: parameters: memory: 1024M disk-quota: 512M - buildpack: sap_java_buildpack + buildpack: sap_java_buildpack_jakarta properties: CDS_MULTITENANCY_APPUI_TENANTSEPARATOR: "-" JBP_CONFIG_COMPONENTS: "jres: ['com.sap.xs.java.buildpack.jre.SAPMachineJRE']" - JBP_CONFIG_SAP_MACHINE_JRE: '{ version: 17.+ }' + JBP_CONFIG_SAP_MACHINE_JRE: '{ version: 21.+ }' build-parameters: builder: custom commands: From 657cd7e0c2619c1d1e9bb17be8115c1b4ffe43f2 Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Thu, 16 Jan 2025 13:13:31 +0100 Subject: [PATCH 60/84] Add EventHub support to Bookshop (#425) https://github.wdf.sap.corp/cds-java/home/issues/1887 --- bookshop-mt-messaging-eh.json | 8 ++++ mta-multi-tenant-messaging.yaml | 51 ++++++++++++++++++++++++- srv/src/main/resources/application.yaml | 34 +++++++++++++++++ 3 files changed, 91 insertions(+), 2 deletions(-) create mode 100644 bookshop-mt-messaging-eh.json diff --git a/bookshop-mt-messaging-eh.json b/bookshop-mt-messaging-eh.json new file mode 100644 index 00000000..4ece4421 --- /dev/null +++ b/bookshop-mt-messaging-eh.json @@ -0,0 +1,8 @@ +{ + "ceSource": [ + "/cf-eu10-canary/sap.cdsjavait" + ], + "deploymentRegion": "cf-eu10-canary", + "displayName": "CAP Multi-Tenant Bookshop for Messaging BTP Integration Test", + "webhookUrl": "https://localhost/messaging/v1.0/eb" +} \ No newline at end of file diff --git a/mta-multi-tenant-messaging.yaml b/mta-multi-tenant-messaging.yaml index ac82748a..ae0ce8e8 100644 --- a/mta-multi-tenant-messaging.yaml +++ b/mta-multi-tenant-messaging.yaml @@ -14,6 +14,9 @@ modules: memory: 1024M disk-quota: 512M buildpack: sap_java_buildpack_jakarta + routes: + - route: '${default-url}' + - route: '${default-host}.cert.${default-domain}' properties: CDS_MULTITENANCY_APPUI_TENANTSEPARATOR: "-" JBP_CONFIG_COMPONENTS: "jres: ['com.sap.xs.java.buildpack.jre.SAPMachineJRE']" @@ -27,6 +30,15 @@ modules: - name: bookshop-mt-messaging-kafka - name: bookshop-mt-messaging-em - name: bookshop-mt-messaging-mq + - name: bookshop-mt-messaging-eh + parameters: + config: + authentication-type: X509_IAS + - name: bookshop-mt-messaging-identity + parameters: + config: + credential-type: "X509_GENERATED" + app-identifier: "bs-mt-messaging-srv" # max 20 characters is allowed - name: bookshop-mt-messaging-service-manager - name: bookshop-mt-messaging-uaa - name: bookshop-mt-messaging-saas-registry @@ -41,6 +53,7 @@ modules: - name: srv-api properties: srv-url: '${default-url}' + srv-cert-url: 'https://${default-host}.cert.${default-domain}' # --------------------- SIDECAR MODULE ----------------------- - name: bookshop-mt-messaging-sidecar # ------------------------------------------------------------ @@ -111,6 +124,33 @@ resources: service: message-queuing service-plan: standard path: bookshop-mt-messaging-mq.json + - name: bookshop-mt-messaging-eh + type: org.cloudfoundry.managed-service + parameters: + service: eventmesh-sap2sap-internal + service-plan: event-mesh-multi-tenant + path: bookshop-mt-messaging-eh.json + config: # webhookUrl needs to be overwritten build url with placeholders + webhookUrl: "~{srv-api/srv-cert-url}/messaging/v1.0/eb" + requires: + - name: srv-api + - name: bookshop-mt-messaging-identity + type: org.cloudfoundry.managed-service + parameters: + service: identity + service-plan: application + config: + multi-tenant: false + oauth2-configuration: + redirect-uris: + - "https://*.${default-domain}/**" + - "https://*.internal.${default-domain}/node/signin-oidc/*" + consumed-services: + - service-instance-name: bookshop-mt-messaging-eh + requires: + - name: bookshop-mt-messaging-eh + processed-after: + - bookshop-mt-messaging-eh - name: bookshop-mt-messaging-uaa type: org.cloudfoundry.managed-service parameters: @@ -144,8 +184,15 @@ resources: onUnSubscriptionAsync: true onUpdateDependenciesAsync: true callbackTimeoutMillis: 3600000 - displayName: bookshop-java - description: A simple CAP Java project. +# use 'managedService' only if onboarded to UCL happened using Unified Service (ie. MAP) +# BTP integration tests use external systems in UCL at the moment +# managedService: +# applicationResourceType: +# group: bookshop-integration-test.java-runtime.dev.cap.sap +# type: BookshopIntegrationTestTenant +# version: v1 + displayName: bookshop-mt-messaging-${org}-${space} # this is used as name in the subscription dashboard + description: CAP Multi-Tenant Bookshop for Messaging BTP Integration Test. category: 'Category' requires: - name: srv-api diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 8f9a3d54..6ab804c8 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -142,6 +142,9 @@ cds: mq-messaging: binding: bookshop-mt-messaging-mq enabled: false + eh-messaging: + binding: bookshop-mt-messaging-eh + enabled: false --- spring: @@ -163,6 +166,9 @@ cds: mq-messaging: binding: bookshop-mt-messaging-mq enabled: false + eh-messaging: + binding: bookshop-mt-messaging-eh + enabled: false --- spring: @@ -182,6 +188,30 @@ cds: enabled: false persistent: enabled: false + eh-messaging: + binding: bookshop-mt-messaging-eh + enabled: false + +--- +spring: + config.activate.on-profile: eh-messaging-cloud +cds: + messaging.services: + kafka-messaging: + binding: bookshop-mt-messaging-kafka + enabled: false + em-messaging: + binding: bookshop-mt-messaging-em + enabled: false + bupa-messaging: + binding: bookshop-mt-messaging-mq + enabled: false + eh-messaging: + binding: bookshop-mt-messaging-eh + outbox: + enabled: false + persistent: + enabled: false --- spring: @@ -224,3 +254,7 @@ cds: mq-messaging: binding: bookshop-mt-messaging-mq enabled: false + eh-messaging: + binding: bookshop-mt-messaging-eh + enabled: false + From b61565ea8bad7fc421c9572fac3d0919eacd8557 Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Fri, 17 Jan 2025 10:06:32 +0100 Subject: [PATCH 61/84] Refactor destination for mocked remote service (#429) https://github.wdf.sap.corp/cds-java/home/issues/1887 --- .../config/DestinationConfiguration.java | 65 +++++++++---------- 1 file changed, 29 insertions(+), 36 deletions(-) diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index a0fba427..3463d02a 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -1,7 +1,16 @@ package my.bookshop.config; -import java.util.Map; - +import com.sap.cds.services.runtime.CdsRuntime; +import com.sap.cloud.environment.servicebinding.api.ServiceBinding; +import com.sap.cloud.sdk.cloudplatform.connectivity.BtpServiceOptions; +import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultDestinationLoader; +import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; +import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor; +import com.sap.cloud.sdk.cloudplatform.connectivity.HttpDestination; +import com.sap.cloud.sdk.cloudplatform.connectivity.OnBehalfOf; +import com.sap.cloud.sdk.cloudplatform.connectivity.ServiceBindingDestinationLoader; +import com.sap.cloud.sdk.cloudplatform.connectivity.ServiceBindingDestinationOptions; +import com.sap.cloud.sdk.cloudplatform.security.BasicCredentials; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -11,19 +20,10 @@ import org.springframework.core.env.Environment; import org.springframework.stereotype.Component; -import com.sap.cds.services.runtime.CdsRuntime; -import com.sap.cloud.environment.servicebinding.api.ServiceBinding; -import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultDestinationLoader; -import com.sap.cloud.sdk.cloudplatform.connectivity.DefaultHttpDestination; -import com.sap.cloud.sdk.cloudplatform.connectivity.DestinationAccessor; -import com.sap.cloud.sdk.cloudplatform.connectivity.OAuth2DestinationBuilder; -import com.sap.cloud.sdk.cloudplatform.connectivity.OnBehalfOf; -import com.sap.cloud.sdk.cloudplatform.security.BasicCredentials; -import com.sap.cloud.security.config.ClientCredentials; -import com.sap.cloud.security.config.ClientIdentity; +import java.util.Optional; @Component -@Profile({"mocked", "mocked-api-business-partner"}) +@Profile({ "mocked", "mocked-api-business-partner" }) public class DestinationConfiguration { private final static Logger logger = LoggerFactory.getLogger(DestinationConfiguration.class); @@ -36,44 +36,37 @@ public class DestinationConfiguration { @EventListener void applicationReady(ApplicationReadyEvent ready) { - String applicationUrl = runtime.getEnvironment().getApplicationInfo().getUrl(); + Optional binding = runtime.getEnvironment().getServiceBindings() + .filter(b -> b.getServiceName().get().equals("xsuaa")).findFirst(); - if (applicationUrl != null) { - // it seems we're running in the cloud - registerCloudDestination(applicationUrl); - } else { - registerLocalDestination(); - } + binding.ifPresentOrElse(this::registerCloudDestination, this::registerLocalDestination); } - private void registerCloudDestination(String applicationUrl) { - String destinationName = environment.getProperty("cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name"); + private void registerCloudDestination(ServiceBinding xsuaaBinding) { + String destinationName = environment + .getProperty("cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name"); logger.info("Destination name for mocked API_BUSINESS_PARTNER: {}", destinationName); + logger.info("UAA Service Binding: {} / {}", xsuaaBinding.getName().get(), xsuaaBinding.getServiceName().get()); - ServiceBinding uaaBinding = runtime.getEnvironment().getServiceBindings().filter(b -> b.getServiceName().get().equals("xsuaa")).findFirst().get(); - logger.info("UAA Service Binding: {} / {}", uaaBinding.getName().get(), uaaBinding.getServiceName().get()); + ServiceBindingDestinationOptions options = ServiceBindingDestinationOptions.forService(xsuaaBinding) + .withOption(BtpServiceOptions.AuthenticationServiceOptions.withTargetUri("http://localhost")) + .onBehalfOf(OnBehalfOf.TECHNICAL_USER_CURRENT_TENANT) + .build(); - Map credentials = uaaBinding.getCredentials(); - Object client = new ClientCredentials((String)credentials.get("clientid"), (String)credentials.get("clientsecret")); - String tokenUrl = (String)credentials.get("url") + "/oauth/token"; + HttpDestination destination = ServiceBindingDestinationLoader.defaultLoaderChain().getDestination(options); DestinationAccessor.prependDestinationLoader( new DefaultDestinationLoader() - .registerDestination( - OAuth2DestinationBuilder - .forTargetUrl("https://" + applicationUrl + "/") - .withTokenEndpoint(tokenUrl) - .withClient((ClientIdentity)client, OnBehalfOf.TECHNICAL_USER_CURRENT_TENANT) - .name(destinationName) - .build())); + .registerDestination(DefaultHttpDestination.fromDestination(destination).name(destinationName).build())); } private void registerLocalDestination() { Integer port = environment.getProperty("local.server.port", Integer.class); - String destinationName = environment.getProperty("cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name"); + String destinationName = environment + .getProperty("cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name"); - if(port != null && destinationName != null) { + if (port != null && destinationName != null) { DefaultHttpDestination httpDestination = DefaultHttpDestination .builder("http://localhost:" + port) .basicCredentials(new BasicCredentials("authenticated", "")) From 7cfc791636449a36a03a869e18d88389136c092c Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Fri, 17 Jan 2025 11:21:10 +0100 Subject: [PATCH 62/84] Configure em webhook url for messaging tests (#430) --- mta-multi-tenant-messaging.yaml | 1 + .../config/DestinationConfiguration.java | 27 ++++++++++++------- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/mta-multi-tenant-messaging.yaml b/mta-multi-tenant-messaging.yaml index ae0ce8e8..8e833336 100644 --- a/mta-multi-tenant-messaging.yaml +++ b/mta-multi-tenant-messaging.yaml @@ -19,6 +19,7 @@ modules: - route: '${default-host}.cert.${default-domain}' properties: CDS_MULTITENANCY_APPUI_TENANTSEPARATOR: "-" + CDS_MESSAGING_WEBHOOKS_URL: ${default-url} JBP_CONFIG_COMPONENTS: "jres: ['com.sap.xs.java.buildpack.jre.SAPMachineJRE']" JBP_CONFIG_SAP_MACHINE_JRE: '{ version: 21.+ }' build-parameters: diff --git a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java index 3463d02a..c6f38fb9 100644 --- a/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java +++ b/srv/src/main/java/my/bookshop/config/DestinationConfiguration.java @@ -43,22 +43,29 @@ void applicationReady(ApplicationReadyEvent ready) { } private void registerCloudDestination(ServiceBinding xsuaaBinding) { + Integer port = environment.getProperty("local.server.port", Integer.class); String destinationName = environment .getProperty("cds.remote.services.'[API_BUSINESS_PARTNER]'.destination.name"); - logger.info("Destination name for mocked API_BUSINESS_PARTNER: {}", destinationName); - logger.info("UAA Service Binding: {} / {}", xsuaaBinding.getName().get(), xsuaaBinding.getServiceName().get()); + if (port != null && destinationName != null) { + logger.info("Destination name for mocked API_BUSINESS_PARTNER: {}", destinationName); + logger.info("UAA Service Binding: {} / {}", xsuaaBinding.getName().get(), + xsuaaBinding.getServiceName().get()); - ServiceBindingDestinationOptions options = ServiceBindingDestinationOptions.forService(xsuaaBinding) - .withOption(BtpServiceOptions.AuthenticationServiceOptions.withTargetUri("http://localhost")) - .onBehalfOf(OnBehalfOf.TECHNICAL_USER_CURRENT_TENANT) - .build(); + // if we run in the cloud, "localhost" will also work to call ourselves + ServiceBindingDestinationOptions options = ServiceBindingDestinationOptions.forService(xsuaaBinding) + .withOption( + BtpServiceOptions.AuthenticationServiceOptions.withTargetUri("http://localhost:" + port)) + .onBehalfOf(OnBehalfOf.TECHNICAL_USER_CURRENT_TENANT) + .build(); - HttpDestination destination = ServiceBindingDestinationLoader.defaultLoaderChain().getDestination(options); + HttpDestination destination = ServiceBindingDestinationLoader.defaultLoaderChain().getDestination(options); - DestinationAccessor.prependDestinationLoader( - new DefaultDestinationLoader() - .registerDestination(DefaultHttpDestination.fromDestination(destination).name(destinationName).build())); + DestinationAccessor.prependDestinationLoader( + new DefaultDestinationLoader() + .registerDestination( + DefaultHttpDestination.fromDestination(destination).name(destinationName).build())); + } } private void registerLocalDestination() { From 4f95a7e8bd56249be9c5848dcf307b7f6d7adfda Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Mon, 20 Jan 2025 13:59:23 +0100 Subject: [PATCH 63/84] Update application.yaml --- srv/src/main/resources/application.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 6ab804c8..94bf12f2 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -117,10 +117,11 @@ cds: path: API_BUSINESS_PARTNER remote.services: '[API_BUSINESS_PARTNER]': + http: + suffix: "/api" destination: name: "myself" - suffix: "/api" - + --- spring: config.activate.on-profile: kafka-messaging-cloud From 88bc4a2c87121561d462deefc4138c2d14b8a9fa Mon Sep 17 00:00:00 2001 From: D040882 Date: Mon, 20 Jan 2025 16:40:36 +0100 Subject: [PATCH 64/84] enable http wire log --- srv/src/main/resources/application.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 6ab804c8..53290df2 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -6,6 +6,7 @@ logging: '[com.sap.cds.persistence.sql-tx]': DEBUG '[com.sap.cds.messaging]': DEBUG '[com.sap.cds.services]': DEBUG + '[org.apache.http.wire]': DEBUG spring: jmx: enabled: true From e3ee21cc875c387f36804408c926a09c942a424b Mon Sep 17 00:00:00 2001 From: D040882 Date: Tue, 21 Jan 2025 09:32:31 +0100 Subject: [PATCH 65/84] configure prefixes --- srv/src/main/resources/application.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 3cc134be..ed3fc550 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -159,6 +159,8 @@ cds: bupa-messaging: binding: bookshop-mt-messaging-em enabled: true + publishPrefix: '$namespace/' + subscribePrefix: '$namespace/' queue: name: "$namespace/bookshop-mt-messaging-em-queue" outbox: From 0bca0bde38baf3f371efc189eff040b2895074bc Mon Sep 17 00:00:00 2001 From: D040882 Date: Tue, 21 Jan 2025 11:17:23 +0100 Subject: [PATCH 66/84] adapt webhook url --- mta-multi-tenant-messaging.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mta-multi-tenant-messaging.yaml b/mta-multi-tenant-messaging.yaml index 8e833336..1381a80f 100644 --- a/mta-multi-tenant-messaging.yaml +++ b/mta-multi-tenant-messaging.yaml @@ -19,7 +19,7 @@ modules: - route: '${default-host}.cert.${default-domain}' properties: CDS_MULTITENANCY_APPUI_TENANTSEPARATOR: "-" - CDS_MESSAGING_WEBHOOKS_URL: ${default-url} + CDS_MESSAGING_WEBHOOKS_URL: '${default-host}.${default-domain}' # without 'https://' prefix JBP_CONFIG_COMPONENTS: "jres: ['com.sap.xs.java.buildpack.jre.SAPMachineJRE']" JBP_CONFIG_SAP_MACHINE_JRE: '{ version: 21.+ }' build-parameters: From 22b516fdb42aa9ab95dabd80f8203e09e702cdc1 Mon Sep 17 00:00:00 2001 From: D040882 Date: Tue, 21 Jan 2025 13:01:18 +0100 Subject: [PATCH 67/84] add scopes for callback --- xs-security-mt.json | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/xs-security-mt.json b/xs-security-mt.json index 984ce269..e1b641fb 100644 --- a/xs-security-mt.json +++ b/xs-security-mt.json @@ -21,14 +21,21 @@ "$XSAPPNAME(application,sap-provisioning,tenant-onboarding)" ] }, + { + "name": "$XSAPPNAME.emcallback", + "description": "Event Mesh Callback Access", + "grant-as-authority-to-apps": [ + "$XSSERVICENAME(bookshop-mt-messaging-em)" + ] + }, { "name": "$XSAPPNAME.mtdeployment", "description": "Scope to trigger a re-deployment of the database artifacts" }, - { - "name": "$XSAPPNAME.cds.ExtensionDeveloper", - "description": "Extend CAP applications via extension projects" - } + { + "name": "$XSAPPNAME.cds.ExtensionDeveloper", + "description": "Extend CAP applications via extension projects" + } ], "authorities-inheritance": false, "authorities": [ @@ -75,4 +82,4 @@ ] } ] -} +} \ No newline at end of file From 618cbe2bca4dcc5f50d69523cdbb06d8961ad94a Mon Sep 17 00:00:00 2001 From: D040882 Date: Tue, 21 Jan 2025 15:37:16 +0100 Subject: [PATCH 68/84] mt for message queuing --- .../AdminServiceAddressMqHandler.java | 30 +++++++++++++++++++ srv/src/main/resources/application.yaml | 6 ++-- 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java new file mode 100644 index 00000000..f41eb0da --- /dev/null +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java @@ -0,0 +1,30 @@ +package my.bookshop.handlers; + +import org.springframework.context.annotation.Profile; +import org.springframework.stereotype.Component; + +import com.sap.cds.services.handler.annotations.HandlerOrder; +import com.sap.cds.services.handler.annotations.On; + +import cds.gen.api_business_partner.ApiBusinessPartner_; +import cds.gen.api_business_partner.BusinessPartnerChangedContext; + +/** + * Message Queuing feature does not provide Multi Tenancy support. To + * demonstrate the feature though, this handler takes precedence over + * {@link AdminServiceAddressHandler#updateBusinessPartnerAddresses(BusinessPartnerChangedContext)} + * and wraps the event processing with a provider tenant level request context + * so that the message will be consumed by the provider tenant. + */ +@Component +@Profile("mq-messaging-cloud") +public class AdminServiceAddressMqHandler { + + @On(service = ApiBusinessPartner_.CDS_NAME) + @HandlerOrder(HandlerOrder.EARLY) + public void updateBusinessPartnerAddresses(BusinessPartnerChangedContext context) { + context.getCdsRuntime().requestContext().systemUserProvider().run(req -> { + context.proceed(); + }); + } +} diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index ed3fc550..d9c9b162 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -187,6 +187,8 @@ cds: enabled: false bupa-messaging: binding: bookshop-mt-messaging-mq + queue: + name: "bookshop-mt-messaging-em-queue" enabled: true outbox: enabled: false @@ -207,10 +209,10 @@ cds: em-messaging: binding: bookshop-mt-messaging-em enabled: false - bupa-messaging: + mq-messaging: binding: bookshop-mt-messaging-mq enabled: false - eh-messaging: + bupa-messaging: binding: bookshop-mt-messaging-eh outbox: enabled: false From bf0435c086b5386e896ae79dc6d04eaaf0a07526 Mon Sep 17 00:00:00 2001 From: D040882 Date: Tue, 21 Jan 2025 16:00:44 +0100 Subject: [PATCH 69/84] fix --- .../bookshop/handlers/AdminServiceAddressMqHandler.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java index f41eb0da..f19b0dc4 100644 --- a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java @@ -3,9 +3,12 @@ import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; +import com.sap.cds.services.handler.EventHandler; import com.sap.cds.services.handler.annotations.HandlerOrder; import com.sap.cds.services.handler.annotations.On; +import com.sap.cds.services.handler.annotations.ServiceName; +import cds.gen.adminservice.AdminService_; import cds.gen.api_business_partner.ApiBusinessPartner_; import cds.gen.api_business_partner.BusinessPartnerChangedContext; @@ -16,9 +19,10 @@ * and wraps the event processing with a provider tenant level request context * so that the message will be consumed by the provider tenant. */ -@Component @Profile("mq-messaging-cloud") -public class AdminServiceAddressMqHandler { +@Component +@ServiceName(AdminService_.CDS_NAME) +public class AdminServiceAddressMqHandler implements EventHandler { @On(service = ApiBusinessPartner_.CDS_NAME) @HandlerOrder(HandlerOrder.EARLY) From fd6b87152c1ddd835247c64ea8ca93c566a1e858 Mon Sep 17 00:00:00 2001 From: D040882 Date: Tue, 21 Jan 2025 16:02:55 +0100 Subject: [PATCH 70/84] fix --- .../java/my/bookshop/handlers/AdminServiceAddressMqHandler.java | 1 - 1 file changed, 1 deletion(-) diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java index f19b0dc4..75fa040a 100644 --- a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java @@ -21,7 +21,6 @@ */ @Profile("mq-messaging-cloud") @Component -@ServiceName(AdminService_.CDS_NAME) public class AdminServiceAddressMqHandler implements EventHandler { @On(service = ApiBusinessPartner_.CDS_NAME) From bd6f04d5c4aa7a1635597c0bf8627ce6880ff867 Mon Sep 17 00:00:00 2001 From: D040882 Date: Tue, 21 Jan 2025 16:03:09 +0100 Subject: [PATCH 71/84] fix --- .../java/my/bookshop/handlers/AdminServiceAddressMqHandler.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java index 75fa040a..1eeeda49 100644 --- a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java @@ -6,9 +6,7 @@ import com.sap.cds.services.handler.EventHandler; import com.sap.cds.services.handler.annotations.HandlerOrder; import com.sap.cds.services.handler.annotations.On; -import com.sap.cds.services.handler.annotations.ServiceName; -import cds.gen.adminservice.AdminService_; import cds.gen.api_business_partner.ApiBusinessPartner_; import cds.gen.api_business_partner.BusinessPartnerChangedContext; From 6c48c44112c7e2ebcc722a2c0e95283291655886 Mon Sep 17 00:00:00 2001 From: D040882 Date: Wed, 22 Jan 2025 09:18:10 +0100 Subject: [PATCH 72/84] info logging --- .../my/bookshop/handlers/AdminServiceAddressMqHandler.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java index 1eeeda49..de17d1e4 100644 --- a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java @@ -1,5 +1,7 @@ package my.bookshop.handlers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; @@ -20,12 +22,15 @@ @Profile("mq-messaging-cloud") @Component public class AdminServiceAddressMqHandler implements EventHandler { + Logger logger = LoggerFactory.getLogger(AdminServiceAddressMqHandler.class); @On(service = ApiBusinessPartner_.CDS_NAME) @HandlerOrder(HandlerOrder.EARLY) public void updateBusinessPartnerAddresses(BusinessPartnerChangedContext context) { context.getCdsRuntime().requestContext().systemUserProvider().run(req -> { + logger.info("Current tenant " + req.getUserInfo().getTenant()); context.proceed(); }); + context.setCompleted(); } } From 4a1ff1b852c50126a2499a06ba361237fba6a648 Mon Sep 17 00:00:00 2001 From: D040882 Date: Wed, 22 Jan 2025 09:21:11 +0100 Subject: [PATCH 73/84] explicitly set provider tenant --- .../my/bookshop/handlers/AdminServiceAddressMqHandler.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java index de17d1e4..fba26bf7 100644 --- a/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java +++ b/srv/src/main/java/my/bookshop/handlers/AdminServiceAddressMqHandler.java @@ -2,12 +2,14 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Profile; import org.springframework.stereotype.Component; import com.sap.cds.services.handler.EventHandler; import com.sap.cds.services.handler.annotations.HandlerOrder; import com.sap.cds.services.handler.annotations.On; +import com.sap.cds.services.mt.TenantProviderService; import cds.gen.api_business_partner.ApiBusinessPartner_; import cds.gen.api_business_partner.BusinessPartnerChangedContext; @@ -22,12 +24,15 @@ @Profile("mq-messaging-cloud") @Component public class AdminServiceAddressMqHandler implements EventHandler { + @Autowired + private TenantProviderService tenantProvider; + Logger logger = LoggerFactory.getLogger(AdminServiceAddressMqHandler.class); @On(service = ApiBusinessPartner_.CDS_NAME) @HandlerOrder(HandlerOrder.EARLY) public void updateBusinessPartnerAddresses(BusinessPartnerChangedContext context) { - context.getCdsRuntime().requestContext().systemUserProvider().run(req -> { + context.getCdsRuntime().requestContext().systemUser(tenantProvider.readProviderTenant()).run(req -> { logger.info("Current tenant " + req.getUserInfo().getTenant()); context.proceed(); }); From 05f08ad16ff90651a24e6ed0ed0ef028b7260ffc Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Wed, 22 Jan 2025 16:38:13 +0100 Subject: [PATCH 74/84] Update application.yaml --- srv/src/main/resources/application.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index d9c9b162..27fef334 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -214,6 +214,7 @@ cds: enabled: false bupa-messaging: binding: bookshop-mt-messaging-eh + enabled: true outbox: enabled: false persistent: From 5909215d1dfc4cf642de4b976a64176e85b3619c Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Wed, 22 Jan 2025 17:05:02 +0100 Subject: [PATCH 75/84] Update pom.xml --- srv/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/srv/pom.xml b/srv/pom.xml index 30618bb4..0bb5aa74 100644 --- a/srv/pom.xml +++ b/srv/pom.xml @@ -73,6 +73,11 @@ cds-feature-message-queuing runtime + + com.sap.cds + cds-feature-event-hub + runtime + com.sap.cds From 780993c00bc56480c1003719cc788a73a33161f3 Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Thu, 23 Jan 2025 10:43:40 +0100 Subject: [PATCH 76/84] Update mta-multi-tenant-messaging.yaml --- mta-multi-tenant-messaging.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mta-multi-tenant-messaging.yaml b/mta-multi-tenant-messaging.yaml index 1381a80f..5976bfc8 100644 --- a/mta-multi-tenant-messaging.yaml +++ b/mta-multi-tenant-messaging.yaml @@ -19,7 +19,7 @@ modules: - route: '${default-host}.cert.${default-domain}' properties: CDS_MULTITENANCY_APPUI_TENANTSEPARATOR: "-" - CDS_MESSAGING_WEBHOOKS_URL: '${default-host}.${default-domain}' # without 'https://' prefix + CDS_MESSAGING_WEBHOOKS_URL: '${default-url}' JBP_CONFIG_COMPONENTS: "jres: ['com.sap.xs.java.buildpack.jre.SAPMachineJRE']" JBP_CONFIG_SAP_MACHINE_JRE: '{ version: 21.+ }' build-parameters: From 4198bba3d552fbcd3cb962861482543e7823f84b Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Fri, 24 Jan 2025 09:57:39 +0100 Subject: [PATCH 77/84] Update mta-multi-tenant-messaging.yaml --- mta-multi-tenant-messaging.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mta-multi-tenant-messaging.yaml b/mta-multi-tenant-messaging.yaml index 5976bfc8..1381a80f 100644 --- a/mta-multi-tenant-messaging.yaml +++ b/mta-multi-tenant-messaging.yaml @@ -19,7 +19,7 @@ modules: - route: '${default-host}.cert.${default-domain}' properties: CDS_MULTITENANCY_APPUI_TENANTSEPARATOR: "-" - CDS_MESSAGING_WEBHOOKS_URL: '${default-url}' + CDS_MESSAGING_WEBHOOKS_URL: '${default-host}.${default-domain}' # without 'https://' prefix JBP_CONFIG_COMPONENTS: "jres: ['com.sap.xs.java.buildpack.jre.SAPMachineJRE']" JBP_CONFIG_SAP_MACHINE_JRE: '{ version: 21.+ }' build-parameters: From 88aea094d6e20cd5945d0e297b3e61e4297d0087 Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Fri, 24 Jan 2025 16:08:13 +0100 Subject: [PATCH 78/84] Update application.yaml --- srv/src/main/resources/application.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 27fef334..1a8e1ac2 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -2,10 +2,11 @@ logging: level: '[com.sap.cds.auditlog]': DEBUG - '[com.sap.cds.persistence.sql]': DEBUG - '[com.sap.cds.persistence.sql-tx]': DEBUG + #'[com.sap.cds.persistence.sql]': DEBUG + #'[com.sap.cds.persistence.sql-tx]': DEBUG '[com.sap.cds.messaging]': DEBUG - '[com.sap.cds.services]': DEBUG + '[com.sap.cds.security.authentication]': DEBUG + '[com.sap.cds.security.authorization]': DEBUG '[org.apache.http.wire]': DEBUG spring: jmx: From 4f2e3a67558e9c36d8cd11e71a44299f7a985e38 Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Fri, 24 Jan 2025 16:34:28 +0100 Subject: [PATCH 79/84] Update application.yaml --- srv/src/main/resources/application.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 1a8e1ac2..c7456d95 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -7,6 +7,7 @@ logging: '[com.sap.cds.messaging]': DEBUG '[com.sap.cds.security.authentication]': DEBUG '[com.sap.cds.security.authorization]': DEBUG + '[com.sap.cloud.security]': DEBUG '[org.apache.http.wire]': DEBUG spring: jmx: From c31f466a743603ac286f9447d78d98ac7192dbc7 Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Tue, 11 Mar 2025 12:02:09 +0100 Subject: [PATCH 80/84] Allow to specify a dedicated version for cds-feature-event-hub (#451) In order to use the OSS variant of `cds-feature-event-hub` it needs to be possible to specify its version independently from the regular cds version --------- Co-authored-by: Markus Ofterdinger --- pom.xml | 3 ++- srv/pom.xml | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index efcfad7b..a7736112 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,8 @@ 21 - 3.6.0 + 3.8.0 + ${cds.services.version} 5.14.0 3.5.3 3.8.4 diff --git a/srv/pom.xml b/srv/pom.xml index 0bb5aa74..f5952025 100644 --- a/srv/pom.xml +++ b/srv/pom.xml @@ -76,6 +76,7 @@ com.sap.cds cds-feature-event-hub + ${cds-feature-event-hub.version} runtime From 9d48e745090c8227262c2c9f28266c28c2916083 Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Tue, 11 Mar 2025 14:35:29 +0100 Subject: [PATCH 81/84] Update pom.xml --- pom.xml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a7736112..f9414081 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ 21 3.8.0 - ${cds.services.version} + 4.0.0-SNAPSHOT 5.14.0 3.5.3 3.8.4 @@ -160,4 +160,15 @@ + + + + proxy-cap-java + Proxy for cap-java + https://int.repositories.cloud.sap/artifactory/proxy-cap-java/ + + true + + + From 9709e1aabb614a7a645f56272ac6c5db058cbf81 Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Wed, 12 Mar 2025 09:12:50 +0100 Subject: [PATCH 82/84] Update pom.xml --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f9414081..b46ee8c1 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ 21 3.8.0 - 4.0.0-SNAPSHOT + 4.0.0 5.14.0 3.5.3 3.8.4 From 8700976945a6cd71d64e4d4afe4065e3fa016aba Mon Sep 17 00:00:00 2001 From: Marc Becker Date: Tue, 20 May 2025 12:59:52 +0200 Subject: [PATCH 83/84] Use Event Hub 4.0.1 for messaging tests Use Event Hub 4.0.1, which is prepared for CAP Java 4.0.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index eb120343..f649d74e 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ 21 3.10.1 - 4.0.0 + 4.0.1 5.18.0 3.6.0 3.8.5 From ff57619292cfb4b334ac79980a98a8e6123279bb Mon Sep 17 00:00:00 2001 From: Stefan Henke Date: Fri, 14 Nov 2025 10:02:40 +0100 Subject: [PATCH 84/84] Clean up logging configuration in application.yaml Removed commented-out logging levels for clarity. --- srv/src/main/resources/application.yaml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/srv/src/main/resources/application.yaml b/srv/src/main/resources/application.yaml index 260aa7e7..6ff42607 100644 --- a/srv/src/main/resources/application.yaml +++ b/srv/src/main/resources/application.yaml @@ -2,13 +2,7 @@ logging: level: '[com.sap.cds.auditlog]': DEBUG - #'[com.sap.cds.persistence.sql]': DEBUG - #'[com.sap.cds.persistence.sql-tx]': DEBUG '[com.sap.cds.messaging]': DEBUG - '[com.sap.cds.security.authentication]': DEBUG - '[com.sap.cds.security.authorization]': DEBUG - '[com.sap.cloud.security]': DEBUG - '[org.apache.http.wire]': DEBUG spring: jmx: enabled: true