BC400 概略

一、ABAP程序执行流程

1、SAP NetWeaver 应用服务器结构原理

  • 最底层是数据库层。只有SAP 自身管理和运行所需的程序和元数据没有保存在数据库里,而应用系统运行的几乎所有数据都存储在数据库中。
  • ABAP 程序运行在应用服务层。ABAP 程序包括SAP 提供的标准程序和我们自己开发的程序。ABAP 程序从数据库读数据,处理数据,储存数据。
  • 第三层是表示层 。这一层就是用户界面,用户可以通过它访问程序,输入数据,接收工作进程处理的结果。它的工作模式跟web浏览器类似,负责把应用服务器传来的界面布局数据转换成用户可 浏览的界面。

2、程序运行示例

  • 系统在程序开始后,会把所有程序上下文读到应用服务器上。程序上下文包括:存储变量和复杂对象的内 存区,用户会话的屏幕信息,ABAP程序块等。上述的这些东西都存储在知识库中。
  • 知识库(Repository), 它是SAP 系统中非常重要的组成部分,负责存储系统运行的基本数据,例如:程序库、数据字典、ABAP 对象等,被保存在数据库中。(JAVA程序是以文件的形式保存在应用服务器上的。)

二、ABAP工作台简介

1、知识库和对象浏览器

  • 知识库包含了所有系统开发对象——程序、函数模块、数据库表定义等等。在知识库中既有SAP 提供的表,也有客户自定义的表。知识库在数据库中,并且通常都与客户端无关,这就意味着知识库可以被所有客户端访问。
  • 除知识库外,数据库还包含应用和定制表,这些表是客户端相关的, 都有一个客户端列。
  • 知识库信息系统/对象浏览器(se80/se81)。ABAP工作台包括了开发和编辑知识库对象所需的全部工具,这些工具覆盖了整个软件开发周期。

2、开发程序和组织开发

  • 使用SE01、SE09、SE10 等事务码创建和管理请求号。按SAP 的开发组织原则,开发人员不能自己创建和释放请求,只能使用项目经理分配的请求。
  • 示例和功能:ABAP文档与范例(事务码ABAPDOCU)、BAPI手册(事务码BAPI)、数据模型(事务码SD11)等。
  • 用SE93来管理事务码

三、ABAP字典简介

1、数据模型

2、航班数据模型:se80/package/SAPBC_DATAMODEL

3、描述性元素

  • 数据元素(Data element)是对字段的描述,包括语义和字段技术属性(域)
  • 语义字段属性包括字段文档和标签,它们直接保存在数据元素定义中。
  • 域(Domain)保存了例如数据类型、字段长度等技术信息。

4、透明表:数据库中的透明表就是保存了实际应用数据的表

5、结构(Structure)

  • ABAP字典中的结构用来描述结构变量,而结构变量的数据都是从透明表中取得的
  • 结构变量通常用来在程序中临时存储数据,或者在程序和屏幕之间作为字段传输的接口。

四、ABAP语言的基本元素

1、数据类型和数据对象

  • 三大类数据类型:标准类型、本地类型、全局类型。
  • type定义数据类型,data定义数据对象
  • 参考现有的数据对象:DATA myvar2 LIKE myvar1
  • 使用CONSTANTS 语句来定义常数
  • 基本语句/关键字:move/=/clear/div/mod/strlen/computer/if else/case when/do/while/loop/
  • MESSAGE:SAP 系统提供了一个消息测试的程序DEMO_MESSAGES,可以学习消息的各种类型和用法。

2、操作结构

  • MOVE-CORRESPONDING

3、操作内表

  • 内表是一个数据对象 ,在运行时可以用内表保存多个相同结构的数据。
  • 操作语句:APPEND/INSERT/READ/MODIFY/DELETE/COLLECT
  • 排序:如果使用STABLE 子句,则排序时排序字段具有相同值的记录的顺序在排序后仍保持不变
  • 清除表的内容:REFRESH:清除整个内表的内容,释放部分内存,保留一些以备后续操作。CLEAR:对于没有表头的内表,跟REFRESH 一样,清除内表的内容。对于有表头的内表,则只初始化表头。FREE:清除整个内表的内容,释放所有内存。在程序里,当内表以后不再使用的时候可以使用FREE,这样能尽量多释放一些不用的内存。
  • 表头:WITH HEADER LINE 子句可以在定义表的时候指定表头。新的SAP 标准建议舍弃表头。

五、数据获取

1、读数据库表

  • 在SELECT 语句中使用CLIENT SPECIFIED 子句(在FROM 后面加上CLIENT SPECIFIED)可以关闭自动客户端选定,从选择条件里指定访问某个 客户端的数据。
  • 如果目标结构的数据结构与查询字段的顺序不一致, 或者使用* 这样的通配符来指定查询字段,就需要用CORRESPONDING FIELDS OF 子句,它会自动在源字段和目标字段之间找名称相同的项自动对应填入。建议使用这种方法,因为:使用它就可以不需要目标结构的前面字段与查询字段一致,将来增加目标结构的字段时不需要修改查询语句。
  • 在SELECT 循环后会产生一些返回值,sy-subrc 为0 说明至少查询到一条记录,而sy-dbcnt 则记录了一共查询到多少条记录。

