无法将带有CAP的VDM生成器与GWSAMPLE_BASIC服务一起使用

问题描述

我已经使用CAP NG创建了一个项目,在该项目中,我正在使用VDM从位于https://sapes5.sapdevcenter.com/sap/opu/odata/IWBEP/GWSAMPLE_BASIC/的ES5后端中提取BusinessPartners。 我成功导入了EDMX,并且这些类是通过VDM生成的。 但是,如果我尝试从BusinessPartner类中获取方法,则不会显示许多“设置”方法,如您从此图可以看到的:

enter image description here

如果我尝试像这段代码中那样手动创建BusinessPartner实体,则:

    @On(event = CdsService.EVENT_READ,entity = "CatalogService.BusinessPartner")
public void getBusinessPartners(CdsReadEventContext context) {
    log.info("Entering " + getClass().getSimpleName() + ":getBusinessPartners");
    System.out.println("Entering " + getClass().getSimpleName() + ":getBusinessPartners");

    // Get name of destination for ECC
    final String DESTINATION_HEADER_KEY = "es5";

    final Map<Object,Map<String,Object>> result = new HashMap<>();

    try {
        HttpDestination dest = DestinationAccessor.getDestination(DESTINATION_HEADER_KEY).asHttp();

        final List<BusinessPartner> businessPartners = new DefaultGWSAMPLEBASICService().getAllBusinessPartner()
                .top(5).executeRequest(dest);

        final List<cds.gen.catalogservice.BusinessPartner> capBusinessPartners = new ArrayList<>();

        int i = 0;
        for (final BusinessPartner bp : businessPartners) {
            final cds.gen.catalogservice.BusinessPartner capBusinessPartner = com.sap.cds.Struct
                    .create(cds.gen.catalogservice.BusinessPartner.class);

                i = i + 1;
                capBusinessPartner.setBusinessPartnerID("010000000" + i);
                capBusinessPartner.setCompanyName("SAP");
                capBusinessPartner.setEmailAddress("info@acme.com");
                capBusinessPartner.setPhoneNumber("474848848");

            // capBusinessPartner.setBusinessPartnerID(bp.);
            // capBusinessPartner.setFirstName(s4BusinessPartner.getFirstName());
            // capBusinessPartner.setSurname(s4BusinessPartner.getLastName());
            // capBusinessPartner.setId(s4BusinessPartner.getBusinessPartner());
            // capBusinessPartner.setSourceDestination(destinationName);

            capBusinessPartners.add(capBusinessPartner);
        }

        capBusinessPartners.forEach(capBusinessPartner -> {
            result.put(capBusinessPartner.getBusinessPartnerID(),capBusinessPartner);
        });

    } catch (Exception e) {
    log.info(e.getMessage());
    System.out.println(e.getMessage());
    }

    context.setResult(result.values());

}

它们根本无法检索。我只得到一个空白页:

enter image description here

我的项目在https://github.com/simfer/myspringbootapp,并且在Trial Landscape上使用SAP Business Application Studio

Simmaco

解决方法

您需要依赖Lombok。 Cloud SDK业务合作伙伴的吸气剂是由Lombok注释@Getter生成的。添加依赖项as described here

要使其在您的IDE中可见,您通常需要一个插件,如Alex在其答案中指出的那样。

,

不幸的是,Cloud SDK生成器生成的代码依赖于Lombok注释及其处理。在我们放松依赖关系之前,您将需要在您的VS Code实例中添加“ Lombok”:

  • 在左侧面板中,单击Open VSX Registry,搜索“ lombok”,然后单击“安装”。

  • 将在右下角弹出一个对话框,确认重新启动应用程序。初始化后,应该会出现缺少的方法。

Extensions: Open VSX Registry