ABAP LEAVE用法

2024-03-10 21:20
文章标签 用法 abap leave

本文主要是介绍ABAP LEAVE用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LEAVE常用的语句:

CASE sy-ucomm."这个就是我们第七步中按钮的名字,也是第八步中定义的功能码变量的名字"WHEN 'BACK'."当功能码获取到的是BACK时"LEAVE TO  SCREEN 0.""退回到屏幕0WHEN 'EXIT'. "当功能码获取到的是EXIT时"LEAVE PROGRAM."退出程序"WHEN OTHERS.ENDCASE.


LEAVE PROGRAM. 退出整个程序
LEAVE TO TRANSACTION ta
LEAVE LIST-PROCESSING. 从list processor回到dialog processor
LEAVE TO LIST-PROCESSING 控制权从dialog processor转交给list processor
LEAVE { SCREEN | {TO SCREEN dynnr} }
LEAVE TO LIST-PROCESSING 是退出其他屏幕后,到List输入的屏幕,例如:WRITE 语句输入的屏幕。
LEAVE LIST-PROCESSING是在其他屏幕退出,到List输入屏幕间的动作。

实例:
IF S_MATNR[] IS INITIAL AND S_WERKS[] IS INITIAL AND
     S_BDTER[] IS INITIAL AND S_USNAM[] IS INITIAL AND
     S_RSNUM[] IS INITIAL AND S_KOSTL[] IS INITIAL AND
     S_AUFNR[] IS INITIAL.
    MESSAGE S000(ZMM) WITH ‘取数条件不能全部为空’ DISPLAY LIKE ‘E’.
    LEAVE LIST-PROCESSING.
  ENDIF.

ABAP 程序中退出操作(CHECK, EXIT, RETURN, LEAVE PROGRAM...)
CHECK.(SAP官方推荐只在循环中使用)
1)CHECK 后面要跟一个表达式,当表达式值为假(false)时,CHECK发生作用,退出循环(LOOP)或处理程序(Processing Block)。
2)如果CHECK出现在循环中,则发生作用时,退出的是当前一次循环操作,程序会继续执行下一次循环操作,其作用类似于Continue  
3)如果CHECK出现在循环以外,则发生作用时,退出的是当前执行的程序块(processing block),例如一个FORM,METHOD,或EVENT。
EXIT.
1) EXIT如果出现在循环中,退出的是整个循环操作,.程序会从循环结束处开始继续执行。
2)EXIT如果出现在循环之外,退出的是当前执行的程序块(processing block),例如一个FORM,METHOD,或EVENT,其作用与RETURN类似。
RETURN.
RETURN用来退出当前执行的程序块(processing block),例如一个FORM,METHOD,或EVENT,不管是否出现在循环(LOOP)中,RETURN都会退出当前执行的程序块,而不仅仅是退出循环。
虽然ABAP中EXIT 和RETURN都可以用来实现退出当前执行的语句块(PROCESSING BLOCK),但SAP的帮助文件建议只在循环中使用EXIT ,其他情况下要退出当前执行进程,使用RETURN 。
LEAVE PROGRAM.
LEAVE PROGRAM.  直接退出主程序。

12.21.1.      RETURN

RETURN用来退出当前执行的程序块,例如一个FORMMETHOD报表事件块,不管是否出现在循环(LOOP)中,RETURN都会退出当前执行的程序块,而不仅仅是退出循环(如果是在Form、METHOD中,只会退出Form、METHOD,不会退出Form、METHOD被调用所在的报表事件块,即退Form、METHOD后继续向被调用点后面执行)

12.21.2.      STOP

l  INITIALIZATION中的STOP会导致跳转到AT SELECTION-SCREEN OUTPUT事件块;

l  如果STOP在AT SELECTION-SCREEN OUTPUT块里,则只是退出当前块(STOP后面语句不执行而已),仅接着是显示选择屏幕;

l  AT SELECTION-SCREEN [ON]…选择屏幕事件块中的STOP也只是退出当前事件块,继续后面的事件块;

l  另外,即使STOP在循环中,还是在FORM,METHOD,也是直接从被调用的点退出所在事件块,而不仅仅只退出当前循环、FORM、METHOD,这与直接在事件块中的效果是一样的;

12.21.3.      EXIT

l  INITIALIZATION中的EXIT会导致跳转到AT SELECTION-SCREEN OUTPUT事件块;

l  如果EXIT在AT SELECTION-SCREEN OUTPUT块里,则只是退出当前块(EXIT后面语句不执行而已),仅接着是显示选择屏幕;

l  AT SELECTION-SCREEN [ON]…选择屏幕事件块中的EXIT也只是退出当前事件块,继续后面的事件块;

l  从START-OF-SELECTION开始往后的事件块,如果出现EXIT,则会开始listprocessor(列表处理),并跳转到相应的List输出界面(前提条件是要在退出前已经向屏幕输出内容了,否则也不会跳转);注:END-OF-SELECTION事件块也会被跳过

