乐趣区

关于sap:使用-SAP-Cloud-SDK-连接-OData-服务

Connect to OData service on Neo using SAP Cloud SDK

Virtual Data Model

S/4HANA 零碎中存储的数据实质上结构复杂,因而很难手动查问。因而,HANA 引入了虚构数据模型 (VDM),旨在从这种复杂性中形象进去,并以语义上有意义且易于应用的形式提供数据。从 S/4HANA 零碎应用数据的首选形式是通过 OData 协定。尽管出于兼容性起因也反对 BAPI,但 OData 应该始终是您的首选。您能够在 SAP 的 API 业务核心找到 S/4HANA Cloud 零碎的所有可用 OData 端点的列表。

SAP Cloud SDK 当初将 VDM for OData 引入 Java 世界,使 OData 端点的类型平安应用更加简略!VDM 是应用来自 SAP API 业务核心的信息生成的。这意味着它与 API 业务核心提供的每个 API 兼容,因而也与每个 S/4HANA Cloud 零碎兼容。

传统的 OData 服务拜访形式:

让咱们来看看咱们能够编写的典型代码来拜访任何应用 SAP Cloud Platform SDK 进行服务开发的 OData 服务。这里,咱们从 S/4HANA 零碎中检索业务合作伙伴列表:

final ErpConfigContext configContext = new ErpConfigContext();
final List<MyBusinessPartnerType> businessPartners = ODataQueryBuilder
        .withEntity("/sap/opu/odata/sap/API_BUSINESS_PARTNER",
                "A_BusinessPartner")
        .select("BusinessPartner",
                "LastName",
                "FirstName",
                "IsMale",
                "IsFemale",
                "CreationDate")
        .build()
        .execute(configContext)
        .asList(MyBusinessPartnerType.class);

ODataQueryBuilder 代表了一种在应用程序中应用 OData 服务的简略通用办法,非常适合反对任意服务。从手动构建到 OData 服务的 HTTP 申请并在代码中处理结果,这是向前迈出的一大步,并且由 SAP Cloud SDK 在外部应用。反过来,ODataQueryBuilder 还应用 SAP Cloud SDK 的概念来简化与零碎的通信,这些零碎由 ErpConfigContext 援用。

然而,在应用一般的 ODataQueryBuilder 办法调用 OData 服务时,您可能会陷入一些陷阱:

  • 对于 .withEntity(“/sap/opu/odata/sap/API_BUSINESS_PARTNER”, “A_BusinessPartner”) 您曾经须要晓得三件事:OData 端点服务门路(/sap/opu/odata/sap)、端点名称(API_BUSINESS_PARTNER ) 和端点元数据中定义的实体汇合 (A_BusinessPartner) 的名称。
  • 而后,当您想要应用 select() 函数从 BusinessPartner 实体类型中抉择特定属性时,您须要晓得这些字段是如何命名的。但因为它们在此代码中仅示意为字符串,因而您须要查看元数据以理解它们的调用形式。这同样实用于 order() 和 filter() 等函数。当然,应用字符串作为参数很容易呈现拼写错误,您的 IDE 很可能无奈为您捕捉这些谬误。
  • 最初,您须要定义一个类,例如 MyBusinessPartnerType,其中蕴含示意后果的属性及其类型的特定正文。为此,您再次须要理解无关 OData 服务的大量详细信息。

Virtual Data Model: The new way to OData

当初咱们曾经解释了以后办法可能存在的缺点,让咱们来看看 SAP Cloud SDK 的 OData VDM 如何简化雷同的工作,因为 SDK 可能整合更多对于被调用零碎的常识。

final List<BusinessPartner> businessPartners =
        new DefaultBusinessPartnerService()
                .getAllBusinessPartner()
                .select(BusinessPartner.BUSINESS_PARTNER,
                        BusinessPartner.LAST_NAME,
                        BusinessPartner.FIRST_NAME,
                        BusinessPartner.IS_MALE,
                        BusinessPartner.IS_FEMALE,
                        BusinessPartner.CREATION_DATE)
                .execute();

应用 OData VDM,咱们当初能够拜访特定 OData 服务的对象示意,在本例中为 DefaultBusinessPartnerService(BusinessPartnerService 接口的默认实现)。所以当初不再须要晓得端点的服务门路、服务名称或实体汇合名称。咱们能够调用该服务的 getAllBusinessPartner() 函数来从零碎中检索所有业务合作伙伴的列表。

当初看一下 select() 函数。咱们能够简略地应用 BusinessPartner 类提供的动态字段,而不是传递示意实体字段的字符串。因而,咱们不仅打消了拼写错误的危险,而且还使其类型平安!同样,这同样实用于 filter() 和 orderBy()。例如,过滤男性业务搭档变得像 .filter(BusinessPartner.IS_MALE.eq(true)) 一样简略——留神类型平安的比拟。

这种办法的另一个益处是可发现性。因为所有内容都示意为代码,因而您能够简略地应用 IDE 的主动实现性能来查看服务反对哪些性能以及实体蕴含哪些字段:首先查看包 com.sap.cloud.sdk 中提供的不同服务.s4hana.datamodel.odata.services,实例化你须要的服务的默认实现(类名以 Default 为前缀),而后查找服务类中代表不同可用操作的办法。基于此,您能够应用返回类型的字段来抉择要抉择的字段和要利用的过滤器。

每个服务都由一个 Java 接口形容,例如 BusinessPartnerService。SDK 为每个服务接口提供了一个默认的、残缺的实现。相应的实现在名称为前缀为 Default 的接口名称的类中可用,例如 DefaultBusinessPartnerService。您能够简略地实例化该类,也能够将依赖注入与相应的 Java 框架联合应用。接口的益处是更好的测试和可扩展性反对。

退出移动版