ABAP SM30表维护程序字段自动赋值

背景

在表维护程序SM30的使用过程中,经常需要自动填充和修改一些值,比较常规的做法是修改屏幕逻辑流,但是如果重新激活了SM30,那么逻辑流就要重写,相对比较麻烦,之前接触过表维护程序中的‘事件’,经过研究得出以下方法

原理

事件编号 事件功能
01 保存前修改数据
05 创建数据时修改
21 退出单元格编辑时填充隐藏字段

步骤

1、生成表维护程序,建议做一个维护视图,设置字段read only

2、针对事件分别创建子例程(01事件中,注意变量total中的组件ACTION, 改字段用于标记条目的属性)

3、实现如下代码,可根据实际需求调整

本例的版本号ZZVER每修改一次,自增1,故在事件01中实现,其他字段用于实时记录前台,也可以写到01事件当中

*&---------------------------------------------------------------------*
*&  新增条目事件
*&----------------------------------------------------------------------
form sub_new_entry.

  assign component 'CREATED_BY' of structure <table1> to field-symbol(<fs_field>).
  if <fs_field> is assigned and <fs_field> is initial.
    <fs_field> = sy-uname.
    unassign <fs_field>.
  endif.

  assign component 'CREATED_ON' of structure <table1> to <fs_field>.
  if <fs_field> is assigned.
    <fs_field> = sy-datum.
    unassign <fs_field>.
  endif.

  assign component 'CREATED_AT' of structure <table1> to <fs_field>.
  if <fs_field> is assigned.
    <fs_field> = sy-uzeit.
    unassign <fs_field>.
  endif.

  "  assign component 'ZZVER' of structure <table1> to <fs_field>.
  "  if <fs_field> is assigned.
  "    <fs_field> = 1.
  "    unassign <fs_field>.
  "  endif.

endform.
*&---------------------------------------------------------------------*
*&  修改条目事件
*&----------------------------------------------------------------------
form sub_change_entry.

  "check sy-ucomm eq 'SAVE'.

  "  检查当前行是否为新增行
  read table total with key <f1_x>.
  check sy-subrc eq 0.
  assign component 'ACTION' of structure total to field-symbol(<fs_action>).
  if sy-subrc eq 0 and <fs_action> ne 'N'."不是新增行则继续 .

    assign component 'CHANGED_BY' of structure <table1> to field-symbol(<fs_field>).
    if <fs_field> is assigned.
      <fs_field> = sy-uname.
      unassign <fs_field>.
    endif.

    assign component 'CHANGED_ON' of structure <table1> to <fs_field>.
    if <fs_field> is assigned.
      <fs_field> = sy-datum.
      unassign <fs_field>.
    endif.

    assign component 'CHANGED_AT' of structure <table1> to <fs_field>.
    if <fs_field> is assigned.
      <fs_field> = sy-uzeit.
      unassign <fs_field>.
    endif.

    "    assign component 'ZZVER' of structure <table1> to <fs_field>.
    "    if <fs_field> is assigned.
    "      <fs_field> =  conv i( <fs_field> ) + 1.
    "      CONDENSE <fs_field>.
    "    endif.
  endif.

endform.
form sub_before_save.

  "自动版本号修改
  loop at zmdgv_dms_div_total.
    read table total index sy-tabix.
    assign component 'ACTION' of structure total to field-symbol(<fs_field>).
    if sy-subrc eq 0.
      check <fs_field> eq 'N' or <fs_field> eq 'U'.
    endif.

    if zmdgv_dms_div_total-zzver is initial.
      zmdgv_dms_div_total-zzver = 1.
    else.
      zmdgv_dms_div_total-zzver = zmdgv_dms_div_total-zzver + 1.
    endif.

    condense zmdgv_dms_div_total-zzver.
    modify zmdgv_dms_div_total.
  endloop.
endform.

备注

视图簇维护需要转换total变量,联系QQ:2212332116

猜你喜欢

转载自blog.csdn.net/u012232542/article/details/90925845