l  另外,如果EXIT在循环(DO、WHILE、LOOP)里,只是跳出当前循环而已

l  如果是在FORM,METHOD中,而非循环中,则退出当前的FORM、METHOD,其作用与RETURN类似

12.21.4.      CHECK

CHECK跳转的前提是<expr>为假时。

l  CHECK只是跳出当前事件块,继续下一个事件块的处理,相当于方法的return;

l  另外,如果CHECK在循环(DO、WHILE、LOOP)里,只是跳出当前循环而已

l  如果CHECK出现在循环以外,退出的是当前执行的程序块(processing block),例如一个FORM,METHOD,或EVENT。

12.21.5.      LEAVE

LEAVE PROGRAM退出整个程序

LEAVE TO TRANSACTION ta

LEAVE LIST-PROCESSING.          list processor回到dialog processor

LEAVE TO LIST-PROCESSING    控制权从dialog processor转交给list processor

LEAVE SCREEN | {TO SCREEN dynnr} }

12.21.5.1.           REJECT

REJECT是用在逻辑数据库GET event blocks中,与EXIT和CHECK不一样的是(EXIT和CHECK如果是在循环中时,只是退出循环;如果是在FORM中,则只是退出当前FORM),REJECT可以从循环或者一个FORM中直接跳出所在的GET事件块

REJECT [<dbtab>].

终结逻辑数据库当前节点数据行的处理

如果省略选项<dbtab>, 则逻辑数据库会自动读取同一节点的下一行数据,即同一节点的GET事件块会被触发。如果使用了<dbtab>选项,则逻辑数据库会读取节点<dbtab>的下一行数据,此时的<dbtab>节点必须是REJECT所在当前节点的上级节点。

区别CALL SCREEN/SET SCREEN/LEAVE TO SCREEN

1,CALL SCREEN XXXX将在Screen调用栈(CALL STACK)上面添加一层调用(进栈),调用XXXX的PBO和PAI,如果XXXX的Next Screen不为0,那么将继续其Next Screen的PBO和PAI,如此继续~~~当最后碰到Next Screen为0时,该层调用将从调用栈中退出(出栈),然后系统将继续执行CALL SCREEN XXXX之后的语句。

2,SET SCREEN XXXX,设置调用栈当前层次的Next Screen为XXXX,它并不影响调用栈的层数,除非XXXX为0,那将导致调用栈退掉一层(出栈)。要注意的是,PAI中SET SCREEN XXXX后的语句,系统将照样执行。只有执行完毕该PAI整个逻辑后,才考虑Next Screen的PBO和PAI。

3,LEAVE TO SCREEN与SET SCREEN比较类似,所不同的是,LEAVE TO SCREEN XXXX将强行中断当前SCREEN的PAI,直接执行XXXX的PBO和PAI。换言之,PAI中LEAVE TO SCREEN XXXX后的语句,系统将不会执行到。

在ABAP中,CALL TRANSACTION和SUBMIT report_name AND RETURN语句,也都是在调用栈上添加一层调用,与CALL SCREEN有点类似。而LEAVE TO TRANSACTION以及SUBMIT report_name则是在调用栈当前层次的一个跳转,与LEAVE TO SCREEN类似。

这篇关于ABAP LEAVE用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/795545

相关文章

C#中async await异步关键字用法和异步的底层原理全解析

《C#中asyncawait异步关键字用法和异步的底层原理全解析》:本文主要介绍C#中asyncawait异步关键字用法和异步的底层原理全解析,本文给大家介绍的非常详细,对大家的学习或工作具有一... 目录C#异步编程一、异步编程基础二、异步方法的工作原理三、代码示例四、编译后的底层实现五、总结C#异步编程

python3 gunicorn配置文件的用法解读

《python3gunicorn配置文件的用法解读》:本文主要介绍python3gunicorn配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python3 gunicorn配置文件配置文件服务启动、重启、关闭启动重启关闭总结python3 gun

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(

C#中DrawCurve的用法小结

《C#中DrawCurve的用法小结》本文主要介绍了C#中DrawCurve的用法小结,通常用于绘制一条平滑的曲线通过一系列给定的点,具有一定的参考价值,感兴趣的可以了解一下... 目录1. 如何使用 DrawCurve 方法(不带弯曲程度)2. 如何使用 DrawCurve 方法(带弯曲程度)3.使用Dr

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

pytorch之torch.flatten()和torch.nn.Flatten()的用法

《pytorch之torch.flatten()和torch.nn.Flatten()的用法》:本文主要介绍pytorch之torch.flatten()和torch.nn.Flatten()的用... 目录torch.flatten()和torch.nn.Flatten()的用法下面举例说明总结torch

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python

前端高级CSS用法示例详解

《前端高级CSS用法示例详解》在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一,随着前端技术的不断发展,CSS的用法也日益丰富和高级,本文将深... 前端高级css用法在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.