整理SAP ABAP 动态语句详解.docx
- 文档编号:2163041
- 上传时间:2022-10-27
- 格式:DOCX
- 页数:28
- 大小:90.72KB
整理SAP ABAP 动态语句详解.docx
《整理SAP ABAP 动态语句详解.docx》由会员分享,可在线阅读,更多相关《整理SAP ABAP 动态语句详解.docx(28页珍藏版)》请在冰豆网上搜索。
整理SAPABAP动态语句详解
将数据对象分配给字段符号
在使用字段符号之前必须先分配数据对象给它。
对于结构化字段符号,必须在定义中包括这个分配(参见定义结构化字段符号)。
对于非结构化字段符号,可以自由决定何时何地首次分配数据对象。
在程序中,不管字段符号是否结构化,都可以将不同的数据对象分配给同样的字段符号。
要给字段符号分配数据对象,可以使用ASSIGN语句。
ASSIGN语句有几个变量和参数。
下列主题说明:
ASSIGN语句的基本格式
将字段符号分配给其它字段符号
分配字段串组件
定义字段符号的数据类型
更改小数位
分配全局字段的局部副本
ASSIGN语句的基本格式
ASSIGN语句的基本格式包含两个静态变量和两个动态变量。
静态ASSIGN
具有偏移量说明的静态ASSIGN
动态ASSIGN
表工作区的动态分配
静态ASSIGN
如果运行之前知道想要分配给字段符号的数据对象的名称,则如下使用ASSIGN语句:
语法
ASSIGN
分配之后,字段符号
FIELD-SYMBOLS:
DATA:
TEXT(20)TYPECVALUE'Hello,howareyou?
',
NUMTYPEIVALUE5,
BEGINOFLINE1,
COL1TYPEFVALUE'1.1e+10',
COL2TYPEIVALUE'1234',
ENDOFLINE1,
LINE2LIKELINE1.
ASSIGNTEXTTO
ASSIGNNUMTO
DESCRIBEFIELD
WRITE:
/
ASSIGNLINE1TO
ASSIGNLINE2-COL2TO
MOVE
ASSIGN'LINE2-COL2='TO
WRITE:
/
输出如下:
Hello,howareyou?
haslength20
LINE-COL2=1,234
示例定义两个字段符号
因为
在示例教程中
具有偏移量说明的静态ASSIGN
通过使用下列ASSIGN语句,可以指定要分配给字段符号的字段的偏移值:
语法:
ASSIGN
正如在指定数据对象的偏移量中所描述的,具有偏移量
在ASSIGN语句中,偏移量的说明有下列特殊特征:
_
_系统不检查所选部分是否位于字段
偏移量
写地址时,可以超出
_如果没有指定长度
如果
_如果
FIELD-SYMBOLS
DATA:
BEGINOFLINE,
STRING1(10)VALUE'0123456789',
STRING2(10)VALUE'abcdefghij',
ENDOFLINE.
WRITE/LINE-STRING1+5.
ASSIGNLINE-STRING1+5TO
WRITE/
ASSIGNLINE-STRING1+5(*)TO
WRITE/
输出如下:
56789
56789abcde
56789
该示例中,可以看到WRITE语句和ASSIGN语句中的偏移量说明的区别。
对于WRITE,在LINE-STRING1端部截短了输出。
如果指定偏移量大于9,将导致语法检查时出错。
在第一个ASSIGN语句中,将LINE-STRING1中以偏移量5开头长度为10的内存区域分配给字段符号
因为程序中明确定义了LINE-STRING1后面的内存区,所以这将导致很有意义的输出结果。
在第二个ASSIGN语句中,避免了LINE-STRING1边界后面的内存分配。
FIELD-SYMBOLS
DATA:
BEGINOFLINE,
AVALUE'1',BVALUE'2',CVALUE'3',DVALUE'4',
EVALUE'5',FVALUE'6',GVALUE'7',HVALUE'8',
ENDOFLINE,
OFFTYPEI,
LENTYPEIVALUE2.
DO2TIMES.
OFF=SY-INDEX*3.
ASSIGNLINE-A+OFF(LEN)TO
ENDDO.
DO8TIMES.
OFF=SY-INDEX-1.
ASSIGNLINE-A+OFF
(1)TO
WRITE
ENDDO.
输出如下:
123XX6XX
该示例中,可以看到字段符号是如何方便访问和规则字段串的处理的。
然而,请注意,这种处理字段限制范围之外内存内容的灵活方法也有其危险性,可能导致运行错误。
动态ASSIGN
如果仅在运行时才知道要分配给字段符号的数据对象名称,请使用下列ASSIGN语句:
语法
ASSIGN(
这个语句将名称包含在
对(
运行时,系统按下列顺序搜索给定的字段:
1.如果分配是在子程序或功能模块中执行的,系统将在局部数据的子程序或功能模块中搜索字段。
2.如果分配是在子程序或功能模块之外执行的,或者在其中未找到字段,则系统将在程序的全局数据中搜索字段。
3.如果在全局数据中未发现此字段,系统将在表工作区中搜索,该表工作区是指当前程序组的主程序中TABLES语句声明的表工作区。
程序组由主程序和包含外部子程序的定义的所有程序组成,这些外部子程序被主程序调用(包括被嵌套的程序)。
由于这种搜索对响应时间有负面效应,只有绝对必要时,才可使用动态ASSIGN。
如果在运行之前知道只分配表工作区,则可以使用在表工作区的动态分配中所描述的ASSIGN语句的变量。
如果搜索成功并且字段可分配给字段符号,则SY-SUBRC设为0。
否则,返回4。
为安全起见,动态ASSIGN之后总要检查SY-SUBRC的值,以避免字段符号指向未定义区域。
假设主程序SAPMZTST如下:
PROGRAMSAPMZTST.
TABLESSBOOK.
SBOOK-FLDATE=SY-DATUM.
PERFORMFORM1(MYFORMS1).
假设还调用两个程序MYFORMS1和MYFORMS2:
PROGRAMMYFORMS1.
FORMFORM1.
PERFORMFORM2(MYFORMS2).
ENDFORM.
和
PROGRAMMYFORMS2.
FORMFORM2.
DATANAME(20)VALUE'SBOOK-FLDATE'.
FIELD-SYMBOLS
ASSIGN(NAME)TO
IFSY-SUBRCEQ0.
WRITE/
ENDIF.
ENDFORM.
执行SAPMZTST之后,输出显示如下:
08.02.1995
该示例中,程序组由SAPMZTST、MYFORMS1和MYFORMS2组成。
在MYFORMS2中定义字段符号
动态ASSIGN语句之后,指向主程序SAPMZTST中声明的表工作区的组件FLDATE。
用静态ASSIGN语句,这是不可能的。
换句话说,不能用SBOOK-FLDATE替代(NAME),因为语法检查时将导致错误。
createdwithHelptoRTFfileformatconverter
表工作区的动态分配
如果运行之前知道要将表工作区分配给字段符号,但不知道表区的名称,请使用动态ASSIGN语句的下列变量:
语法
ASSIGNTABLEFIELD(
系统仅在表工作区中搜索要分配给字段符号的数据对象,该表工作区是由当前程序组的主程序中TABLES语句声明的。
即,系统仅执行在动态ASSIGN所描述的搜索的第三步。
如果搜索成功,并且可以分配字段给字段符号,则SY-SUBRC设为0。
否则返回4。
TABLESSBOOK.
DATA:
NAME1(20)VALUE'SBOOK-FLDATE',
NAME2(20)VALUE'NAME1'.
FIELD-SYMBOLS
ASSIGNTABLEFIELD(NAME1)TO
WRITE:
/'SY-SUBRC:
',SY-SUBRC.
ASSIGNTABLEFIELD(NAME2)TO
WRITE:
/'SY-SUBRC:
',SY-SUBRC.
输出如下:
SY-SUBRC:
0
SY-SUBRC:
4
在第一个ASSIGN语句中,系统发现表工作区SBOOK和SY-SUBRC的组件FLDATE被设为0。
第二个ASSIGN语句中,系统没有发现字段NAME1,因为它只被DATA语句声明,而不是被TABLES语句声明。
在这种情形,SY-SUBRC返回4。
将字段符号分配给其它字段符号
除了使用数据对象的名称外,还可以将字段符号分配给ASSIGN语句的所有变量中的字段符号。
为此,编码静态ASSIGN如下:
语法
ASSIGN
可按下列方式编码动态ASSIGN:
语法
ASSIGN[TABLEFIELD](
字段
DATA:
BEGINOFS,
AVALUE'1',BVALUE'2',CVAL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整理SAP ABAP 动态语句详解 整理 SAP 动态 语句 详解