首页 > 其他分享 >使用 ABAP 代码查找系统可用的 user exit

使用 ABAP 代码查找系统可用的 user exit

时间:2023-07-01 15:14:38浏览次数:36  
标签:sy WRITE ABAP exit user Exit WHERE User

ABAP User Exit 是 SAP 系统中一种提供给客户扩展和修改标准程序的技术手段,这种机制允许客户在不修改 SAP 源代码的前提下,实现对标准程序的定制和功能增强。ABAP(Advanced Business Application Programming)是 SAP 的一种编程语言,用于开发企业级应用程序。在 SAP 系统中,有许多预先定义好的 User Exits,开发人员可以通过编写 ABAP 代码来使用这些 User Exits 实现特定功能。

下面将通过一个例子详细介绍 ABAP User Exit 的使用场景、实现方法和注意事项。假设我们所在的企业正在使用 SAP ERP 系统进行销售订单处理,但是在创建销售订单时,我们需要根据一些特定条件来自动修改客户的付款条件。虽然 SAP 系统提供了标准的业务逻辑和功能,但是在这个特定场景下,我们需要对标准程序进行定制,以满足企业的实际需求。在这种情况下,ABAP User Exit 就能够派上用场。

为了实现这个功能,我们需要遵循以下步骤:

1. 寻找合适的 User Exit

在 SAP 系统中,有许多预定义的 User Exits,我们需要找到一个合适的 User Exit 来实现我们的需求。在本例中,我们可以使用销售订单创建过程中的一个 User Exit:MV45AFZZ。这个 User Exit 允许我们在销售订单保存之前,对订单数据进行修改。

2. 编写 ABAP 代码

找到合适的 User Exit 后,我们需要编写 ABAP 代码来实现我们的定制功能。在本例中,我们需要根据特定条件自动修改客户的付款条件。假设当订单金额超过 10000 时,我们需要将付款条件修改为“预付款”。

首先,我们需要进入 ABAP 开发工具(SE80 或 SE38),然后打开 User Exit 对应的 ABAP 程序 MV45AFZZ。在这个程序中,我们需要找到一个合适的方法(FORM 或 FUNCTION MODULE)来实现我们的功能。在本例中,我们可以使用 USEREXIT_SAVE_DOCUMENT_PREPARE 方法。

接下来,我们需要在 USEREXIT_SAVE_DOCUMENT_PREPARE 方法中编写 ABAP 代码。代码示例如下:

FORM USEREXIT_SAVE_DOCUMENT_PREPARE.
  DATA: lv_net_value TYPE konv-kwert.
  LOOP AT xkomv WHERE kposn = '000000'.
    lv_net_value = xkomv-kwert.
  ENDLOOP.
  IF lv_net_value GT 10000.
    LOOP AT xvbak.
      xvbak-zterm = '预付款'.
      MODIFY xvbak.
    ENDLOOP.
  ENDIF.
ENDFORM.

以上代码首先计算了订单的净价值(lv_net_value),然后根据净价值是否大于 10000 来修改付款条件。

使用下列代码查找系统里可用的 user exit:

*&---------------------------------------------------------------------*
*& Report  ZFINDEXIT
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*

REPORT  ZFINDEXIT.
TABLES : tstc, tadir, modsapt, modact, trdir, tfdir, enlfdir.
TABLES : tstct.
DATA : jtab LIKE tadir OCCURS 0 WITH HEADER LINE.
DATA : field1(30).
DATA : v_devclass LIKE tadir-devclass.

SELECTION-SCREEN : BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
PARAMETERS : p_tcode LIKE tstc-tcode OBLIGATORY.
SELECTION-SCREEN : END OF BLOCK b1.


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) 'No User Exit exists'.
  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.

标签:sy,WRITE,ABAP,exit,user,Exit,WHERE,User
From: https://www.cnblogs.com/sap-jerry/p/17519304.html

