Hi Experts
I am currently working on a nodejs based CAP application in Business App Studio which has cds services and ui5 app which are using those services. Authentication and Authorization is enabled for the services, hence I am testing both the services and ui5 app using 'cds watch' command and copying the VCAP_SERVICES part of environment variables of the deployed service app into default-env.json of the project. The deployed service destination is auto configured at instance level destination using mta.yaml. Till here everything works fine and i am able to test ui5 app and CAP services locally.
Now we have been provided with an on-premise odata service that we are supposed to integrate it with the ui5 app. I have manually created subaccount level destination and instance-level destination(just in case) from it and want to test this on-prem destination locally if i am able to access it in my ui5 app using 'cds watch' command.
I am using destination service as well as connectivity service in mta.yaml. But I am unable to access the on-premise service locally. I have created a v2 odatamodel in manifest.json but when running the ui5 app, onprem service throws 404 not found error.
So I wanted to know if it is possible to access on-prem locally using 'cds watch' as I want to integrate and test both local cap services and on-prem odata service in the ui5 app. I also tried to run app using command "fiori run --open 'index.html' ", but here another problem for me is that deployed CAP services from ui5.yaml is used and not local cap service, hence service throws 401 unauthorized as its oAuth based. Also not able to access on-prem destination here as well. Please let me know if there is any solution to this.
Please note: The CAP ui5 app uses managed approuter and is configured to be shown in central launchpad service as a tile with roles enabled.
My code below:
xs-app.json
{ "welcomeFile": "/index.html", "authenticationMethod": "route", "routes": [ { "source": "^/sap/opu/odata/sap/(.*)$", "destination": "MY_ODATA_SRV", "authenticationType": "basic", "csrfProtection": false }, { "source": "^/mycapservice/(.*)$", "destination": "mycapservice-srv", "authenticationType": "xsuaa", "csrfProtection": false }, { "source": "^/resources/(.*)$", "target": "/resources/$1", "authenticationType": "none", "destination": "ui5" }, { "source": "^/test-resources/(.*)$", "target": "/test-resources/$1", "authenticationType": "none", "destination": "ui5" }, { "source": "^(.*)$", "target": "$1", "service": "html5-apps-repo-rt", "authenticationType": "xsuaa" } ] }
manifest.json
... "dataSources": { "MY_ODATA_SRV": { "uri": "/sap/opu/odata/sap/ZPRICING_SRV", "type": "OData", "settings": { "localUri": "localService/metadata.xml", "odataVersion": "2.0" } }, "mycapservice": { "uri": "/mycapservice/", "type": "OData", "settings": { "localUri": "localService/metadata.xml", "odataVersion": "4.0" } }, } ... "models": { "mPricing": { "dataSource": "MY_ODATA_SRV", "preload": true, "type": "sap.ui.model.odata.v2.ODataModel", "settings": { "useBatch": true } } } ...
mta.yaml
//rest of mta.yaml modules: # --------------------- SERVER MODULE ------------------------ - name: mycapservice-srv # ------------------------------------------------------------ type: nodejs path: gen/srv parameters: buildpack: nodejs_buildpack memory: 4G disk-quota: 3096M requires: - name: mycapservice-uaa - name: mycapservice-db - name: mycapservice-dest - name: mycapservice-conn provides: - name: srv-api properties: srv-url: ${default-url} # ----------- HTML5 APP REPOSITORY APP FIORI MODULE ---------- # do the build of the SAP Fiori application. - name: myui5app # #------------------------------------------------------------ type: html5 path: app/myui5app build-parameters: build-result: dist builder: custom commands: - npm install - npm run build:cf supported-platforms: [] # ----- HTML5 APP REPOSITORY DESTINATION CONTENT MODULE ------ - name: mycapservice-dest-content # ------------------------------------------------------------ type: com.sap.application.content requires: - name: mycapservice-uaa parameters: service-key: name: mycapservice-uaa-sk - name: mycapservice-html5repo parameters: service-key: name: mycapservice-html5repo-sk - name: mycapservice-dest parameters: content-target: true - name: srv-api - name: mycapservice-conn parameters: content: instance: existing_destinations_policy: update destinations: - Name: mycapservice-service-mycapservice-uaa ServiceInstanceName: mycapservice-uaa ServiceKeyName: mycapservice-uaa-sk Authentication: OAuth2UserTokenExchange sap.cloud.service: mycapservice.service - Name: mycapservice-service-mycapservice-html5repo ServiceInstanceName: mycapservice-html5repo ServiceKeyName: mycapservice-html5repo-sk sap.cloud.service: mycapservice.service - Name: mycapservice-srv Authentication: OAuth2UserTokenExchange TokenServiceInstanceName: mycapservice-uaa TokenServiceKeyName: mycapservice-uaa-sk URL: '~{srv-api/srv-url}' Description: My CAP Service HTML5.DynamicDestination: true HTML5.Timeout: 300000 sap.cloud.service: mycapservice.service build-parameters: no-source: true // .. Rest of modules resources: # ----------------------- UAA SERVICE ------------------------ - name: mycapservice-uaa # ------------------------------------------------------------ type: org.cloudfoundry.managed-service parameters: service: xsuaa service-plan: application path: ./xs-security.json - name: mycapservice-conn type: org.cloudfoundry.managed-service parameters: service: connectivity service-plan: connectivity_proxy # -------------------- DESTINATION SERVICE ------------------- - name: mycapservice-dest # ------------------------------------------------------------ type: org.cloudfoundry.managed-service requires: - name: srv-api properties: hdi-service-name: ${service-name} parameters: service: destination service-name: mycapservice-dest service-plan: lite config: HTML5Runtime_enabled: true init_data: instance: existing_destinations_policy: update destinations: - Name: ui5 Description: SAPUI5 URL: https://ui5.sap.com Type: HTTP ProxyType: Internet Authentication: OAuth2UserTokenExchange // ... rest of resources
On prem odata service Destination
Description=OnPremise OData Gateway Type=HTTP sap-platform=ABAP HTML5.DynamicDestination=true Authentication=BasicAuthentication WebIDEUsage=odata_abap,dev_abap Name=MY_ODATA_SRV WebIDEEnabled=true ProxyType=OnPremise URL=http\://dw-gw1\:443 sap-client=300 User=MYUSER1 WebIDESystem=Gateway
Thanks & Regards
Naresh