如何从参数化父CDS视图向参数化子CDS视图传递参数?
CDS视图层面实现父视图向子视图传递参数的方案
直接在CDS视图的关联定义中显式传递参数即可实现,无需通过控制器处理,具体方案如下:
核心实现思路
在父视图定义关联到子视图时,将父视图的输入参数直接传递给子视图的同名参数,确保子视图被父视图关联调用时能自动获取所需参数。
具体代码示例
父视图(列表报表用)
define view ZPARENT_VIEW with parameters @EndUserText.label: '父视图-列表报表数据源' p_bukrs : abap.char(4) as select from bseg as b { key b.bukrs, key b.belnr, key b.gjahr, b.budat, // 关联子视图并传递参数 association [1..*] to ZCHILD_VIEW( p_bukrs = @p_bukrs ) as _Child } where b.bukrs = @p_bukrs;
子视图(对象页面用)
define view ZCHILD_VIEW with parameters @EndUserText.label: '子视图-对象页面数据源' p_bukrs : abap.char(4) as select from bseg as b { key b.bukrs, key b.belnr, key b.gjahr, key b.buzei, b.dmbtr, b.hkont } where b.bukrs = @p_bukrs;
关键说明
- 确保父、子视图的参数名称和数据类型完全一致,否则会出现参数不匹配的报错。
- 关联定义中的参数传递语法为
子视图名( 参数名 = @父视图参数名 ),@符号用于引用父视图的输入参数。 - 在Fiori应用中,当从列表页面(父视图)跳转到对象页面时,框架会自动通过关联读取子视图数据,无需额外控制器逻辑处理参数传递。
报错处理
如果之前遇到"参数未提供"或"参数不匹配"类报错,检查以下两点:
- 父视图关联子视图时是否显式传递了所有必填参数;
- 父、子视图的参数类型、长度是否完全一致。
内容的提问来源于stack exchange,提问作者graukas
相关产品推荐
相关产品推荐

