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

相关文章

golang panic 函数用法示例详解

《golangpanic函数用法示例详解》在Go语言中,panic用于触发不可恢复的错误,终止函数执行并逐层向上触发defer,最终若未被recover捕获,程序会崩溃,recover用于在def... 目录1. panic 的作用2. 基本用法3. recover 的使用规则4. 错误处理建议5. 常见错

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

Python中多线程和多进程的基本用法详解

《Python中多线程和多进程的基本用法详解》这篇文章介绍了Python中多线程和多进程的相关知识,包括并发编程的优势,多线程和多进程的概念、适用场景、示例代码,线程池和进程池的使用,以及如何选择合适... 目录引言一、并发编程的主要优势二、python的多线程(Threading)1. 什么是多线程?2.

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT

数据库使用之union、union all、各种join的用法区别解析

《数据库使用之union、unionall、各种join的用法区别解析》:本文主要介绍SQL中的Union和UnionAll的区别,包括去重与否以及使用时的注意事项,还详细解释了Join关键字,... 目录一、Union 和Union All1、区别:2、注意点:3、具体举例二、Join关键字的区别&php

oracle中exists和not exists用法举例详解

《oracle中exists和notexists用法举例详解》:本文主要介绍oracle中exists和notexists用法的相关资料,EXISTS用于检测子查询是否返回任何行,而NOTE... 目录基本概念:举例语法pub_name总结 exists (sql 返回结果集为真)not exists (s

Springboot中Jackson用法详解

《Springboot中Jackson用法详解》Springboot自带默认json解析Jackson,可以在不引入其他json解析包情况下,解析json字段,下面我们就来聊聊Springboot中J... 目录前言Jackson用法将对象解析为json字符串将json解析为对象将json文件转换为json