2

我正在尝试将元数据获取到 OData 服务端点。我对实体本身不感兴趣,但对绑定到该特定实体的元数据不感兴趣。

我看到有一个useMetadata(Boolean boolean)方法,但它true默认设置为,它似乎没有做任何事情。

云连接sdk是否支持此功能?

我目前使用的库是com.sap.cloud.sdk.odatav2.connectivity.ODataQueryBuilder.

编辑:
用例是我的团队目前正在开发一个应用程序来检查和自动化从提供商到 S/4HANA 的数据迁移过程。如果从元数据中获得的配置与我们的最佳实践存在差异,该应用程序将提示用户进行修复,进而可能会在数据复制过程中造成麻烦。该配置通过元数据而不是 OData API 中的实体公开。

例如:如果客户想要将FOCustomer记录迁移到 S/4HANA,他或她可能希望将MaxLength属性FormalName设置为12,否则目标系统中的数据完整性可能会受到损害。我们对客户条目或实际在 中的内容不感兴趣FormalName,而是客户在源系统中设置的配置,它在 OData API 中作为元数据文档条目公开,例如:

<Property Name="name_defaultValue" Type="Edm.String" Nullable="true" sap:required="false" sap:creatable="true" sap:updatable="true" sap:upsertable="true" sap:visible="true" sap:sortable="true" sap:filterable="true" MaxLength="32" sap:label="Name"></Property>

在这种情况下,MaxLength设置为32而不是12将被记录并提交给客户以进行进一步操作。

我们之前为此使用过 Olingo。现在我们正在评估 S/4SDK,因为它似乎提供了一个更精简的解决方案。

4

1 回答 1

2

ODataQueryBuilder本身不支持独立的元数据检索。元数据仅在后台使用,因此useMetadata()对您的用例没有帮助。

但是,鉴于您已经设置了要从中检索元数据的目标,您可以执行以下操作(我的目标ErpQueryEndpoint在此示例中命名):

final String destinationUriString = DestinationAccessor.getDestination("ErpQueryEndpoint").getUri().toString();
final HttpClient httpClient = HttpClientAccessor.getHttpClient("ErpQueryEndpoint");
final URI uri = new URI(destinationUriString + "/sap/opu/odata/sap/NAME_OF_THE_API/$metadata");
final HttpResponse httpResponse = httpClient.execute(new HttpGet(uri));

这应该允许您检索 XML 格式的元数据。不过,您仍然需要使用 Olingo 解析它。

目前我们不打算支持独立的元数据检索。但是,如果您愿意,您可以在我们的公共 GitHub 页面上打开一个问题,以便我们将来考虑这个问题。

如果这回答了您的问题或者您还有其他问题,请告诉我!

于 2017-12-18T12:37:29.263 回答