ABAP4程序调试_Debug

合集下载

abap debug 技巧

abap debug 技巧

1. 静态menu/button设置debug: 用户相关如今的系统(因为debug是与系统有关的),屏幕上可以有两种类型的debug mode:当然,这两个break-point都是用户相关的,也就是说不同的用户是不会相互影响的。

(1)Set/Delete session break-point前一种:同一个logon session,也就是说,在同一个登录session中,它的状态是保持着的。

如下:先设置一个session break-point:设置break-point:然后再打开另一个session,同样看该program:发现该break-point仍然存在。

如果再重新登录,再打开该program:可以发现,break-point不见了。

(2)Set/Delete External break-point后一种:不同的logon session,范围大于(包括)前一种。

先设置一个session break-point和external breakpoint:然后再打开另一个session,同样看该program,发现该两个break-point仍然存在。

如果再重新登录,再打开该program,可以发现,只有external 的break-point存在了。

2. Coding中设置debug:用户无关与用户相关这里仅记录两个break-point以及break <User>:(1)Break-Point:用户无关Break-point:是与用户无关。

如在程序中定义:然后,执行会进入debug。

如果再换一个用户(非当前的用户),同样会进入到debug中去。

(2)Break <userID>:用户相关Break <userID>:是与用户相关。

如在程序中定义:然后,执行会进入debug。

如果再换一个用户(非当前的用户),则不会进入到debug中去。

3. Debug中操作(1)设置Watch Point在Debug中设置watch point主要是为了在debug中有条件地去执行程序,类似于在程序中设置了一道“门槛”,程序运行至此则停下来。

SAP debug的几种方式 -(转)

SAP debug的几种方式 -(转)

SA 这几1. 直这种2.ba 进入查找3.在在程4.正AP debug 几种debug 直接在程序种方式想必ackground 入SM37 查找到后打中在程序运行界程序的控制正在运行的程的几种方g 的方式有些序中设断点大家都知道d Job 的de 查找到自己想job 前面的界面进入d框输入/H ,程序进入d方式些是通过摸道了,在se ebug想要debug 的勾 然后在debug 运行程序debug 摸索得知,有e38里面打g 的后台程在控制框输入序的时候就会有些是参考打上breakp 程序,这里运入JDBG 回会进入deb 考别人的一些point,程序运运行完毕或回车,即进ug些分享,在运行到该处或者正在运行进入debug在这边做下即进入deb 行的均可进总结bug 模式进入debug进入即可5.ca 我们我们这里ses 6.sm 有些进入入sm50 找可进入Deb all function 们在 updat 们在debug 里面会有 u ssion 进行dm13 error 些时候我们入sm13可找到需要进入bugn in update te task 的 f gger 里面 路update deb debug message 在程序运行以找到相应入debug e task 的de function 里路径 settin bugging 选的debug行的时候会应的item 就的 process ebug里面设断点的ng-> Displa 选上以后 我会报一些upd 就可以进行s 然后点工的话 正常是ay/change 我们运行到date 的 er 行debug工具栏 Prog 是进不去d debugger update tas rror messa gram/Mode debug 的settingssk 的funct gee->program tion 后会自m->debugin自动开辟新ng 的。

ABAP4用户指南

ABAP4用户指南

BC ABAP/4 用户指南®版本 3.0目 录SAP专用术语及图标说明读者注意事项ABAP/4简介语法约定第一部分:ABAP/4基础第二部分:编写ABAP/4报表第三部分:编写ABAP/4事务SAP专用术语及图标说明惯例约定 是用于屏幕文本 你在屏幕上看到的单词和字母(包括系统提示信息、字段 名称、屏幕标题、菜单名称和菜单项目)。

用户输入 准确的用户输入。

你在键盘上键入的单词和字母要完全与文档中的相同。

<可变用户输入> 可变的用户输入。

尖括号表示你可以用适当的键盘输入替换这些变量。

全部大写 报表名、程序名、项目代码、表格名、 ABAP/4语言要素、文件名和目录。

书目标题与期它的书相互参照。

健 标键盘上的键。

通常功能键(例如 F2 和 ENTER 键)是用这种方式表示的。

一个具有处理过程信息的标题。

该标题描述了R/3的业务过程。

一个具有概念信息的标题。

用于明确你所需要的概念和背 景资料,以便完成一向业务过程。

读者注意事项ABAP/4 用户指南是关于 ABAP/4 编程语言的手册。

其目的在于· 向新的 ABAP/4 程序员提供从基本语言组件到复杂报表和事务编码的全面指导· 向资深 ABAP/4 程序员提供解决特殊问题的参考方案为满足这些需求,特提供一个整体概述并本指南分成三个部分,循序渐进,逐步深入 · ABAP/4 的基本组件· 如何编写报表程序· 如何编写事务ABAP/4 用户指南目的不在替换 ABAP/4 关键字文档。

可以通过如下方式调用该文档 · 从“ABAP/4 编辑器:初始屏幕”(事务 SE38)中选择“实用程序 -> ABAP/4 关键字文档 · 选择 ABAP/4 编辑器中的“帮助”· 将光标放在 ABAP/4 编辑器中的关键字上,然后按下 F1 键ABAP/4 用户指南的真正目的在于说明如何使用以及为何使用 ABAP/4 关键字。

abap debug的五种方式

abap debug的五种方式

abap debug的五种方式
ABAP Debug是一种用于调试SAP ABAP程序的工具。

下面是ABAP Debug 的五种方式:
1. Classic Debugger:Classic Debugger是ABAP Debug的最基本版本,它允许用户在程序中设置断点、单步执行代码、查看和修改变量值以及跟踪函数调用。

用户可以通过菜单选项或快捷键直接进入Classic Debugger。

2. New Debugger:New Debugger是ABAP Debug的新版本,它比Classic Debugger更加灵活和易于使用。

New Debugger可以在不改变程序代码的情况下动态修改变量值,还可以在运行时插入代码。

此外,New Debugger还提供了更多的调试选项和功能。

3. Debugging Workbench:Debugging Workbench是一个集成了Classic Debugger和New Debugger的调试工具。

它提供了更多的调试选项和功能,如调试程序的不同层次、跟踪执行路线、检查用户权限等。

4. ABAP Trace:ABAP Trace是一种跟踪ABAP程序执行过程的工具,它可以帮助用户识别程序中的性能瓶颈和错误。

用户可以通过设置不同的跟踪选项,对程序进行跟踪并生成详细的日志信息。

5. SQL Trace:SQL Trace是一种跟踪SAP系统中数据库操作的工具,它可以帮助用户优化SQL查询语句和提高系统性能。

用户可以通过设置不同的跟踪选项,对SQL查询进行跟踪并生成详细的日志信息。

SAP ABAP_4编程语法汇总(中文版)

SAP ABAP_4编程语法汇总(中文版)

