S/4HANA Cloud SDK 是否支持获取元数据而不是 OData 的实际实体?

Does S/4HANA Cloud SDK support obtaining metadata instead of the actual entities for OData?

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

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

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

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

编辑:
用例是我的团队目前正在开发一个应用程序来检查和自动化从提供商到 S/4HANA 的数据迁移过程。如果从元数据中获取的配置与我们的最佳实践不一致,该应用程序将提示用户进行补救修复,这反过来可能会导致数据复制过程出现问题。这种配置是通过元数据而不是 OData API.

中的实体公开的

例如:如果客户想要将 FOCustomer 记录迁移到 S/4HANA,他或她可能想要设置 MaxLengthFormalName 属性 到 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,因为它似乎提供了一个更精简的解决方案。

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 对其进行解析。

目前我们不打算支持独立的元数据检索。 但是,如果您愿意,可以在我们的 public GitHub page 上提出问题,以便我们将来考虑这一点。

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