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

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十年铸器

给作者赏杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值