2

我有一个具有多个关联的 CDS 视图:

define view ZORDER as select from ZORDERHDR as orderHdr
association [0..1] to ZORDER_LOCATION as _location on _location.orderID = orderHdr.orderID
association [0..*] to ZORDER_ITEM as _items on _items.orderID = orderHdr.orderID
association [0..*] to ZORDER_PARTNER as _partners on _partners.orderID = orderHdr.orderID

现在,我想从视图中选择一个订单并得到如下结果:

TYPES: BEGIN OF t_order,
         header TYPE zorderhdr,
         location TYPE zorder_location,
         items TYPE zorder_items, "This is a table type
        END OF t_order.

是否有一个 SELECT 语句可以将所有订单读入上面的嵌套结构中?

编辑:我添加了第二个 0..* 关联,以确保建议的解决方案不建议选择所有内容,然后将标题和位置减少到它们的结构。我看到的问题是,对于复杂的 CDS 视图,我似乎需要处理与自定义代码的所有关联,就像我在使用普通 OpenSQL 时所做的那样,然后我失去了 CDS 视图模型设计的好处(当不从网关消费时)我选择了太多数据。

4

2 回答 2

2

像这样做 SELECT 是不可能的。如果您右键单击 CDS 视图,然后单击“显示 SQL CREATE 语句”,您应该将其视为常规数据库 SQL 视图。JOIN如果您公开关联中的字段,则可以这样做。你@AbapCatalog.sqlViewName: 'YOURSQLVIEW'SE11打开,它是一个扁平的结构。

CDS 视图建模的好处之一是,如果您将 CDS 作为数据源包含到网关项目ASSOCIATIONJOIN,则会生成导航。然后您可以使用像 zorderhdr/to_item 这样的 URL 导航来获取所有项目或喜欢zorderhdr/to_item(item_key)获取一项。

还有一件事,对于事务性 CDS 视图,您可以通过使用ASSOCIATION.

于 2019-09-03T10:11:09.970 回答
2

抱歉不行。

_items我认为您可以在 select 子句中处理with的所有字段_items~*,但这就像一个普通的普通 JOIN。

(旁注:如果支持,您的概念将很好地映射到ABAP 网格)

于 2019-09-02T15:23:31.713 回答