SAP ABAP PA certification 培训笔记 part 4.docx

上传人:b****7 文档编号:10592054 上传时间:2023-02-21 格式:DOCX 页数:13 大小:21.38KB
下载 相关 举报
SAP ABAP PA certification 培训笔记 part 4.docx_第1页
第1页 / 共13页
SAP ABAP PA certification 培训笔记 part 4.docx_第2页
第2页 / 共13页
SAP ABAP PA certification 培训笔记 part 4.docx_第3页
第3页 / 共13页
SAP ABAP PA certification 培训笔记 part 4.docx_第4页
第4页 / 共13页
SAP ABAP PA certification 培训笔记 part 4.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

SAP ABAP PA certification 培训笔记 part 4.docx

《SAP ABAP PA certification 培训笔记 part 4.docx》由会员分享,可在线阅读,更多相关《SAP ABAP PA certification 培训笔记 part 4.docx(13页珍藏版)》请在冰豆网上搜索。

SAP ABAP PA certification 培训笔记 part 4.docx

SAPABAPPAcertification培训笔记part4

---------------------------------------------------------------

SAPABAPPAcertification培训笔记part4

课前复习

Tablekey由三部分构成

1.Components:

组成key的字段

2.Sequence:

字段顺序

3.Unique/non-unique是否具有唯一性

Dataitabtypetableof[内表类型].没有语法错误,只是意义完全不同

注意:

相当于定义了一个一位数组每一个元素都是一个内表元素.

访问物理表

1.根据物理表所对应的透明表建立结构体或者内表

2.单条数据访问需要使用建立的结构体进行操作

3.多条数据访问使用建立的内表进行操作

通过一个内表变量,建立与内表linetype类型相同的结构体wa

Datawalikelineofitab.根据内表变量定义

Datawatypelineof<内表类型>.根据内表类型定义

读取数据库表

Selectfrom

whichtable

Intowhereto

Wherewhichline

需要声明一个结构体或内表

单条记录into到结构体.

多条记录into到内表.

Readingbysinglerecordaccess读取单条记录

对于java来说,sql和java互不相干.Java执行的SQL并非java元素,sql对于java来说只是简单的字符串.

Abap中的opensql是abap中的一部分.OpenSQL是基于sql的拓展

只读一条记录时,一定要加single关键字

Selectsingle*

Fromscarr

Intowa_scarr

Wherecarrid=pa_car.

重点:

无论查询结果有多少条,single读取只返回第一条记录.

Leftjustified从左到右匹配.

概念:

根据字段在表中的顺序,对where条件中的字段进行从左到右排序

Where语句中的条件顺序会影响查询性能,要遵循从左到右匹配查询.

多表查询

1.先根据多张表中所需的字段建立结构体.

2.通过这个结构体对数据进行操作

3.要使用correspondingfieldsof对字段赋值进行匹配操作.

注意:

不使用corresponding不会出异常,但拷贝结果不一定会正确

多条记录读取

Selectcarridconnidfldate

…..

Endselect.

当数据库操作执行完毕,要根据sy-subrc判断操作是否成功.

0成功

非0失败

数据库查询小节

数据库查询分两种

1.单条selectsingle

2.多条select….Endselect,arrayfetch.

多条记录查询

1.Select..endselect:

逐条读取稳定,但速度较慢

2.Arrayfetch:

把符合查询条件的记录一次性插入到内表中速度快,但不稳定(当内存不足或数据过大时,会导致内存溢出)

运行机制:

例如查询10条记录,大小10k

a)使用select--endselect方式访问,会访问10次,每次访问1k,

b)Arrayfetch将数据看成一整个数据.一次性放入到内表中

Intoclause

对同名并且类型相同的字段进行拷贝需要使用correspondingfieldsof,虽然速度较慢,但较稳定

名字相同类型不同,则拷贝不会成功.

对于client-specific表的查询

client-specific表中的第一个主键字段为mandt,作用是标识client

该查询分为两种情况

1.默认情况查询client-specific表

2.通过特定的mandt查询client-specific

默认情况查询

查询条件中没有mandt字段

Select…..fromspfli

Where(mandt=‘100’)carrid>‘LH’.

底层默认在where中加入了mandt字段作为查询条件,而此时的mandt的值为当前操作

该程序的client的值

注:

使用这种查询方法,不同的client运行该程序会极大可能的产生不同运行结果

通过特定的mandt查询client-specific

指定特定mandt

Select*fromspfli

Clientspecified

Into..

Wheremandtin(401,402)注意:

mandt一定写在第一位

AndcarridEQ‘AA’.

使用特定的mandt,系统将通过该特定mandt进行数据访问,返回结果与client无关

Secondaryindex第二索引

索引优点:

加快数据库查询速度

劣势:

索引仅对数据查询有利,对update语句(例如:

删除,插入)会降低其效率.

