温馨提示:本文翻译自stackoverflow.com,查看原文请点击:java - Getters methods missing on custom VDM object
java sap-cloud-sdk

java - 自定义VDM对象上缺少Getters方法

发布于 2020-04-24 14:30:15

我在S / 4Hana Cloud中创建了一个自定义业务对象。

自定义对象 屏幕截图

然后获取元数据,最后将其添加到我的Java项目中。

现在,我需要阅读表并将某些字段用于后续逻辑。

我这样检索表:

cockpitSetupList = new DefaultCscCockpitSetupService().getAllCSCCOCKPIT_SETUP()
                    .orderBy(CSCCOCKPIT_SETUP.COCKPIT_TYPE, Order.ASC)
                    .execute();

我想读取字段的值,因此我将其循环并读取字段值,如下所示:

for (CSCCOCKPIT_SETUP cockpitsetup : allCockpitSetup) {

// read all the product for the sales Organization sent from cockpit setup
    String salesOrganizationInString = 
    String.valueOf(cockpitsetup.SALES_ORGANIZATION);
    allProductsPerSalesOrganization = products.getAllProductSalesPerSalesOrganization(salesOrganizationInString);

但是,它没有给出字段的值,而是类似:

"com.sunstar.vdm.namespaces.csccockpitsetup.field.CSCCOCKPIT_SETUPField@d6ba2449"

例如,通过使用列入白名单的API,我对API的每个字段都有使用方法。

你们能告诉我为什么我在自定义VDM对象上看不到getter方法吗?

备注:我创建了两个附加的自定义对象,它们都不带吸气剂。

添加元数据文件:[已删除至字符数限制]添加我的POM文件:

    <dependencies>
        <dependency>
            <groupId>com.sap.cloud.s4hana.cloudplatform</groupId>
            <artifactId>scp-neo</artifactId>
        </dependency>
        <dependency>
            <groupId>com.sap.cloud.s4hana</groupId>
            <artifactId>s4hana-all</artifactId>
        </dependency>
       <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>com.sap.cloud</groupId>
            <artifactId>neo-javaee7-wp-api</artifactId>
            <scope>provided</scope>
        </dependency>
         <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf</artifactId>
            <version>3.0.0.RELEASE</version>
        </dependency>
<!--        commented out to get VDM getters -->
<!--         <dependency>-->
<!--            <groupId>org.projectlombok</groupId>-->
<!--            <artifactId>lombok</artifactId>-->
<!--            <scope>provided</scope>-->
<!--        </dependency>-->
        <dependency>
            <groupId>org.modelmapper</groupId>
            <artifactId>modelmapper</artifactId>
            <version>1.1.2</version>
        </dependency>
<!--    custom VDM-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>
<!--     custom VDM   -->
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <scope>provided</scope>
        </dependency>
    </dependencies>

此外,还列出了生成的方法: 方法 BR,Pietro

查看更多

提问者
Pietro Henrique
被浏览
24
MatKuhr 2020-02-09 22:27

我假设您使用生成器基于元数据生成VDM。如果可以,请共享元数据。

假设以上情况,您尝试使用的字段不是,也不意味着要保存任何数据。在构建OData请求时使用它,因此在选择和过滤操作中使用。

为了访问数据,您确实需要在实体类型上使用吸气剂。请确保lombok在您的项目中包含依赖项,因为我们在生成的代码中使用了@Data 注释

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <scope>provided</scope>
</dependency>

我在本地生成了代码,并且看到注释存在于实体上。因此,应该有吸气剂存在。我设置了一个小项目,并编译了以下代码:

final CSCCOCKPIT_SETUP setup = new CSCCOCKPIT_SETUP();
final String salesOrganization = setup.getSalesOrganization();

如果您在IDE中看不到方法,则可能需要安装或启用lombok插件以使linter&autocomplete正常工作。