ABAP学习


前言

提示:这里可以添加本文要记录的大概内容:

ABAP学习问题记录


提示:以下是本篇文章正文内容,下面案例可供参考

一、CHECK,STOP,CONTINUE,RETURN,EXIT,COMMIT

在循环中:(DO.WHILE.LOOP)
CONTINUE:
结束当前循环进行下一次循环
CHECK:
判断条件,不符合时结束当前循环进入下一次循环
EXIT:
结束整个循环,继续向下运行
RETURN:
退出当前的程序块

CTRL+O 跳转行

1.1 CHECK语句基于条件终止循环传递

(https://www.bbsmax.com/A/RnJW71ARJq/)
如果CHECK语句中的条件被计算为false,则忽略CHECK语句之后的语句块中的所有剩余语句,并且下一个循环开始。 CHECK语句中的条件可以是任何逻辑表达式。
CHECK跳转的前提是为假时。
l CHECK只是跳出当前事件块,继续下一个事件块的处理,相当于方法的return;
l 另外,如果CHECK在循环(DO、WHILE、LOOP)里,只是跳出当前循环而已;
l 如果CHECK出现在循环以外,退出的是当前执行的程序块(processing block),例如一个FORM,METHOD,或EVENT。

Report YH_SEP_15.  
DO 5 TIMES.  
CHECK SY-INDEX BETWEEN 3 AND 4.  
Write / SY-INDEX.  
ENDDO.

结果

3
4

1.2 RETURN

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

1.3 STOP

INITIALIZATION中的STOP会导致跳转到AT SELECTION-SCREEN OUTPUT事件块;
如果STOP在AT SELECTION-SCREEN OUTPUT块里,则只是退出当前块(STOP后面语句不执行而已),仅接着是显示选择屏幕;
AT SELECTION-SCREEN [ON]…选择屏幕事件块中的STOP也只是退出当前事件块,继续后面的事件块;
另外,即使STOP在循环中,还是在FORM,METHOD,也是直接从被调用的点退出所在事件块,而不仅仅只退出当前循环、FORM、METHOD,这与直接在事件块中的效果是一样的;

1.4 EXIT

INITIALIZATION中的EXIT会导致跳转到AT SELECTION-SCREEN OUTPUT事件块;
如果EXIT在AT SELECTION-SCREEN OUTPUT块里,则只是退出当前块(EXIT后面语句不执行而已),仅接着是显示选择屏幕;
AT SELECTION-SCREEN [ON]…选择屏幕事件块中的EXIT也只是退出当前事件块,继续后面的事件块;
从START-OF-SELECTION开始往后的事件块,如果出现EXIT,则会开始listprocessor(列表处理),并跳转到相应的List输出界面(前提条件是要在退出前已经向屏幕输出内容了,否则也不会跳转);注:END-OF-SELECTION事件块也会被跳过
另外,如果EXIT在循环(DO、WHILE、LOOP)里,只是跳出当前循环而已;
如果是在FORM,METHOD中,而非循环中,则退出当前的FORM、METHOD,其作用与RETURN类似

1.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} }

1.6 REJECT

REJECT是用在逻辑数据库GET event blocks中,与EXIT和CHECK不一样的是(EXIT和CHECK如果是在循环中时,只是退出循环;如果是在FORM中,则只是退出当前FORM),REJECT可以从循环或者一个FORM中直接跳出所在的GET事件块:
REJECT [].
终结逻辑数据库当前节点数据行的处理
如果省略选项, 则逻辑数据库会自动读取同一节点的下一行数据,即同一节点的GET事件块会被触发。如果使用了选项,则逻辑数据库会读取节点的下一行数据,此时的节点必须是REJECT所在当前节点的上级节点。

二、快捷键更改

在这里插入图片描述

三、图标红绿灯等

DATA ICON TYPE CHAR4
ICON = ‘@0A@’. "红灯图标
ICON = ‘@08@’. "绿灯图标
在这里插入图片描述

