剑三奇遇荆轲刺:SAP ABAP PA certification 培训笔记 part 4
来源:百度文库 编辑:偶看新闻 时间:2024/04/27 21:26:15
课前复习
Table key
1.
2.
3.
Data itab type table of [内表类型].
注意:相当于定义了一个一位数组 每一个元素都是一个内表元素.
访问物理表
1.
2.
3.
通过一个内表变量 ,建立与内表line type类型相同的结构体wa
Data wa like line of itab. 根据内表变量定义
Data wa type line of <内表类型>. 根据内表类型定义
读取数据库表
Select 需要声明一个 结构体 或 内表 单条记录 多条记录 into 到内表. Reading by single record access 读取单条记录 对于java 来说, sql 和java 互不相干. Java执行的SQL并非java元素, sql对于java来说只是简单的字符串. Abap中的open sql 是abap中的一部分. OpenSQL 是基于sql的拓展 只读一条记录时, 一定要加single关键字 Select single * From scarr Into wa_scarr Where carrid = pa_car. 重点:无论查询结果有多少条, single读取只返回第一条记录. Left justified 从左到右匹配. 概念:根据字段在表中的顺序,对where条件中的字段进行从左到右排序 Where语句中的条件顺序 会影响查询性能, 要遵循从左到右匹配查询. 多表查询 1. 2. 3. 注意:不使用corresponding 不会出异常 ,但拷贝结果不一定会正确 多条记录读取 Select carrid connid fldate ….. Endselect. 当数据库操作执行完毕, 要根据 sy-subrc 判断操作是否成功. 0 非0 失败 数据库查询小节 数据库查询分两种 1. 2. 多条记录查询 1. 2. 运行机制:例如查询10条记录,大小10k a) b) Into clause 对同名并且类型相同的字段进行拷贝 需要使用corresponding fields of,虽然速度较慢,但较稳定 名字相同 类型不同, 则拷贝不会成功. 对于 client-specific 表的查询 client-specific 表中的第一个主键字段为mandt,作用是标识client 该查询分为两种情况 1. 2. 默认情况查询 查询条件中 没有 mandt字段 Select ….. from spfli Where (mandt = ‘100’ )carrid > ‘LH’. 底层默认在where中加入了 mandt字段作为查询条件, 而此时的mandt的值为当前操作 该程序的client的值 注: 使用这种查询方法,不同的client运行该程序 会极大可能的产生不同运行结果 通过特定的mandt查询client-specific 指定特定 mandt Select * from spfli Client specified Into .. Where mandt in (401,402) And carrid EQ ‘AA’. 使用特定的mandt , 系统将通过该特定mandt 进行数据访问, 返回结果与client无关 Secondary index 第二索引 索引优点:加快数据库查询速度 劣势:索引仅对数据查询有利, 对update语句(例如:删除,插入)会降低其效率. 注意: 索引并不是越多越好,适当的索引可以加快查询效率 索引分为两类 1. 2. 注意:第二索引的数量应该适当,不应太多. 索引机制 在索引创建的时候,系统会自动创建相应的索引表 例如: 1) 2) 3) 4) 写查询语句的时候 where 条件语句要遵循 left justified 机制 从左到右写入索引字段 Database optimizer 数据库优化器 它会根据查询操作,选择出最佳的查询方案. Authorization checks 权限检查 运行流程: 1) 2) 3) Authorization objects and authorizations.权限对象 和 权限 权限查询流程 1) 2) 3) Authorization_check object: s_carrid 包含两个字段 1. 2. Actvt 可取的值: 1. 2. 3. 一个权限对象可以生成多个权限 carrid : * Actvt : 03 用户对所有航空公司编码所对应的数据具有查看权限 carrid : Hl Actvt : 02 该用户可以对HL航空公司对应的数据可以更改. Authority-check Object ‘S_CARRID’ (查看数据库的二维表,查看权限是否存在,然后返回给sy-subrc) If sy-subrc NE 0. Endif. Dummy:当忽略字段的值时,可以使用dummy Authority-check object ‘S_CARRID’ ID ‘CARRID’ DUMMY ID ‘ACTVT’ field ‘02’. 插入权限检查 点击pattern 在authority_check 中输入 s_carrid Reading Linkable database tables读取多表连接 对于对表的访问有两种方式 1. 2. 表连接分类 1. 2. 内连接: inner join 例如: 对两个表进行内连接, 将两个表中符合连接条件的记录的字段合并为一条记录, 相当于把这些符合条件的记录又重新组成了一个新表. SELECT … FROM spfli INNER JOIN scarr ON spfli~carrid = scarr~carrid Where… 注:由于多表中可能出现重复字段, 索引因该使用 <表名>~<字段名> 进行区分 外连接:outer join 左外连接: 例如: 两张表进行外连接, 一张为左表, 另一个为右表 当进行左外连接时, 无论左表是否符合连接条件,它的字段都会在新集合中, 而右表只有符合连接条件,字段才会被插入到新集合中 右外连接(abap不支持): 与左连接顺序相反, BAPI :business API 可以理解为 abap的方法 封装了select语句,可以直接使用 Logical database 逻辑数据库 不是物理数据库 ,而是ABAP程序, 可以充当数据库使用 警告:对数据库进行插入,更新,删除,修改 是很危险的.所以推荐初学者只进行查询操作 subroutines子程序 功能:封装了程序中经常使用的代码,可以简化代码量.(相当与其他语言的 方法) 子程序的定义 定义子程序interface 1. 2. 形式参数与实际参数 1) 2) 形式参数的三种方式 1. 2. 3. 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. 2. 形参的复合类型 重点:复合类型形参必须为特定类型,以访问内部的字段. 复合类型的形参 推荐使用 call-reference 引用传作为传递类型. 例: 使用内表作为形参, 当调用子程序 并传递 内表参数的时候,由于内表数据量相对较大,使用值传 或值传带返回值都会对内表变量进行拷贝, 这样会降低运行效率. 所以使用引用传 可以避免拷贝过程 以 提高效率. 但是引用传会使内表被修改. 因此推荐 重点: 在子程序中定义的变量,只有在子程序中才有效 而在主程序中的变量,子程序依然可以调用,但不推荐,因为这样可能会导致程序出现错误,所以在使用子程序时要传入相应参数 子程序的调用 1. 2. Abap runtime system 运行环境 Abap程序是若干处理得块的集合 代码块分类 1. 2. 3. Load-of-program 程序启动时被调用 一个报表的运行 1. 2. 3. 4. 注意:Load-of-program 和 start-of-selection 重点: 事件块的特点 1. 2. 3. 4. 5. Initialization 只能在可执行程序中初始化程序 创建报表必须使用start-of-selection事件块 List attributes 报表功能: 可以被打印 可以格式化输出(不通的货币和长度单位) 输出日期格式 根据登陆语言选择特定语言 生成一个屏幕 列表屏幕的标准功能 Back /exit /cancel Scroll Print Fine Save 一个列表拥有一个list header 和四个 column header. Multilingual capability多语言编程 Text-ccc(三位数字) 1. 2. 3. 4. 5. Write语句会将数据写到缓冲区 1. 2. 3. Detail list At line-selection事件 1. 2. 每一个屏幕都有一个编号. Start-of-selection 所生成的屏幕叫做 basic list screen 其编号为0, 而后所生成的屏幕的编号为依次加1. 重要: 最大屏幕号为 20, 最多有21层 除了第一层在start-of-selection 其他的屏幕都在at line-selection后生成 Sy-lsind 在detail list使用back按钮 ,可以跳到上一级屏幕 重要:当双击list 的数据后, 系统首先将sy-lsind 加1 然后再触发at line-selection 用array fetch 很难做双击后的list Hide area 隐藏域 Hide area隐藏域是系统运行环境中的一张内表. 其中包含3个字段 1. 2. 3. 隐藏域的使用 1. 2. 3. 4. 5. 6.