我在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
我假设您使用生成器基于元数据生成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正常工作。
嗨,MatKuhr,我刚刚在问题中添加了元数据。谢谢。
我已经把它放在我的POM中了。实际上,我有两次,所以只保留了一次。即使这样,我仍然看不到吸气剂。我附加了POM文件和创建的方法的图片。我确实有两种get方法,但是我不需要的领域是salesOrganization和Plant。
我仔细研究了一下,然后使用了3个自定义对象和3个自定义CDS视图。它们都有setter方法,但没有getter方法。我设法成功地将getter仅与列入白名单的API一起使用。
我扩大了答案。您是否可以确认在实体类中看到私有字段,例如在类级别
private String salesOrganization;
看到@Data
注释?如果不是,请扩展您的问题以包括调用生成器的确切方法。你死定了。问题是缺少Lombok插件。通过添加,我可以看到实体的私有字段(例如,getSalesOrganization)。非常感谢。它对我很有帮助。