在这里插入图片描述

四、GUI状态

FORM FRM_SET_STATUS USING RT_EXTAB TYPE SLIS_T_EXTAB.

SET PF-STATUS ‘STANDARD’ . "定义GUI状态,添加应用工具栏按钮

ENDFORM. " FRM_SET_STATUS

调整模板
在这里插入图片描述
菜单栏为选择屏幕,
工具栏改为模板状态
在这里插入图片描述

五、LEAVE用法

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} }
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.

六、BDC MODE

BDC MODE 确定批输入的执行模式,有下面几个可选值:
DISMODE
调试时将MODE值从E改成A
在这里插入图片描述

七、ABAP内存

1、EXPORT … TO … 向MEMORY ID传入数据
2、IMPORT … FROM … 从MEMORY ID传出数据
3、使用CALL TRANSACTION/SUBMIT/CALL DIALOG等命令调用其他程序时,会生成内部会话并共享ABAP内存数据
4、FREE MEMORY ID,删除ABAP内存
注意:
(1)、ABAP中使用的MEMORY ID不用在表TPARA中创建,只要保证两个程序在内部会话中使用的MEMORY ID名称一致即可实现数据共享。
(2)、ABAP内存只存在于当前同一窗口中,不同窗口不能实现ABAP内存数据共享。(即上面两程序只能通过内部调用,在同一内部会话实现数据共享)。
(3)、可以在程序中使用语句“FREE MEMORY ID ‘ZMMID’.”删除ABAP内存。

八 、接口WEBSERVICE

接口结构如果更改了,去开发机SE80更新WEBSERVICE,发布请求,去测试机SICF事物代码,打开网页,删除服务和绑定,然后重新创建
在创建WebService的集团输入事物代码:SOAMANAGER,以下操作会因版本的不同而有所不同(或者SICF找APPL_SOAP_MANAGEMENT右键测试服务)
注意是否驼峰转换
可以使用SoapUI软件查看传参例程

九、增加描述之类不重要的字段

不要在最开头取值处LEFT JOIN 可能会造成数据变多重复
先FOR ALL ENTIRES IN 取值

  IF GT_DATA IS NOT INITIAL.
    SELECT BUKRS, BUTXT INTO TABLE @DATA(LT_T001) FROM T001 FOR ALL ENTRIES IN @GT_DATA
      WHERE BUKRS = @GT_DATA-BUKRS.
    SORT LT_T001 BY BUKRS.
ENDIF.
*再READ TABLE 赋值
    LOOP AT GT_DATA INTO GS_DATA.
      READ TABLE LT_T001 INTO DATA(LS_T001) WITH KEY BUKRS = GS_DATA-BUKRS BINARY SEARCH.
      IF SY-SUBRC = 0.
        GS_DATA-BUTXT = LS_T001-BUTXT.
      ENDIF.
      MODIFY GT_DATA FROM GS_DATA.
    ENDLOOP.
*表连接,先连接行项目表

十、LOOP和READ TABLE

read table只得到第一行 2,1,3 ->2;3,1,2->3。LOOP满足条件的所有值,11122->111条件等于1 会循环3次。
用BINARY SEARCH 二分法,前面表一定要排序不然会报错。并且排序顺序要对应

在这里插入图片描述

十一、切换屏幕的选择屏幕必输字段

不能用OBLIGATORY,
在这里插入图片描述

十二、权限

SAP权限对象一整套流程如下:
SE11:创建Domain/数据类型
SU20:创建权限字段(非必需,可用系统标准的,除非自定义)
SU21:创建权限对象
SE38:新建程序,引用权限对象
SE91:创建事务代码
下面两个一般是顾问操作
SU24:事务代码分配权限对象
SU01/PFCG:权限维护值
用户有各种角色,角色有各种权限对象,权限对象里有各种值

十三、OKCODE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值