2、权限检查

  • 关键字:AUTHORITY-CHECK
  • 使用AUTHORITY-CHECK 语句来执行权限检查,检查结果保存在sy-subrc 字段里,0 表示检查通过,执行相应功能,非0 表示检查未通过,给用户一个权限不足的提示。
  • 可以使用事务码SU20 创建权限字段,用事务码SU21 创建对象类和权限对象,如果包含了ACTVT 字段,则还要维护它的可选值。
  • 系统的TACT 表保存了ACTVT 字段所有可能的值, TACTZ 表则保存了在各个权限对象中允许的值。

六、程序分析工具

1、运行时分析工具

  • 在对象浏览器中用程序的右键菜单,找“执行Execute -运行时分析Runtime Analysis”打开运行时分析工具。

2、代码检查员

  • 代码检查员是从纯代码角度检查性能、安全和典型的语义错误

七、在ABAP中使用子程序

  • 子程序的定义:以FORM 开始,以ENDFORM 结束
  • 值调用:在USING 节用VALUE(f1) 的形式,值和结果调用:在CHANGING 节用VALUE(f2) 的形式,引用调用:在CHANGING 节用f3 的形式,不要VALUE
  • 调用:调用子程序时,实际参数按照USING 和CHANGING 的定义依次传递给形式参数,传递顺序与参数名称无关,只按调用顺序
  • 全局对象和本地对象遵循“阴影规则”
  • 为了区分全局对象和本地对象,建议使用不同的前缀命名对象,比如全局用g_ 开头,参数用f_ 开头,本地用l_ 开头。
  • 通常使用PERFORM 语句调用子程序。

八、ABAP事件简介

1、ABAP事件

  • 基本事件的触发顺序

  • 所有WRITE 的输出先保存在清单缓存里,只有在事件 START-OF-SELECTION 执行后才会显示清单缓存

九、用户会话

1、列表

  • 表头:初始维护表头的时候,可以先激活程序,然后运行并显示列表,通过选择菜单的“系统-清单-清单表头”来维护表头,下次运行程序的时候,这个表头就会自动 带出来。
  • 如果需要修改已维护过的表头(重复维护),就不必再次开始程序生成列表了。只需要把程序读到ABAP 编辑器中,然后通过菜单的“转到-文本元素-清单标题”来修改表头。
  • 在ABAP 编辑器中,可以用菜单“转到-翻译”来翻译程序的文本元素。
  • 在程序里用TEXT-xxx 标记文本符号,运行时系统就会根据当前登录语言插入相关的翻译。

2、选择屏幕

  • 可以把当前输入保存为变式(variant),为以后重复利用。

3、屏幕

  • 调用屏幕:CALL SCREEN
  • 应用按钮:如果用户选择了一个按钮,运行时系统就把指定的功能码拷贝到一个专门的屏幕字段,这个字段一般叫做ok_code。
  • 在屏幕绘制器中需要添加按钮,指定名称、显示文字和功能码,同时在屏幕的元素清单中总会有一个默认的OK 类型的命令字段,一般我们用OK_CODE 做为它的名字。而在程序中要对应定义一个sy-ucomm 类型的变量ok_code(DATA ok_code TYPE sy-ucomm)。这样在触发按钮的时候,系统就会自动把屏幕元素OK_CODE 的值传给程序变量ok_code。
  • 功能码传输异常的解决办法:a、在字段传输给屏幕之前的PBO 模块中初始化变量ok_code。b、在PAI 模块中添加一个附加变量,用它保存ok_code 的值,并且立即清除ok_code 的值。

4、用户接口

  • 在屏幕上应用GUI title 和GUI status 需要相应语句, SET TITLEBAR 和SET PF-STATUS

5、ABAP Web Dynpro 程序

  • 一个与客户端和各自协议无关的新编程模型。
  • 支持使用Web Services。从任何应用上都可以以标准、舒适的方法访问各种系统的业务功能。

十、可重用组件

1、使用功能模块(function)

  • 功能模块就是存储在SAP 功能库中的完成一定功能的子程序。每个功能模块都包含一定的输入和输出接 口,使用功能模块的主要意图就是重用,也就是说,它们属于可重用组件。
  • 功能模块的接口:功能模块的接口包括import、export、changing 参数和exception。
  • 使用ABAP 语句CALL FUNCTION 来调用功能模块,功能模块的名字必须大写,并且用单引号括起来。

2、使用方法

  • 定义引用变量:DATA reference_name TYPE REF TO class_name.
  • 创建实例:CREATE OBJECT reference_name.
  • 使用CREATE OBJECT 时可能需要用一个特殊的方法CONSTRUCTOR 来传入一些数据,生成实例的初始值。
  • 调用:CALL METHOD reference_name->method_name.
  • 创建实例时,隐含调用了类的构造函数(类的特殊方法CONSTRUCTOR),它的作用是用输入参数填写创建实例的相应字段,因此,在使用CREATE OBJECT 创建实例时必须提供构造器所要求的必要数据。

//3、Grid控件

3、使用BAPIs

  • 事务码:BAPI
  • BAPI 不但能用ABAP 调用,也可以用其他外部的编程语言调用。
  • 找到所需的BAPI 后,可以在右面看它的作用,还可以通过Function Builder 查看它的功能模块代码。

十一、调整SAP 标准程序

  • 术语:original, copy, correction, repair, customizing, modification,enhancement
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值