{"id":20485049,"url":"https://github.com/sap-samples/btp-cf-cap-reuse-service","last_synced_at":"2025-04-13T14:53:02.537Z","repository":{"id":159988516,"uuid":"632858883","full_name":"SAP-samples/btp-cf-cap-reuse-service","owner":"SAP-samples","description":"This repository contains sample code of a business service including a Reuse UI and provides guidance how to integrate both components (business service \u0026 Reuse UI) with a standalone application as well as software-as-a-service solution on SAP BTP.","archived":false,"fork":false,"pushed_at":"2025-03-07T13:36:44.000Z","size":1949,"stargazers_count":15,"open_issues_count":2,"forks_count":6,"subscribers_count":8,"default_branch":"main","last_synced_at":"2025-03-27T05:51:11.288Z","etag":null,"topics":["btp-use-case-factory","business-service","business-technology-platform","cloud-foundry","multitenancy","reuse-service","reuse-ui","sample","sample-code","sap-btp","sap-btp-cloud-foundry","sap-cap"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SAP-samples.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-04-26T09:22:50.000Z","updated_at":"2024-12-30T09:42:00.000Z","dependencies_parsed_at":null,"dependency_job_id":"53a5a22e-4837-4de1-815d-39c16e9ecb2c","html_url":"https://github.com/SAP-samples/btp-cf-cap-reuse-service","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SAP-samples%2Fbtp-cf-cap-reuse-service","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SAP-samples%2Fbtp-cf-cap-reuse-service/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SAP-samples%2Fbtp-cf-cap-reuse-service/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SAP-samples%2Fbtp-cf-cap-reuse-service/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SAP-samples","download_url":"https://codeload.github.com/SAP-samples/btp-cf-cap-reuse-service/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248732509,"owners_count":21152851,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["btp-use-case-factory","business-service","business-technology-platform","cloud-foundry","multitenancy","reuse-service","reuse-ui","sample","sample-code","sap-btp","sap-btp-cloud-foundry","sap-cap"],"created_at":"2024-11-15T16:27:21.008Z","updated_at":"2025-04-13T14:53:02.519Z","avatar_url":"https://github.com/SAP-samples.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Business/Reuse Service Basics\n[![REUSE status](https://api.reuse.software/badge/github.com/SAP-samples/btp-cf-cap-reuse-service)](https://api.reuse.software/info/github.com/SAP-samples/btp-cf-cap-reuse-service)\n\nAs the topic of Business/Reuse Services is relatively unknown within the SAP Community so far, the following section provides a short introduction to this topic. \n\nDefining what constitutes an application versus a service is important. A (business) service offers well-defined, reusable business functionality that can be programmatically accessed via an API. On the other hand, an application is typically accessed by business users through a UI. \n\nHowever, there are certain edge cases where a service also provides a UI, such as in the case of dashboards or service configuration UIs, and applications may also provide APIs for extensibility or configuration.\n\nOne excellent example of a (business) service providing a UI is the **SAP Document Management Service**. This **service** is designed to provide various business **applications** with the ability to upload and manage documents as part of their application implementation. To simplify the integration with **applications**, the SAP Document Management Service provides a so-called \"Reuse UI\" as part of its service offering that can be reused in a generic manner by any embedding application.\n\nAn application may combine multiple services by binding to instances of those services, and multitenant enabled applications are subscribed by tenants. To facilitate the discovery of services, they should be listed in the SAP BTP marketplace, which requires services to implement a service broker. Services can be instantiated and used by multiple consumers with their own instances.\n\nIn summary, the purpose of a business application is to offer a certain (usually business centric) solution to end-users, which is usually provided as a web application. A business service in contrast provides a certain feature, that is supposed to be re-used by multiple business applications, and usually consumed via an API.\n\nThis tutorial is primarily focusing on providing guidance for the deployment and integration of business **services** into business **applications** - either Standalone or Software-as-a-Service Applications. \n\n**Limitations**\n\nReuse/Business Services come with certain limitations: \n\n- No dependencies available in the consuming Subaccounts\n  - You cannot use the Destination Service, Connectivity Service or Cloud Connector\n- Role collections not automatically created in the consuming Subaccount\n- Usability across Global Accounts but only within the same SAP BTP Region\n- The Business/Reuse Service Broker must handle the whole provisioning and deprovisioning logic\n  - setting up required persistency (files, schemas, and/or database containers)\n  - tracking which services are allocated to which tenant\n  - tearing tenants down or archiving them\n- SSO Dashboard feature available still authorization check limited\n- Service Broker needs to be registered to every Subaccount\n\nhttps://blogs.sap.com/2022/03/11/consumability-across-global-btp-accounts-via-custom-service-brokers/\n\n\n\n# Deployment Instructions - Standalone Application\n\nUsing a Business Service in a Single Tenant/Standalone Business Application scenario is fairly simple. In this case, the Application Router of your embedding Business Application needs to bind to a Service Instance of the Business Service in the same Subaccount. \n\nOnce a binding between the Application Router and the Business Service is given, the Reuse UI as well as the Reuse Business Service API can be consumed either using a **UserTokenExchange** or **Client Credentials** flow depending on your requirements. Both authentication flows will be handled automatically by the Application Router without further ado. \n\n[\u003cimg src=\"./images/ArchSingleTenant.png?raw=true\" width=\"700\" /\u003e](./images/ArchSingleTenant.png)\n\n\n## 1. Setup the Reuse/Business Service\n\n1.1. Initialize the Reuse/Business Service Broker to provide unique IDs by running the respective npm script.\n\n```sh\ngit clone https://github.com/SAP-samples/btp-cf-cap-reuse-service\ncd single-tenant/reuse-service/broker\nnpm install --include=dev\nnpm run init\n```\n\n1.2. Save the displayed **Plaintext password** and the **Hashed credentials**. \n\n[\u003cimg src=\"./images/InitBroker.png?raw=true\" width=\"600\" /\u003e](./images/InitBroker.png)\n\n1.3. Switch to the **mta.yaml** file in the **single-tenant/reuse-service** directory and paste the **Hashed credentials** value to the sbf module details. \n\n\u003e **Important** - Do not commit this details to Git!\n\n```yaml\n# --------------------- BROKER MODULE ------------------------\n  - name: demo-broker-sbf\n  # ------------------------------------------------------------\n    type: nodejs\n    path: broker\n    build-parameters:\n      builder: npm-ci\n      ignore: ['node_modules/', 'default-*.json', 'manifest*.yml']\n    parameters:\n      memory: 128M\n      disk: 512MB\n    properties:\n      SBF_BROKER_CREDENTIALS_HASH: \u003e\n        {\n           \"broker-user\": \"\u003cHashed credentials\u003e\"\n        }\n```\n\n1.4. Switch back to the **single-tenant/reuse-service** directory.\n\n```sh\ncd ../\n```\n\n1.5. Continue building the reuse-service multi target application by running the below command. \n\n```sh\nmbt build\n```\n\n1.6. Deploy the application to your dedicated Cloud Foundry Space.\n\n```sh\ncf login -a api.cf.\u003cSAP BTP Region like us20 or eu10-004\u003e.hana.ondemand.com\ncf deploy mta_archives/com.sap.demo.reuse_0.0.1.mtar \n```\n\n\n## 2. Create a Service Manager Instance\n\n2.1. Create a Service Manager instance in your Subaccount using the **subaccount-admin** Plan and choosing the Runtime Environment **Other**. \n\n[\u003cimg src=\"./images/ServiceManager.png?raw=true\" width=\"500\" /\u003e](./images/ServiceManager.png)\n\n2.2. Create a new **Service Binding** with the name of your choice.\n\n[\u003cimg src=\"./images/ServiceManagerCredentials.png?raw=true\" width=\"600\" /\u003e](./images/ServiceManagerCredentials.png)\n\n\n## 3. Register Service Broker\n\n\u003e **Hint** - If you haven't installed the Service Manager Command-Line Tool, you can find the instructions [here](https://help.sap.com/docs/service-manager/sap-service-manager/installing-service-manager-control-smctl-command-line-tool?locale=en-US). \n\nUse the binding credentials to register a new service broker in your Subaccount leveraging the Service Manager Command-Line Tool.\n\n```sh\nsmctl login -a \u003csm_url\u003e --auth-flow client-credentials --param subdomain=\u003cSubaccount Subdomain\u003e --client-id='\u003cclientid\u003e' --client-secret='\u003cclientsecret\u003e' \n```\n\n**Sample**\n\n[\u003cimg src=\"./images/SmctlLogin.png?raw=true\" width=\"1200\" /\u003e](./images/SmctlLogin.png)\n\n\u003e **Important** - The scale-out regions like **eu10-004** or **us10-002** require the Service Manager base region endpoints (like https://service-manager.cfapps.eu10.hana.ondemand.com).\n\n```sh\nsmctl register-broker demo-broker \"https://\u003cBroker Host\u003e.cfapps.\u003cSAP BTP Region like us20 or eu10-004\u003e.hana.ondemand.com\" -b broker-user:\u003cBroker Plaintext Password\u003e\n```\n\n**Sample**\n\n[\u003cimg src=\"./images/ServiceBrokerUrl.png?raw=true\" width=\"600\" /\u003e](./images/ServiceBrokerUrl.png)\n\n**Sample**\n\n[\u003cimg src=\"./images/SmctlRegisterBroker.png?raw=true\" width=\"1100\" /\u003e](./images/SmctlRegisterBroker.png)\n\n\n\n## 4. Setup the Sample application\n\n4.1. Switch to the **single-tenant/sample-app** directory.\n\n```sh\ncd single-tenant/sample-app\n```\n\n4.2. Build the Sample application.\n\n```sh\nmbt build\n```\n\n4.3. Deploy the Sample application.\n\n```sh\ncf login -a api.cf.\u003cSAP BTP Region like us20 or eu10-004\u003e.hana.ondemand.com\ncf deploy mta_archives/com.sap.demo_0.0.1.mtar\n```\n\n4.4. Assign the **Admin** roles of the **Sample application** and the **Reuse Service** to your user. \n\n[\u003cimg src=\"./images/RoleAssignment.png?raw=true\" width=\"600\" /\u003e](./images/RoleAssignment.png)\n\n4.5. Start the Sample application using the Application Router Route. \n\n\n## 5. Test the Reuse Service Integration\n\n5.1. Click on the **Reuse Sample** tile. \n\n[\u003cimg src=\"./images/TestReuse.png?raw=true\" width=\"600\" /\u003e](./images/TestReuse.png)\n\n5.2. The Reuse UI will show up and load the user details using the Reuse Service. \n\n[\u003cimg src=\"./images/ReuseUiDetails.png?raw=true\" width=\"600\" /\u003e](./images/ReuseUiDetails.png)\n\n\n\n# Deployment Instructions - Multi Tenant\n\nUsing a Business Service in a multitenant scenario is a bit more complicated. Based on your requirements, this scenario can be set up in multiple facets. \n\n**Technical Access**\n\n[\u003cimg src=\"./images/ArchMultiTenant.png?raw=true\" width=\"700\" /\u003e](./images/ArchMultiTenant.png)\n\nIn case of technical Business Service Access, the Application Router of your embedding SaaS application needs to bind to a Service Instance of the Business Service in the same subaccount which hosts the SaaS application. Once a binding between the SaaS Application Router and the Business Service is established, the Reuse UI as well as the Reuse Business Service can be consumed by your SaaS Subscribers using the **Client Credentials** flow. This flow will be handled automatically by the Application Router without further ado. \n\n\u003e **Important** - This approach based on a Client Credentials flow, does not allow you to assign roles defined for your Business Service to any user of your SaaS Subscriber. So in the respective Business Service implementation, you will not be able to do any permission checks. Only use it for scenarios, in which all SaaS application users are supposed to use the Business Service. \n\n\n**Principal Propagation**\n\n[\u003cimg src=\"./images/ArchMultiTenantUser.png?raw=true\" width=\"700\" /\u003e](./images/ArchMultiTenantUser.png)\n\nIn case you need to identify the accessing user and more specifically you have to check which roles that SaaS subscriber user is assigned in context of your Business Service, you need to use the **UserTokenExchange** flow. \n\nTo achieve this in a multitenant SaaS scenario, you need to make use of Destinations in the Subscriber Subaccounts. Each SaaS Subscriber needs to register and create a Service Instance of the Business Service in the respective Subscriber Subaccount and add the Service Binding Credentials of this Service Instance to a dedicated Subaccount Destination of type **OAuth2UserTokenExchange**.\n\n\u003e **Hint** - Creating a Business Service Instance in the Subscriber Subaccount will also add the roles of that Business Service to the respective Subscriber Subaccount!\n\nRegistering the Service Broker and creating a Business Service Instance in the Subscriber Subaccount allows exchanging the SaaS application token to a token issued using the Client Credentials of the Business Service Instance. The exchanged token will contain the Subscriber-specific role assignments of the Business Service and will be accepted by the Business Service backend implementation.\n\nFor authenticating to the Business Service, the SaaS solution will fetch the Client Credential details from the Subscriber Subaccount Destination (**preferLocal : true**), instead of using the Business Service Binding in the Provider Subaccount. \n\n```json\n{\n    \"source\": \"^/comsapdemoreuseservice/api(.*)$\",\n    \"target\": \"$1\",\n    \"preferLocal\": true,\n    \"authenticationType\": \"xsuaa\",\n    \"destination\": \"dev-demo-saas-reuse-service\"\n}\n```\n\n\u003e **Important** - For consuming the Reuse UI, the binding between the SaaS Application Router and a Business Service Instance in the Provider Subaccount is still essential! Only the Business Service API Calls are making use of the Subscriber-specific destination details allowing the **UserTokenExchange** flow. \n\n\n## 1. Setup the Reuse/Business Service\n\n1.1. Initialize the Reuse/Business Service Broker to provide unique IDs by running the respective npm script.\n\n```sh\ngit clone https://github.com/SAP-samples/btp-cf-cap-reuse-service\ncd multi-tenant/reuse-service/broker\nnpm install --include=dev\nnpm run init\n```\n\n1.2. Save the displayed **Plaintext password** and the **Hashed credentials**. \n\n[\u003cimg src=\"./images/InitBroker.png?raw=true\" width=\"600\" /\u003e](./images/InitBroker.png)\n\n1.3. Switch to the **mta.yaml** file in the **reuse-service** directory and paste the **Hashed credentials** value to the sbf module details. \n\n\u003e **Important** - Do not commit this details to Git!\n\n```yaml\n# --------------------- BROKER MODULE ------------------------\n  - name: demo-broker-sbf\n  # ------------------------------------------------------------\n    type: nodejs\n    path: broker\n    build-parameters:\n      builder: npm-ci\n      ignore: ['node_modules/', 'default-*.json', 'manifest*.yml']\n    parameters:\n      memory: 128M\n      disk: 512MB\n    properties:\n      SBF_BROKER_CREDENTIALS_HASH: \u003e\n        {\n           \"broker-user\": \"\u003cHashed credentials\u003e\"\n        }\n```\n\n1.4. Switch back to the **reuse-service** directory.\n\n```sh\ncd ../\n```\n\n1.5. Continue building the reuse-service multi target application by running the below command. \n\n```sh\nmbt build\n```\n\n1.6. Deploy the application to your dedicated Cloud Foundry Space.\n\n\u003e **Hint** - While you can consume Reuse/Business Services across different Global Accounts, you cannot consume them from different regions! \n\n```sh\ncf login -a api.cf.\u003cSAP BTP Region like us20 or eu10-004\u003e.hana.ondemand.com\ncf deploy mta_archives/com.sap.demo.reuse_0.0.1.mtar \n```\n\n\n### 2. Create a Service Manager Instance\n\n2.1 Create a Service Manager instance in your **Provider** Subaccount using the **subaccount-admin** Plan and choosing the Runtime Environment **Other**. \n\n[\u003cimg src=\"./images/ServiceManager.png?raw=true\" width=\"500\" /\u003e](./images/ServiceManager.png)\n\n2.2. Create a new **Service Binding** with the name of your choice.\n\n[\u003cimg src=\"./images/ServiceManagerCredentials.png?raw=true\" width=\"600\" /\u003e](./images/ServiceManagerCredentials.png)\n\n\n### 3. Register Service Broker\n\n\u003e **Hint** - If you haven't installed the Service Manager Command-Line Tool, you can find the instructions [here](https://help.sap.com/docs/service-manager/sap-service-manager/installing-service-manager-control-smctl-command-line-tool?locale=en-US). \n\nUse the binding credentials to register a new service broker in your **Provider Subaccount** leveraging the Service Manager Command-Line Tool.\n\n```sh\nsmctl login -a \u003csm_url\u003e --auth-flow client-credentials --param subdomain=\u003cSubaccount Subdomain\u003e --client-id='\u003cclientid\u003e' --client-secret='\u003cclientsecret\u003e' \n```\n\n**Sample**\n\n[\u003cimg src=\"./images/SmctlLogin.png?raw=true\" width=\"1200\" /\u003e](./images/SmctlLogin.png)\n\n\u003e **Important** - The scale-out regions like **eu10-004** or **us10-002** require the Service Manager base region endpoints (like https://service-manager.cfapps.eu10.hana.ondemand.com).\n\n```sh\nsmctl register-broker demo-broker \"https://\u003cBroker Host\u003e.cfapps.\u003cSAP BTP Region like us20 or eu10-004\u003e.hana.ondemand.com\" -b broker-user:\u003cBroker Plaintext Password\u003e\n```\n\n**Sample**\n\n[\u003cimg src=\"./images/ServiceBrokerUrl.png?raw=true\" width=\"600\" /\u003e](./images/ServiceBrokerUrl.png)\n\n**Sample**\n\n[\u003cimg src=\"./images/SmctlRegisterBroker.png?raw=true\" width=\"1100\" /\u003e](./images/SmctlRegisterBroker.png)\n\n\n### 4. Consuming the Business Service\n\n**Important** - This chapter is only required, in case you require a UserTokenExchange flow, meaning you need to identify the calling SaaS Subscriber tenant and respective role assignments in your Business Services implementation. If a technical access is sufficient for your scenario, you can skip the following steps!\n\n\u003e **Important** - We cannot guarantee the continued availability of this workaround in the future. Please use it on your own risk!\n\nFirst of all, please register the Business Service Broker also within the **Subscriber Subaccount** as you've just done in the Provider Subaccount. \n\nTherefore, you need to create another Service Manager Instance in the Subscriber Subaccount. Login to the Subscriber Subaccount using the Service Manager Command-Line tool and the Service Key Client Credentials of the new Service Manager Instance.\n\nOnce you registered the Business Service Broker also in the Subscriber Subaccount, please create a new Service Instance of the Business Service Broker. Additionally, please create a new Service Binding for that Business Service instance. \n\n[\u003cimg src=\"./images/ServiceKeyDest.png?raw=true\" width=\"600\" /\u003e](./images/ServiceKeyDest.png)\n\nNext, please create a new Destination on Subaccount level within the Subscriber Subaccount, leveraging those Client Credentials and the additional settings below (like Authentication **OAuth2UserTokenExchange**).\n\n**Destination** \n\n```html\nType=HTTP\nclientId=sb-bd47dbc4-7881ccca3d53!b204893|demo-broker-demo-a1b2c3d4-dev!b204893\nclientSecret=a5b7dn7AmqstIsicHnoyf-ZFnCVjw=\nAuthentication=OAuth2UserTokenExchange\nName=dev-demo-saas-reuse-service\ntokenServiceURL=https://demo-a1b2c3d4.authentication.eu10.hana.ondemand.com/oauth/token\nProxyType=Internet\nURL=https://demo-a1b2c3d4-dev-demo-broker-srv.cfapps.eu10-004.hana.ondemand.com\ntokenServiceURLType=Dedicated\n```\n\nLast but not least, please adapt the routing configuration (**xs-app.json**) of your SaaS Application Router. Add a route, that will redirect all Business Service API requests to the Destination available in your Subscriber Subaccounts. Using the **preferLocal** setting, you can ensure that the SaaS application will use the Subscriber Subaccount destination. \n\n```json\n{\n    \"source\": \"^/comsapdemoreuseservice/api(.*)$\",\n    \"target\": \"$1\",\n    \"preferLocal\": true,\n    \"authenticationType\": \"xsuaa\",\n    \"destination\": \"dev-demo-saas-reuse-service\"\n}\n```\n\nThat's it. Using this setup, the Reuse UI will be consumed via the Service Binding in the Provider Subaccount, whereas API Calls to the Business Service will leverage the Subscriber-specific Destination settings in the Subscriber Subaccounts. This allows you to use the UserTokenExchange flow in a SaaS context, without returning the Business Service as a dependency in your SaaS dependency callback!\n\n\n## Deploy the SaaS application\n\nSwitch to the **multi-tenant/saas-app** directory.\n\n```sh\ncd multi-tenant/saas-app\n```\n\nBuild the SaaS application.\n\n```sh\nmbt build\n```\n\nDeploy the SaaS application.\n\n```sh\ncf login -a api.cf.\u003cSAP BTP Region like us20 or eu10-004\u003e.hana.ondemand.com\ncf deploy mta_archives/com.sap.demo.saas_0.0.1.mtar\n```\n\nCreate a **Subscription** in the same account in which you deployed the SaaS application.\n\n[\u003cimg src=\"./images/SaasSubscribe.png?raw=true\" width=\"500\" /\u003e](./images/SaasSubscribe.png)\n\n\nCreate a new **Route** for the subscription.\n\n\u003e **Hint** - This process can also be automated as part of the onboarding process. \n\nCopy the Subscription URL from the **Instances \u0026 Subscriptions** screen.\n\n[\u003cimg src=\"./images/RouteCopyUrl.png?raw=true\" width=\"400\" /\u003e](./images/RouteCopyUrl.png)\n\nSwitch to your Cloud Foundry Space and open the **Routes** sub-menu. Click on **New Route**. Select the **cfapps** default domain. Paste the Subscription URL to the **Host Name** field. \n\n\u003e **Important** - Remove the leading **https://** and the default domain starting from **.cfapps...** (including the dot). \u003cbr\u003e\n\u003e https://\u003cspan\u003edemo-a1b2c3d4-demo-saas-dev.cfapps.eu10-004.hana.ondemand.com/\u003c/span\u003e **=\u003e demo-a1b2c3d4-demo-saas-dev**\n\n[\u003cimg src=\"./images/RouteCreate.png?raw=true\" width=\"600\" /\u003e](./images/RouteCreate.png)\n\nAfter creating the route, please map it to the **Application Router** application instance named **demo-saas-\\\u003cSpace Name\\\u003e**\n\n[\u003cimg src=\"./images/RouteMap.png?raw=true\" width=\"600\" /\u003e](./images/RouteMap.png)\n\n\n## Test the Reuse Service Integration\n\nAssign the **Admin** roles of the **SaaS application** and the **Reuse Service** to your user. \n\n\u003e **Important** - If you are using a technical integration and did not create a Business Service Instance in the Subscriber Subaccount, only assign the SaaS roles. \n\n\u003e **Hint** - In the Subscriber Subaccounts, you might need to create a new **Role Collection** based on the **Business Service** role templates. \n\n[\u003cimg src=\"./images/RoleAssignment.png?raw=true\" width=\"600\" /\u003e](./images/RoleAssignment.png)\n\nStart the SaaS application from the **Instances \u0026 Subscriptions** screen. \n\n[\u003cimg src=\"./images/StartApplication.png?raw=true\" width=\"600\" /\u003e](./images/StartApplication.png)\n\nClick on the **Reuse Sample** tile. \n\n[\u003cimg src=\"./images/TestReuse.png?raw=true\" width=\"600\" /\u003e](./images/TestReuse.png)\n\nThe Reuse UI will show up and load the user details using the Reuse Service.\n\n[\u003cimg src=\"./images/ReuseUiDetails.png?raw=true\" width=\"600\" /\u003e](./images/ReuseUiDetails.png)\n\n## Known Issues\n No known issues so far.\n\n## How to obtain support\n[Create an issue](https://github.com/SAP-samples/btp-cf-cap-reuse-service/issues) in this repository if you find a bug or have questions about the content.\n \nFor additional support, [ask a question in SAP Community](https://answers.sap.com/questions/ask.html).\n\n## Contributing\nIf you wish to contribute code, offer fixes or improvements, please send a pull request. Due to legal reasons, contributors will be asked to accept a DCO when they create the first pull request to this project. This happens in an automated fashion during the submission process. SAP uses [the standard DCO text of the Linux Foundation](https://developercertificate.org/).\n\n## License\nCopyright (c) 2023 SAP SE or an SAP affiliate company. All rights reserved. This project is licensed under the Apache Software License, version 2.0 except as noted otherwise in the [LICENSE](LICENSE) file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsap-samples%2Fbtp-cf-cap-reuse-service","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsap-samples%2Fbtp-cf-cap-reuse-service","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsap-samples%2Fbtp-cf-cap-reuse-service/lists"}