如何在函数模块中使用异常



我在ABAP很新,我尝试在ABAP中学习功能模块。我创建了一个函数并为其提供导入和导出的参数,TABLES 我也想在用户制作我不想要的东西时给他/她一个例外。

因此,我有两个导入参数,它们是: 这些行是"导入"和"导出"字段的列项。

i_x TYPE xx
i_type TYPE char2

我有 1 个表参数,即:

et_xx_sorted LIKE xx 'this is an exception'

我有 1 个例外行:

MAX_RECORD 'There is no record for this.'

我的源代码是:

 SELECT * INTO TABLE et_xx_sorted[] FROM xx WHERE yy = i_x.

当用户向i_x输入最大于我选择的边框时,我想使用我的异常行。我的意思是有数字 1 到 30 ,但我希望用户只能给出 1 到 20。他/她不能给20到30。如果有输入到 20 到 30,程序需要给出MAX_RECORD例外,并向用户说"没有记录"。

我用了:

IF sy-subrc <> 0.
    MESSAGE 'No record' TYPE 'E' RAISING MAX_RECORD.
  ENDIF.

但这不是我想要的。有一行 20 - 30,所以这个代码块不适用于我的边框项目。有 1 到 30 行,但用户只能看到 1 到 20 行。如果他/她给出 20 到 30,那么程序应该给出一个例外,我使用它确定进入例外字段。

我从你的话中了解到,我认为你可以做这样的事情来管理它;

IF i_x LT 20.  "less than
   SELECT * INTO TABLE et_xx_sorted[] FROM xx WHERE yy = i_x.
ELSEIF i_x GT 20.  "greater than
   MESSAGE 'No record' TYPE 'E' RAISING MAX_RECORD.
ENDIF.

希望它有帮助。

塔尔哈

基本上,

函数模块中有两种类型的抛出/捕获异常:

  1. RAISE <exception> .

  2. MESSAGE..... RAISING <exception> .

当您希望在调用程序中实现异常的手动处理时,使用第一种。第二个将处理传递给系统,基本上将其转换为消息。

它在实践中看起来如何?

第一种情况:在 FM 中声明异常后,我们像这样抛出它:

function my_func  
*"-----------------------------------------------  
*"*"Local interface:  
*"         IMPORTING  
*"               VALUE(i_x) TYPE xx
*"               VALUE(i_type) TYPE char2
*"         TABLES
*"               VALUE(et_xx_sorted) LIKE xx
*"         EXCEPTIONS  
*"               MAX_RECORD 
*"------------------------------------------------  
IF i_x GT 20.  "greater than
   RAISE MAX_RECORD.
ENDIF.

在调用程序中,我们像这样处理它

DATA(i_x) = 23.
call function 'MY_FUNC'   
 exporting   
  i_x = i_x
  i_type = 'type'  
 tables
  et_xx_sorted = itab
 exceptions     
  max_record = 1   
  others = 2.  
  
if sy-sybrc eq 0.   
 write: / ` Input ` && i_x && ` is correct`  
else.   
 write 'There is no record for this'.  
endif. 

第二种情况:我们甚至可能不会在调用程序中处理它,系统自己做。

回答您关于在 FM 接口中声明的短文本的问题:它不用于异常处理,仅用于记录目的。

查看有关功能模块中异常的文档:https://help.sap.com/saphelp_nw73/helpdata/en/d1/801f1c454211d189710000e8322d00/content.htm?no_cache=true

相关内容

  • 没有找到相关文章

最新更新