相关文章

  • 使用纯 ABAP 开发 SAP UI5 应用(一):abap2UI5 开发环境搭建介绍
    我从SAP社区博客上了解到一个开源项目,名叫abap2UI5,作者是OblomovDev,这是Github项目地址:https://github.com/abap2UI5/abap2UI5这个项目最吸引ABAP开发人员之处在于:传统的ABAP搞定一切:仅仅依靠最基础的传统ABAP编程语言,就可以开发并运行SAPUI5应用。不需要......
  • 使用 ABAP 正则表达式提高字符串解析的执行效率
    在ABAP(AdvancedBusinessApplicationProgramming)中,正则表达式(RegularExpressions)是一种强大的工具,可用于处理字符串和文本数据。正则表达式可以帮助您执行各种任务,如查找和替换文本、验证输入格式或拆分字符串。本文将介绍在ABAP中使用正则表达式的几种方法。使用CL_ABAP......
  • 解决:远程连接mysql:报异常,1044 - Access denied for user ‘root‘@‘%‘ to database
    Navicat报错:使用Navicat远程连接,Docker中的mysql5.6时报异常,:1044-Accessdeniedforuser'root'@'%'todatabase'xxx'问题原因:(1)根本原因:远程连接用户权限不足!(2)直接原因:应该是创建远程连接用户‘root@%’时,没有添加访问数据库的权限。解决办法:#这里为刚才创建的root@......
  • 介绍Hibernate使用UserType - 51CTO.COM
     介绍Hibernate使用UserType这里介绍Hibernate使用UserType,UserType就是用户自定义类型,这里的类型指的是除了Hibernate定义的那些类型之外的用户自己定义的。AD: Hibernate有很多值得学习的地方,这里我们主要介绍Hibernate使用UserType,包括介绍UserType就是用户自定义类型......
  • SAP ABAP 动态结构实现发送企业微信应用消息
    企业微信官方接口:应用支持推送文本、图片、视频、文件、图文等类型。请求方式:POST(HTTPS)请求地址: https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=ACCESS_TOKEN 大概思路:1.封装调用企业微信函数SE37:ZWECHAT_SEND_MESSAGE_MSGTYPE 注:   a.  ......
  • mac 使用 brew安装包报错 fatal: not in a git directory,Error: Command failed with
    在mac下使用brew安装包的时候,最后一行会报错:fatal:notinagitdirectoryError:Commandfailedwithexit128:git导致包安装不成功,解决办法:brew-v 绿色框就是提示你需要做的,输入gitconfig--global--addsafe.directory/opt/homebrew/Library/Taps/homeb......
  • ABAP git 安装指南
    abapGit有2种版本:独立版本或开发版本。standalone版本:面向最终用户。它由一个(巨大的)程序组成,其中包含所有所需的代码。用户在事务SE38中运行独立版本,执行创建的程序。开发者版本:面向为abapGit代码库做出贡献的开发者。它由所有ABAP程序/类/接口/等组成。开发人......
  • 如何找到 ABAP pricing procedure 的 requirement
    在pricingprocedurecustomizing中,我们可以为每种条件类型定义一个需求(例程)编号。需求用于以编程方式控制条件类型是否可以参与条件确定。2意味着Itemwithpricing.如何找到2routing对应的实现?事务码VOFM,Requirement->Pricing:点击F5:KOMP-KPOSN:condition......
  • 使用 New Bing 学习 SAP ABAP 生成 PDF 的几种技术
    本文还是围绕SAPABAP生成PDF这个话题来写。Jerry之前的公众号文章每日一个ChatGPT使用小技巧系列之3-利用角色扮演提高ChatGPT回复的质量发布之后,有朋友反馈,ChatGPT在回答如何给ABAPPDF添加水印这个问题时,表现不尽如人意。我试了一下,确实如此,所以先人工写了......
  • 实际案例分析 - 根据应用程序日志的记录,反查出哪一行 ABAP 代码产生的这条日志试读版
    本文的写作动机来自笔者知识星球一个朋友的提问:调用bapi创建主数据的时候报错,没有未物料组分配特性参数文件,这个是什么原因?实际查看,特性文件已经生成了这个朋友提供的是应用程序日志(即ApplicationLog)里的截图。关于应用程序日志的详细用法,笔者之前的文章已经做过介绍。......