>我有一个具有多个关联的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 视图模型设计的好处(当不从网关消费时(并且我选择了太多数据。
不可能像这样做 SELECT。如果右键单击 CDS 视图,然后单击">显示 SQL CREATE 语句",则应将其视为常规数据库 SQL 视图。 如果您从关联中公开字段,则JOIN
。你打开SE11的@AbapCatalog.sqlViewName: 'YOURSQLVIEW'
,它是一个扁平的结构。
使用ASSOCIATION
而不是JOIN
进行 CDS 视图建模的好处之一是,如果将 CDS 作为数据源包含在网关项目中,则可以生成导航。 然后,您可以使用 URL 导航(如 zorderhdr/to_item(来获取所有项目,或者像zorderhdr/to_item(item_key)
一样获取一个项目。
还有一件事,对于事务性 CDS 视图,您可以通过使用ASSOCIATION
对节点层次结构进行建模来生成 BOPF 对象。
不幸的是,没有。
我认为您可以在 select 子句中使用_items~*
来解决所有_items
字段,但它就像一个平面的常规 JOIN。
(旁注:如果支持,您的概念可以很好地映射到 ABAP 网格(