[英]How to use exceptions in a function module?
我是 ABAP 的新手,我尝试在 ABAP 中学习功能模块。 我创建了一个函数并为其提供了 IMPORT 和 EXPORT,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 行,那么程序应该给出一个异常,我使用它在 EXCEPTIONS 字段中确定。
我从你的话中了解到我认为你可以通过这样的方式来管理它;
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.
希望它有帮助。
塔尔哈
基本上在功能模块中有两种类型的抛出/捕获异常:
RAISE <exception>
。
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.