SAP ABAP - 用户退出

  • 简述

    如果标准 SAP 提取器未提供预期数据或所需功能(例如授权或时间检查),则在提取中使用用户出口。用户出口通常用于销售和分销 (SD) 模块。SAP在销售、运输、运输和计费领域提供了许多出口。用户出口旨在当标准 SAP 无法满足所有要求时进行一些更改。
    为了能够访问每个销售区域中可用的出口,请使用以下路径转至 IMG:IMG → 销售和分销 → 系统修改 → 用户出口。SD 领域中每个出口的文档都有详细解释。
    例如,如果您想在销售单据处理(合同、报价单或销售订单)中查找用户出口,请按照上述路径继续展开“销售→用户出口”中的“用户出口”节点。单击图标文档可查看销售文档处理中可用的所有用户出口。
    序号 用户退出及说明
    1
    USEREXIT_FIELD_MODIFICATION
    用于修改屏幕属性。
    2
    USEREXIT_SAVE_DOCUMENT
    当用户点击“保存”时帮助执行操作。
    3
    USEREXIT_SAVE_DOCUMENT_PREPARE
    对于检查输入字段、在字段中输入任何值或向用户显示弹出窗口以及确认文档非常有用。
    4
    USEREXIT_MOVE_FIELD_TO_VBAK
    当用户标题更改移至标题工作区域时使用。
    5
    USEREXIT_MOVE_FIELD_TO_VBAP
    当用户项目更改移至 SAP 项目工作区域时使用。
    用户出口与客户出口具有相同的用途,但它们仅适用于 SD 模块。退出是作为对功能模块的调用来实现的。用户出口是对 SAP 标准程序的修改。
  • 例子

    
    REPORT ZUSEREXIT1. 
    TABLES:   
       TSTC, TSTCT,
       TADIR, TRDIR, TFDIR, ENLFDIR,
       MODSAPT, MODACT. 
       
    DATA:   
       JTAB LIKE TADIR OCCURS 0 WITH HEADER LINE,
       field1(30),
       v_devclass LIKE TADIR-devclass. 
       
    PARAMETERS:
       P_TCODE LIKE TSTC-tcode OBLIGATORY. 
       
    SELECT SINGLE *
       FROM TSTC
       WHERE tcode EQ P_TCODE. 
       
    IF SY-SUBRC EQ 0.
       SELECT SINGLE *
       FROM TADIR
       
       WHERE pgmid = 'R3TR' AND 
             object = 'PROG' AND
             obj_name = TSTC-pgmna.
          
       MOVE TADIR-devclass TO v_devclass.
       
       IF SY-SUBRC NE 0.
       SELECT SINGLE * 
          FROM TRDIR
          WHERE name = TSTC-pgmna.
          
       IF TRDIR-subc EQ 'F'.
          SELECT SINGLE *
             FROM TFDIR
             WHERE pname = TSTC-pgmna.
             
          SELECT SINGLE *
             FROM ENLFDIR 
             WHERE funcname = TFDIR-funcname.
             
          SELECT SINGLE * 
             FROM TADIR
             WHERE pgmid = 'R3TR' AND
                   object = 'FUGR' AND 
                   obj_name EQ ENLFDIR-area.
             MOVE TADIR-devclass TO v_devclass.
          ENDIF.
       ENDIF.
       
       SELECT *
          FROM TADIR
          INTO TABLE JTAB
          
          WHERE pgmid = 'R3TR' AND
                object = 'SMOD' AND
                devclass = v_devclass.
             
       SELECT SINGLE *
          FROM TSTCT
          WHERE sprsl EQ SY-LANGU AND
                tcode EQ P_TCODE.
             
       FORMAT COLOR COL_POSITIVE INTENSIFIED OFF.
       WRITE:/(19) 'Transaction Code - ', 
          20(20) P_TCODE,
          45(50) TSTCT-ttext.
       SKIP.
       
       IF NOT JTAB[] IS INITIAL.
          WRITE:/(95) SY-ULINE.
          FORMAT COLOR COL_HEADING INTENSIFIED ON.
          
          WRITE:/1 SY-VLINE, 
                2 'Exit Name',
                21 SY-VLINE , 
                22 'Description',
                95 SY-VLINE.
             
          WRITE:/(95) SY-ULINE.
          LOOP AT JTAB.
             SELECT SINGLE * FROM MODSAPT
             WHERE sprsl = SY-LANGU AND
                   name = JTAB-obj_name.
                
             FORMAT COLOR COL_NORMAL INTENSIFIED OFF.
             WRITE:/1 SY-VLINE,
                   2 JTAB-obj_name HOTSPOT ON,
                   21 SY-VLINE ,
                   22 MODSAPT-modtext,
                   95 SY-VLINE.
          ENDLOOP.
          
          WRITE:/(95) SY-ULINE.
          DESCRIBE TABLE JTAB.
          SKIP.
          FORMAT COLOR COL_TOTAL INTENSIFIED ON.
          WRITE:/ 'No of Exits:' , SY-TFILL.
          
       ELSE.
          FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
          WRITE:/(95) 'User Exit doesn’t exist'.
       ENDIF. 
    ELSE.
       FORMAT COLOR COL_NEGATIVE INTENSIFIED ON.
       WRITE:/(95) 'Transaction Code Does Not Exist'. 
    ENDIF.
     
    AT LINE-SELECTION.
       GET CURSOR FIELD field1.
       CHECK field1(4) EQ 'JTAB'.
       SET PARAMETER ID 'MON' FIELD sy-lisel+1(10).
       CALL TRANSACTION 'SMOD' AND SKIP FIRST SCREEN. 
    
    处理时,输入事务代码“ME01”并按 F8(执行)按钮。上面的代码产生以下输出 -
    交易代码'ME01