ABAP--关于Data Reference的使用

本文详细介绍了ABAP中Data References的使用,包括如何定义、动态创建内存空间、赋值以及访问数据。Data References可以指向ABAP的基本数据或组合体,其赋值通常通过CREATE DATA和GET REFERENCE OF语句实现。对于不同类型的数据参考变量,访问其指定数据的方式有所不同,可能需要使用Field Symbols配合CASTING进行操作。
  Data References(只能指向abap定义的基本数据或者基本数据组合体)
1、定义数据参考变量(Data References
DATA dref TYPE REF TO DATA.(指向任意类型,但在创建时必须指定对象类型)
DATA dref TYPE REF TO DATA_TYPE.
或者
TYPES t_dref TYPE REF TO DATA.
DATA dref TYPE t_dref.
在完成地址变量定义时,变量没有指向任何对象,此时你不可引用。只有在变量赋值后在引用。地址变量的赋值有两种方法:
CREATE DATA
GET REFERENCE OF dobj INTO dref.
2、动态创建数据参考的内存空间(CREATE DATA)
CREATE DATA dref {TYPE type}|{LIKE dobj}这种语句创建的对象没有名称,只有地址变量指向该内存变量;在申明参考变量时,未指定类型则必须加{TYPE type}|{LIKE dobj}说明。
有时需要动态创建动态类型数据对象,语法如下
CREATE DATA dref TYPE (name).
3、将数据地址赋值给数据参考变量(GET REFERENCE)
GET REFERENCE OF dobj INTO dref.
4、访问数据参考变量指定的数据
访问数据参考变量指定的数据有两种情况:
1) 对于使用DATA dref TYPE REF TO DATA_TYPE来声明的数据参考变量,程序可以直接通过->*运算符直接访问数据;
代码样例
types: begin of STRUC_1,
         A type I,
         B type ref to SFLIGHT,
         C type P,
       end of STRUC_1.
data: S1 type STRUC_1.
types: begin of STRUC_2,
         X(10) type C,
         Y     type ref to STRUC_1,
         Z     type I,
       end of STRUC_2.
data:  S2 type STRUC_2,
       R2 type ref to STRUC_2.
if S1-A > 10.
  create data S1-B.
  S1-B->CARRID = 'LH'.
  S1-B->PAYMENTSUM = 1000.
endif.
S2-Y->A   = 100.
S2-Y->*-A = 200. "Same as S2-Y->A  
S2-Y->B->FLDATE = SY-DATUM.
 
2) 对于使用DATA dref TYPE REF TO DATA来声明的数据参考变量,程序如果要访问数据参考变量指定的数据,你首先要将数据参考变量赋值给一个字段符号(Field sysbol)(是不能直接通过数据参考变量来访问的).如果数据参考变量为初始化状态, sy-subrc就返回4。
ASSIGN dref->* TO <fs> [CASTING ...].
代码样例
DATA: numref     TYPE REF TO DATA,
      number     TYPE I VALUE 123.
FIELD-SYMBOLS: <fs> TYPE ANY.
GET REFERENCE OF number INTO numref.
ASSIGN numref->* TO <fs>.
ABAP中对F-02事务码(即总账凭证录入事务)进行增强字段的开发或配置,通常涉及对SAP标准功能的扩展,以满足特定业务需求。这种增强可以通过多种方式进行,包括使用用户出口(User Exits)、BADI(Business Add-In)或隐式增强(Implicit Enhancement)等技术。 对于F-02事务码的增强字段开发,可以遵循以下步骤和方法: ### 使用隐式增强 隐式增强是一种在SAP标准程序中插入自定义代码的方法,而无需修改标准程序本身。这种方法特别适用于那些SAP已经预留了增强点的地方。例如,在引用[2]中提到的,在子程序`aktualisieren_f14`中实现与隐式增强相同代码的做法,可以在不改变原有逻辑的情况下,向F-02事务码添加新的功能或字段。 ```abap FORM aktualisieren_f14. " 在此添加自定义代码 " 例如,更新自定义字段 MODIFY zyour_table FROM ls_your_record. ENDFORM. ``` ### 使用BAPI进行后处理 如果需要在创建会计凭证时执行额外的操作,可以考虑使用BAPI `BAPI_ACC_DOCUMENT_POST`,如引用[4]所示。通过这个BAPI,可以在凭证创建后立即执行特定的业务逻辑,比如更新数据库表或触发其他业务流程。 ```abap DATA: wa_extension TYPE bapiparex, ext_value(960) TYPE c, wa_accit TYPE accit, l_ref TYPE REF TO data. " 设置扩展参数 wa_extension-name = 'ZYOUR_FIELD'. wa_extension-value = 'Your Value'. APPEND wa_extension TO lt_extension. " 调用BAPI CALL FUNCTION 'BAPI_ACC_DOCUMENT_POST' EXPORTING documentheader = ls_documentheader TABLES accountgl = lt_accountgl extension = lt_extension IMPORTING documenttype = lv_documenttype documentnumber = lv_documentnumber companycode = lv_companycode postingdate = lv_postingdate documentdate = lv_documentdate. ``` ### 配置增强字段 除了编程级别的增强外,还可以通过SAP的配置选项来添加增强字段。这通常涉及到在SAP GUI中导航至相应的配置节点,如`SPRO` -> `SAP Reference IMG` -> `Financial Accounting (New)` -> `Financial Accounting Global Settings (New)` -> `Document` -> `Document Types`,然后选择适当的文档类型进行字段增强配置。 ### 相关问题 1. 如何在ABAP中实现隐式增强? 2. BAPI `BAPI_ACC_DOCUMENT_POST`的主要用途是什么? 3. 在SAP中配置增强字段的具体步骤有哪些? 4. F-02事务码中如何利用用户出口进行字段增强? 5. 使用隐式增强和BADI增强F-02事务码有何不同?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值