SAP NOTES

SAP R/3 接口技术剖析
  2006-09-20
  作为目前ERP市场上最为领先的应用系统之一,一直以来,SAP R/3在提供API应用编程接口和接口工具方面也同样领先于其它ERP厂商。ALE/IDocs是SAP公司为SAP R/3 R4.6C版本所提供的接口机制,目前应用最为广泛。在 R4.0以后的版本中,又添加了技术上先进的BAPI。本文作为系列介绍之一,对ALE/IDocs, BAPI以及其它可用的整合方式进行介绍。
  1、ALE/IDocs是什么?
  ALE 是Application Link and Enabling的缩写,是SAP专门为SAP与SAP之间所设计的整合中间件。IDocs是中介文本 (Intermediate DOCument) 的缩写,是SAP提供的系统整合专用的数据/消息格式。ALE在SAP 3.0版本开始就作为SAP整个应用体系的一部分,为分布式数据交换提供了可靠安全的通讯机制。ALE的设计,原本作为两个SAP流程之间的一种消息传递服务(Messaging Service) ,使SAP与SAP的业务流程之间企业数据能够有效的交换,为两个独立的SAP之间提供了的系统整合服务。不过,随着应用的发展,ALE/IDocs接口机制也已然成为与其它非SAP系统的标准的整合方式。
  2、ALE/IDocs的消息发送接收过程
  ALE的设计结构可以分为三层,即应用层,数据/消息分配层和通讯层。通讯层是SAP整合机制的基础,它利用远程功能呼叫RFC(Remote Function Call) 调用SAP系统的功能模块。
  
  数据/消息分配层,主要提供三个关键服务:
  • 按数据分配模型决定数据接收者。
  • 消息的过滤和转换。
  • 数据/消息的压缩,以提高传递效率。
  应用层直接与SAP系统接口,生成或从其它系统接收含有路由信息的消息文本IDocs,包括消息接收者的姓名,要求发送的类型以及对消息进行处理的规则。
  ALE的机制代替了原来的SAP所提供的批数据通讯BDC(Batch Data Communication) 方式。顾名思义,BDC为系统之间提供了简单的数据批处理服务,还不能作为一种中间件技术,它没有提供系统之间进行无缝整合所要求的纠错功能、系统管理和其它安全措施。总得说来,应用SAP的ALE机制进行SAP与SAP或非SAP系统整合有以下几个好处:
  • ALE技术不受SAP版本升级的影响,它提供了版本向后兼容性。ALE定义于SAP应用层,与SAP的逻辑层相对独立,整个ALE中间件独立于发送和接收系统。
  • ALE消息设计逻辑保证消息的“一次且只有一次”的消息传递。ALE采用“存储-发送”技术确保消息即使系统发生故障或接收方没有准备接收时也可以达到目的地。这样就保证接收方不至于收到重复消息。
  • ALE也提供了IDocs管理功能。主要有文本缩减、文本版本控制以及文本数据过滤。三种控制机制使得SAP开发人员可以根据实际需要对IDocs文本在运行中进行动态处理。
  • ALE提供了系统管理功能,允许对ALE系统进行启动/复位/恢复等系统操作,为开发人员提供了进一步的管理控制。
  IDoc 几乎可以传带任何SAP应用的数据,是一种“外围”定义格式,与SAP的应用数据定义不直接相关。IDocs已经广泛应用于早期的SAP-EDI的数据交换,因而它的设计有点类似于EDI的标准,即EDIFACT标准。
  IDocs是以字符基础的,因而是可读的。它有三种纪录类型,即:
  • 控制纪录-含文本信息,如IDoc类型,发送/接收方信息以及文本标识。
  • 数据纪录-含管理和实际数据部分。
  • 状态纪录-用来追踪文本传递各点的状态,如状态码,系统时间,错误标识等。
  
  下面对ALE/IDocs在系统整合过程中消息的实际传递进行介绍。
  让我们首先看发送过程。
  3、BAPI简介
  一个发送过程由事件触发,文本生成,数据打包以及交由传输媒介传递这四个步骤组成,具体如下:
  • 应用系统事件触发
  系统目标(Objects) 的状态变化,用户自主活动或其它数据库特定变化等可以启动数据表的触发程序,从而进行数据传递的初始化工作,如数据准备。
  • 生成主IDoc文本(Master)
  按标准格式生成主IDoc文件,包含所有可以传递数据(不分接收者)
  • 生成通讯Idoc
  从主IDoc中生成只与特定接收者有关的文本,通讯文本是主文本的子数据集(Subset)
  • Idoc 发送
  利用异步通讯方式将一定版本的IDoc传递到接收方。
  
  下面,让我们看接收过程。
  接收过程始于SAP系统从外部收到IDoc文本。接收过程的优点在于,接收方既可以是SAP系统,也可以是第三方系统,这也是SAP与第三方进行有效整合的基础。接收过程由以下三个步骤组成:
  • 存储Idoc-将文本存储于数据库,并进行语法校验
  • 邮件处理程序读取Idoc--一个专门设计的IDoc处理程序读取IDoc并产生SAP或其它系统所需的系统消息。多个程序可以同时运行。
  • 生成系统文本--处理程序进一步生成系统文本供系统使用,并将结果信息存于Idoc d的状态纪录中。
  
  BAPI是Business Application Programming Interface的缩写, 是SAP为3.0版本以上提供的基于企业目标(Business Object) 技术的接口应用界面。SAP在3.0版本以上采用了Object-oriented技术,逻辑定义了SAP R/3系统的所有功能目标,并且将所有的目标(Objects) 和BAPIs存储于企业目标库BOR(Business Objects Repository). SAP R/3 企业目标的目标类型(Object Type) 相当于目标设计语言中类(Class) 的概念,其定义结构由以下几部分组成:
  • 基本数据--所有目标类的通用属性,如目标标识和默认方法(Method) 。
  • 接口界面--目标的方法(Method), 事件(Event), 特征(Attributes) 。
  • 键(Key Fields)--供BOR中目标检索使用
  • 方法(Methods)-- 对目标进行所要求的各种操作。
  • 特征(Attibutes)-- 描述目标特征。
  • 事件(Events)-- 触发以改变目标状态。
  4、应用SAP-DCOM接口
  SAP于1998首次提供SAP-DCOM接口,以满足各种桌面应用开发的要求。利用DCOM连接端口,开发人员可以利用VB, C++,以DCOM目标方式访问SAP数据。在Web应用上,可以用VBScript, JavaScript 以DHTML方式页面访问,也可以用ASP访问数据。
  另外,利用DCOM也可以间接访问SAP的企业目标库BOR。上面提到的BAPI是SAP系统上专用的,在实际应用上不如DCOM来得广泛。DCOM端口主要有两个技术模块组成,一个是管理模块,另一个模块生成SAP BO的DCOM 代理组件(Proxy Components),生成的DCOM组件存放于C++。代理组件有以下属性:
  • Client-要访问的R/3客户系统
  • UserID-R/3用户
  • Password-用户密码
  • Language-系统语言
  • Destination-预先定义的目标名称
  另外,每个组件具有以下方法:
  • PutSeesionInfo()—设定系统一次调用的目标参数
  • AdviceRfcGuiSink()—用于需要SAPGUI或dubugging的场合。
  • CommitWork()-用于数据更新,无implicit commit的场合。
  • InitKeys()-DCOM目标键初始化
  • DimAs()-返回Microsoft ADO(Advanced Data Object) 纪录集(支持游标控制)。
  • 其它从R/3 BO定义中继承的方法。
  总起说来,SAP R/3 作为一个相对灵活的ERP系统,利用上述的各种整合技术能够实现SAP系统之间以及SAP 与其它系统之间的数据/过程的整合。当然,一个应用系统的高度客户化导致了系统整合的难度。随着系统功能的增加,多种可供采用的整合技术也就显得很有必要。对于SAP R/3用户来说,正确选择适用的整合技术是实现成功系统整合的关键。
  利用BAPI,开发人员可以实现对BOR进行实时访问,从而实现应用系统(SAP-SAP)之间在数据/逻辑层上的有效整合。
  透明表
  每个透明表在数据库中有一个相应的物理表。物理表的名称和数据字典中的逻辑表
  定义的名称一致。所有事务和应用数据存贮在透明表中。
  结构
  结构在数据库不存在数据记录。结构用于在程序之间或程序与屏幕之间的接口定义。
  附加结构
  附加结构定义字段的子集,该字段属于其他表格或结构,但是在修正管理中作为单
  独的对象。
  存贮表
  存储表可以用来存贮控制数据(例如:屏幕顺序,程序参数或临时数据)。几个存
  储表可以组合成一个表库。该表库和数据库中的一物理表库相一致。它包含了各组
  合库分派给它的所有记录。
  簇表
  连续的文本如文档之类可以存贮在簇表中。几个簇表可以组合成一个表簇。对这种
  表类型,不同表中的几个逻辑行组合到一物理记录。这可以实现一对象接一对象地
  存贮或访问,访问簇中的表的一个前提是,至少关键字的一部分必须相符合。几个
  簇表存贮在数据库中 一个相应的表里。
  >
  2006.5.12 14:17 作者:king 收藏 | 评论:0
  如何定义内部变量
  分类:专业技术
  > DATA [()] [] [].
  注:对于C和N型,如果length不输入,则默认长度为1;对于N型变量,如果值中包括字符,则字符不起作用,只输出数字。如果length大于实际内容的长度,则对于C型来讲,以空字符来填充,对于N型来说,对0来填充。如果指定长度,但未指定类型,则创建给定长度的字符字段。
  ? 例子:Str=’ab123’,NStr = ‘1245ab3’,Int = 100
  write 'This is star''s computer.'. 输出:This is star’s computer.
  DATA Str type C. 输出:a
  DATA Str(5) type C. 输出:ab123
  DATA NStr type N. 输出:3
  DATA NStr(7) type N. 输出:12453
  DATA NStr1 like NStr value ’1234567’. 输出:1234567
  DATA Int type I. 输出:100
  DATA Pdat(10) type p value '9.876543210' decimals 9. 输出:9.876543210
  CONSTANTS PI TYPE P DECIMALS 10 VALUE '3.1415926536'. 输出:3.1415926536
  DATA MYNAME LIKE SY-UNAME. 与系统定义的对象SY-UNAME有一样的数据类型
  ? DATA SUM1 TYPE I.
  DATA SUM2 TYPE I.
  DATA SUM3 TYPE I.
  和
  DATA: SUM1 TYPE I,
  SUM2 TYPE I,
  SUM3 TYPE I,
  是一样的,这就是链语句。 >
  2006.5.11 11:23 作者:king 收藏 | 评论:0
  预定义的数据类型
  分类:默认栏目
  > C(文本和字符):文本文字最长可达254个字符。如果需要非整型数值或较长的数字(如:'12345678901234567890'、'+0.58498'、'-8473.67'),则必须使用文本文字,该文本文字自动转换到正确的类型。同样,请使用文本文字表示浮点数值。
  D:(日期):
  F(浮点数): 对于正数和负数,类型F数值范围是1x10**-307到1x10**308,包括0(零)。精确范围近似为15位十进制数,这取决于硬件平台的浮点算法;由于是在内部将类型F数据转换为二进制系统,因此可能出现舍入误差。尽管ABAP/4处理器试图将这些影响减至最小,但是如果要求高精度,则不应该使用类型F数据。而应代之以类型P数据;如果需要大的数值范围,而且舍入误差不重要,则可以使用类型F数据。
  I(整型):数值范围是-2**31到2**31-1并且仅包括整数;对算术运算的非整型结果(如分数)进行四舍五入,而不是截断;可用于计数器、项目号、索引和时间期段等。
  N(数字文本):虽然由数字组成,但不包含数值,,但这些数字不用于计算。科目号和邮编是典型的类型。
  P(压缩号):允许在小数点后有数字;类型P数据的数值范围取决于大小和小数点后的位数,有效大小可以是从1到16字节的任何值,将两个十进制数字压缩到一个字节,而最后一个字节包含一个数字和符号,在小数点后最多允许14个数字;使用类型P数据时,最好将程序属性设置为“定点算法”,否则,将类型P数字作为整型对待;类型P数据可用于如距离、重量和钱数等数值。
  >
  2006.5.11 11:18 作者:king 收藏 | 评论:0
  程序属性的一些关键内容
  分类:默认栏目
  > 进入程序开发界面,输入program名字后,进入程序属性界面(Program Attributes):
  ? Title(标题):必须输入项;
  ? Type(类型):包括Executable program(1:如同报表的独立程序)、INCLUDE program(I:包含程序)、Module pool(M:模块存储)
  ? Application(应用程序):该项能够使系统将程序分配给适当的业务区,如:选择Financial Accounting(F:财务会计)。
  ? Logical database(逻辑数据库):仅仅应用于应用程序中的报表程序。这个属性决定报表使用哪个逻辑数据库来检索数据,以及逻辑数据库属于哪个应用程序。应用程序中数据库名称必须是唯一的。但是,整个系统可以包括数个同名数据库,因此指定应用程序很重要。如果报表程序直接读取数据,而未使用逻辑数据库,则应该像通常一样指定应用程序,而将“逻辑数据库”字段置空。
  ? Selection screen(选择屏幕版本):仅仅应用于应用程序中的报表程序。如果没有指定选择屏幕版本,则系统在逻辑数据库选择标准、报表特定参数选项的基础上自动创建选择屏幕;如果想使用自己的选择屏幕,请输入号码同时该号码必须小于1000。
  ? Editor lock(编辑器锁定):如果设置此属性,则其他用户则不能修改、改名或删除程序。只有创建用户可以更改程序、维护属性、文本摘要及文档或者解除锁定。
  ? Fixed point arithmetic(定点算术):如果设置此属性,系统则根据小数点位数将类型P字段四舍五入,或用零填补。这种情况下,无论在用户主记录中指定了什么,小数点字符总是句点(.)。
  ? Start using variant(通过变式启动): 仅仅应用于应用程序中的报表程序。如果设置该属性,则用户只能通过使用变式启动报表程序。在启动程序之前,必须创建至少一个报表变式。 >
  2006.5.11 11:04 作者:king 收藏 | 评论:0
  ABAP4的命名程序规则
  分类:默认栏目
  > ? 使用至少1个但不超过8个字符。
  ? 不要使用下列字符:句点(.);逗号(,);空格( );括号'('')';单引号(');双引号(");等号(=);星号(*);元音变音( , , , , , )和' ';百分号(%)和下划线(_):
  ? 报表程序(以列表格式输出数据分析):Yaxxxxxx或Zaxxxxxx。用应用程序区的分类字母替换a。任何有效字符替换x。注意SAP报表程序遵守相似的命名约定:Raxxxxxx。
  ? 任何其它ABAP/4程序(培训程序或事务程序):SAPMYxxx或SAPMZxxx。用有效字符替换x。注意标准SAPABAP/4程序遵守相似的命名约定:SAPMaxxx,其中a代表某应用程序区。 >
  2006.5.11 11:02 作者:king 收藏 | 评论:0
  关于SAP内表及工作区
  分类:默认栏目
  > 内表(internal table)和工作区(work area)的区别
  ABAP/4的Internal Table如同其他语言的数组结构,在操作上可以有复制,删除,新增等功能,可以存很多条记录,并且ABAP的这种用法,对行数没什么限制。
  WORK AREA就是其他语言的结构,象自定义的一个类型一样,但一旦创建一个Internal Table之后,WORK AREA就成了外界跟Intertal Table的交流口,每条记录的进入和取出都得通过它。并且在清除它们的时候要分开来清除。
  要用 MODIFY 语句更改行 ,请使用:
  语法
  MODIFY [FROM ] [INDEX ].
  FROM 选项中指定 的工作区域 代替 中的行。如 果表格有表 头行,可以 忽略 FROM 选项。这样 ,表格工作 区域就代替 行。
  如果使用 INDEX 选项,则新 行代替索引 为 的现有行。 如果替换成 功,则将 SY-SUBRC 设置为0。 如果内表包 含的行少于 , 则不更改任 何行并且 SY-SUBRC 包含4。
  如果使用没 有 INDEX 选项的 MODIFY 语句,则系 统只能在 LOOP - ENDLOOP 块中通过更 改当前行( 例如由 SY-TABIX 返回其索引 的行)来处 理它。
  modify 是用来更新内表的!
  >
  2006.5.11 10:58 作者:king 收藏 | 评论:0
  ABAP基础篇-语法-数据类型
  分类:专业技术
  > > >
  1. 数字类型(numeric types)
  (1).类型
   Abap支持三种数字类型:
   I:整型
   范围:-2147483648 to 2147483647
   P:16位
   范围:取决于小数位的长度
   注意事项:为了确保计算正确,必须在程序属性中把fixed point arithmetic选中,参考图1。
   F:浮点类型
   范围:+/- 2.2250738585072014E-308 to 1.7976931348623157E+308
   注意事项:因为长度的关系,所以尽量不要用两个该类型的数据相等作为判断条件
  (2).定义方法
   [f1] type I.
   [f1] type P decimals [num].
   [f1] type F.
  (3).使用
   I类型:
   主要是用于计数器,数量,索引,偏移量等等
   例如:
   *取得内表行数
   DATA: V_COUNTER TYPE I.
   V_COUNTER = LINES( I_TAB ).
   *根据索引读取内表中的数据
   DATA: V_INDEX TYPE I.
   READ TABLE I_TAB INDEX V_INDEX.
   *截取字符串
   DATA: V_OFFSET_START TYPE I,
   V_OFFSET_LENGTH TYPE I,
   V_C(10) TYPE C,
   L_C(3) TYPE C.
   V_C = ‘ABCDEFGHIJ’.
   V_OFFSET_START = 3.
   V_OFFSET_LENGTH = 5
   L_C = V_C+V_OFFSET_START(V_OFFSET_LENGTH).
   RESULT:
   L_C = ‘DEFGH’.
   P类型:
   主要和数据库中的QUAN类型关联;
   常用场合:大小,长度,重量,货币等有单位的场合
   *根据单位把数量写入字符型变量中
   WRITE:[数量] to [字符型变量] unit [单位].
   F类型:
   常用场合:计算
  字符类型:
   一.包括:
   C:字符
   N:应该算是字符型的数字
   D:日期类型,标准长度8(YYYYMMDD),注意其初期值的判断,不是space,而是'00000000',判断语句可以使用is initial or not。
   T:时间类型,标准长度6(HHMMSS)
   二.具体使用:
   1.对字符串的操作
   1).SHIFT:截断字符串
   SHIFT {c} [BY {n} PLACES] [{mode}].:
   作用:去掉字符串的前n个位置的字符,如果n未指定,默认为1,如果指定的n小于等于0,则字符串不变。如果n超出字符串的长度,则字符串变空,所以在做此操作的时候要注意n的指定。可以首先获得该字符串的长度,方法:len=STRLEN(C)。
   Mode:指定字符串截断的方向。
   LEFT:从左边截断
   RIGHT:从右边截断
   CIRCULAR:把左边的字符放到右边。
   SHIFT {c} UP TO {str} {mode}.:
   作用:把字符串中在str以前的字符都去掉,同样可以指定mode,原理同上。
   SHIFT {c} LEFT DELETING LEADING {str}.
   SHIFT {c} RIGHT DELETING TRAILING {str}.:
   作用:这两个语句就是把字符串c中前的(LEFT)或者后的(RIGHT)的字符str都去掉。
   以上语句常用的场合:
   A.去掉字符串中的前导字符。例如:如果alv中定一了一个字段是10位的字符,里面放的是so,po等number,而你不想显示前面的0,那么就可以这样做:SHIFT {c} LEFT DELETING LEADING 0.
   B.已知某个字符串中包含固定的字符,想把这个固定字符前面的字符删掉,那么可以使用:SHIFT {c} UP TO {str}。例如:某个物料,通过增强mga00002和mga00003对其加了前缀,这个前缀部分是在某固定值表中取得的数据,在具体显示中,要把其前缀去掉。如TE-MRP-MAT1中想把te去掉,mrp表示该物料是跑mrp的,需求要求把te-去掉,mrp可以在固定值表中取得,则可以使用SHIFT {c} UP TO 'MRP'.
   2).REPLACE:替换字符串
   REPLACE {str1} WITH {str2} INTO {c} [LENGTH {l}].:
   作用:把字符串c中的str1替换成str2,如果指定l,就是指定了替换的长度。如果替换成功,则SY-SUBRC设置成0。
   常用场合:
   字符串的替换操作比较常用,需要注意的是l的指定长度。
   3). TRANSLATE:转换字符串
   TRANSLATE {c} TO UPPER CASE.
   TRANSLATE {c} TO LOWER CASE.:
   作用:字符串的大小写的转换
   TRANSLATE {c} USING {r}. :
   作用:根据规则r转换字符串c
   常用场合:
   Sap系统一般都是使用大写字母的,但是某些特定的字段却是用小写字母来标记的,在操作这些字段的时候就需要注意大小写的转换了。转换规则倒是不太常用,到现在我还没有遇到过。
   4). SEARCH:查找字符串
   SEARCH {c} FOR {str} {options}.:
   作用:在字符串c中查找str,如果找到了,SY-SUBRC为0,SY-FDPOS为找到字符串的具体位置。
   需要说明的地方:注意模式的使用
   指定str:查找str,str中后面的空格忽略
   指定.str.:查找str,包含了str中尾部的空格
   指定*str:查找以str结尾的字符串
   指定str*:查找以str开头的字符串
   {options}的指定:
   主要用到的就是:STARTING AT {n1}指定开始位置
   ENDING AT {n2}指定结束位置
   常用场合:
   一般用来判断某个字符串是否符合条件。也可以结合其他语句对字符串进行操作。
   5).CONDENSE:去掉字符串中的空格
   CONDENSE {c} [NO-GAPS].:
   作用:去掉字符串中的前面和后面的空格,如果指定NO-GAPS,则去掉字符串中的所有空格。
   常用场合:获得字符串的精确长度,用于判断。
   6).SPLIT:拆分字符串
   SPLIT {c} AT {del} INTO {c1} ... {cn}.
   作用:按照分割字符del把字符串c分割成c1…cn。
   SPLIT {c} AT {del} INTO TABLE {itab}.
   作用:按照分割字符del把c分割,然后放到内表中的相应字段
   常用场合:
   文件名的分割,根据完整的文件路径加文件名把文件名分割出来。
   难点:无法确定要分割多少次.
   解决方法:两两分割,到最后的那个就是了。例如:str=c:dir1dir2dir3file
   Split str at '' into str1 str2.
   Find str2 for '/'.
   Check sy-subrc = 0.
   Do.
   Find str2 for '/'.
   If sy-subrc = 0.
   Split str2 into str1 str2.
   Else.
   Exit.
   Endif.
   Enddo.
   文件上传的类型是字符串,把其分割后放到内表中。例如上面的问题:
   data: begin of itab occurs 0 ,
   col1(30) type c,
   end of itab.
   Split str at '' into table itab.
   describe table itab lines line.
   Read table itab index line.
   Itab-col1就是file
   7).CONCATENATE:连接字符串
   CONCATENATE {c1} ... {cn} INTO {c} [SEPARATED BY {s}].
   作用:把c1…cn用s分隔连接到c中
   常用场合:文件下载,对文件中的字段编辑。
  > > >
  2006.5.9 10:07 作者:king 收藏 | 评论:1
  ABAP-报表的事件
  分类:专业技术
  > >
  一, 首先介绍一下ABAP的程序的类型:
  Program type(程序类型) Introductory statement(类型描述)
  1 REPORT(报表)
  M PROGRAM(屏幕程序)
  F FUNCTION-POOL(函数组)
  K CLASS-POOL(类组)
  J CLASS-POOL(接口组)
  T TYPE-POOL(类型池)
  二, 下面介绍报表中用到的事件以及作用:
  1. LOAD-OF-PROGRAM:程序开始执行时候自动调用
  这个事件在SUBMIT,CALL TRANSACTION,PERFORM等执行的时候系统会自动调用这个事件。所以无需声明即可。
  2. INITIALIZATION
  (1).只能用于报表程序
  (2).在选择屏幕出现之前执行,如果用逻辑数据库的话,这个是唯一能够修改选择屏幕初始值的地方。
  (3).通常的用法是在这里给选择屏幕中的字段赋值。
  3. AT SELECTION-SCREEN
  (1).其实就像一个FORM,所以在这个事件里声明的变量都是局部变量。
  (2).根据SY-UCOMM这个系统变量可以判断用户的命令
  (3).在这个事件里响应的是屏幕上选择条件中的事件,例如CHECKBOX的选择与否,RADIOBUTTON的选择,LISTBOX的选择等等。所以分为以下几个方面:
  1. ... ON psel :在PARAMETER变化是触发的事件
  2. ... ON END OF sel :SELECT-OPTION触发的事件
  3. ... ON VALUE-REQUEST FOR psel_low_high :选择的帮助(F4)
  4. ... ON HELP-REQUEST FOR psel_low_high :选择的帮助(F1)
  5. ... ON RADIOBUTTON GROUP radi :单选按钮事件
  6. ... ON BLOCK block :框架的触发事件
  7. ... OUTPUT :响应屏幕上的事件,修改选择屏幕的唯一方法
  4. START-OF-SELECTION
  报表程序必须执行的事件,在进入第二屏幕之前触发。
  5. GET
  获得逻辑数据库的值。前提是必须首先声明逻辑数据库。
  6. END-OF-SELECTION
  第二屏幕显示完毕,结束处理。
  7. MODULE
  这个是当你调用自己定义的屏幕时,响应屏幕事件的方法。
  8. ENDMODULE
  9. CHECK
  只对逻辑数据库使用,检查是否取得数据。
  10. REJECT
  同样只对逻辑数据库使用,退出。
  11. STOP
  结束一个处理块。
  12. RETURN
  返回一个处理块。
  三, 附加说明:
  1. SET PF-STATUS:
  基本语法格式:SET PF-STATUS pfstat.
  扩展:
  1. ... EXCLUDING f oder ... EXCLUDING itab
  2. ... IMMEDIATELY
  3. ... OF PROGRAM progname
   这个是设置屏幕菜单,命令行等的命令,详细地信息我会在后面关于菜单设计的时候说明。
  2. SET TITLEBAR:
  设置屏幕标题,在屏幕显示之前调用。
  > >
  2006.5.9 10:02 作者:king 收藏 | 评论:0
  献给低收入的大学生和民工们!
  分类:默认栏目
  > 在21世纪,在这么发达的年代,你竟然能从一个大学毕业生的嘴巴里听到“拉空了肚子,晚上容易饿!”,你会有怎样的感觉?感动?悲恸?还是心酸?还是无可奈何的哀叹?
  
    或许都是,或许都不是!
  
    我无暇顾及一个弱者的心态,因为社会如此,我也无能为力。我唯一能表示的除了同情或许还是只有同情.
  
    我也曾经鄙视过,甚至曾经在心底侮辱过: 活该,谁让你没本事考个名牌大学呢!没钱读个屁书,自作自受!
  
    可是我也不得不承认,一个山里的孩子,是不能仅仅凭着聪明才智就能高攀的起名牌大学的门槛的;那需要能力,实力.实力有时候除了良好的教育,优秀的老师,还有很多很多,比如金钱堆砌的补习班,比如只有城里孩子才能享受的到的全方位的教育,又比如有有权有势的父母.
  
    他们没有,他们是农村的孩子,他们没资格和权利有,没人给他们买各种辅导资料,也没有全国的优秀教师给他们手把手的教,他们没见过钢琴,没见过电脑,他们甚至除了村支书,不认识任何一个可以称得上干部的领导.
  
    他们一天到晚只会看发的那唯一的课本,只会拼命的学,只知道只有考上大学才能改变自己的命运.
  
    听着他们蹩脚的英语,不太流利的普通话,有些邋遢的装扮,破旧过时的衣着,我们都会忍不住笑.
  
    当我们有了太多的这样的习惯,于是我们便开始不在乎,他们是不是饿,是不是在我们浪费粮食的时候,他们在心底里还默念着:不敢去厕所,怕拉空了肚子,饿!的事实.
  
    " 人怎能跟人相比呢?没有可比性!农村的怎么能跟城市的孩子比呢?没比的必要!" 这是以前我的一个朋友经常跟我说的一句话,那时候听了觉得好笑,现在想起来,觉得有点无可奈何的心酸.
  
  人难道真分三六九等么?谁分的?你么??
  
   农村真的穷,很多人都说,穷还生那么多?其实,为什么要生了一个还要生一个?谁愿意那么穷还要养几个孩子,生活压力更大,可是没办法。被逼的啊!在农村,人老了,没劳动能力的,就等于开始要养个闲人,农村的老人没养老保险,没任何社会福利,也没任何生活保障。如果不多生自己孩子,老了后,一个孩子养不起俩人老,那还不得活活饿死,于是只好多生几个,分轻负担。养儿防老是农村不得以的传统!
  
    每个农村的父母都想自己孩子有出息,而想改变命运只有考大学一条出路,可是读大学却是很昂贵的,所以家里只要有一个考上大学的,全家都要遭殃,跟着砸锅卖铁的供着。可是现在大学生毕业工作很难找,尤其是读的学校不好,专业又不好,更难找;没拿到毕业证等于没上大学,去任何单位人家都要看你学历证书,没有,只能当民工。
  一. APPEND LINE
  格式: APPEND [ TO ] .
  舉例一. (使用work area)
  DATA: BEGIN OF LINE,
   COL1 TYPE I,
   COL2 TYPE I,
   END OF LINE.
  DATA ITAB LIKE LINE OCCURS 10.
  DO 2 TIMES.
   LINE-COL1 = SY-INDEX.
   LINE-COL2 = SY-INDEX ** 2.
   APPEND LINE TO ITAB.
  ENDDO.
  LOOP AT ITAB INTO LINE.
   WRITE: / LINE-COL1, LINE-COL2.
  ENDLOOP.
  執行結果為:
  1 1
  2 4
  舉例二. (不使用work area)
   DATA: BEGIN OF ITAB OCCURS 10,
   COL1 TYPE I,
   COL2 TYPE I,
   END OF ITAB.
   DO 2 TIMES.
   ITAB-COL1 = SY-INDEX.
   ITAB-COL2 = SY-INDEX ** 2.
   APPEND ITAB.
   ENDDO.
   LOOP AT ITAB.
   WRITE: / ITAB-COL1, ITAB-COL2.
   ENDLOOP.
   執行結果与舉例一相同.
  舉例三. (加入另一個Internal table的元素)
   格式: APPEND LINES OF [FROM ] [TO ] TO .
   將的元素加入至中,可選取自至的范圍.
   APPEND LINES OF ITAB TO JTAB.
  2006.3.17 00:12 作者:boxman2000 收藏 | 评论:0
  Internal table 的定義有以下几种格式
  分类:ABAP学习
  § INTERNAL TABLE
  一. Internal Table 的宣告
  ABAP/4中的Internal Table是一种Data Structure,類似于其他語言中的STRUTURE,它可以由几個不同類型的欄位(field)組成,用來表示具有不同屬性的某一事物,單獨一筆資料表示某個事物,多筆資料表示具有相同屬性的多個事物.例如:
  為了存取或記錄某班的同學資料,我們創建如下的internal table:
  DATA: BEGIN OF STUDENT OCCURS 20,
   STD_ID TYPE N,
   NAME(10) TYPE C,
   AGE TYPE I,
   BIRTH TYPE D,
   SCORE TYPE P DECIMALS 2,
   END OF STUDENT.
  此時我們已經創建了名叫STUDENT的internal table,并且為它預先申請了能夠存放20筆資料的Buffer(當然,如果存取資料不止20筆,程式執行時,會自動申請系統Buffer)
  Internal table 的定義有以下几种格式:
  格式一. DATA: BEGIN OF OCCURS ,
   TYPE ,
   [ TYPE ,
   TYPE ,
   … ]
   END OF .
  格式二. TYPES: BEGIN OF ,
   TYPE ,
   [ TYPE ,
   TYPE ,
   … ]
   END OF .
   TYPES TYPE OCCURS .
  格式三. DATA: BEGIN OF .
   INCLUDE STRUCTURE

你可能感兴趣的:(SAP,ABAP)