注意:

索引并不是越多越好,适当的索引可以加快查询效率

索引分为两类

1.第一索引(物理索引或者主索引)

该索引是基于数据库表主键所包含的所有字段创建的,有且只有一个,当主键被创建时,主索引就会被系统自动创建

2.第二索引

根据主键之外的字段所创建的索引,可以包含多字段主键的其中之一或多个作为第二索引,但不能包含主键的所有字段.

注意:

第二索引的数量应该适当,不应太多.

索引机制

在索引创建的时候,系统会自动创建相应的索引表

例如:

1)一个表中的前2个字段为主键,

2)此时系统会创建一个3个字段的索引表

3)其中包括两个主键字段和一个index字段(为了根据主键定位对应的表数据)

4)创建的索引表与数据表拥有相同的数据条数

写查询语句的时候where条件语句要遵循leftjustified机制

从左到右写入索引字段

Databaseoptimizer数据库优化器

它会根据查询操作,选择出最佳的查询方案.

Authorizationchecks权限检查

运行流程:

1)用户在选择屏幕上输入查询条件例如:

AA

2)用户确定输入

3)在数据库查询之前,ABAP程序会到数据库查看当前用户的用户主数据,查看用户是否具有对该数据进行操作的权限,如果有sy-subrc=0,如果没有权限sy-subrc=4,检查失败sy-subrc=8.

Authorizationobjectsandauthorizations.权限对象和权限

权限查询流程

1)查看用户是否又有相应权限

2)当具有查询的权限时就在if语句中对该表进行相应操作

3)如果没有权限就通过屏幕提示给用户

Authorization_checkobject:

s_carrid包含两个字段

1.Carrid:

用来指定carrid的值

2.Actvt:

activities可操作的权限类型

Actvt可取的值:

1.Create=01是否有创建的权限

2.Change=02修改权限

3.Display=03查看权限

一个权限对象可以生成多个权限

carrid:

*

Actvt:

03

用户对所有航空公司编码所对应的数据具有查看权限

carrid:

Hl

Actvt:

02

该用户可以对HL航空公司对应的数据可以更改.

Authority-check

Object‘S_CARRID’

ID‘CARRID’field‘LH’

ID‘ACTVT’field‘02’.

(查看数据库的二维表,查看权限是否存在,然后返回给sy-subrc)

Ifsy-subrcNE0.

Endif.

Dummy:

当忽略字段的值时,可以使用dummy

Authority-checkobject‘S_CARRID’

ID‘CARRID’DUMMY

ID‘ACTVT’field‘02’.

插入权限检查

点击pattern

在authority_check中输入s_carrid

ReadingLinkabledatabasetables读取多表连接

对于对表的访问有两种方式

1.静态连接:

从多中取出所需字段,根据提取的字段创建视图

2.动态连接:

在abap中使用连接语句对多表连接并读取

表连接分类

1.内连接innerjoin

2.外连接outerjoin(包含:

左外连接右外连接注:

ABAP不支持右外连接)

内连接:

innerjoin

例如:

对两个表进行内连接,将两个表中符合连接条件的记录的字段合并为一条记录,

相当于把这些符合条件的记录又重新组成了一个新表.

SELECT…

FROMspfliINNERJOINscarr

ONspfli~carrid=scarr~carrid

Where…

注:

由于多表中可能出现重复字段,索引因该使用<表名>~<字段名>进行区分

外连接:

outerjoin

左外连接:

例如:

两张表进行外连接,一张为左表,另一个为右表

当进行左外连接时,无论左表是否符合连接条件,它的字段都会在新集合中,而右表只有符合连接条件,字段才会被插入到新集合中

右外连接(abap不支持):

与左连接顺序相反,

BAPI:

businessAPI

可以理解为abap的方法

封装了select语句,可以直接使用

Logicaldatabase逻辑数据库

不是物理数据库,而是ABAP程序,可以充当数据库使用

警告:

对数据库进行插入,更新,删除,修改是很危险的.所以推荐初学者只进行查询操作

subroutines子程序

功能:

封装了程序中经常使用的代码,可以简化代码量.(相当与其他语言的方法)

子程序的定义

定义子程序interface

1.参数个数

2.参数类型

形式参数与实际参数

1)形式参数:

子程序定义中的参数

2)实际参数:

调用子程序时的参数

形式参数的三种方式

1.Call-by-value值传

2.Call-by-reference引用传

3.Call-by-value-and-result值传并带有返回值

Call-by-value值传类型

1.变量首先进行自身拷贝

2.拷贝变量被传到子程序中

3.子程序对拷贝变量的修改不会关系到原变量的变化.

Call-by-reference引用传

1.该传递会将变量的内存地址传送至子程序中

2.子程序会直接操作内存,所以源变量也会随之改变

Call-by-value-and-result值传并带有返回值

