SELECT 进入结构化 object 与 ABAP CDS 关联

SELECT into structured object with ABAP CDS associations

我有一个具有多个关联的 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

现在,我想 select 从单个订单的视图中得到类似这样的结果:

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..* 关联以确保建议的解决方案不会建议 select 一切,然后将 header 和位置减少到它们的结构中。我看到的问题是,对于复杂的 CDS 视图,我似乎需要处理所有与自定义代码的关联,就像我在普通 OpenSQL 中所做的那样,然后我就失去了 CDS 视图模型设计的好处(当不从网关使用时)我 select 数据太多了。

很遗憾,没有。

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

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

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

使用 ASSOCIATION 而不是 JOIN 的 CDS 视图建模的好处之一是,如果将 CDS 作为数据源包含到 Gateway 项目中,就会生成导航。那么您可以使用 URL 导航,例如 zorderhdr/to_item 来获取所有项目,或者像 zorderhdr/to_item(item_key) 来获取一项。

还有一件事,对于事务性 CDS 视图,您可以 generate a BOPF object 通过使用 ASSOCIATION 对节点层次结构建模。