ABAP培训资料
- 格式:ppt
- 大小:2.74 MB
- 文档页数:46


Fixed data objects(固定数据对象)Literal:文字例:”hello world”Constant: 常量使用constants 可以定义ABAP常量, 注:常量第一次被赋值后,就不能再更改Data object(数据对象)包括变量literal文字constant常量Value assignments(赋值)早期赋值:使用关键字 move A to B 进行赋值 (类似于汇编语言)新赋值: A = B 注: “=”左右要各有一个空格注:常量在定义期间就需要赋值.Calculation (计算)早期运算:使用关键字 compute新运算:不使用关键字computeSbc400focc是数据字典中的结构体,表示占坐率.Arithmetic expression nested 可以互相嵌套重点:“/”与 div区别:1.“/”运算后结果被四舍五入2.Div运算后的结果可以取整但不四舍五入Strlen方法可以计算字符串长度 length = strlen ( cityfrom ) Conditional branching(条件分支)分支语句包括: 单分支,多分支.单分支:if多分支:case 注: case后要跟变量,跟常量没有意义.注意:分支语句中的每一条语句必须以”.”作为语句结束,并使用endif / endcase作为分支语句结束.If三种句式If c1St1EndifIf c2St2Endif……n执行结果最少为0 最多为1St1Elseif c2Str2…nEndif.执行结果最少为0 最多为1If c1St1Elseif c2St2…nElse……Endif.有且只有1个结果执行老师包名:ZBC400_200ZBC400_200_01 – 08老师的包Loops(循环)循环一共分5种Do [ n times ] […].Stat.Enddo.Stat.If <abort_condition>Endif.Enddo.While(logical_expression).S1.Endwhile.Loop at …Stat.Endloop.Select …Stat.Endselect.loop counter :sy-index (计数器)Sy-index 是全局结构体变量注:只适用do和while循环,不适用于select和loop循环注意:在abap程序中没有boolean类型, C(1)可以用来判断正误,‘X’代表正确循环退出关键字Exit:退出循环Check:后面跟条件,当满足条件时,退出循环注:在非easy access中需要使用/h + tcode来结束当前屏幕进入目标屏幕. Dialog messages(会话消息)Messaga(消息 )作用: 给用户提示消息,可以弹出窗口,也可以显示在状态栏中(由message type 控制)Message tnnn ( message_class )[ with v1 [ v2 ] ….]Tnnn: 消息类型 nnn是三位消息的编号Message class: 消息类型(理解为消息的包)中括号中作用传送变量Type类型S:status message 程序不中断显示在状态栏I:information 程序先中断在执行模态窗口显示W:warming ----context dependent状态条显示E:error ---context dependent 状态条显示A:termination 模态窗口显示X short dump 把堆栈倒出来便于调试.modal模态弹出对话框以后,该窗口会占据所有的焦点(不能点其它窗口).而在非模态中,可以随意切换窗口.几种中断的区别:interruption中断(计算机中断),但不结束程序termination, 终止结束程序abort 退出程序,异常退出exit 退出循环带参数传递的消息每次执行程序的时候可以传递参数在message 编辑界面中的 text 栏里加 &1-&n ,也可以加多个,用空格隔开ABAP Debugger作用:跟踪内存变量的变化右键点击程序execute – debugging 进入调试界面Abap调试工具分为老版本和新版本版本切换切换debugger – switch to classical debugger 转换版本Single step 执行单步Return 如果进入一个子程序 , 直接返回Run 直接到下一个断点用鼠标双击语句设定断点双击变量或结构体可以查看值半路杀入法在进入一个selection screen中后在command film 中输入 /h再运行就是debug状态Structure结构体定义结构体主要有两种类型1. 来自于全局字典库a) Tables spfli. 定义了一个与透明表同名的结构体变量.b) Data sa type spfli. 通过透明表定义了一个名为sa的结构体变量2. 来自于用户定义的局部结构体类型:Types: begin of st_XXX…...…End of st_XXX.根据局部结构体类型定义结构体.Data wa_XXX type st_XXX.Addressing structure components.(结构体的访问)结构体-字段名Wa_scarr-carrid.结构体类型的字段是类型结构体变量的字段是变量结构体字段同名拷贝Move-corresponding wa_flight to wa_focc.move:当两个结构体结构和类型完全相同时拷贝才会不出现问题.Move-corresponding : 同名字段拷贝, 拷贝两个结构体的交集 (同名同类型的字段).Move-corresponding机制:双循环, 先取第一个结构体中第一个字段,然后到另一个结构体找同名字段进行匹配Internal tables内表(重中之重)内表:Internal memory table 内存中的表信息系统的三层结构1. 计算机屏幕2. 内存3. 数据库表注意:在ABAP语言中不提供二维数组,内表相当于二维数组,它是一个表示内存的二维数据结构(m行*n列).与传统二维数组的区别,二维数组的m*n在编译期就已经确定多少个房间了,而内表的行数量是可以动态拓展的.内表可以与以下几项进行数据交换屏幕磁盘文件数据库表打印机(只能将数据传递给打印机,而不能反传)Attibutes of internal tables.一、Line type 内表行类型1. 确定行类型就是确定行中的字段和字段类型2. 用结构体或透明表可以作为内表的行类型3. 内表可以当成数组.4. 采用只有一个字段的结构体或一个不可再分的类型作为行类型,此内表就相当于一个数组二、Key definition.键定义(和主键很像)1) Table key 表键2) Table key:unique(唯一) / non-unique(不唯一,区别数据库)3) Components :构成键的字段,顺序敏感 , 顺序不同 table key也就不一样三、Data access type 数据访问类型1. Index access根据行号访问2. Key access 根据table key访问内表的类型一共有三种内表类型1. Standard table访问: index access(推荐) , key accessTable key: non-unique2. Sorted table天生就有排序的功能,插入数据后就会按照 table key排序访问: index access , key access(推荐)Table key: unique / non-unique3. Hashed table访问: only key accessTable key :unique.Sorded table , 推荐使用 table key 访问,天生排序自动按照二分法查找Full scan 全表扫描Binary search 二分法对排序后的线性结构,先折半,Hash table不能通过索引访问Table key uniqueIndex tables 线性Hashed table 相当于一个筐.内表的定义定义内表1) 通过字典库的内表类型定义内表变量2) 采用局部内表类型定义内表变量Tables <结构体>/<透明表>. 创建与<结构体>/<透明表>同名的结构体通过Se11可以查看字典库中的内表和透明表对内表的操作对内表操作,需要先建立一个结构体使用结构体对内表的数据进行操作在一个排序内表中例如行号分别是 a,b,c,d,e当插入一个 table key 为d的数据时系统会将该条记录自动插入到c数据后面change修改: modify table itab from wa [<condition>]先将数据放到一个结构体的然后将结构体覆盖回去Collect操作语句:COLLECT wa INTO itabtable key 后面的字段需要都是数字类型的字段,这样可以进行累加Collect语句流程:1. 非table key字段必须全是数字2. 当使用该语句进行插入时,如果结构体的table key字段和内表中的table key字段相同,系统将会把结构体中非table key字段中的数值累加到内表的相应字段中.3. 如果table key字段没有对应, collect 操作将相当于 append,将数据追加到内表的末尾对内表多行记录的读取Loop at itab into wa <condition>.对wa进行处理Endloop.Delete itab<condition>Insert lines of itab2 <condition 数据条件>.Into itab1 <condition 插入位置>.Append lines of itab2 <condition1> to itab1.注:对于标准表来说insert如果没指定位置就相当于appendSort排序Sort itab <condition>. 对标准表有实际意义Condition : by f1 ascending / descending1. Refresh:把内表的空间都清空2. Free:全清,释放内存3. Clear:如果一个internal table如果没有head line ,功能和refresh一样,如果有hl ,就只清空head lineHead line定义一个带有head line 的内表Data itab type table of spfil with head line.在声明一个内表的同时 ,就赠送一个结构体 head line ,名和内表的名相同.一个拥有head line 的内表itab中, itab 表示head line 而 itab[] 表示内表,插入的语句可能省略成 appent itab.(不提倡)在ABAP语言中操作一个二维internal table 往往通过一个结构体来完成. Data wa type spfli.Data itab type table of spfli.Wa-carrid = ‘AA’.Append wa to itab.如果在排序后加 stable (不确定)一个内表在排序之前,可能存在相同的table key,使用stable语句,可以保证相同key的数据顺序不会发生变化。
课前预习练习:海尔需要二次开发项目经理BOB需要做哪些事首先需要开发change request –CR习题1:当ABAP Interpreter在解释ABAP程序的时候发现一个 OPEN SQL语句它会将OPEN SQL发送给Database答案:错原因:当ABAP interpreter 遇到OPEN SQL的时候,它首先会把它交给 Database Interface 进行处理, 然后查看local buffer 中是否存在需要的数据, 如果没有所需数据 , 才会进入数据库进行查询习题2: Database Interface 总是从数据库中调取数据答案:错原因:当local buffer 中有所需数据时, 只需要从中获取就可以了,不用进入数据库进行查询ABAP语言的特征1. Open SQL 是ABAP 语言的一部分,是嵌在ABAP语言中的,它不同于JAVA,SQL 并不是JAVA的组成部分2. Abap的基本特点:早期是完全面向过程的,而后发展为支持面向对象,它不是完全面向对象的语言,它是一种混合的模式面向过程:一个方法不属于一个类或一个对象面向对象:方法一定属于一个类或一个对象3. Platform-independent 指的是可以跨数据库平台,Abap platform 指的是datebase4. ABAP语言是基于会话的.主要面向business application-商务应用,一个有意义的ABAP程序一定要操作数据库,然而ABAP不能对底层进行操作.5. Downwards compatible向下兼容: 过去的老语法现在仍然支持例如:在定义一个内表的时候可以加addtion (with head line) ,在新一代的ABAP编程中不建议定义with head line 而是使用采用其他方式,但是这种语法仍然支持ABAP的基本语法1. ABAP 程序是由若干语句构成的2. 第一个单词必须是 ABAP的keyword关键字3. 用英文的句号”.”关闭ABAP语句4. 两个单词之间用空格分隔.5. 可以缩进6. 多条语句可以写在一行(不建议),相反一条语句也可以写在多行7. ABAP 大小写不敏感注:放在单引号中的(字符串)是大小写敏感的Addition-附属语句(相当于英语中的从句)可以加强语句功能Pretty painter :功能:可以设置语句缩进和关键字大小写.Comments注释开头为asterisk (*)的语句为注释语句 ,注释行运行的时候会被忽略Chained statement链语句在使用相同关键字时,为了方便编程,可以使用链语句.重要:虽然链语句的代码量相对较小,但它的功能只是为了方便编程人员编写代码,链语句并不能提高程序本身的性能,因为编译链语句时,系统并不是当成一句执行的,而是单独的进行编译的,效果和写若干个单独语句是一样的.例: write: wa_scarr-carrid,wa_scarr-carrname,wa_scarr-url.写法:关键字后使用Colon(冒号),每一个单独语句用comma(逗号)分隔Return value返回值Sy-subrc :Sy是结构体变量,属于全局变量.Sy-subrc 中的rc return code功能:存放系统当前状态Sy-subrc = 0 : 表示刚才执行的语句执行成功了如果不为0 则表示执行不成功Inactive and Active Development Objects激活概念:1. 建立程序2. 取消 with top incl (如果一个程序中需要引用其他程序,需要这个选项)3. TYPE 选项中需要指定excutable Program (相当于带main函数的java类 ), 到处可以运行module pool包含dynpro 屏幕.不能直接启动,需要打包TCODE 或放入菜单中运行.include 是其他程序调用运行的subroutine 是子程序放局部程序function groupinterface 相当于java中的接口 .4. 逻辑数据库选项5. 程序所建立时的系统名称选项F1帮助:将鼠标放到关键字中按F1然后会出现帮助.选择instrcution 指令便能提供详细的帮助说明在帮助说明中. “[]” 扩起来的都是 optional 可选的Mantatory 强制的激活的概念:对于一个对象来说,有两种状态: active(激活)和inactive(非激活)然而对象的版本却有多个:当一个被编辑的对象为inactive 时,保存后,它便是一个临时的版本.Active的优点:避免使正在编辑中或出现BUG的程序被发布.当要激活一个出现语法错误的程序时,系统会自动提示存在语法错误.用户可以修改程序之后激活,也可以强行激活程序认证考试技巧:如果一道题的提干非常的绝对,例如出现must,have to ,any time等词,这种题的答案大部分是错误的.创建transaction code当需要把ABAP程序打包成TCODE时,按照以下步骤进行操作1. 激活需要打包的ABAP program2. 右键程序create--Transaction3. 输入相应TCODE4. 输入short text5. 选择第二个选项6. 输入需要打包的程序名7. 选择可以执行该TCODE 的GUI注意:TCODE 也属于一个仓库对象也可以传输授权机制:只有当basis管理员授权后,才能够使用TCODEPackage包的建立注意:包也属于仓库对象,也需要传输1. 输入包名,建立相应的包2. Transport layer 配置传输层3. 设置包的类型重要:包的类型Main package 主包特点:只能包含包Not a main package 普通包特点:普通包可以包含包也可以包含repository object对象重要:包一旦创建完毕,就不能再修改包的类型了当F1帮助不足以满足需求的时候 , 可以采用help 中的 SAP library 寻求帮助程序的拷贝:1. 右键程序 COPY 程序2. 修改COPY后的程序名3. 将所有选项选中(可以copy 包括screen 一系列的东西)4. 选择程序存放的包注意:仓库中的数据字典是用来存放数据结构的而数据字典中不存放程序管理信息系统1. 先分析客观世界存在的实体2. 分析出实体之间的关系3. 把客观实体的关系抽象出概念模型4. (一般系统只是直接生成物理表) 在ABAP中,先把概念模型放入字典库 ,创建透明表(Transparent table)5. 透明表和数据库表进行一一映射透明表Transparent table透明表是字典库中的对象,是物理表的描述理解:透明表就是物理表的表结构透明表描述物理表有哪些字段长度类型主键外键重点:在建立透明表并激活后,系统就会在数据库建立一个唯一同名的物理表与之相对应Flight Data Model机场数据模型一个航空公司对应多条航线一条航线对应多个航班一个航班又可以被旅行机构定出多张票一个航线包含两个机场一个机场对应多个航线不是每个城市都有机场任何一个城市都是0个或N个机场对于乘客来说逻辑上有多个机场机场也对应多个城市场景:鞍山没有机场,但是大连沈阳有机场,相当于鞍山有两个逻辑机场将模型转化成透明表Scarr---Airline (航空公司表)mandt字段(client id)所代表记录可以标识是哪特定client的记录,所以凡是表的第一个主键字段是mandt(data element是s_mandt) ,就标识该表一定是client-specify的数据重要:在两张表之间,字段多的那张表依赖于字段少的那张表(由于多字段表中有外键字段)主外键主键: 一个表的概念在某一张表某一个字段或某几个联合字段能够区别于任何一个字段外键: 两个表的概念主键表和外键表外键表中的单个字段或者多个联合字段是主键表的主键, 则称这写字段是该外键表的外键主外键关系:主键表有约束外键表的行为Scenario场景学生表(主键表) 成绩表(外键表)当学生被开除后, 在成绩表中插入该学生成绩的时候就会有插入异常Transparent Table透明表的定义透明表的定义有两种方法:1. 像传统表一样直接通过类型定义字段2. 通过三层结构进行定义(推荐)透明表的三层结构定义1. 定义透明表2. 根据Domain 建立相应 Data element3. 根据Data element 定义相应字段Data Element功能: 可以定义字段的类型Data Element分为两部分1. 语义上的特点—描述它的作用 , 语义上的特点会被定义在字典库的对象中2. 描述字段技术上的特点-----传统的数据类型, 长度以及取值范围 . 技术上的特点要通过引用字典库的对象 domain 来定义Domain表示一个域, 可以有长度,和范围重点:可以用data element来定义透明表字段,结构体字段以及内存变量的类型,但是Domain则不可以,它的只能够靠DE间接使用透明表只是一个表结构不能够包含数据物理表可以存放原数据通过se11 可以对字典库数据对象进行维护不要对 sap的系统表进行change 或是 create在结构体中每个字段叫做 componentComponent type 就是字段类型Data object一般可以理解为内存变量,但它不仅仅是内存变量,它还包含:变量常量文字例: I = 200 200也叫data object可以使用全局结构体定义 data object数据类型TYPE1. 系统原有的数据类型2. 用户自己定义的数据类型通过keyword Tables也可以定义一个结构类型, 后面跟一个透明表的名在字典库中的结构体用来负责定义内存变量,而透明表可以代替结构体直接定义内存变量透明表与结构体的共同点与不同点相同点:1. 它们都是多个字段的集合2. 字段都可以使用Data element来定义3. 它们都可以定义内存变量或内存数据对象不同点:1. 透明表除了能够定义内存结构体之外,它的主要作用是定义物理表的表结构.而对于结构体来说,结构体的作用是描述内存结构的2. 透明表主要描述的是硬盘上物理表,也可以描述内存变量,而结构体只能描述内存变量.因此.由于透明表与物理表结构相同且不可分解,所以,透明表是不可以嵌套的. 但结构体是可以嵌套的(嵌套结构体,或者internal table内表)3. 结构体没有主外键,而透明表有主外键结构体的构成可以一分为二1. flat structure 扁平结构体2. complex structure 复合结构体当透明表取代结构体定义内存变量的时候,那此时的透明表一定是Flat structure ,而且定义出的内存变量也是flat structure重要:透明表只能是扁平的:当一个透明表是client-specify 的时候, 它的第一个字段一定是 MANDT . 所以它创建的数据对象的第一个字段也是 MANDT, 因为数据对象的字段数与透明表的字段数一样多.而且定义出的数据对象也一定是Flat structureTransparent Table 透明表, field 字段, Data element 和domain 都是对象采用parameters定义变量Parameters pa_carr type spfli-carrid.1. 系统分配内存2. 变量自动会被ABAP运行环境解释成selection screen注:如果是单纯的Data定义变量,只能够分配内存,而不能够创建selection screenParameters和Data的共同点与不同点共同点:都是内存变量不同点:data 是纯内存变量,Parameters 还赠送一个屏幕F1与F4帮助F1:当采用字典库中并有Data element 的字段时, 可以使用f1帮助, 它可以显示出DE语义上的特点F4:需要单独制作(字典库对象)search help 功能:显示出可选值Data type数据类型数据类型分为两种:1. 数据库中自带的类型2. 字典库中的对象类型数据类型可以定义哪些变量1. 定义内存变量2. 可以定义ABAP subroutine 子程序的参数3. 在Abap object-oriented面向对象中定义类中的属性和方法4. 在function mudual 中定义参数ABAP中的各种对象1. ABAP dictionary objectStructure 结构体Internal table 内表Repository Program type 仓库中的程序类型2. data object内存中的对象,需要分配内存的对象3. object-oriented 面向对象中的类所创建的instance实例对象ABAP中定义变量使用的三种类型:1. ABAP predefined standard type 天生自带的类型2. 用户自定义的数据类型(局部类型)3. 数据字典中的类型(全局类型)注意:数据类型不占内存,只有定义后的变量才占内存,domain不能用来定义变量注:教材中的黄皮书代表字典库global data typesABAP predefined standard type ABAP自带类型一. Complete type完全类型(不需要指定长度)d(日期): YYYYMMDD例如”20071028”t(时间): HHMMSSi(整形):4bytesf(浮点型): 8bytesstring(字符串): 注:区别c类型,前者可拓展后者为定长xstring(16进制字符串):16进制字符串例如’0000ff’二. Incomplete不完全类型(需要指定长度,如果不指定,长度为缺省值)p(用数字表示的字符串): data p1(10) type p value ‘3.14’.c(字符串): data c1(8) type c.缺省为c1(1)用一个字符表示boolean默认x代表truen(数字字符串):本质上是字符串,代表的是数字只能使用十进制数字, “.”和”-”x(十六进制字符串):必须指定长度的16进制的字符串相当与xString特别注意: P为压缩类型,当声明长度为3时,它所占的内存为3*2 = 6 bytes 每个数字占用1个byte,然而正负号以及小数点需要占用1byte.假设P类型长度为n,则该类型所能容纳的数字个数为n*2 – 1个.Local types自定义类型定义使用types keyword关键字定义 local types只能在本程序内部使用例:Types type_name(10) type c.Data do_name type type_name.使用DATA定义内存变量:1. 可以使用type选择类型例:Data do_name type type_name.2. 可以使用like关键字根据变量声明变量.3. 赋初值可以使用 value 关键字例data m_i type I value 17.重要:用like定义变量只能拷贝目标变量类型,而不拷贝值题目:Given:Tables spfli.which of the following statements are correct? choose the correct answers:A. this statement difines a transparent tableB. this statement difines a table which type is a transparent table named 'spfli'C. spfli-carrid = 'AA'. may be a correct usageD. it defines a data object.E. spfli is a transparent table's name , and it's also a struture data object whose data type is a transparent table of spfli as well答案cdeE. spfli is a transparent table's name , and it's also a struture data object whose data type is a transparent table of spfli as well:spfli 是一个透明表, 用他定义了一个同名的结构体类型的数据对象which of the following statements concerning the usage of PARAMETERS are correct? choose the correct answers:A. PARAMETERS pa_carr TYPE spfli-connid.B. PARAMETERS mypa_carrid TYPE spfli-connid default '0017'.C. PARAMETERS myid TYPE spfli-connid value '0016'.D. data myid type spfli-connid.PARAMETERS myid1 like myid .E. PARAMETERS myid TYPE spfli-connid value '0016'.F. PARAMETERS myid1 type spfli-connid default '0018'. 答案:A D FB. PARAMETERS mypa_carrid, mypa_carrid不能超过8个字符。