SAP ABAP_4编程语法汇总(中文版)本文是由塞依教育编辑整理,了解更多SAP培训信息,请进入/news/一、Data Type (数据类型)C: 字符(串), 长度为1, 最大有65535 BYTES, 初始值为: space,例: ‘M’;D: 日期, 格式为YYYYMMDD, 最大是’9999/12/31’ ,例:’1999/12/03’.F: 浮点数, 长度为8, 例如: 4.285714285714286E-01I: 整数范围 :-2^31 ~ 2^31-1N: 数值组成的字符串: 011, ‘302’.P: packed 数,用于小数点数值,例如: 12.00542;T: 时间, 格式为HHMMSS,例如: ’14:03:00’, ’21:30:39’.X: 16进制数, 例如‘1A03’.二、变量宣告变量宣告包含name, length, type, structure等,语法如下:DATA <F> [<length>] <type> [<value>] [<decimals>]其中: <f> :变量名称,最长30个字符,不可含有 + , . , : ( ) 等字符;<length><type>:变量类型及长度;<value>:初值<decimals>:小数位数Example 1:DATA: COUNTER TYPE P DECIMALS 3,NAME (10) TYPE C VALUE ‘Delta’,S_DATE TYPE D VALUE ‘19991203’.Example 2:DATA: BEGIN OF PERSON,NAME(10) TYPE C,AGE TYPE I,WEIGHT TYPE P DECIMALS 2,END OF PERSON.另外,有关DATA宣告的指令还有: CONSTANTS(宣告常数)、STATICS(临时变量宣告).三、系统专用变量说明系统内部专门创建了SYST这个STRUCTURE,里面的字段存放系统变量,常用的系统变量有: SY-SUBRC : 系统执行某指令后,表示执行成功与否的变量,’0’表示成功SY-UNAME: 当前使用者登入SAP的USERNAME;SY-DATUM: 当前系统日期;SY-UZEIT: 当前系统时间;SY-TCODE: 当前执行程序的Transaction codeSY-INDEX : 当前LOOP循环过的次数SY-TABIX: 当前处理的是internal table 的第几笔SY-TMAXL: Internal table的总笔数SY-SROWS: 屏幕总行数;SY-SCOLS: 屏幕总列数;SY-MANDT: CLIENT NUMBERSY-VLINE: 画竖线SY-ULINE: 画横线附注:1.SAP的全称是: System Application Products in Data Processing;2.ABAP/4的全称是:Advanced Business Application Programming;3.ABAP/4的路径为:Tools → ABAP/4 WorkBench→ABPA/4 Editor ;4.ABAP/4每条语句以句号结束;5.ABAP/4中象= ,>, <,+,-,*,/等符号左右都需要有至少一个空格;6.整行注释用’*’号, 注释本行后面部分用’”’号;一. WRITE 语句ABAP/4用来在屏幕上输出数据的指令是WRITE指令,例如:WRITE: ‘USER NAME IS:’, SY-UNAME.二. 指定屏幕输出位置指定输出位置的语句格式为:WRITE: [AT] [ / ] [<pos>] [(<len>)] 资料项 [<par>]其中: / : 在下一行输出<pos>: 指定输出的行号;(<len>):指定输出位数(长度)<par>: 指定显示格式参数,参数有:LEFT-JUSTIFIED 资料靠左对齐CENTERED 数据靠中间对齐RIGHT-JUSTIFIED 资料靠右对齐UNDER <g> 正对在数据项<g>的下面显示NO-GAP 紧接着显示,不留空格USING EDIT MASK <m>: 使用内嵌子元显示, 如 12:03:20 USING NO EDIT MASK: 不使用内嵌子元NO-ZERO: 数字前面 0 的部分不显示NO-SIGN: 不显示正负号DECIMALS <d>: 显示 <d> 位小数EXPOENT <e>: F(浮点数)指数的值ROUND <r>: 四舍五入至小数点后<r>位CURRENCY <c>: 币别显示DD/MM/YY : 日期显示格式MM/DD/YY:YY/MM/DD:YY/DD/MMMM/DD/YYYY:DD/MM/YYYYYYYY/MM/DD:YYYY/DD/MM:例如1: WRITE: /10(6) ‘ABCDEFGHIJK’.输出结果为: ABCDEF例如2: DATA: X TYPE I VALUE ’11:20:30’,A(5) TYPE C VALUE ‘AB CDE’.WRITE: / X USING EDIT MASK ‘__:__:__’.WRITE: / X USING EDIT MASK ‘$___,___’.WRITE: / Y NO-GAP.输出结果为:11:20:30$112,030ABCDEF一. 显示图标:语法: WRITE: <symbol-name> AS SYMBOL.WRITE: <icon-name> AS ICON.例如: INCLUDE <SYMBOL>.INCLUDE <ICON>.WRITE: / ‘Phone symbol:’, SYM_PHONE AS SYMBOL.WRITE: / ‘Alarm Icon:’, ICON_VOICE_OUTPUT AS ICON.要查看系统所提供有那些符号及图标,可选择’EDIT’下的’Insert Statement’,选择’Write’,接下来选择要查看的群组,如SYMBOL 或ICON, 接下来按’Display’即可.§ INTERNAL TABLE一. Internal Table 的宣告ABAP/4中的Internal Table是一种Data Structure,类似于其它语言中的STRUTURE,它可以由几个不同类型的字段(field)组成,用来表示具有不同属性的某一事物,单独一笔资料表示某个事物,多笔数据表示具有相同属性的多个事物.例如:为了存取或记录某班的同学数据,我们创建如下的internal table:DATA: BEGIN OF STUDENT OCCURS 20,STD_ID TYPE N,NAME(10) TYPE C,AGE TYPE I,BIRTH TYPE D,SCORE TYPE P DECIMALS 2,END OF STUDENT.此时我们已经创建了名叫STUDENT的internal table,并且为它预先申请了能够存放20笔数据的Buffer(当然,如果存取数据不止20笔,程序执行时,会自动申请系统Buffer)Internal table 的定义有以下几种格式:格式一. DATA: BEGIN OF <internal table> OCCURS <n>,<field 1> TYPE <type1>,[<field 2> TYPE <type 2>,<field 3> TYPE <type 3>,… ]END OF <internal table>.格式二. TYPES: BEGIN OF <work area>,<field 1> TYPE <type1>,[<field 2> TYPE <type 2>,<field 3> TYPE <type 3>,… ]END OF <work area>.TYPES <internal table> TYPE <work area> OCCURS <n>.格式三. DATA: BEGIN OF <work area>.INCLUDE STRUCTURE <table name>.DATA: END OF <work area>.DATA: <internal table> LIKE <work area> OCCURS <n>.二. APPEND LINE格式: APPEND [<work area> TO ] <internal table>.举例一. (使用work area)DATA: BEGIN OF LINE,COL1 TYPE I,COL2 TYPE I,END OF LINE.DATA ITAB LIKE LINE OCCURS 10.DO 2 TIMES.LINE-COL1 = SY-INDEX.LINE-COL2 = SY-INDEX ** 2.APPEND LINE TO ITAB.ENDDO.LOOP AT ITAB INTO LINE.WRITE: / LINE-COL1, LINE-COL2.ENDLOOP.执行结果为:1 12 4举例二. (不使用work area)DATA: BEGIN OF ITAB OCCURS 10,COL1 TYPE I,COL2 TYPE I,END OF ITAB.DO 2 TIMES.ITAB-COL1 = SY-INDEX.ITAB-COL2 = SY-INDEX ** 2.APPEND ITAB.ENDDO.LOOP AT ITAB.WRITE: / ITAB-COL1, ITAB-COL2.ENDLOOP.执行结果与举例一相同.举例三. (加入另一个Internal table的元素)格式: APPEND LINES OF <itab1> [FROM <n1> ] [TO <n2>] TO <itab2>.将<itab1>的元素加入至<itab2>中,可选取自<n1>至<n2>的范围.APPEND LINES OF ITAB TO JTAB.三. COLLECT LINECOLLECT 指令也是将元素加入Internal table中,与APPEND 的区别是: COLLECT指令在非数值字段相同的情况下,将数值字段汇总.格式: COLLECT [<work area> INTO ] <itab>DATA: BEGIN OF ITAB OCCURS 3,COL1(3) TYPE C,COL2 TYPE I,END OF ITAB.ITAB-COL1 = ‘ABC’. ITAB-COL2 = 10.COLLECT ITAB.ITAB-COL1 = ‘XYZ’. ITAB-COL2 = 20.COLLECT ITAB.ITAB-COL1 = ‘ABC’. ITAB-COL2 = 80.COLLECT ITAB.此时, internal table中放的是2笔数据, 分别为:ITAB-COL1 ITAB-COL2‘ABC’ 90‘XYZ’ 20四. INSERT LINE将元素插入在指定的internal table位置之前.格式: INSERT [<wa> INTO] [INITIAL LINE INTO ] <itab> [INDEX <idx>]或者: INSERT LINES OF <itab1> [FROM <n1> TO <n2>] INTO <itab2> INDEX <idx>其中: <wa>即work area,工作区中的元素.[INITIAL LINE INTO] :插入一笔初始化的记录.<itab>: internal table[INDEX <idx>]: internal table 的记录号.(新加入的元素放在此记录前面)五. 读取internal table格式一:LOOP AT <itab> [INTO <wa>][FROM <n1> TO <n2>][WHERE <conditions>]<statement>ENDLOOP.格式二:READ TABLE <itab> [INTO <wa>] [INDEX <idx> / WITH KEY <conditions>]举例. (格式二)DATA: BEGIN OF ITAB OCCURS 10,COL1 TYPE I,COL2 TYPE I,END OF ITAB.DO 10 TIMES.ITAB-COL1 = SY-INDEX.ITAB-COL2 = SY-INDEX * 2.APPEND ITAB.ENDDO.READ TABLE ITAB INDEX 3.(或者: READ TABLE ITAB WITH KEY COL1 = 3.)WRITE: / ‘ITAB-COL1 = ‘, ITAB-COL1, ‘ITAB-COL2 = ‘, ITAB-COL2.执行结果同样是:ITAB-COL1 = 3ITAB-COL2 = 6.六. 修改internal table 中的值格式: MODIFY <itab> [FROM <wa>][INDEX <idx>][TRANSPORTING <f1><f2>…][WHERE <conditions>]举例一. READ TABLE ITAB INDEX 3.LINE-COL1 = 29.MODIFY ITAB FROM LINE TRANSPORTING COL1.将第三笔记录的COL1字段的值修改为29.举例二. T_SALARY – salary = 50.MODIFY T_SALARY TRANSPORTING salary WHERE birthday = ‘1999/12/06’.七. DELETE internal table中的字段格式: DELETE <itab> INDEX <idx>.或: DELETE <itab>[FROM <n1> TO <n2>] [WHERE <conditions>]八. Internal table 排序SORT <itab> [<order way>][BY <f1><f2>…]其中:<order way> 有DESCENDING 和ASCENDING, Default 为ASCENDING.<f1>: 为指定排序的字段.九. 加总SUM.总和计算存放与work area中,但只能在LOOP 中使用.例: LOOP AT ITAB INTO LINE.SUM.ENDLOOP.WRITE: / LINE-COL1, LINE-COL2.十. 初始化internal tableREFRESH <itab>. 清空<itab>中的值.CLEAR <itab>. 清空<itab>的Header Line.FREE <itab>. 释放记忆体空间.§屏幕输入命令在ABAP/4中要从屏幕输入变量, 使用的命令是 PARAMETERS 及SELECTION-OPTIONS:1. PARAMETER: 输入一个变量2. SELECTION-OPTIONS: 使用条件筛选画面来输入数据一. PARAMETERS 指令基本的输入命令, 类似如BASIC的INPUT命令, 但无法使用F格式(浮点数)语法:PARAMETERS <p> [DEFAULT <f>] [LOWER CASE][OBLIGATORY] [AS CHECKBOX][RADIOBUTTON GROUP <rad>]Example:PARAMETERS: NAME(8),AGE TYPE I,BIRTH TYPE D.执行结果:在日期的输入格式上为 MM/DD/YY , MM/DD/YYYY, MMDDYY或MMDDYYYY , 如输入 020165表 1965年02月01日, 与02/01/65的输入是一样的, 日期输入范围为公元1950年至2049年1.DEFAULT设定输入的默认值Example:PARAMETERS: COMPANY(20) DEFAULT ‘DELTA’,BIRTH TYPE D DEFAULT ‘19650201’.2. LOWER CASEABAP/4预设是将字符串输入值自动转换为大写, 加上此参数会将输入的数据转成小写,3. OBLIGATORY强制要求输入, 屏幕上会出现一个 ? , 使用者必须要输入才可.4. AS CHECKBOX输入 CHECKBOX的格式Example:PARAMETERS: TAX AS CHECKBOX DEFAULT ‘X’,NTD AS CHECKBOX.执行结果:5. RADIOBUTTON GROUP <rad>输入 RADIO BUTTON GROUP 的方式Example:PARAMETERS: BOY RADIOBUTTON GROUP SEX DEFAULT ‘X’,GIRL RADIOBUTTON GROUP SEX.执行结果:二. SELECT-OPTIONSSELECTION-OPTIONS所输入的值实际上是放在internal table中的,该Internal table 有四个字段,分别是:SIGN,OPTION,LOW,HIGH.. 条件筛选检查条件输入画面指令, 输入条件后可配合SELECT指令自TABLE读取符合条件的数据, 直接执行或放入 Internal Table中, 条件有四个参数:1. SIGN:I: 表筛选条件符合的资料E: 表筛选条件不符合的资料2. OPTION: 比较的条件符号EQ(等于),NE(不等于),GT(大于),LE(小于),CP(包含),NP(不包含)3. LOW: 最小值4. HIGH: 最大值语法:SELECT-OPTIONS <check-option> FOR <table-field>Example:TABLES SPFLI.SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID.将条件的输入值存放入 AIRLINE, 筛选选择为SPFLI中的CONNID字段执行结果:可直接输入起始范围或按下选择画面, 输入完后按下左上角的执行键三. 条件输入选择画面1.自Table中选取按下输入项的右边往下箭头, 叫出Table中数据项, 选取开始和结束的范围2.Selection Options按下”Selection options”按键, , 输入Option及 Sign参数内容, 屏幕如下:3.Multi-Options输入按下最右边的Multi-Options输入键, 输入条件选取的范围, 画面如下:条件输入完后按下”Copy”按键四. 改变条件输入格式1.DEFAULT <begin> TO <end>设定开始结束范围输入默认值Example:SELECT-OPTIONS AIRLINE FOR SPFLI-CONNIDDEFAULT ‘2042’ TO ‘4555’.2.NO-EXTENSION设定不要Multi-Option输入画面3.NO INTERVALS设定不要区间范围输入画面4.LOWER CASE输入转换成大写5.OBLIGATORY强制要求输入五. 配合 SELECT 命令条件输入完后要将符合条件的数据筛选出来, 可配合使用 SELECT 指令 1.使用WHERE <条件式>Example:SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID.SELECT * FROM SPFLI WHERE CONNID IN AIRLINE.WRITE: / CONNID,FROMCITY,TOCITY.ENDSELECT.2.使用CHECK参数Example:SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID.SELECT * FROM SPFLI.CHECK AIRLINE.WRITE: / CONNID,FROMCITY,TOCITY.ENDSELECT.3.使用 IF … IN 叙述Example:SELECT-OPTIONS AIRLINE FOR SPFLI-CONNID.SELECT * FROM SPFLI.IF SPFLI-CONNID IN AIRLINE.WRITE: / CONNID,FROMCITY,TOCITY.ENDIFENDSELECT.六. SELECTION-SCREEN1.产生空白列语法:SELECTION-SCREEN SKIP [<n>]Example:SELECTION-SCREEN SKIP 2.产生两列空白列2.产生底线语法:SELECTION-SCREEN ULINE / <pos>(length)Example:SELECTION-SCREEN ULINE /10(30).自第10格开始产生长度30的底线3.印出备注说明语法:SELECTION-SCREEN COMMENT / <pos>(length) <name>Example:REMARK = ‘Pls enter your name’.SELECTION-SCREEN COMMENT /10(30) REMARK.4. 同一列中输入数个数据项语法:SELECTION-SCREEN BEGIN OF LINE.……SELECTION-SCREEN END OF LINE.Example:SELECTION-SCREEN BEGIN OF LINE.SELECTION-SCREEN POSITION 20.PARAMETERS NAME(10).SELECTION-SCREEN POSITION 40.PARAMETERS BIRTH TYPE D.SELECTION-SCREEN END OF LINE.在20格输入NAME内容, 40格输入 BIRTH的内容5. 绘出BLOCK PANEL语法:SELECTION-SCREEN BEGIN OF BLOCK <block>[WITH FRAME [TITLE <title>].…….SELECTION-SCREEN END OF BLOCK <block>.Example:SELECTION-SCREEN BEGIN OF BLOCK RADIO WITH FRAME .PARAMETER R1 RADIOBUTTON GROUP GR1.PARAMETER R2 RADIOBUTTON GROUP GR1.PARAMETER R3 RADIOBUTTON GROUP GR1.SELECTION-SCREEN END OF BLOCK RADIO.§SQL语法我们在编写ABAP4程序的时候,经常需要从TABLE中根据某些条件读取数据,.读取数据最常用的方法就是通过SQL语法实现的.ABAP/4中可以利用SQL语法创建或读取TABLE,SQL语法分为DDL(DATA DEFINE LANGUAGE)语言和DML(DATA MULTIPULATION LANGUAGE)语言,DDL语言是指数据定义语言,例如CREATE等, DML语言是数据操作语言,例如SELECT, INSERT等语句. SQL语句有OPEN SQL语句和NATIVE SQL语句. OPEN SQL语句不是标准SQL语句,是ABAP/4语言,利用OPEN SQL语句能在Databases 和 Command 之间产生一个BUFFER,所以它有一个语言转换的过程.而NATIVE SQL语句则是标准的SQL语句, 它直接针对Databases操作.一. OPEN SQLOPEN SQL 语句包含有: SELECT,INSERT,UPDATE,MODIFY,DELETE,OPEN CURSOR, FETCH,CLOSE CURSOR,COMMIT WORK,ROLLBACK WORK等.1. SELECT语句语法格式:SELECT <result> [INTO <target>] [FROM <source>] [WHERE <condition>][GROUP BY <fields>] [ORDER BY <sort order>]其中: <result>指定要抓取的字段<target>将读取的记录存放在work area中<source>指定从那个TABLE中读取数据<condition>抓取资料的条件<fields>指定按那些字段分组<sort order>排序的字段及方式相关的系统变量:SY-SUBRC = 0 表示读取数据成功<> 0 表示未找到符合条件的记录SY-DBLNT: 被处理过的记录的笔数.相关的命令:EXIT. 退出循环.CHECK <logistic statement>.如果逻辑表达式成立,则继续执行,否则,开始下一次循环.◆.利用循环方式读取所有记录SELECT ….ENDSELECT.是循环方式读取记录的.例如:TABLES MARD.SELECT [DISTINCT] * FROM MARD WHERE MATNR = ‘3520421700’.<Statements>.ENDSELECT.(从MARD中抓取所有料号=3520421700的数据)◆读取一笔数据TABLES MARD.SELECT SINGLE * FROM MARD WHERE MATNR = ‘3520421700’.(从MARA中抓取一笔料号=3520421700的资料)◆将读取的记录放在work area中,并且加入Internal table 中.格式有:... INTO <work area>... INTO CORRESPONDING FIELDS OF <work area>... INTO (f1, ..., fn) 变量组.... INTO TABLE <internal table>... INTO CORRESPONDING FIELDS OF TABLE <internal table>... APPENDING TABLE <internal table>... APPENDING CORRESPONDING FIELDS OF TABLE <internal table>举例一:TABLES MARD.DATA: BEGIN OF ITAB OCCURS 10,MATNR LIKE MARD-MATNR,WERKS LIKE MARD-WERKS,LGORT LIKE MARD-LGORT,LABST LIKE MARD-LABST,END OF ITAB.SELECT MATNR WERKS LGORT LABSTINTO CORRESPONDING FIELDS OF ITABFROM MARDWHERE MATNR = ‘3520421700’.APPEND ITAB.CLEAR ITAB.ENDSELECT.(将读取的结果放在Internal table ITAB中)举例二.TABLES MARD.SELECT MATNR MTART MAKTX INTO (t_matnr, t_mtart, maktx)FROM MARDWHERE MATNR = ‘3520421700’.<Statements>.ENDSELECT.(从MARD中抓取料号=3520421700的料号、类型和描述,放在变量t_matnr, t_mtart, maktx中)。

最浅显易懂的SAPGUI里ABAP调试器的使用方法介绍

最浅显易懂的SAPGUI里ABAP调试器的使用方法介绍

最浅显易懂的SAPGUI里ABAP调试器的使用方法介绍ABAP调试器是SAPGUI中的一项重要工具,用于调试ABAP程序。

通过使用ABAP调试器,开发人员可以逐行执行程序并查看变量的值,以帮助他们找到程序中的错误和问题。

本文将介绍ABAP调试器的使用方法,并提供一些实用的调试技巧。

首先,我们需要打开ABAP调试器。

在SAPGUI的起始菜单中,选择"工具",然后选择"ABAP调试器"。

或者通过快捷键"Ctrl+Shift+F12"来直接打开ABAP调试器。

在调试器的控制面板中,我们将看到一些常用的按钮和选项。

以下是一些常用的按钮和选项的说明:1.执行按钮:点击此按钮,调试器将从当前光标所在的行开始执行程序,直到遇到断点或程序结束。

2.逐行执行按钮:点击此按钮,调试器将一次执行一行程序。

可以在每行程序执行时查看变量的值。

3.断点按钮:点击此按钮,调试器会在当前行设置一个断点。

在执行程序时,调试器将在达到断点时停止执行,以便我们查看当前的程序状态。

4.变量显示按钮:点击此按钮,调试器将显示当前程序中所有的变量及其值。

可以通过点击变量名称来查看更详细的变量信息。

5.调用堆栈按钮:点击此按钮,调试器将显示当前的调用堆栈。

调用堆栈显示了程序中所有被调用的函数和方法。

可以通过点击堆栈中的条目来查看更详细的函数和方法信息。

6.断点管理按钮:点击此按钮,调试器将显示当前程序中所有设置的断点。

可以通过点击断点条目来查看和修改断点的设置。

在使用ABAP调试器时,以下是一些实用的调试技巧:1.设置断点:在调试程序之前,我们可以在程序中设置断点。

断点将决定程序在何处停止执行。

通过点击源代码中的行号,我们可以在该行上设置一个断点。

2.智能断点:在一些情况下,我们可能只对程序执行的特定部分感兴趣。

在这种情况下,我们可以设置智能断点。

智能断点可以在程序中的特定条件满足时触发断点。

abap mir4操作流程

abap mir4操作流程

abap mir4操作流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。

文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor. I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!ABAP MIR4 操作流程如下:1. 登录系统:使用用户名和密码登录 ABAP MIR4 系统。

SAP debug的几种方式

SAP debug的几种方式

这几种debug的方式有些是通过摸索得知,有些是参考别人的一些分享,在这边做下总结1. 直接在程序中设断点这种方式想必大家都知道了,在se38里面打上breakpoint,程序运行到该处即进入debug模式2.background Job的debug进入SM37 查找到自己想要debug的后台程序,这里运行完毕或者正在运行的均可进入debug查找到后打中job前面的勾然后在控制框输入JDBG回车,即进入debug3.在程序运行界面进入debug在程序的控制框输入/H,运行程序的时候就会进入debug4.正在运行的程序进入debug进入sm50 找到需要进入debug的process 然后点工具栏Program/Mode->program->debuging 即可进入Debug5.call function in update task的debug我们在update task的function里面设断点的话正常是进不去debug的我们在debugger里面路径setting-> Display/change debugger settings 这里面会有update debugging 选上以后我们运行到update task的function 后会自动开辟新的session进行debug6.sm13 error message的debug有些时候我们在程序运行的时候会报一些update的error message 进入sm13可以找到相应的item 就可以进行debug双击我们需要的debug进去有个debug的按钮就可以进去debug了7.RFC的Debug在RFC所在系统用RFC连接所用的用户账号去设断点然后再进行debug就可以了8.针对一些弹出窗口的debug可能有时候我们程序运行过程中会出现一些弹出窗口没有输入/H的地方,但是我们要debug怎么办?新建一个txt文档内容如下,当我们需要debug某个窗口的时候直接把这个txt文档拖入对应窗口即可实现debug[FUNCTION]Command=/HTitle=DebuggerType=SystemCommand这边写日志有点累插入截图太累了。

SAP的ABAP4语言中文培训教材第三部分第三章处理错误和 消息

SAP的ABAP4语言中文培训教材第三部分第三章处理错误和 消息

第三章处理错误和消息概览内容错误处理简介.................................................................................................................................. 1检查屏幕字段的有效性.................................................................................................................... 2理解自动字段检查 ..................................................................................................................... 3检查屏幕流逻辑中的字段......................................................................................................... 3在ABAP/4 中检查字段 .............................................................................................................. 4检查单个字段 ............................................................................................................................ 4检查多个字段 ............................................................................................................................ 5有条件地调用模块........................................................................................................................... 6条件FIELD 语句........................................................................................................................ 6条件CHAIN 语句....................................................................................................................... 6避免自动字段检查........................................................................................................................... 7发布消息........................................................................................................................................... 7发送消息 ..................................................................................................................................... 8创建消息类.................................................................................................................................. 9创建消息 ..................................................................................................................................... 9当用户键入屏幕输入时,事务在使用此输入之前必须检查其是否合法。

SAP ABAP 的常用debug方式

SAP ABAP 的常用debug方式

SAP ABAP 的常用debug方式SAP ABAP 的常用debug方式:1. 直接在程序中设断点在se38里面打上breakpoint,程序运行到该处即进入debug模式2.background Job的debug进入SM37 查找到自己想要debug的后台程序,这里运行完毕或者正在运行的均可进入debug查找到后打中job前面的勾然后在控制框输入JDBG回车,即进入debug3.在程序运行界面进入debug在程序的控制框输入/H,运行程序的时候就会进入debug4.正在运行的程序进入debug进入sm50 找到需要进入debug的process 然后点工具栏Program/Mode->program->debuging即可进入Debug5.call function in update task的debug我们在update task的function里面设断点的话正常是进不去debug的我们在debugger里面路径setting-> Display/change debugger settings这里面会有update debugging 选上以后我们运行到update task的function 后会自动开辟新的session进行debug6.sm13 error message的debug有些时候我们在程序运行的时候会报一些update的error message进入sm13可以找到相应的item 就可以进行debug双击我们需要的debug进去有个debug的按钮就可以进去debug了7.RFC的Debug在RFC所在系统用RFC连接所用的用户账号去设断点然后再进行debug就可以了8.针对一些弹出窗口的debug可能有时候我们程序运行过程中会出现一些弹出窗口没有输入/H的地方,但是我们要debug怎么办?新建一个txt文档内容如下,当我们需要debug某个窗口的时候直接把这个txt文档拖入对应窗口即可实现debug[FUNCTION]Command=/HTitle=DebuggerType=SystemCommand。

ABAP调试器应用(比较详细)

ABAP调试器应用(比较详细)

ABAP 开发系列(02): ABAP Development Workbench 介绍(下)- ABAP 调试器8. Debugger –ABAP 调试器开发程序,调试器是必不可少的工具,而ABAP调试器与一般的IDE调试器也有些差异。

ABAP调试器的主要内容有:1. 进入Debugger模式的方法;2. Single Step/Execute/Return/Contiune 的用法;3. Watchpoint 的使用方法;4. 调试器的其他功能;8.1进入Debugger模式的方法8.1.1 通过内部断点我们可以通过ABAP编辑器中工具栏的会话断点按钮,来设置程序的断点,将光标停在待调试的程序行后,点击设置断点按钮,然后直接执行,程序就会停在我们设置断点的位置:提到内部断点,我们不得不说下另外一种断点外部断点。

顾名思义,外部断点用于我们提供给外部接口时的程序调试断点例如:Call RFC、Web Dynpro for Java。

而且只限于Call RFC的公共用户,且只保持2个小时有效。

外部断点位于内部断点的右边,添加外部断点后,断点标志是以头像的形式出现:激活调试后,当我们运行时,系统会新开一个调试会话窗口,也就是我们的调试界面:8.1.2 通过‘/h’命令(一般常用于生产环境)如果不想在程序里面去设置断点进行调试的话,我们进入程序运行初始屏幕后(输入T-Code后的屏幕界面),在命令域里面输入‘/h’, 来激活调试:当激活调试成功时,系统下边栏会弹出相关提示:这时当我们执行程序,则会进入到调试界面,只不过这里默认的断点位置是从程序的开头开始。

8.1.3 通过系统菜单在操作事务的屏幕界面上,也可以通过系统菜单(系统-> 实用程序-> 调试ABAP)激活调试:8.2 Single Step/Execute/Return/Continue 的用法调试界面工具栏上,我们可以看到这样几个工具按钮:从左到右分别是:Single Step(单步执行/F5)、Execute(执行/F6)、Return(返回/F7)、Continue(继续执行/F8)、Watchpoint(创建查看点/ Shift+F4)、Layout(布局)8.2.1Single Step 用法Single Step 也是我们常说的单步调试(快捷键:F5),这种方式都是以单步跟踪调试每一条程序;可以通过Single Step 来调试查看标准程序的操作。

abap debug技巧

abap debug技巧

abap debug技巧ABAP Debug技巧1. 概述ABAP Debug技巧是在ABAP开发中用于调试和定位错误的重要工具。

本文将介绍几种常用的ABAP Debug技巧,以帮助开发者快速定位问题并进行调试。

2. 断点调试•设置断点: 使用BREAK-POINT语句在代码中设置断点,当程序执行到该断点时会暂停执行。

例如:BREAK-POINT.•条件断点: 可以在断点设置时添加条件,只有满足条件时才会暂停执行。

例如:BREAK-POINT ID 'COND_BREAKPOINT' IFlv_variable = 'ABC'.•动态断点: 使用DYNAMIC BREAK-POINT语句在运行时设置断点。

例如:DYNAMIC BREAK-POINT 'Z_MY_PROGRAM''Z_MY_FORM'.3. 查看变量•使用WATCHPOINT语句: 在代码中设置WATCHPOINT以监视变量的值。

例如:WATCHPOINT lv_variable.当该变量的值发生变化时,程序会暂停执行。

•直接查看变量: 可以在断点暂停执行时,使用鼠标右键点击变量并选择“Display”或“Evaluate”,来查看变量的当前值。

•使用变量监视器: 在调试时,可以使用变量监视器来实时监视变量的值。

在调试视图的“监视”标签页中添加要监视的变量,并可以选择刷新频率。

4. 调试窗口•全局断点视图: 在调试时,可以点击“全局断点”视图查看已设置的断点,并可以控制是否激活或禁用特定的断点。

•断点列表视图: 在调试时,可以点击“断点列表”视图查看已设置的断点,并可以快速跳转到具体的断点位置。

•断点堆栈视图: 在调试时,可以点击“断点堆栈”视图查看当前堆栈的断点信息,并可以跳转到调用堆栈上一层的断点。

5. 运行时间调试•单步执行: 在调试时,可以逐行或逐过程执行代码,以便观察执行过程。

ABAP高级调试功能

ABAP高级调试功能
SAT 程序流分析 –追踪并行进程
ABAP运行时分析器 – 用户追踪
追踪并行会话很不错,但是… HTTP 请求 (佚名HTTP 用户) RFC请求(RFC用户)
需要ABAP用户追踪
后台作业或者别的用户启动的业务 - 开始的时间未知
© 2010 SAP AG. All rights reserved. / Page 30
ABAP运行时分析器 – SAT – 性能分析
© 2010 SAP AG. All rights reserved. / Page 34
ABAP运行时分析器 – 性能问题
策略
尽量多地限定跟踪文件 (

变式). 特别是运行时间很长的程序。否则很快超出文件大小限制。
启动跟踪要以“按调用”(by call)来合计(结果只有命中列表) 限定语句– 例如:仅模块 (functions, forms, methods …) 在第二次追踪中缩小分析范围,用以追踪使性能最差的模块 只跟踪在“Limitation on Program Components”中定义的模块。
?重用新调试器界面框架获得先进且灵活的界面?不产生本地追踪文件可通过系统所有服务器来访问中央追踪容器?提供便利的跳转功能例如从调用层次到命中列表等等在各个视图之间灵活切换?使用profiletool检查哪个包层程序占用最多时间?针对每条调用层次项均可访问其调用堆栈?除了详细的调用层次分析以外还提供了一个模块树工具用以显示调用堆栈的合计视图
3. ABAP 单元测试器– 生成测试单元对每个功能模块进行测试
4. 覆盖分析器 –通过测试确保程序里每个单元都被执行到
© 2010 SAP AG. All rights reserved. / Page 5

ABAPDebuggingScript(调试器脚本)使用的一些实际例子

ABAPDebuggingScript(调试器脚本)使用的一些实际例子

ABAPDebuggingScript(调试器脚本)使用的一些实际例子例子1:Use ABAP debugger script to view BOL entity content in an efficient wayIn CRM, if we could like to review a BOL entity content in debugger, for example consider the following sample code which fetches line item product of a given one order document:DATA: lo_collection TYPE REF TO if_bol_entity_col, l v_view_name TYPE crmt_view_name, lv_query_name T YPE crmt_ext_obj_name, ls_parameter TYPE genilt_query_ parameters, lt_query_parameter TYPE genilt_selection_param eter_tab, ls_query_parameter LIKE LINE OF lt_query_paramet er. ls_query_parameter-attr_name = 'OBJECT_ID'. ls_query_parameter-low = iv_oppt_id. ls_query_parameter-option = 'EQ'. ls_query_parameter-sign = 'I'. APPEND ls_query_parameter TO lt_query_parameter. ls_query_parameter-attr_name = 'PROCESS_TYPE'. ls_query_parameter-low = iv_process_type. ls_query_parameter-option = 'EQ'. ls_query_parameter-sign = 'I'. APPEND ls_query_parameter TO lt_query_parameter. so_core = cl_crm_bol_core=>get_instance( ). so_core->load _component_set( 'BT' ). lv_query_name = 'BTQ1Order'. DATA( lo_result) = so_core->dquery( iv_query_name = lv_ query_name is_query_parameters = ls_parameter i t_selection_parameters = lt_query_parameter iv_vie w_name = lv_view_name ). CHECK lo_result->size( ) = 1. DATA(lo_order_result) = lo_result->get_first( ). DATA(lo_bt_order) = lo_order_result->get_related_entity( 'BTADVS1Ord' ). CHECK lo_bt_order IS NOT INITIAL. DATA(lo_header) = lo_bt_ order->get_related_entity( 'BTOrderHeader' ). CHECK lo_heade r IS NOT INITIAL. DATA(lo_items) = lo_header->get_related_en tities( iv_relation_name = 'BTHeaderItemsExt' ). CHECK lo_item s->size( ) = 1. DATA(lo_item) = lo_items->get_first( ). DATA(l o_admini) = lo_item->get_related_entity( 'BTItemsFirstLevel' ). CHECK lo_admini IS NOT INITIAL. DATA(lo_product) = lo_admi ni->get_related_entity( 'BTItemProductExt' ).If you would like to review the content of lo_product, you have to:(1) double click container_proxy:(2) double click DATA_REF:(3) double click:(4) double click ATTRIBUTE_REF:(5) double click:So totally you need to perform FIVE times double click in order to review content:Using ABAP debugger script(1) Click Script tab:(2) Create a new script:Choose a name for your script:(3) Use the following source code to overwrite the default source code:*---------------------------------------------------------------------** CLASS lcl_debugger_script DEFINITION*---------------------------------------------------------------------***---------------------------------------------------------------------*CLASS lcl_debugger_script DEFINITION INHERITING FROM cl_tpda_script_class_super . PUBLIC SECTION. METHODS: prolog ue REDEFINITION, init REDEFINITION, script REDEFINIT ION, end REDEFINITION. INTERFACES: if_tpda_script_w_i nput, if_tpda_script_w_output. PRIVATE SECTION. DATA: en tity_name TYPE string. DATA: value TYPE string. DATA: outpu t TYPE tpda_transfer_it_unsorted. DATA: bol_object_name TYP E crmt_ext_obj_name. METHODS get_attribute IMPORTING io_oref_descr TYPE REF TO cl_tpda_script_orefdescr iv_attribute_name TYPE string RETURNING VALUE(ro_descr) TYPE REF TO cl_tpda_script_data_descr.ENDCLASS. " lcl_debugger_script DEFINITION*---------------------------------------------------------------------** CLASS lcl_debugger_script IMPLEMENTATION*---------------------------------------------------------------------***---------------------------------------------------------------------*CLASS lcl_debugger_script IMPLEMENTATION. METHOD prolo gue.*** generate abap_source (source handler for ABAP) super ->prologue( ). ENDMETHOD. "prolog METHOD if_t pda_script_w_input~get_parameters. DATA lt_input TYPE tp da_transfer_it. DATA ls_input TYPE tpda_transfer_struc. ls_ input-id = 'ENTITY'. APPEND ls_input TO lt_input. p_parameters_it = lt_input. ENDMETHOD. "if_tpda_script_w_input~ get_parameters METHOD if_tpda_script_w_input~set_paramete r_values.* Tabelle mit Inputparameter und Wert DATA lt_inpu t TYPE tpda_transfer_it. DATA ls_input TYPE tpda_transfer _struc. lt_input = p_parameter_values_it. LOOP AT lt_input IN TO ls_input. IF ls_input-id = 'ENTITY'. entity_name = ls_input-value. ENDIF. ENDLOOP. ENDMETHOD. "if_tpda_script_w_input~set_parameter_values METHOD init.*** insert y our initialization code here ENDMETHOD. "init MET HOD script. DATA lr_data_descr TYPE REF TO cl_tpda_script _data_descr. DATA lr_struct_descr TYPE REF TO cl_tpda_script _structdescr. DATA lr_cx TYPE REF TO cx_root. DATA l s_quick TYPE tpda_scr_quick_info. DATA lv_name TYPE string. DATA lt_struct TYPE tpda_scr_struct_comp_it. DATA ls_struct TYPE tpda_scr_struct_comp. DATA ls_ou tput TYPE tpda_transfer_struc. DATA lr_symbsimple T YPE REF TO tpda_sys_symbsimple. DATA ls_varinfo TYPE t pda_quick_vars. FIELD-SYMBOLS: <lv_value> TYPE any. TRY. CLEAR output.* BREAK-POINT. ls_varinfo = cl_tpda_script_data_descr=>get_variable _info( 'LO_PRODUCT' ).* get object type name IF ls_varin fo-varvalue = 'OBJECT'.* class instance passed directly lv _name = entity_name && '-CONTAINER_PROXY->DATA_REF->OBJECT_NAME'. ELSE.* variable of class instance passed lv_name = ls_varinfo-varvalue && '-CONTAINER_PROXY->DATA_REF->OBJECT_NAME'. ENDIF. ls_quick = cl_tpda_script_data_descr=>get_quick_info( lv_na me ). ASSIGN ls_quick-quickdata TO <lv_value>. lr_symbsimple ?= <lv_value>. bol_object_name = lr_symbsimple->valstring.* get content IF ls_varinfo-varvalue = 'OBJECT'. lv_name = entity_name && '-CONTAINER_PROXY->DATA_REF->ATTRIBUTE_REF->*'. ELSE . lv_name = ls_varinfo-varvalue && '-CONTAINER_PROXY->DATA_REF->ATTRIBUTE_REF->*'. END IF. lr_data_descr = cl_tpda_script_data_descr=>factory( lv_n ame ). lr_struct_descr ?= lr_data_descr. lr_struct_descr-> components( IMPORTING* p_components_it = p_components_full_it = lt_struct ). LOOP AT lt_str uct INTO ls_struct. ls_output-id = ls_struct-compname. TRY. ASSIGN ls_struct-symbquick-quickdata TO <lv_value>. lr_symbsimple ?= <lv_value>. ls_output-value = lr_symbsimple->valstring. CATCH cx_root INTO lr _cx. ls_output-value = lr_cx->get_text( ). ENDTRY. APPEND ls_outpu t TO output. ENDLOOP. DATA lt_col_alv TYPE tpda_script_service_source_tab. DATA ls_col_alv LIKE LINE OF lt_col_alv. ls_col_alv-fieldname = ls_col_alv-content = 'ID'. APPEND ls_col_alv TO lt_col_alv. ls_col_al v-fieldname = ls_col_alv-content = 'VALUE'. APPEND ls_col_alv TO lt_col_alv. CAL L METHOD cl_tpda_script_data_display=>data_display EXP ORTING p_list_header = 'Query Selection Parameters' p_column_it = lt_col_alv p_popup = 'X' CH ANGING p_data_it = output.* BREAK-POINT. CATCH cx_root INTO lr_cx. BREAK-POINT. "#EC NOBREAK value = lr_cx ->get_text( ). ENDTRY. ENDMETHOD. "script MET HOD end.*** insert your code which shall be executed at the en d of the scripting (before trace is saved)*** here ENDMETHOD. "end METHOD if_tpda_script_w_output~get_parame ter_values. DATA lt_param TYPE tpda_transfer_it_unsorted. D ATA ls_param TYPE tpda_transfer_struc. ls_param-id = 'VARIABLE'. ls_param-value = entity_name. APPEND ls_param TO lt_param. ls_para m-id = 'OBJECT_NAME'. ls_param-value = bol_object_name. APPEND ls_param TO lt_param. AP PEND INITIAL LINE TO lt_param. APPEND LINES OF output TO lt_param. p_parameter_values_it = lt_param. ENDMETHOD. "if_tpda_script_w_output~get_parameter_values METH OD get_attribute. DATA lr_oref_descr TYPE REF TO cl_tpda_s cript_orefdescr. DATA lr_object_descr TYPE REF TO cl_tpda_sc ript_objectdescr. DATA ls_varinfo TYPE tpda_quick_vars. DATA lv_longname TYPE string. DATA lt_attributes TYPE tp da_script_object_attribut_it. lr_oref_descr = io_oref_descr. lr _object_descr = lr_oref_descr->get_object_handle( ). lt_attribut es = lr_object_descr->attributes( ). ro_descr = lr_object_descr->get_attribut_handle( lv_longname ). ENDMETHOD. "get_oref_attributeENDCLASS. "lcl_debugger_script IMPLEMENTATIONOnce done, save the scrip t and choose “Execute Directly”.(4) Before you start Script by clicking button “Start Script”, make sure you use the correct variable name used in your ABAP code. In my example, it is “LO_PRODUCT”.Once done, click button “Start Script”: the BOL entity content is now automatically displayed, without five times double click any more.例子2:Use ABAP debugger script to view dynamic query service selection parameter in an efficient wayIn WebUI we can maintain search parameter for dynamic search:The value maintained in WebUI could be found fromdynamic query service instance in backend via debugging. Double click variable qs:We need the following FIVE steps to see the selection parameter value.(1) double click SELECTION_PARAM_COL:(2) Double click ENTITY_LIST:(3) These four entities represent the four selection parameters we see in WebUI. Double click one of them:(4) Double click PARAMETER_DATA:(5) double click:Finally we see the value:Use ABAP debugger script to directly review variable content without so many double clicks(1) Click Script tab, create a new Script:(2) Choose a name for your script:Paste the following source code to overwrite automatically generated source code:*---------------------------------------------------------------------** CLASS lcl_debugger_script DEFINITION*---------------------------------------------------------------------***---------------------------------------------------------------------*CLASS lcl_debugger_script DEFINITION INHERITING FROM cl_t pda_script_class_super . PUBLIC SECTION. METHODS: prolog ue REDEFINITION, init REDEFINITION, script R EDEFINITION, end REDEFINITION. INTERFACES: if_t pda_script_w_input. PRIVATE SECTION. DATA queryservice name TYPE string. CONSTANTS querydefaultname TYPE string VALUE 'QUERY_SERVICE'.ENDCLASS. "lcl_debugger_ script DEFINITION*---------------------------------------------------------------------** CLASS lcl_debugger_script IMPLEMENTATION*---------------------------------------------------------------------***---------------------------------------------------------------------*CLASS lcl_debugger_script IMPLEMENTATION. METHOD prolo gue.*** generate abap_source (source handler for ABAP) super ->prologue( ). ENDMETHOD. "prolog METHOD init. queryservicename = querydefaultname. ENDMETHOD. "init METHOD script. TYPES: BEGIN OF ty_selparam, attrname TYPE string, sign TYPE string, opti on TYPE string, low TYPE string, high TYPE stri ng, END OF ty_selparam. DATA lt_col_alv TYPE tpda_script_service_source_tab. DATA ls_col_alv like LINE OF lt_col_alv. DATA ls_selparam TYPE ty_selpar am. DATA lr_query_service TYPE tpda_quick_vars. DA TA lv_query_service_object_name TYPE tpda_var_name. DATA l v_selparamcol_object_name TYPE tpda_var_name. DATA lv_b o_object_name TYPE tpda_var_name. DATA lv_number_ of_selparam TYPE i. DATA lt_attr TYPE tpda_s cript_object_attribut_it. DATA ls_attr TYPE tpda_sc ript_object_attributes. DATA lt_selparam TYPE STAN DARD TABLE OF ty_selparam. DATA lr_attr TYPE R EF TO cl_tpda_script_data_descr. DATA lr_entity_list TY PE REF TO cl_tpda_script_tabledescr. DATA lr_obj_descr TYPE REF TO cl_tpda_script_objectdescr. REFRESH lt_selpara m. TRY. lv_query_service_object_name = cl_tpda_script_da ta_descr=>get_variable_info( queryservicename )-varvalue. lv_selparamcol_object_name = cl_tpda_script_data _descr=>get_variable_info( lv_query_service_object_name && '-SELECTION_PARAM_COL' )-varvalue. lr_entity_list ?= cl_tpda_script_data_descr=>factor y( lv_selparamcol_object_name && '-ENTITY_LIST' ). lv_number_of_selparam = lr_entity_list->line cnt( ). DO lv_number_of_selparam TIMES. lv_bo_object _name = cl_tpda_script_data_descr=>get_variable_info( lv_selpa ramcol_object_name && '-ENTITY_LIST[' && sy-index && ']-BO')-varvalue. ls_selparam-attrname = cl_tpda_script_data_descr=>get_simple_value( lv_bo _object_name && '-PARAMETER_DATA->ATTR_NAME' ). ls_selparam-option = cl_tpda_script_data_descr=>get_simple_value( lv_bo_o bject_name && '-PARAMETER_DATA->SIGN' ). ls_selparam-sign = cl_tpda_script_data_descr=>get_simple_value( lv_bo_obje ct_name && '-PARAMETER_DATA->OPTION' ). ls_selparam-low = cl_tpda_script_data_descr=>get_simple_value( lv_bo_obje ct_name && '-PARAMETER_DATA->LOW' ). ls_selparam-high = cl_tpda_script_data_descr=>get_simple_value( lv_bo_obj ect_name && '-PARAMETER_DATA->HIGH' ). APPEND ls_selparam TO lt_se lparam. ENDDO. REFRESH lt_col_alv. ls_col_alv-fieldname = ls_col_alv-content = 'ATTRNAME'. APPEND ls_col_alv TO lt_col_alv. ls_col_alv-fieldname = ls_col_alv-content = 'SIGN'. APPEND ls_col_alv TO lt_col_alv. ls_col _alv-fieldname = ls_col_alv-content = 'OPTION'. APPEND ls_col_alv TO lt_col_alv. ls_ col_alv-fieldname = ls_col_alv-content = 'LOW'. APPEND ls_col_alv TO lt_col_alv. ls_col_alv-fieldname = ls_col_alv-content = 'HIGH'. APPEND ls_col_alv TO lt_col_alv. CALL METHOD cl_tpda_script_data_display=>data_display EXP ORTING p_list_header = 'Query Selection Parameters' p_column_it = lt_col_alv p_popup = 'X' CH ANGING p_data_it = lt_selparam. CATCH cx_tpda_va rname cx_tpda_data_descr_invalidated cx_sy_move _cast_error cx_tpda_table_wrong_key cx_tpda_scrip t_no_simple_type cx_tpda_table_wrong_table_type. m e->raise_error( ). ENDTRY. ENDMETHOD. "script METHOD end.*** insert your code which shall be executed at th e end of the scripting (before trace is saved)*** here ENDMETH OD. "end METHOD if_tpda_script_w_input~get_para meters. DATA l_input TYPE tpda_transfer_struc. IF p_parame ters_it IS INITIAL. l_input-id = 'Query Service Variable Name'. l_input-value = querydefaultname. APPEND l_input TO p_paramete rs_it. ENDIF. ENDMETHOD. "if_tpda_script_w_input ~get_parameters METHOD if_tpda_script_w_input~set_paramet er_values. DATA l_input TYPE tpda_transfer_struc. READ TAB LE p_parameter_values_it INTO l_input INDEX 1. queryservicen ame = l_input-value. ENDMETHOD. "if_tpda_script_w_input~set_pa rameter_valuesENDCLASS. "lcl_debugger_script IMP LEMENTATIONSpecify the name of your query service variable in line 21. In my example, it is QS. Start script by clicking button “Start Script”:Now you see all four selection parameter value displayed inALV.。

abap 4 编程详解1(94页)

abap 4 编程详解1(94页)

ÕÂ 8: 创建和处理内表概览内容什么是内表 .......................................................................................... 8–2内表的目的 ...................................................................................... 8–3内表的结构 ...................................................................................... 8–4标识表格行 ...................................................................................... 8–5访问内表.......................................................................................... 8–6创建内表.............................................................................................. 8–9创建内表数据类型.......................................................................... 8–9创建内表数据对象...................................................................... 8–12使用内表 ........................................................................................ 8–17填充内表...................................................................................... 8–17读取内表...................................................................................... 8–388–1更改和删除内表行...................................................................... 8–58内表排序...................................................................................... 8–73创建次序表 .................................................................................. 8–79循环处理...................................................................................... 8–81比较内表...................................................................................... 8–88初始化内表 .................................................................................. 8–91本节讨论内表。

ABAP高级调试功能

ABAP高级调试功能

ABAP高级调试功能ABAP(Advanced Business Application Programming)是SAP系统中的编程语言,用于开发企业级应用程序。

在ABAP开发过程中,调试是一个非常重要的环节,它能帮助开发人员找到代码中的问题并进行修复。

ABAP提供了一些高级调试功能,使得调试过程更加方便和高效。

1.断点功能:ABAP可以在代码的一些位置设置断点,当程序执行到该位置时会暂停,开发人员可以查看当前变量的值、调用堆栈和其他相关信息。

断点可以在编程开发工具中手动设置,也可以在代码中使用语句设置。

2.跳转功能:在调试过程中,开发人员可以通过调试器工具中的"进入"、"步过"、"步出"等功能来控制程序的执行流程。

这些功能可以帮助开发人员在调试过程中遍历代码,并观察每一步的执行结果。

3.变量监视功能:在调试过程中,可以使用变量监视功能来跟踪特定变量的值。

开发人员可以选择要监视的变量,每当程序执行到一个断点时,变量监视功能会自动更新变量的值,并显示在监视窗口中,方便开发人员进行分析。

4.条件断点功能:在设置断点时,可以定义一个条件,当满足条件时才会暂停程序执行。

这个功能特别适用于需要在特定情况下才进行调试的场景。

例如,可以设置一个条件断点,只有在一些变量的值大于一些阈值时才会触发。

5.模拟功能:ABAP调试器还提供了模拟功能,可以在不影响实际数据的情况下测试特定代码的执行情况。

通过模拟功能,开发人员可以指定用于测试的输入数据,并验证代码的正确性。

6.远程调试功能:有时,开发人员可能需要在远程系统中调试ABAP程序。

ABAP调试器支持远程调试功能,通过与远程系统建立连接,开发人员可以在本地环境中调试远程系统中运行的ABAP程序。

这个功能方便了开发人员在分布式环境中进行调试。

7.事件断点功能:ABAP调试器提供了事件断点功能,可以在特定事件触发时暂停程序执行。

SAP程序调试和数据库跟踪指南

SAP程序调试和数据库跟踪指南

SAP程序调试和数据库跟踪指南目录1程序调试 (3)1.1用途 (3)1.2调试方法 (3)2数据库表跟踪 (5)2.1用途 (5)2.2追踪方法 (5)程序调试和数据表跟踪1 程序调试用途编译任何一个程序最基本的技能就是对程序的调试(Debugging)。

根据掌握的线索来推断是什么原因和过程导致了你所看到的结果,逐步调试直到获得期望的结果为止。

调试方法第一种:调试ABAP程序使用ABAP编译器(事务代码SE38)开发ABAP程序,或者Object Navigator(事务代码SE80)开发程序,操作方法相同。

ABAP编译器屏幕,激活程序,采取以下步骤设置调试断点:1. 选择要开始调试的代码行,把鼠标光标移动到该行,单击鼠标左键即可;2. 按"Session断点"按钮,即可实现插入断点,如图1-1所示.图1-1或者通过检查菜单项"Utilities"->Setting->ABAP Editor->Editor,编辑模式选择的是Front-End Editor(New),如图1-2所示。

图1-2则可以直接在要开始调试的代码行的序列号左边空白处单击左键即可。

如果要删除断点,对于Front-End Editor(New)编辑模式,只要双击程序行上的断点即可;对于非Front-End Editor(New)编辑模式的ABAP编辑界面,则选定插入断点的代码行,再按"Session断点"按钮,即可删除断点。

如果要管理程序里设置的所有断点,可以到菜单项"Utilities"->断点->显示,管理所有的断点,如图1-3所示。

图1-3对于增强、BADI和接口等程序,调试方法类似,通过相应的事务代码(如增强查看事务代码SMOD,BADI事务代码SE18/SE19)找到对应的程序代码,然后插入断点即可。

第二种:调试WEB应用程序如果需要调试一个Web应用程序,设置断点的步骤和设置ABAP程序断点完全相同,只是设置的不是Session断点,而是外部断点(External Breakpoint)。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
If needed, you can change the variable value: Change value in “Field contents”, pressed icon “Pencil” in the right-sight.
Pressed sub-screen “Table”.
You can see your internal table data here.
Four execution function key:
1.F5: Step by step: It will execute your program one statement by one statement.
2.F6: Execute: It likes F5 but it will treat a subroutine or a call function as a statement. If you don’t want to enter a subroutine, you can pressed “F6”.
Input your internal table name.
Pressed “Enter”
If your internal table length is long. You can press icon “Arrow” to see next field in your internal table.
You can set the breakpoint in debug mode. Double click the statement you want to stop.
You can double click the variable to display its value or you can input variable name then pressed “Enter”.
Pressed icon “Stop” to set breakpoint. The program will stopdslkfjdslkfj;ldsafjexecuting the statement.
You willlkdsjalfkjds;fljdslfmarked yellow colour.lskjdflkdsjf
Sdkjfldskfj
Dskfjds;lkf
The second way is input “/h” or “/H” in the command line (icon “Ticked” Right sight).
Pressed “Enter”.
System will debug your program from the beginning when you execute the program.
3.F7: Return: If you enter a subroutine, you want to leave and back to the main program which call the subroutine, you can use “F7”.
4.F8: Continue: The program will be executed until meets the breakpoint.
lfkjdslkfjdsfksjdf
How to debug the program?
There are two ways to debug your program.
dsfkdsjflkds
The first one is et breaksource code.ldskjfsldkfj
Move the cursosdlkfj;ldskfjr to the statement you want stop.
相关文档
最新文档