SAP ABAP PA certification 培训笔记 part 4.docx
- 文档编号:10592054
- 上传时间:2023-02-21
- 格式:DOCX
- 页数:13
- 大小:21.38KB
SAP ABAP PA certification 培训笔记 part 4.docx
《SAP ABAP PA certification 培训笔记 part 4.docx》由会员分享,可在线阅读,更多相关《SAP ABAP PA certification 培训笔记 part 4.docx(13页珍藏版)》请在冰豆网上搜索。
SAPABAPPAcertification培训笔记part4
---------------------------------------------------------------
SAPABAPPAcertification培训笔记part4
课前复习
Tablekey由三部分构成
1.Components:
组成key的字段
2.Sequence:
字段顺序
3.Unique/non-unique是否具有唯一性
Dataitabtypetableof[内表类型].没有语法错误,只是意义完全不同
注意:
相当于定义了一个一位数组每一个元素都是一个内表元素.
访问物理表
1.根据物理表所对应的透明表建立结构体或者内表
2.单条数据访问需要使用建立的结构体进行操作
3.多条数据访问使用建立的内表进行操作
通过一个内表变量,建立与内表linetype类型相同的结构体wa
Datawalikelineofitab.根据内表变量定义
Datawatypelineof<内表类型>.根据内表类型定义
读取数据库表
Select Into Where 需要声明一个结构体或内表 单条记录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中继续使用 如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。 copyright@ 2008-2022 冰点文档网站版权所有 经营许可证编号:鄂ICP备2022015515号-1whichtable
冰豆网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。