1.与值传相同,首先变量自身拷贝,并将拷贝变量传送到子程序中

2.子程序对拷贝变量修改完毕后,会将该拷贝变量重新覆盖回源变量中去

注意:

修改的值不一定每一次都返回成功.当出现异常错误时,拷贝变量将可能不会返回.

子程序的声明

在形式参数中:

USINGValue(<参数名>)值传

CHANGINGvalue(<参数名>)值传带有返回值

USING(推荐:

内表形参使用)/CHANGING<参数名>引用传

子程序定义时的参数类型:

1.简单类型:

一般类型(不可分解)

2.复合类型:

内表类型

形参的简单类型

1.指定类型:

例USINGvalue(f_1)TYPEi.

2.任意类型:

该形参可匹配任何类型例:

USINGvalue(f_1)TYPEANY.(不推荐,运行过程中很可能出现类型不一致的运行错误)

形参的复合类型

重点:

复合类型形参必须为特定类型,以访问内部的字段.

复合类型的形参推荐使用call-reference引用传作为传递类型.

例:

使用内表作为形参,当调用子程序并传递内表参数的时候,由于内表数据量相对较大,使用值传或值传带返回值都会对内表变量进行拷贝,这样会降低运行效率.

所以使用引用传可以避免拷贝过程以提高效率.

但是引用传会使内表被修改.

因此推荐将该引用传参数写在USING关键字后,以提醒编程人员不要轻易修改.

重点:

在子程序中定义的变量,只有在子程序中才有效

而在主程序中的变量,子程序依然可以调用,但不推荐,因为这样可能会导致程序出现错误,所以在使用子程序时要传入相应参数

子程序的调用

1.将子程序从导航中托到主程序中

2.使用pattern的perform选项调用子程序

Abapruntimesystem运行环境

Abap程序是若干处理得块的集合

代码块分类

1.Eventblock事件块

2.subroutines子程序

3.module块

Load-of-program程序启动时被调用

一个报表的运行

1.首先执行load-of-program或initialization.

2.推出选择屏幕

3.用户确定屏幕以后,启动start-of-selection事件

4.通过列表缓冲区,运行环境把列表返回给用户

注意:

Load-of-program和start-of-selection有且只能触发一次.

重点:

事件块的特点

1.通过关键字开始

2.事件块的开始意味着上一个事件块的结束

3.每一个事件块执行不同的任务

4.事件块的执行是有顺序的,虽然在编写上没有要求,但建议按照顺序编写

5.标准的事件块

Initialization只能在可执行程序中初始化程序

创建报表必须使用start-of-selection事件块

Listattributes

报表功能:

可以被打印

可以格式化输出(不通的货币和长度单位)

输出日期格式

根据登陆语言选择特定语言

生成一个屏幕

列表屏幕的标准功能

Back/exit/cancel

Scroll

Print

Fine

Save

一个列表拥有一个listheader和四个columnheader.

Multilingualcapability多语言编程

Text-ccc(三位数字)

1.Writetext-001.

2.双击text-001进行创建.

3.Goto-translate

4.修改翻译语言

5.使用相应的登陆语言登陆,就会输出相应语言

Write语句会将数据写到缓冲区

1.用select语句取出数据

2.每write一次就会把数据放到缓冲区中

3.当start-of-selection结束后,运行环境将会把所有的writeskipuline数据全部推到屏幕上

Detaillist

Atline-selection事件

1.在listscreen中,双击记录或者单击并按F2键会出发atline-selection事件

2.通过该事件,可以生成下一级的报表,通过该报表还可以再生成下一级报表,

每一个屏幕都有一个编号.Start-of-selection所生成的屏幕叫做basiclistscreen其编号为0,

而后所生成的屏幕的编号为依次加1.

重要:

最大屏幕号为20,最多有21层

除了第一层在start-of-selection

其他的屏幕都在atline-selection后生成

Sy-lsind列表屏幕的索引编号lsind=listindex

在detaillist使用back按钮,可以跳到上一级屏幕

重要:

当双击list的数据后,系统首先将sy-lsind加1然后再触发atline-selection

用arrayfetch很难做双击后的list

Hidearea隐藏域

Hidearea隐藏域是系统运行环境中的一张内表.

其中包含3个字段

1.Line:

标示行号

2.Fieldname:

字段名

3.Value:

字段的值

隐藏域的使用

1.通过select…endselect对数据库进行循环查询,

2.通过write语句,打印出basiclistscreen中的列表信息

3.通过hide语句,将指定的字段,存放到隐藏域中

4.Basiclistscreen生成后,用户双击信息行,触发atline-selection事件,

5.此时,系统将根据该信息行到隐藏域中查找相应字段

6.最后将该字段返回给对应的全局变量的字段中去,以便于在下一个detaillist中继续使用

展开阅读全文
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1