在我的多租户CAP应用程序中找不到目标

2020-08-19 20:40发布

         点击此处--->   EasySAP.com群内免费提供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)

         点击此处--->   EasySAP.com群内免费提供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)
付费偷看设置
发送
5条回答
木偶小白
1楼 · 2020-08-19 21:31.采纳回答

嗨Marc

就像已经描述过的丹尼斯一样,您是否实现了getDependencies端点?

在这里,当我们没有实现该终结点时,我们的解决方案就会遇到问题。

您可以创建一个AppRouter模块(@ sap/approuter)并对该模块执行getDependencies回调。 AppRouter包含一个可以回答这些请求的中间件(lib/middleware/subscription-middleware.js)。
要使AppRouter正确回答该请求,您必须绑定目标服务的服务实例(也可能是该服务实例) 连接服务,但我不确定是否必要)。 AppRouter读取绑定的服务,并使用它们创建返回的有效负载。

针对AppRouter执行getDependencies回调时,它将返回一个数组,该数组包含有关目标服务的绑定服务实例的信息( 和连接服务实例(如果已绑定)。

下面是由AppRouter模块处理的getDependencies回调响应的屏幕截图。

致谢
Simon

Haoba3210
2楼-- · 2020-08-19 21:35
昵称总是被占用
3楼-- · 2020-08-19 21:19

Hi 丹尼斯·亨普芬
不,我没有。 当我测试getDependencies方法时(由于文档非常有限,实现起来并不像我预期的那么容易),我收到了 Simon Perstorfer 的答案。
我的部署工作正常,现在我的多租户应用正在成功地从客户的s/4 hana云后端读取数据。

无论如何,我将检查Simon提出的解决方案。

非常感谢您的支持!

此致

Marc

SC_Yao
4楼-- · 2020-08-19 21:19

getDependencies回调也花了我两天时间。

我还建议改进文档,回调的目的是( 我之前不知道这对于目的地或门户网站服务是必不可少的)以及必须返回的内容。

并且还必须提到AppRouter具有此订阅中间件,这很重要。

值得一提的是,AppRouter不会转发转到SaaS注册服务中存储的URI的getDependencies和onSubscription的请求。

< p>关于
Simon

闻人可可
5楼-- · 2020-08-19 21:38

您好,Simon,感谢您分享这些详尽的细节。 我想我第一次尝试时忘记了重新创建某些服务,因为配置如您所解释。 现在它就像一种魅力。

因此,总而言之,这两种方法都可以正常工作,但是这种基于Approuter的方法不需要任何编码,并且更易于实现。
感谢您的支持西蒙·珀斯托弗(Simon Perstorfer)丹尼斯·亨普芬
最诚挚的问候,
马克

一周热门 更多>