SAP维护视图(Maintenance View)和视图簇(View Cluster)用法小结

表的维护视图是SAP系统中常用的一种技术,本篇博客介绍了维护视图的常见应用场景。

1 常用的事务代码
SE11  - ABAP Dictionary Maintenance (ABAP数据字典)
SE54 - Generate Maintenance Call (生成表维护对话)
SE55 - Table View Maintenance DDIC Call(表视图维护 DDIC 调用)
SM34 - View Cluster Maintenance Call (视图簇维护对话)
SM30 - Call View Maintenance (调用视图维护)
2 SAP表的维护方式
2.1 直接使用表维护
对于一张配置表,可以通过SE11 -> Utilities -> Table Maintenance Generator 或者直接使用事务代码SE55为它直接生成一个表维护,从而允许用户通过SM30可以直接维护这个表。

举例:SAP系统中的标准表T000就是通过这种方式直接生成的维护表。

对于没有特殊的authorization group的表维护,可以填写&NC&, 如果是test,可以选择local package,给定的function group名称如果在package不存在,在表维护的创建过程中会自动生成。

2.2 使用维护视图(Maintenance View)
当需要同时维护若干个有关联关系的表时,我们可以使用维护视图。最简单的一种例子就是对于文本表,例如可以查看V_T036, 其包含了表T036以及对应的文本表T036T。这样当用户在维护V_T036时,便会同时更新到对应的T036和T036T两个表中。

创建维护视图的方式是,SE11 --> View  --> Create,然后选择Maintenance View。

在生成Maintenance View后,可以设置具体的join condition以及view field (注:Maintenance View是Outer JOIN)。设置完成后,通过SE11 -> Utilities -> Table Maintenance Generator 或者直接使用事务代码SE55为它直接生成一个对话维护窗口。

关于维护视图,还有很多其他的应用场景,例如维护的对象主表只有一个,但可以通过join多个辅助的表为不同的字段提供关联的文本信息,进而辅助用户更好地维护。可以参考FQMV_BSEG_FT。

2.3 使用视图簇(View Cluster)
当维护有层级关系的多个表时,可以使用视图簇View Cluster。View Cluster可以将多个相关的Maintenance View集成在一起。

首先创建维护视图,然后通过SM34将有层级关系的视图组成视图簇。例如标准的view cluster VC_T009。

最终形成如下的效果 - 

2.4 维护视图的事件
标准的维护视图生成后,我们可以根据业务需求,增强维护视图的事件,已实现更丰富的功能。例如加入一些校验逻辑、填充一些默认字段等等。

为维护视图添加事件的事物代码为SE54.

对于某一个事件,可以开发自定义的FORM子程序,在子程序中实现业务逻辑。

举例,可以在before_save事件中,将新增的数据存到一个全局变量的gt_cust_table内表中。

FORM before_save.
  LOOP AT total.
    IF <action> = neuer_eintrag OR <action> = aendern.
      APPEND CORRESPONDING #( <vim_total_struc> ) TO gt_cust_table.
    ENDIF.
  ENDLOOP.
ENDFORM.
 
 然后在after_save事件中,基于这些数据做进一步的处理。

FORM after_save.
modify z_cust_table from gt_cust_table. 
ENDFORM.
 
 这个全局变量是定义在维护视图对应的Funtion Group的TOP文件中。

FUNCTION-POOL ztest_cfm           MESSAGE-ID sv.
 
DATA gt_cust_table TYPE ztest_t_table.
 
* INCLUDE LFINS_CFIN_CGLCTLD...              " Local class definition
INCLUDE lsvimdat                                . "general data decl.
INCLUDE lfins_cfin_cglctlt00                    . "view rel. data dcl.
或是其它场景,例如在before_delete事件中,做一些业务校验逻辑,以判断是否可以删除数据等等。

FORM before_delete.
  DATA lv_delete_row TYPE abap_bool.
 
  LOOP AT extract.
    IF <xact> <> neuer_eintrag AND <xmark> = markiert.
      <xmark> = nicht_markiert.
      MODIFY extract.
      lv_delete_row = abap_true.
    ENDIF.
  ENDLOOP.
 
  IF lv_delete_row = abap_true.
    MESSAGE 'you cannot delete entries' TYPE 'E'.
  ENDIF.
ENDFORM.
 具体每个事件的用法,可以查看SAP的标准文档https://help.sap.com/saphelp_nw73/helpdata/en/4d/d57dc3310c0f29e10000000a15822b/frameset.htm
————————————————
版权声明:本文为CSDN博主「SAP-nkGavin」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/nkGavinGuo/article/details/100887289

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值