SM30相关操作

目录

SM30相关操作... 1

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

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

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

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

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

 


 

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

SM30相关操作

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

SE11创建表维护:

SM30相关操作

SM30相关操作

点击保存即可,

 

SE80可见生成的FunctionGroup

SM30相关操作

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

FMVIEW_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程序分配tcodeZLM_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 变量
*&---------------------------------------------------------------------*
DATAv_mode  TYPE char1,
      bdcdata 
LIKE bdcdata      OCCURS WITH HEADER LINE,
      messtab 
LIKE bdcmsgcoll   OCCURS WITH HEADER LINE.
DATAl_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实现的最后一种情况,请告诉我一声,我也学习学习,谢谢










http://blog.sina.com.cn/sapliumeng
原文地址:https://www.cnblogs.com/senlinmu110/p/3802130.html