0
点赞
收藏
分享

微信扫一扫

SM30相关操作

腊梅5朵 2022-10-12 阅读 127


目录

SM30相关操作... 1

前提条件:创建的表必须支持表维护... 1

一、建立表维护,维护数据... 1

二、使用FM调用表维护,维护数据... 3

三、创建Tcode维护表维护... 4

四、使用BDC实现有限制条件的表维护... 7







前提条件:创建的表必须支持表维护



​​

SM30相关操作_数据

​​​



一、建立表维护,维护数据

SE11创建表维护:

​​

SM30相关操作_数据

​​​
​​

SM30相关操作_数据

​​

点击保存即可,


SE80可见生成的FunctionGroup

​​

SM30相关操作_数据

​​

二、使用FM调用表维护,维护数据

FM:VIEW_MAINTENANCE_CALL

代码如下:

​​

SM30相关操作_数据

​​

其他参数自己查看FM,必输如上:

执行结果如下:

​​

SM30相关操作_数据

​​

其中,action是只模式,显示/修改/传输

具体取值范围可以参考函数描述:

​​

SM30相关操作_数据

​​

显示如下:



​​

SM30相关操作_数据

​​



三、创建Tcode维护表维护

前台业务是不能直接sm30维护数据的,所以需要给他们创建tcode,

也会为此tcode分配权限,方便管控


Se93

​​

SM30相关操作_数据

​​​
​​

SM30相关操作_数据

​​
​​

SM30相关操作_数据

​​

此页最下方(需要回车一下,这个帮助才起作用
​​​

SM30相关操作_数据

​​​
​​

SM30相关操作_数据

​​

一般只需要维护这两个参数

​​

SM30相关操作_数据

​​

保存即可

输入tcode回车直接进入,

​​

SM30相关操作_数据

​​

如果不勾选跳过第一个屏幕,执行结果是 :

​​

SM30相关操作_数据

​​



四、使用BDC实现有限制条件的表维护

调用维护视图时其实是有三种模式的:

​​

SM30相关操作_数据

​​

无限制

限制


变式



有时候需要对维护的数据进行控制,可使用第二种,Eenter conditions



​​

SM30相关操作_数据

​​

然后进入如下:

选择控制条件:


​​

SM30相关操作_数据

​​


只维护公司码为20的数据:


​​

SM30相关操作_数据

​​



​​

SM30相关操作_数据

​​





但是如果使用tcode或者调用FM方式控制显示数据我没有实现,

所以我就是用了BDC录屏:(录屏单独去介绍,这里不赘述

代码见最后,效果如下:



​​

SM30相关操作_数据

​​​



特别注意的是:

点击返回时,进入的不是刚才的选择屏幕,而是:



​​

SM30相关操作_数据

​​

为解决此,

我给刚bdc程序分配tcode:ZLM_SM30_BDC

在视图函数组中


添加了一个自定义的module: mdl_get_command

​​

SM30相关操作_数据

​​

下面代码仅仅是简单范例,到时候需要考虑的有多个tcode

sy-ucomm = ende 或者 = abr 或者= okay 或者 = back等等的



​​

SM30相关操作_数据

​​


L_mm从内存里取值,(bdc程序里赋值),这里控制的是:

如果是在bdc程序里调用的SM30,则直接返回bdc程序,

如果其他情况调用sm30,则不受这个影响即不调回到BDC程序






BDC程序如下:

*&---------------------------------------------------------------------*
*& Report  ZLM_TEST_SM30_BDC
*&
*&---------------------------------------------------------------------*
*&使用bdc调用带有控制的SM30表维护
*&---------------------------------------------------------------------*

REPORT  zlm_test_sm30_bdc.

*&---------------------------------------------------------------------*
*&  "BDC 变量
*&---------------------------------------------------------------------*
DATA: v_mode  TYPE char1,
      bdcdata LIKE bdcdata      OCCURS 0 WITH HEADER LINE,
      messtab LIKE bdcmsgcoll   OCCURS 0 WITH HEADER LINE.
DATA: l_mm    TYPE flag VALUE 'X'.
*&---------------------------------------------------------------------*
*&  "选择屏幕
*&---------------------------------------------------------------------*
PARAMETERS:p_cmcode TYPE zmm00t_y_078-comcode.

START-OF-SELECTION.

  EXPORT l_mm  TO MEMORY ID 'M1'.

  PERFORM frm_sub_bdc USING p_cmcode.

*&---------------------------------------------------------------------*
*&  "BDC FORM区
*&---------------------------------------------------------------------*
FORM frm_sub_bdc USING p_cmcode TYPE zmm00t_y_078-comcode.

  PERFORM bdc_dynpro      USING 'SAPMSVMA' '0100'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'VIMDYNFLDS-LTD_DTA_AR'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=UPD'.
  PERFORM bdc_field       USING 'VIEWNAME'
                                'ZMM00T_Y_078'.                   "视图名称
  PERFORM bdc_field       USING 'VIMDYNFLDS-LTD_DTA_NO'
                                ''                .               "无限制模式赋值为空,或者不要这句话
  PERFORM bdc_field       USING 'VIMDYNFLDS-LTD_DTA_AR'
                                'X'                .              "限制模式为X
  PERFORM bdc_dynpro      USING 'SAPLSVIX' '0210'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'MARK_CHECKBOX(06)'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=OKAY'.
  PERFORM bdc_field       USING 'MARK_CHECKBOX(02)'
                                'X'.                              "控制条件选第二个复选框(COMCODE)
  PERFORM bdc_dynpro      USING 'SAPLSVIX' '0100'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'D0100_FIELD_TAB-UPPER_LIMIT(02)'.
  PERFORM bdc_field       USING 'BDC_OKCODE'
                                '=OKAY'.
  PERFORM bdc_field       USING 'D0100_FIELD_TAB-LOWER_LIMIT(01)'
                                p_cmcode.                       "限制条件值下限(LOWER_LIMIT)还可以添加上限制(UPPER_LIMIT)
  PERFORM bdc_dynpro      USING 'SAPLZMM00T_Y_078' '0001'.
  PERFORM bdc_field       USING 'BDC_CURSOR'
                                'VIM_POSITION_INFO'.
  CALL TRANSACTION 'SM30' USING bdcdata
                    MODE 'E'  MESSAGES INTO messtab.             "这里必须使用E类型

*A  显示所有屏幕
*E  显示错误
*N  后台的处理
*P  后台处理;可以调试

ENDFORM.                    "sub_bdc



"BDC 相关

*----------------------------------------------------------------------*
*        Start new screen                                              *
*----------------------------------------------------------------------*
FORM bdc_dynpro USING program dynpro.
  CLEAR bdcdata.
  bdcdata-program  = program.
  bdcdata-dynpro   = dynpro.
  bdcdata-dynbegin = 'X'.
  APPEND bdcdata.
ENDFORM.                    "BDC_DYNPRO

*----------------------------------------------------------------------*
*        Insert field                                                  *
*----------------------------------------------------------------------*
FORM bdc_field USING fnam fval.

  IF fnam = 'BDC_OKCODE' AND fval = '/EBACK'.
    LEAVE TO SCREEN 0.
  ENDIF.
  CLEAR bdcdata.
  bdcdata-fnam = fnam.
  bdcdata-fval = fval.
  APPEND bdcdata.

ENDFORM.                    "BDC_FIELD



如果哪位不是使用bdc实现的最后一种情况,请告诉我一声,我也学习学习,谢谢




























举报

相关推荐

0 条评论