我正在尝试获取OData服务端点的元数据。我不感兴趣的是实体本身,而是元数据绑定到这个特定的实体。
我看到了一个useMetadata(Boolean boolean)方法,但默认情况下它被设置为true,它似乎什么也不做。
云连接sdk支持这个特性吗?
我目前使用的库是com.sap.cloud.sdk.odatav2.connectivity.ODataQueryBuilder。
编辑:
用例是,我的团队目前正在开发一个应用程序来检查和自动化从提供者到S/4HANA的数据迁移过程。如果从元数据中获得的配置显示与我们的最佳实践不符,则应用程序将提示用户进行补救修复,进而可能会在数据复制过程中造成麻烦。该配置是通过元数据而不是OData API中的实体公开的。
例如,:如果客户希望将FOCustomer记录迁移到S/4HANA,他或她可能希望将FormalName属性的MaxLength设置为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,后者将被记录下来并提交给客户进行进一步的操作。
我们以前用过奥林戈。现在我们正在评估S/4SDK,因为它似乎提供了一个更精简的解决方案。
发布于 2017-12-18 12:37:29
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页面上打开一个问题,所以我们将来可能会考虑这个问题。
如果这回答了你的问题,或者你还有更多的问题,请告诉我!
https://stackoverflow.com/questions/47832168
复制相似问题