Select语句的使用java
关键字into后能够加 structure(结构体), internal table(内表) 和 fieldlist(字段列表)程序员
Authority 权限数据库
程序员能够根据权限对象建立权限实例session
而basic 负责将权限分配给其余用户编辑器
At selection-screenide
在选择屏幕中输入值后,点击屏幕左上角的运行按钮 或 按回车键时,能够对输入的数据进行有效性校验.模块化
重点: at selection-screen最大的做用是检查当前用户是否具备对输入数据进行操做的权限函数
程序中 oop
第一个事件块是 load-of-program 也能够附加使用initialization布局
可是不能只
程序中事件的启动顺序
1. Load-of-program
2. (Initialization) (optional event block 可选事件块)
3. At selection-screen
4. Start-of-selection (default event block 缺省事件块)
5. At line-selection
注意:当程序中没有指定任何事件块时, 系统默认为start-of-selection事件
用户双击basic list screen的一条数据时,系统从隐藏域中查找相应的数据.
并将数据回传给全局变量中去.
当双击一条数据的时候 sy-lsind + 1
当没找到at line-selection事件块时,sy-lsind又自动减1
Selection screen选择屏幕
选择屏幕的属性
1. Input help 输入帮助Possible entries help 可输入值帮助
2. Value entry 定制字段可选择范围
3. Type checks
Multilingual capacity 多语言
4. Variants 变式
变式的建立
1. 将选择屏幕中的输入域填写完毕
2. 将其保存为变式
1) 输入变式名
2) 输入变式描述
3) 为变式设定相关属性
注意:必定要将屏幕中的值填写完毕之后再保存变式
变式的特色
1. 能够简化输入
2. 能够用于后台自动运行程序, 而不须要用户本身输入值
重点: variant 变式 是client-specifc client依赖的.
Seletion screen 选择屏幕
定义选择屏幕上的字段有两种方式
1. single value input单值输入选择屏幕, 使用parameters 关键字 定义 .
2. multiple value input 多值输入选择屏幕,使用 select-options 关键字 定义
parameters功能: 用户能够经过选择屏幕输入查询条件对数据库进行访问.
使用parameters 定义选择屏幕的两点限制
1. 变量名的字数长度不能够超过8个字符.
2. 给定义的时候赋值 须要 用关键字 default 而不能用 value
定义语法: parameters <变量名>type <类型>.
注:若是使用dataelement定义变量,则该变量也具备语义意义.
Selction screen 的执行顺序:
1. 程序启动时,触发load-of-program 事件.
2. 显示层弹出屏幕
3. 用户输入值并肯定屏幕后,触发start-of-selection事件
4. 输入的值被传到内存中,进一步处理
执行顺序实例:
Parameters pa_carr type spfli-carrid.
Load-of-program.
Pa_carr = ‘LH’.
Start-of-selection.
Pa_carr=’DL’.
Write pa_carr.
屏幕弹出时, 输入域中为 LH ,肯定屏幕后, 显示值为 DL.
Value Sets(SELECT-OPTIONS) 多值输入屏幕
Parameters 与 select-options 的区别
1. parameters 定义的变量是不可分解的变量
2. select-options ,表面上定义的是一个字段, 实际上定义的是字段取值范围的内表
select-options功能:
根据用户输入的 value range 取值范围 到数据库中查找符合范围的数据
Select-options 定义的内表
重要: Select-options内表具备表头行
该内表有4个字段
1. Sign 符号标示 取值: I (included 被包含) , E (excluded 不被包含).
2. Option 操做 取值: BT(between在范围之间) , EQ(equal 等于)
3. Low 最小值 取值: 用户输入的最小值
4. High 最大值 取值:用户输入的最大值
当屏幕弹出后, 点击mulitple selction按钮能够加入其余选择范围
范围包括
1. single value include 单值包含
2. range inculde 范围包含
3. single value exclude 单值不包含
4. range exculde 范围不包含
select-options 运行原理
1. 程序运行后, select-options建立的内表中没有数据
2. 屏幕弹出后,用户输入数据
3. 此时,系统将字段范围保存到该内表中
4. 用户肯定屏幕后,系统将内表中的信息翻译成对应的native SQL
5. 数据库将符合用户输入范围的数据返回给用户
注意:使用loop at 循环一个带有head line 的内表,不须要加[].
Selction screen events 选择屏幕事件
事件启动流程
1. 程序启动后,触发load-of-program或initialization 事件对变量进行初始化
2. 若是有parameters 或 select-options屏幕变量,则会弹出选择屏幕
3. 用户输入值后,点击 回车 或 运行(F8)(有区别,见下文) 完成屏幕输入
4. 若是程序中有 at selection-screen 事件的话, 这时它就会被触发,它的功能是 对用户输入的值进行校验,而最主要的功能是,判断用户是否具备对该数据进行操做的权限.
5. 当校验成功后, start-of-selection 别触发.并显示Basic list screen
6. 双击其中一条数据, 则会触发 at line-selection……..
重点: 回车 和运行(F8)的区别
1. 回车: 仅仅具备校验功能, 不管校验成功与否, 程序都不会往下执行
2. 运行(F8): 校验成功后 程序才能往下运行,若是校验失败,程序没法继续运行
注意: at selection screen 的主要功能是authority check 权限校验 ,若是校验失败,则应该生成一个E(error)类型的message 以通知用户校验失败.
User Dialog screen用户会话屏幕(或称为Dynpro Screen ,standardscreen)
Dynpro screen 功能:用户能够经过屏幕录入或修改数据
Dynpro screen 参数
1. Attributes屏幕属性: screen number shorttext nextscreen screentype
2. Layout 屏幕布局: 屏幕属性的摆放顺序
3. Element list 元素列表: 全部元素的集合
4. Flow control 控制流程: flow logic流逻辑(dynpro screen PBO 和PAI事件中所调用的module模块).
Dypro screen Attributes属性
1. Screen number: 屏幕编号 3位
2. short text : 屏幕描述
3. Nex screen: 下一屏幕编号, 当该屏幕结束后所执行的屏幕, 编号为0时,程序将会在调用屏幕的语句后继续运行.
4. Screen type :屏幕类型normal通常屏幕,subscreen子屏幕,modal dialog box模态窗口
Dypro screen 运行流程
1. 使用call screen 100(屏幕编码), 调用一个屏幕
2. 屏幕弹出以前, 启动PBO事件
3. 用户在屏幕输入值并肯定后,输入的值会被传入到内存变量当中
4. 当屏幕关闭时,PAI事件触发
5. PAI结束之后, 程序将会根据该屏幕的next screen 跳到下一屏幕
6. 当next screen 为本屏幕的编号, 则须要使用自定义按钮退出屏幕,不然会出现屏幕死循环现象.
PBO module: PBO 事件对应的模块
PAI module. PAI 事件对应的模块
Next screen 的配置
1. 静态配置: 经过dynpro screen 自身属性配置next screen
2. 动态配置: 在程序的PAI事件中 使用关键字 SET screen 200(下一屏幕编号)定义下一屏幕,当PAI运行到该语句时, 该屏幕的静态配置 则会被 动态配置所覆盖
使用T CODE 运行屏幕
功能: 使用T CODE可使ABAP之外的配置人员 在workbench 之外运行屏幕.
Dynrpo screen 在程序中可使用的位置
1. 触发Start-of-selection,生成basic list screen
2. 双击单条数据
3. 触发 at line-selection 事件
4. 在这个事件中 call screen 100.
5. 弹出dynpro screen, 用户输入相关值
6. 点击 save 保存到数据库 ,点击back 返回到basic list screen
Screen painter 屏幕绘制器
功能:专门绘制ABAP屏幕的程序,能够绘制dynpro screen
注意:必须在安装GUI的时候选择并安装.
能够经过screen 屏幕上的 LAYOUT 键,能够进入 screen painter ,经过Graphicallayout editor 布局编辑器 对布局进行编辑
Dynpro Screen 具体操做
1. 根据spfli-carrid字段创建paramters选择屏幕
2. 根据 spfli 创建结构体变量wa_spfli
3. 在start-of-selection事件中 打印Basic list screen屏幕
4. 在 at line-selection 事件中 call screen 100
5. 创建屏幕100 , 填写描述 和next screen
6. 经过 screen painter 编辑screen 100的布局
7. 经过 字典库结构体sdyn_conn 在屏幕上批量加入字段
8. 建立两个 push button,名字分别为 SAVE 和 BACK ,描述以及Fcode 都于按钮名相同
9. 在屏幕的Element list 选项卡中, 在最后一行添加字段 OK_CODE
10. 保存屏幕 并激活
11. 在程序中声明变量OK_CODE与屏幕字段相对应,注: TYPE ok_code LIKE sy-ucomm.
12. 在屏幕 Flow logic选项卡中打开PBO注释中的 module ,而且将module建立在主程序内
13. 在主程序中建立结构体变量sdyn_conn,使内存中的字段变量可以与屏幕中的字段同名对应 注:TABLES sdyn_conn
14. 在PBOmodule中, 首先清空OK_CODE 经过hidearea隐藏域回传的字段到数据库中查找相应的数据,并将数据传递到sdyn_conn结构体变量中.
15. 打开PAImodule的注释并将module建立到主程序中.
16. 对OK_CODE进行CASE判断,若是为SAVE则提示message信息,若是为BACK,则经过关键字 SET SCREEN<屏幕编号> 跳转到指定的屏幕中去
17. 保存整个程序 并激活.
重点:在PBO事件中第一步必定要清空OK_CODE(CLEAR ok_code)
1. 假如ok_code没有清空.
2. 当用户第一次进入屏幕并点击保存按钮时(例如:SAVE),这时ok_code 的值为 SAVE,
3. 当用户第二次进入屏幕时, 因为ok_code没有被清空,因此ok_code依然为SAVE,
4. 当屏幕数据尚未输入完整时, 用户可能会经过点击push button 之外的方式 结束屏幕.
5. 这时,程序触发PAI事件, 而PAI事件会进入CASE 中的WHEN ‘SAVE’语句, 此时极可能对数据库产生误操做.
6. 因此,PBO中必定要清空ok_code 以免以上状况
暂时消息:可使用 message‘hello’ type ‘I’.
Global modularization 全局模块化
Function module : 属于repositiry中对对象, 封装了最为经常使用的代码.
Fuction group
1. 是多个function module的集合
2. 拥有组内全部module 能够共享的对象
Function group 工做原理:
1. 当一个Function group中某一个Functionmodule,被程序第一次调用的时候
2. Function group 中全部的组成部分(包括共享对象 和modual)都会被调入内存.
3. 当第二个程序再一次调用group中的module 时,就能够直接从内存中调用module了
4. 当程序完成并再也不使用module时, funtion group就会在内存中被清除
注意:Functiongroup不能太大,粒度不适合过大.每一次调用,都会将group全部部分调入到内存,若是过大 ,则会下降系统运行效率.
Function group 共享性
若是group 中的一个module 修改了group 中的属性,那么当组内的module再次访问该属性时,显示的属性就是已经修改后的属性
Function group 须要经过接口来调用
Function module
Fucntion module 类型
1. normal Fucntion module 通常类型
2. Remote-enabled module 可被远程调用类型
3. Update module 更新类型
Function module interface 参数
1. Import 输入参数
2. Export 输出参数
3. Changing 更改参数
重要: 声明module 时,参数要以 module 内部为参照体, 进来的数据为import , 出去的数据为 export.
而当程序调用module时,则须要以程序内部为参照体, 出去的数据为 export,进来的的数据为inport
注意:Import 和 export 参数都是可选的, 也能够设定为passvalue值传, 缺省以及推荐传送方式 是 引用传.因为调用module 时, 须要调用group的整个数据,数据量较大, 因此选择引用传能提升效率.
Function module 的建立
1. 右键package--- create ----function group 建立functiongroup 注意: function group 不能重名
2. 在function group下建立function module
3. 设定fuction module interface 参数
4. 在source code 中写入执行的代码
5. 创建程序调用function module
6. 点击 Pattern 按钮, 在 CALL FUNCTION 选项中 输入module名,肯定
7. 修改参数值 注意: 必定要将程序中的参数 与 module中的参数相对应
8. 当function 调用成功后, 系统变量sy-subrc = 0.
Classes and Objects 类和对象
ABAP 能够建立一个引用类型的数据类型
DATA ref1 TYPE REF TO class. 注:Class是数据类型
DATA ref2 TYPE REF TO class.
定义两个能指向 class 的指针
CREATE OBJECT ref1
CREATE OBJECT 至关于java 中的new
方法的调用
CALL METHOD ref1 -> meth1 (方法名)
EXPORTING
IMPORTING
EXCEPTIONS
面向对象中封装了不少组件
1. 一个BOR business object repositiry 包含多个 BO business object
2. 一个商业对象 business object 包含多个BAPI Business API
BAPI: 属于全局调用的方法,业务层的函数
Standardlized BAPIs ---标准化的 BAPIs
1. GetList
2. GetDetail
3. Create Change, Delete Cancel
4. Addlem RemoveItem.
BAPI 就是 function module , 至关于business functionmodule
Calling programs调用程序
程序之间的调用.
Insertion(谦让式)
当程序A调用程序B时, 程序B占据栈顶,程序A压在下面, 当程序B执行完毕后,程序A继续执行
Restart(抢占式)
当程序A调用程序B时,程序A在栈顶被移出而被程序B所占据
程序调用语句:
在程序中使用 submit关键字 调用 下一个程序
1) Submit prog_name_2 (restart)
2) Submit prog_name_2 and return (insertion)
3) Submit prog_name_2 via selection-screen andreturn (insertion)
via selection-screen做用:若是程序2中有选择屏幕,则程序2被调用时会弹出屏幕
Restart
Leave to transaction<T-code>: 功能至关于输入”/n<T-code>”,当程序执行该语句时,该程序就会在内存被清空,接着转到相应的TCODE程序中去
insertion
call transaction <T_CODE> [andskip first screen 忽略被调用程序的第一个屏幕]
执行下一个程序, 当前程序会被压到栈的下一个位置而不会被清空
重点: and skip first screen 忽略被调用程序的第一个屏幕,可是 PBO 和 PAI的Module还会被执行.
Memory management内存管理
重要:当R/3 用户登录系统的时候, 整个系统环境被称做 userterminal session.
其中包含:
1. Internal session. 程序执行窗口
2. External session. 用户的窗口
Session流程
1. 用户登录系统时的系统环境为terminal session
2. 此时系统开辟了一个External session,用户能够自主建立 , 重要:最大数为6
3. 当一个程序运行的时候,该程序所占的区域为internal session, 至关于程序的内存区域
Memory
1. ABAP memory 属于一个External session 的内存区域
2. SAPmemory 属于一个 terminal session 的内存区域
在一个External session中 ,程序A将数据存放至ABAP memory中,程序B能够从中取出存放的数据.
在同一个terminalsession(同一个操做用户)的前提下,程序A数据存放到 SAP memory中,程序B能够共享内存中的数据.
在同一个External session中, (Externalsession至关于一个堆栈)
Insertion
程序A 调用 程序B , 程序B 调用 程序C
此时 internal session 从上到下的位置为 C – B -- A
Restart
程序A 调用 程序B, 程序A会在栈顶被拿掉, 被程序B占据位置
注意:例如,在restart状况下,堆栈中已经有程序A, B, C 三个程序,C在栈顶, 此时程序C调用了使用程序D所建立的TCODE,此时程序D将占据整个窗口,与此同时,堆栈将所有被清空,ABAP memory也会被clear.