SAP ABAP 问题探索:维护视图的选择条件(Maintenance views Selection conditions)

简介: 在维护视图中设置选择条件过滤数据(Maintenance views Selection conditions),这个功能比较少用,但今天要用的时候发现不生效,鼓捣了一阵才知道原因,特以此文章记录。

关键字:SAP ABAP 维护视图/选择条件 Selection conditions


1 问题描述

在开发一个含有物料编码主键的配置表时,维护视图关联了 MARA 和 MAKT ,设置了物料描述视图字段,期望通过维护视图的选择条件页签将 MAKT~SPRAS 的条件值固定为 E 英文。

  • 维护视图
    在这里插入图片描述
  • 选择条件
    在这里插入图片描述
  • 执行效果
    在这里插入图片描述
    执行效果不是期望的。

2 问题结论

维护视图的选择条件仅对视图主表的字段起过滤作用,对关联表的字段不起过滤作用。
赶时间的读者可以不阅读以下探索部分。

3 问题探索

3.1 搜索指证资料

资料搜索关键字:Maintenance views Selection conditions ,selection criteria

  • 在百度和必应上没找到有用的资料。
  • F1 文档也没直接的相关说明
    在这里插入图片描述
    在这里插入图片描述
  • 在 SAP SUPPORT 上也没找到有用资料
    在这里插入图片描述
    在这里插入图片描述

3.2 第 1 种猜想和验证

维护了视图字段才能在选择条件生效。此猜想验证失败,记录如下,
我在视图字段页签下增加了 SPRAS ,保持上述截图的选择条件设置。
在这里插入图片描述
维护数据测试失败。

3.3 第 1 种猜想和验证

视图主表的字段才能在选择条件生效。此猜想验证成功,记录如下,
我找到了一个有意思的函数 VIEW_FILL_WHERETAB ,
在这里插入图片描述
Debug 进入,
在这里插入图片描述
外层调用堆栈,可以看到选择条件用于主表查询,
在这里插入图片描述
他的数据关联查询机制不是直接关联查询,而是分别查询。

4 思维发散

  • 为什么使用分别查询而不是关联查询?
    我记得 ABAP 视图中的连接都是默认 INNER JOIN ,如果使用 INNER JOIN 关联查询,那么 where condition 就可能导致无法查到数据结果,这个问题在我们写报表程序的 GET DATA 部分也是常考虑问题,写其他 SQL 查询时也是,如 CDS 开发。
  • 印证了 F1 文档
    在这里插入图片描述
  • 我的疑问:选择条件页签中,应该检查或提醒不允许输入关联表?又或者还有我没探索到的内容?(本次探索到这里截止。)有答案的读者欢迎私信指教我。

其他

我的微信群、QQ群和其他发布平台。

长期提供开发和运维服务。

Logo

一站式 AI 云服务平台

更多推荐