如何将所有SELECT参数传递给外部服务

2020-08-22 08:13发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


Hello CAP专家,丹尼尔·赫泽尔克里斯汀·乔治(Christian Georgi)

在TechEd会话CAA265中,显示了一个服务重用示例。 为此,使用了外部审阅服务。 不幸的是,所示实现没有将通过OData $ filter或$ select应用的任何过滤器或字段选择转发给被调用的外部服务。

我已将该项目分叉到 CAA265节点 -ex4-final 并将其功能至少实现了将where子句传递给远程服务。 我也测试了这个替代方法:

 req.query.SELECT.from =评论
    结果=等待tx.run(req.query.SELECT)
 

但这会导致错误消息"功能不受支持:流畅的API方法.kind"

我现在有一些问题:

  1. 是否存在更优雅的方法来区分应用$ filter的请求和未过滤的大小写?
  2. 如何做到这一点,以便将所有查询选项都传递给外部服务?
  3. 使用OData V2的Java是否有类似的示例?

最诚挚的问候
格雷戈尔

cc: Henning Heitkoetter DJ Adams Volker Buzek

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


Hello CAP专家,丹尼尔·赫泽尔克里斯汀·乔治(Christian Georgi)

在TechEd会话CAA265中,显示了一个服务重用示例。 为此,使用了外部审阅服务。 不幸的是,所示实现没有将通过OData $ filter或$ select应用的任何过滤器或字段选择转发给被调用的外部服务。

我已将该项目分叉到 CAA265节点 -ex4-final 并将其功能至少实现了将where子句传递给远程服务。 我也测试了这个替代方法:

 req.query.SELECT.from =评论
    结果=等待tx.run(req.query.SELECT)
 

但这会导致错误消息"功能不受支持:流畅的API方法.kind"

我现在有一些问题:

  1. 是否存在更优雅的方法来区分应用$ filter的请求和未过滤的大小写?
  2. 如何做到这一点,以便将所有查询选项都传递给外部服务?
  3. 使用OData V2的Java是否有类似的示例?

最诚挚的问候
格雷戈尔

cc: Henning Heitkoetter DJ Adams Volker Buzek

付费偷看设置
发送
4条回答
Bunny_CDM
1楼 · 2020-08-22 08:50.采纳回答

Hello Gregor,

由于Marc在Java和OData v2的上下文中提到了Cloud SDK,所以我想解释一下。

SAP Cloud SDK提供了客户端库来访问由 SAP提供的S/4HANA OData服务。 API Business Hub 。 通过使用所谓的虚拟数据模型(VDM),您可以根据规范读取和写入数据。 该API的设计方式是,不需要任何先前的OData或服务知识。

首先,您要解析目标,然后可以使用VDM的流畅API,例如 解决所有业务合作伙伴的方法:

最终HttpDestination httpDestination = DestinationAccessor.getDestination(" MyErpSystem")。asHttp();

 最终的ErpHttpDestination erpDestination =新的DefaultErpHttpDestination(httpDestination);

 最终列表 businessPartners =
     新的DefaultBusinessPartnerService()
         .getAllBusinessPartner()
         .select(BusinessPartner.BUSINESS_PARTNER,
                 BusinessPartner.LAST_NAME,
                 BusinessPartner.FIRST_NAME,
                 BusinessPartner.IS_MALE,
                 BusinessPartner.IS_FEMALE,
                 BusinessPartner.CREATION_DATE)
         .execute(erpDestination); 

您可以在此处添加过滤器,扩展,分页,排序或计算结果集。

您还可以使用博客文章中所述的生成器来生成自己的OData v2服务的VDM类。 请考虑以下文档项:

最好的问候

亚历山大

SAP砖家
2楼-- · 2020-08-22 08:57

亚历山大,您好

谢谢您的回答。 看来我已经继续使用CAP并使用了Node.JS。 但是也许您现在也可以通过以下问题帮助我:

如何将用户身份验证(JWT)从CAP Java传递到Java目标实例的SAP Cloud SDK?

最诚挚的问候
格雷戈尔

能不能别闹
3楼-- · 2020-08-22 08:42

嗨,格雷戈尔,

感谢这些好的问题。


1。 最好看看是否有一个过滤器`if(req.query.SELECT.where){...}`。

2。 到目前为止,还没有更好的方法来"转移"过滤器并选择条件到远程服务,我们可能会在以后添加。

@Marc Becker您能否回答Java问题?

感谢和问候

David

半个程序猿
4楼-- · 2020-08-22 08:57

嗨,格雷格,

在Java中,您可以类似于Node.js,检查CQN语句并检查其是否具有where条件: https://cap.cloud.sap/docs/java/cds-ql

目前仅通过OData V4支持上述文档中展示的Java API。 在本届会议的TechEd上展示了它们:https://github.com/SAP-samples/cloud-cap-walkthroughs/tree/master/exercises-java

到目前为止,Java中尚不支持通过CQN使用远程OData服务。 当前,我们建议使用Cloud SDK来使用远程OData服务。

最好的问候,
马克

一周热门 更多>