1

Java VDM Generator を使用して、SAP Cloud SDK archetype プロジェクトでサービス クラスを生成しています。バージョンは 3.7.0 です。

私が使用した OData サービスは API_SALES_ORDER_SIMULATION_SRV です。SAP API Business Hub からメタデータをダウンロードしました。実際、S/4HANA オンプレミス 1909 のメタデータもテストしました。問題はまだ存在します。

pom.xml で使用したプラグインは次のとおりです。

<plugin>
   <groupId>com.sap.cloud.sdk.datamodel</groupId>
   <artifactId>odata-generator-maven-plugin</artifactId>
   <version>3.7.0</version>
   <executions>
       <execution>
           <id>generate-consumption</id>
           <phase>generate-sources</phase>
           <goals>
               <goal>generate</goal>
           </goals>
           <configuration>
               <inputDirectory>${project.basedir}/edmx</inputDirectory>
               <outputDirectory>${project.build.directory}/vdm</outputDirectory>
               <deleteOutputDirectory>true</deleteOutputDirectory>
               <defaultBasePath>/sap/opu/odata/sap/</defaultBasePath>
               <packageName>com.bosch.testvdm</packageName>
               <serviceNameMappingFile>${project.basedir}/serviceNameMappings.properties</serviceNameMappingFile>
               <compileScope>COMPILE</compileScope>
           </configuration>
       </execution>
   </executions>
</plugin>

生成されるサービス インターフェイス/クラスは、APISALESORDERSIMULATIONSRVService と DefaultAPISALESORDERSIMULATIONSRVService です。一部のメソッドはサービスで失われます。例: createSalesOrderSimulationAPI()。

/*
 * Generated by OData VDM code generator of SAP Cloud SDK in version 3.7.0
 */

package com.bosch.testvdm.services;

import javax.annotation.Nonnull;
import com.bosch.testvdm.namespaces.salesordersimulationsrv.batch.APISALESORDERSIMULATIONSRVServiceBatch;
import com.sap.cloud.sdk.datamodel.odata.helper.batch.BatchService;


/**
 * <h3>Details:</h3><table summary='Details'><tr><td align='right'>OData Service:</td><td>API_SALES_ORDER_SIMULATION_SRV</td></tr></table>
 * 
 */
public interface APISALESORDERSIMULATIONSRVService
    extends BatchService<APISALESORDERSIMULATIONSRVServiceBatch>
{

    /**
     * If no other path was provided via the {@link #withServicePath(String)} method, this is the default service path used to access the endpoint.
     * 
     */
    String DEFAULT_SERVICE_PATH = "/sap/opu/odata/sap/API_SALES_ORDER_SIMULATION_SRV";

    /**
     * Overrides the default service path and returns a new service instance with the specified service path. Also adjusts the respective entity URLs.
     * 
     * @param servicePath
     *     Service path that will override the default.
     * @return
     *     A new service instance with the specified service path.
     */
    @Nonnull
    APISALESORDERSIMULATIONSRVService withServicePath(
        @Nonnull
        final String servicePath);
}


    /*
     * Generated by OData VDM code generator of SAP Cloud SDK in version 3.7.0
     */

    package com.bosch.testvdm.services;

    import javax.annotation.Nonnull;
    import javax.inject.Named;
    import com.bosch.testvdm.namespaces.salesordersimulationsrv.batch.DefaultAPISALESORDERSIMULATIONSRVServiceBatch;


    /**
     * <h3>Details:</h3><table summary='Details'><tr><td align='right'>OData Service:</td><td>API_SALES_ORDER_SIMULATION_SRV</td></tr></table>
     * 
     */
    @Named("com.bosch.testvdm.services.DefaultAPISALESORDERSIMULATIONSRVService")
    public class DefaultAPISALESORDERSIMULATIONSRVService
        implements APISALESORDERSIMULATIONSRVService
    {

        @Nonnull
        private final String servicePath;

        /**
         * Creates a service using {@link APISALESORDERSIMULATIONSRVService#DEFAULT_SERVICE_PATH} to send the requests.
         * 
         */
        public DefaultAPISALESORDERSIMULATIONSRVService() {
            servicePath = APISALESORDERSIMULATIONSRVService.DEFAULT_SERVICE_PATH;
        }

        /**
         * Creates a service using the provided service path to send the requests.
         * <p>
         * Used by the fluent {@link #withServicePath(String)} method.
         * 
         */
        private DefaultAPISALESORDERSIMULATIONSRVService(
            @Nonnull
            final String servicePath) {
            this.servicePath = servicePath;
        }

        @Override
        @Nonnull
        public DefaultAPISALESORDERSIMULATIONSRVService withServicePath(
            @Nonnull
            final String servicePath) {
            return new DefaultAPISALESORDERSIMULATIONSRVService(servicePath);
        }

        /**
         * {@inheritDoc}
         * 
         */
        @Override
        @Nonnull
        public DefaultAPISALESORDERSIMULATIONSRVServiceBatch batch() {
            return new DefaultAPISALESORDERSIMULATIONSRVServiceBatch(this);
        }

    }

SAP Cloud SDK バージョン 3.3.1 で問題なく動作します。すべてのメソッドはサービスで生成されます。

ところで、バージョン 3.7 の一部の OData サービスで正常に動作するのは奇妙です。

4

1 に答える 1