点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
你好
在我的多租户CAP应用程序中,从客户子帐户通过Cloud SDK访问S/4HANA Cloud时出现错误。 从我的提供程序访问时,它工作正常。 我的情况如下:
也许自己的s/4hana云系统与提供商子帐户可能有点怪异,但这只是出于测试目的。
访问https://提供者- myapp-aa.cfapps.eu10.hana.ondemand.com/mobile/getData(cardTemplate =''),成功访问了自己的s4hc并检索了数据,但从 消费者,https://消费者- myapp-aa.cfapps.eu10.hana.ondemand.com/mobile/getData(cardTemplate =''),在提供程序应用中出现以下错误:
2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0] OUT错误,调用api错误:找不到名称为" s4n103C1"的目的地! 无法执行请求。 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0]在Object.errorWithCause(/home/vcap/app/node_modules/@ sap/cloud-sdk-core/node_modules/@ sap/cloud -sdk-util/dist/error.js:14:20) 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0]在/home/vcap/app/node_modules/@ sap/cloud-sdk-core/dist/request-builder/request-builder- base.js:125:78 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0]在process._tickCallback处退出(内部/进程/next_tick.js:68:7) 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0] OUT原因: 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0] OUT错误:FetchTokenError:客户端凭据授予失败! 请求失败,状态码为401 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0]在Object.errorWithCause(/home/vcap/app/node_modules/@ sap/cloud-sdk-core/node_modules/@ sap/cloud -sdk-util/dist/error.js:14:20) 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0]在accessTokenError(/home/vcap/app/node_modules/@ sap/cloud-sdk-core/dist/scp-cf/xsuaa- service.js:166:29) 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0]在/home/vcap/app/node_modules/@ sap/cloud-sdk-core/dist/scp-cf/xsuaa-service处输出。 js:43:57 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0]在process._tickCallback处退出(内部/进程/next_tick.js:68:7) 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0] OUT原因: 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0] OUT错误:请求失败,状态码为401 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0]在createError处退出(/home/vcap/app/node_modules/axios/lib/core/createError.js:16:15) 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0]在解决时退出(/home/vcap/app/node_modules/axios/lib/core/settle.js:17:12) 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0]在IncomingMessage.handleStreamEnd(/home/vcap/app/node_modules/axios/lib/adapters/http.js:237:11)处退出 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0]在IncomingMessage.emit处退出(events.js:203:15) 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0]在endReadableNT处输出(_stream_visible.js:1145:12) 2020-04-15T09:46:27.639 + 0000 [APP/PROC/WEB/0]在process._tickCallback退出(内部/进程/next_tick.js:63:19)
目标s4n103C1是在提供商子帐户中创建的,并且我确保已正确填写字段。 我尝试在消费者子帐户中创建目标,但遇到了同样的错误。
让我在这里说一下,从消费者子帐户访问其他CAP服务(即https://消费者- myapp-aa.cfapps.eu10.hana.ondemand.com/mobile/books )工作正常,访问后端时发生错误 通过Cloud SDK访问目的地。
引发错误的源代码是:
var cloud_sdk_core_1 = require(" @ sap/cloud-sdk-core"); const {serializeEntity} = require(" @ sap/cloud-sdk-core"); //构建选择字段数组 .... var jwt = resolveJwt(req ._。req) //调用api const salesOrder =等待SalesOrder .requestBuilder() 。得到所有() .select(... selectFields) .filter(过滤器) .top(顶部) .execute({destinationName:destination,jwt:jwt}) .then(结果=> result.map(so => serializeEntity(so,SalesOrder))) .catch(原因=> { console.log(``调用api时出错,原因) })
这是我的mta.yaml文件:
_schema版本:2.0.0 ID:myapp 版本:1.0.0 模块: -名称:myapp-db 类型:hdb 路径:db 参数: 记忆体:256M 磁盘配额:256M 要求: -名称:myapp-db-hdi-container -名称:myapp-srv 类型:nodejs 路径:srv 参数: 内存:512M 磁盘配额:512M 提供: -名称:srv_api 特性: 网址:$ {default-url} 要求: -名称:myapp-db-hdi-container -名称:myapp-uaa -名称:myapp_destination -名称:myapp_connectivity 特性: SAP_JWT_TRUST_ACL: -客户编号:" *" identityzone:" *" 调试:"假" -名称:myapp-ui 类型:nodejs 路径:应用 参数: 记忆体:256M 磁盘配额:256M 要求: -名称:myapp-uaa -名称:srv_api 组:目的地 特性: forwardAuthToken:true strictSSL:true 名称:srv_api 网址:〜{url} 特性: SAP_JWT_TRUST_ACL: -客户编号:" *" identityzone:" *" TENANT_HOST_PATTERN:" ^(。*)-myapp-ui.cfapps.eu10.hana.ondemand.com" 资源: -名称:myapp-db-hdi-container 类型:com.sap.xs.hdi-container 特性: hdi-container-name:$ {服务名称} -名称:myapp-uaa 类型:org.cloudfoundry.managed-service 参数: 服务计划:应用 服务:xsuaa 路径:./xs-security.json 共享:真实 配置: xsappname:myapp-$ {space} -名称:myapp_destination 类型:org.cloudfoundry.managed-service 参数: 服务计划:精简版 服务:目的地 -名称:myapp_connectivity 类型:org.cloudfoundry.managed-service 参数: 服务计划:精简版 服务:连通性
有关此问题的任何线索吗?
谢谢。
最诚挚的问候,
马克
(118.8 kB)
嗨Marc
就像已经描述过的丹尼斯一样,您是否实现了getDependencies端点?
在这里,当我们没有实现该终结点时,我们的解决方案就会遇到问题。
您可以创建一个AppRouter模块(@ sap/approuter)并对该模块执行getDependencies回调。 AppRouter包含一个可以回答这些请求的中间件(lib/middleware/subscription-middleware.js)。
要使AppRouter正确回答该请求,您必须绑定目标服务的服务实例(也可能是该服务实例) 连接服务,但我不确定是否必要)。 AppRouter读取绑定的服务,并使用它们创建返回的有效负载。
针对AppRouter执行getDependencies回调时,它将返回一个数组,该数组包含有关目标服务的绑定服务实例的信息( 和连接服务实例(如果已绑定)。
下面是由AppRouter模块处理的getDependencies回调响应的屏幕截图。
致谢
Simon
您是否实现了getDependencies订阅回调? ( https://help.sap。 com/viewer/65de2977205c403bbc107264b8eccf4b/Cloud/zh-CN/3971151ba22e4faa9b245943feecea54.html?q = saas%20registry )
Hi 丹尼斯·亨普芬,
不,我没有。 当我测试getDependencies方法时(由于文档非常有限,实现起来并不像我预期的那么容易),我收到了 Simon Perstorfer 的答案。
我的部署工作正常,现在我的多租户应用正在成功地从客户的s/4 hana云后端读取数据。
无论如何,我将检查Simon提出的解决方案。
非常感谢您的支持!
此致
Marc
getDependencies回调也花了我两天时间。
我还建议改进文档,回调的目的是( 我之前不知道这对于目的地或门户网站服务是必不可少的)以及必须返回的内容。
并且还必须提到AppRouter具有此订阅中间件,这很重要。
值得一提的是,AppRouter不会转发转到SaaS注册服务中存储的URI的getDependencies和onSubscription的请求。
< p>关于
Simon
您好,Simon,感谢您分享这些详尽的细节。 我想我第一次尝试时忘记了重新创建某些服务,因为配置如您所解释。 现在它就像一种魅力。
因此,总而言之,这两种方法都可以正常工作,但是这种基于Approuter的方法不需要任何编码,并且更易于实现。
感谢您的支持西蒙·珀斯托弗(Simon Perstorfer)和丹尼斯·亨普芬!
最诚挚的问候,
马克
一周热门 更多>