首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 其他相关 >

SAP ABAP PA certification 培训札记

2012-11-09 
SAP ABAP PA certification 培训笔记Table key由三部分构成1.Components:组成key的字段2.Sequence:字段顺

SAP ABAP PA certification 培训笔记

Table key  由三部分构成1.         Components:组成key的字段2.         Sequence:字段顺序3.         Unique/non-unique是否具有唯一性 Data itab type table of [内表类型].  没有语法错误,只是意义完全不同注意:相当于定义了一个一位数组 每一个元素都是一个内表元素. 访问物理表1.         根据 物理表 所对应的 透明表 建立 结构体 或者 内表2.         单条数据访问 需要使用建立的结构体进行操作3.         多条数据访问 使用建立的内表进行操作  通过一个内表变量 ,建立与内表line type类型相同的结构体waData wa like line of itab. 根据内表变量定义Data wa type line of <内表类型>. 根据内表类型定义 读取数据库表 Select <result> from <table>      which table       Into <target>              whereto       Where<condition>       which line 需要声明一个 结构体 或 内表单条记录  into 到结构体.多条记录 into 到内表.  Reading by single record access 读取单条记录对于java 来说, sql 和java 互不相干. Java执行的SQL并非java元素, sql对于java来说只是简单的字符串.Abap中的open sql 是abap中的一部分. OpenSQL 是基于sql的拓展 只读一条记录时, 一定要加single关键字Select single *From scarrInto wa_scarrWhere carrid = pa_car. 重点:无论查询结果有多少条, single读取只返回第一条记录. Left justified 从左到右匹配.概念:根据字段在表中的顺序,对where条件中的字段进行从左到右排序 Where语句中的条件顺序 会影响查询性能, 要遵循从左到右匹配查询.多表查询1.         先根据多张表中所需的字段建立结构体.2.         通过这个结构体对数据进行操作3.         要使用 corresponding fields of 对字段赋值进行匹配操作. 注意:不使用corresponding 不会出异常 ,但拷贝结果不一定会正确 多条记录读取 Select carrid connid fldate…..Endselect.当数据库操作执行完毕, 要根据 sy-subrc 判断操作是否成功.0   成功 非0 失败  数据库查询小节数据库查询分两种1.         单条 select single2.         多条 select …. Endselect  ,  array fetch. 多条记录查询1.         Select .. endselect:逐条读取   稳定,但速度较慢2.         Array fetch:把符合查询条件的 记录一次性插入到内表中 速度快, 但不稳定(当内存不足或数据过大时,会导致内存溢出) 运行机制:例如查询10条记录,大小10k  a)         使用select--endselect方式访问, 会访问10次,每次访问1k,b)        Array fetch 将数据看成一整个数据. 一次性放入到内表中 Into clause  对同名并且类型相同的字段进行拷贝 需要使用corresponding fields of,虽然速度较慢,但较稳定名字相同 类型不同, 则拷贝不会成功. 对于 client-specific 表的查询client-specific 表中的第一个主键字段为mandt,作用是标识client 该查询分为两种情况1.       默认情况查询client-specific表2.       通过特定的mandt查询client-specific 默认情况查询查询条件中 没有 mandt字段 Select ….. from spfliWhere (mandt = ‘100’ )carrid > ‘LH’.底层默认在where中加入了 mandt字段作为查询条件, 而此时的mandt的值为当前操作该程序的client的值注: 使用这种查询方法,不同的client运行该程序 会极大可能的产生不同运行结果  通过特定的mandt查询client-specific指定特定 mandtSelect * from spfliClient specifiedInto ..Where mandt in (401,402)   注意:mandt一定写在第一位And carrid EQ ‘AA’.使用特定的mandt , 系统将通过该特定mandt 进行数据访问, 返回结果与client无关Secondary index 第二索引 索引优点:加快数据库查询速度劣势:索引仅对数据查询有利, 对update语句(例如:删除,插入)会降低其效率. 注意: 索引并不是越多越好,适当的索引可以加快查询效率 索引分为两类1.         第一索引(物理索引 或者 主索引)              该索引是基于数据库表主键所包含的所有字段创建的,有且只有一个, 当主键                 被创建时 , 主索引就会被系统自动创建2.         第二索引              根据主键之外的字段所创建的索引,可以包含多字段主键的其中之一或多个作为第          二索引,但不能包含主键的所有字段.注意:第二索引的数量应该适当,不应太多.  索引机制在索引创建的时候,系统会自动创建相应的索引表 例如:1)        一个表中的前2个字段为主键,2)        此时系统会创建一个3个字段的索引表3)        其中包括 两个主键字段 和一个 index字段(为了根据主键定位对应的表数据)4)        创建的索引表与数据表拥有相同的数据条数 写查询语句的时候 where 条件语句要遵循 left justified 机制从左到右写入索引字段  Database optimizer 数据库优化器它会根据查询操作,选择出最佳的查询方案. Authorization checks 权限检查 运行流程:1)        用户在选择屏幕上输入查询条件 例如:AA2)        用户确定输入3)        在数据库查询之前,ABAP程序会到数据库查看当前用户的用户主数据,查看用户是否具有对该数据进行操作的权限, 如果有 sy-subrc = 0 , 如果没有权限 sy-subrc = 4 , 检查失败 sy-subrc = 8.  Authorization objects and authorizations.权限对象 和 权限权限查询流程1)        查看用户是否又有相应权限2)        当具有查询的权限时就在if语句中对该表进行相应操作3)        如果没有权限 就通过屏幕提示给用户 Authorization_check object: s_carrid 包含两个字段1.         Carrid: 用来指定carrid的值2.         Actvt: activities 可操作的权限类型  Actvt 可取的值:1.         Create = 01 是否有创建的权限2.         Change = 02 修改权限3.         Display = 03 查看权限一个权限对象可以生成多个权限 carrid : *Actvt : 03 用户对所有航空公司编码所对应的数据具有查看权限 carrid : HlActvt : 02该用户可以对HL航空公司对应的数据可以更改.  Authority-checkObject ‘S_CARRID’       ID ‘CARRID’ field ‘LH’       ID ‘ACTVT’ field ‘02’.(查看数据库的二维表,查看权限是否存在,然后返回给sy-subrc)If sy-subrc NE 0.       <statement>Endif. Dummy:当忽略字段的值时,可以使用dummyAuthority-check object ‘S_CARRID’ID ‘CARRID’ DUMMYID ‘ACTVT’ field ‘02’. 插入权限检查点击pattern在authority_check 中输入 s_carrid  Reading Linkable database tables读取多表连接对于对表的访问有两种方式1.         静态连接:从多中取出所需字段, 根据提取的字段创建 视图2.         动态连接:在abap中使用连接语句对多表连接并读取 表连接分类1.         内连接 inner join2.         外连接 outer join (包含:左外连接  右外连接 注:ABAP不支持右外连接)内连接: inner join例如: 对两个表进行内连接, 将两个表中符合连接条件的记录的字段合并为一条记录,相当于把这些符合条件的记录又重新组成了一个新表.SELECT …FROM spfli INNER JOIN scarrON spfli~carrid = scarr~carridWhere…注:由于多表中可能出现重复字段, 索引因该使用 <表名>~<字段名> 进行区分 外连接:outer join左外连接:例如: 两张表进行外连接, 一张为左表, 另一个为右表当进行左外连接时, 无论左表是否符合连接条件,它的字段都会在新集合中, 而右表只有符合连接条件,字段才会被插入到新集合中 右外连接(abap不支持):与左连接顺序相反,  BAPI :business API可以理解为 abap的方法封装了select语句,可以直接使用 Logical database 逻辑数据库不是物理数据库 ,而是ABAP程序, 可以充当数据库使用 警告:对数据库进行插入,更新,删除,修改 是很危险的.所以推荐初学者只进行查询操作 subroutines子程序功能:封装了程序中经常使用的代码,可以简化代码量.(相当与其他语言的 方法) 子程序的定义定义子程序interface1.         参数个数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.         子程序对拷贝变量修改完毕后,会将该拷贝变量重新覆盖回源变量中去 注意:修改的值不一定每一次都返回成功.当出现异常错误时,拷贝变量将可能不会返回.  子程序的声明 在形式参数中:USING Value(<参数名>) 值传CHANGING value(<参数名>) 值传带有返回值USING (推荐:内表形参使用) / CHANGING <参数名> 引用传  子程序定义时的参数类型:1.         简单类型: 一般类型(不可分解)2.         复合类型: 内表类型 形参的简单类型1.         指定类型: 例 USING value(f_1) TYPE i.2.         任意类型: 该形参可匹配任何类型 例:USING value(f_1) TYPE ANY. (不推荐, 运行过程中很可能出现类型不一致的运行错误)  形参的复合类型重点:复合类型形参必须为特定类型,以访问内部的字段.复合类型的形参 推荐使用 call-reference 引用传作为传递类型. 例: 使用内表作为形参, 当调用子程序 并传递 内表参数的时候,由于内表数据量相对较大,使用值传 或值传带返回值都会对内表变量进行拷贝, 这样会降低运行效率.所以使用引用传 可以避免拷贝过程 以 提高效率.但是引用传会使内表被修改.因此推荐  将该引用传 参数 写在 USING 关键字后,以提醒编程人员不要轻易修改. 重点:在子程序中定义的变量,只有在子程序中才有效而在主程序中的变量,子程序依然可以调用,但不推荐,因为这样可能会导致程序出现错误,所以在使用子程序时要传入相应参数 子程序的调用1.         将子程序从导航中托到主程序中2.         使用 pattern 的 perform选项调用子程序 Abap runtime system 运行环境Abap程序是若干处理得块的集合 代码块分类1.         Event block事件块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事件块 List attributes 报表功能:可以被打印可以格式化输出(不通的货币和长度单位)输出日期格式根据登陆语言选择特定语言生成一个屏幕 列表屏幕的标准功能Back /exit /cancelScrollPrintFineSave 一个列表拥有一个list header 和四个 column header.  Multilingual capability多语言编程Text-ccc(三位数字) 1.         Write text-001.2.         双击 text-001 进行创建.3.         Goto- translate4.         修改翻译语言5.         使用相应的登陆语言登陆,就会输出相应语言    Write语句会将数据写到缓冲区 1.         用select 语句取出数据2.         每write一次就会把数据放到缓冲区中3.         当start-of-selection 结束后, 运行环境将会把所有的write skip uline数据全部推到屏幕上  Detail listAt line-selection事件1.         在list screen中, 双击记录或者单击并按F2键 会出发at line-selection事件2.         通过该事件,可以生成下一级的报表,通过该报表还可以再生成下一级报表, 每一个屏幕都有一个编号. Start-of-selection 所生成的屏幕叫做 basic list screen 其编号为0,而后所生成的屏幕的编号为依次加1.重要: 最大屏幕号为 20, 最多有21层 除了第一层在start-of-selection其他的屏幕都在at line-selection后生成Sy-lsind  列表屏幕的索引编号  lsind = list index在detail list使用back按钮 ,可以跳到上一级屏幕重要:当双击list 的数据后, 系统首先将sy-lsind 加1 然后再触发at line-selection 用array fetch 很难做双击后的listHide area 隐藏域Hide area隐藏域是系统运行环境中的一张内表.其中包含3个字段1.         Line : 标示行号2.         Field name: 字段名3.         Value : 字段的值 隐藏域的使用1.         通过 select …endselect 对数据库进行循环查询,2.         通过 write 语句, 打印出basic list screen 中的列表信息3.         通过 hide 语句, 将指定的字段,存放到隐藏域中4.         Basic list screen 生成后,用户双击信息行,触发at line-selection 事件,5.         此时,系统将根据该信息行到隐藏域中查找相应字段6.         最后将该字段返回给对应的全局变量的字段中去, 以便于在下一个detail list 中继续使用  

?

?

转载:http://blog.sina.com.cn/s/blog_5cdacb630100ce92.html

热点排行