Abap 如何将旧的HR INCLUDE添加到本地类中?

Abap 如何将旧的HR INCLUDE添加到本地类中?,abap,sap-hr,Abap,Sap Hr,因此,我需要使用包括rpcblo00和rpcbdt00来获取信息类型更改的类型(创建、更新、删除)。在此之前,我使用了一个子程序,该子程序对include没有问题,但我无法将它们放入一个类中 如果我尝试将include放入所描述的方法中,我会得到以下错误(因为lo键中的负号): 语法错误:名称只能由字符“A-Z”、“0-9”组成 以及""。此外,它们可能不会以数字开头 最小可复制示例: CLASS lcl_infotypaenderungen DEFINITION. PUBLIC SECT

因此,我需要使用
包括rpcblo00和rpcbdt00
来获取信息类型更改的类型(创建、更新、删除)。在此之前,我使用了一个子程序,该子程序对include没有问题,但我无法将它们放入一个类中

如果我尝试将include放入所描述的方法中,我会得到以下错误(因为
lo键中的负号)

语法错误:名称只能由字符“A-Z”、“0-9”组成 以及""。此外,它们可能不会以数字开头

最小可复制示例:

CLASS lcl_infotypaenderungen DEFINITION.

  PUBLIC SECTION.

    TYPES: tty_aenderungs_operationen TYPE STANDARD TABLE OF pc403.

    METHODS:

      constructor 
          IMPORTING is_aenderungs_kopf TYPE pldoc_key,

      get_aenderungs_operationen 
          RETURNING value(rt_aenderungs_operationen) TYPE tty_aenderungs_operationen.

  PRIVATE SECTION.

    DATA: s_aenderungs_kopf        TYPE pldoc_key,
          t_aenderungs_operationen TYPE tty_aenderungs_operationen.

    METHODS:

      select_aenderungs_operationen.

ENDCLASS.                    "lcl_infotypaenderungen DEFINITION

*----------------------------------------------------------------------*

TYPE-POOLS: abap.

DATA: lo_infotypaenderungen     TYPE REF TO lcl_infotypaenderungen,
      lv_fehler                 TYPE sy-subrc,
      lt_log_kopf               TYPE pldoc_key_tab WITH HEADER LINE,
      lt_log_felder             TYPE TABLE OF hrinftylog_fields,
      lt_infotyp_vorher         TYPE prelp_tab,
      lt_infotyp_nachher        TYPE prelp_tab,
      lt_aenderungs_operationen TYPE STANDARD TABLE OF pc403.

FIELD-SYMBOLS: <log_kopfzeile>  TYPE pldoc_key.

*----------------------------------------------------------------------*

CALL FUNCTION 'HR_INFOTYPE_LOG_GET_LIST'
  EXPORTING
    tclas              = 'A'
    begda              = '20190315'
    endda              = '20190315'
  IMPORTING
    subrc              = lv_fehler
  TABLES
    infty_logg_key_tab = lt_log_kopf.

  CLEAR lv_fehler.
  SORT lt_log_kopf DESCENDING BY infty bdate btime pernr.

  LOOP AT lt_log_kopf ASSIGNING <log_kopfzeile>.

    CALL FUNCTION 'HR_INFOTYPE_LOG_GET_DETAIL'
      EXPORTING
        logged_infotype  = <log_kopfzeile>
      IMPORTING
        subrc            = lv_fehler
      TABLES
        infty_tab_before = lt_infotyp_vorher
        infty_tab_after  = lt_infotyp_nachher
        fields           = lt_log_felder.

      CREATE OBJECT lo_infotypaenderungen
        EXPORTING
            is_aenderungs_kopf = <log_kopfzeile>.

      REFRESH lt_aenderungs_operationen.
      lt_aenderungs_operationen = lo_infotypaenderungen->get_aenderungs_operationen( ).

  ENDLOOP.

*----------------------------------------------------------------------*

CLASS lcl_infotypaenderungen IMPLEMENTATION.

  METHOD constructor.

    me->s_aenderungs_kopf = is_aenderungs_kopf.
    me->select_aenderungs_operationen( ).

  ENDMETHOD.                    "constructor

  METHOD select_aenderungs_operationen.

    INCLUDE rpcblo00.      """  <--- 
    INCLUDE rpcbdt00.      """  <---

    lo-key-tclas = me->s_aenderungs_kopf-tclas.
    lo-key-pernr = me->s_aenderungs_kopf-pernr.
    lo-key-infty = me->s_aenderungs_kopf-infty.
    lo-key-bdate = me->s_aenderungs_kopf-bdate.
    lo-key-btime = me->s_aenderungs_kopf-btime.
    lo-key-seqnr = me->s_aenderungs_kopf-seqnr.
    IMPORT header TO me->t_aenderungs_operationen FROM DATABASE pcl4(la) ID lo-key.

  ENDMETHOD.                    "select_aenderungs_operationen

  METHOD get_aenderungs_operationen.

    rt_aenderungs_operationen = me->t_aenderungs_operationen.

  ENDMETHOD.                    "get_aenderungs_operationen

ENDCLASS.                    "lcl_infotypaenderungen IMPLEMENTATION
类lcl\u信息类型定义。
公共部分。
类型:tty_aenderungs_操作类型pc403标准表。
方法:
建造师
导入是\u aenderungs\u kopf类型pldoc\u键,
做手术
返回值(rt_aenderungs_operationen)类型tty_aenderungs_operationen。
私人部分。
数据:s_AENDERUNG s_kopf型pldoc_键,
t_aenderungs_操作类型tty_aenderungs_操作类型。
方法:
选择操作n。
末级。“lcl_信息类型的定义
*----------------------------------------------------------------------*
类型池:abap。
数据:lo_infotypaenderungen类型参考至lcl_infotypaenderungen,
lv_fehler型sy subrc,
lt_log_kopf类型pldoc_key_选项卡,带标题行,
lt_log_felder类型的hrinftylog_字段表,
lt\u信息类型\u vorher类型预处理选项卡,
lt\u信息类型\u nachher类型预处理选项卡,
pc403的lt_aenderungs_操作类型标准表。
字段符号:键入pldoc_键。
*----------------------------------------------------------------------*
调用函数“HR\u INFOTYPE\u LOG\u GET\u LIST”
出口
tclas='A'
贝格达='20190315'
endda='20190315'
进口
subrc=lv_fehler
桌子
infty_logg_key_tab=lt_log_kopf。
清除吕费勒。
按每个时间的输入日期按降序对日志进行排序。
在lt_log_kopf处循环。
调用函数“HR\u INFOTYPE\u LOG\u GET\u DETAIL”
出口
记录的信息类型=
进口
subrc=lv_fehler
桌子
infty_tab_before=lt_infotyp_vorher
infty\U tab\U after=lt\u信息类型\u nachher
字段=lt\u log\u felder。
创建对象lo_infotypaenderungen
出口
是(u aenderungs_kopf=)。
刷新lt_aenderungs_操作。
lt_aenderungs_operationen=lo_信息类型aenderungen->get_aenderungs_operationen()。
结束循环。
*----------------------------------------------------------------------*
类lcl_infotypaenderungen实现。
方法构造函数。
me->s_aenderungs_kopf=is_aenderungs_kopf。
me->select\u aendrengs\u operationen()。
ENDMETHOD.“构造函数”
方法选择\u aenderungs\u操作n。
包括rpcblo00。“t_aenderungs_”操作。
ENDMETHOD.“获取操作”
末级。“lcl_infotypaenderungen实施
有人知道一个好的解决方案吗?提前谢谢

编辑:包含一些声明和从数据集群读取的makro。当然,我可以直接将它们放入方法中,但我希望避免这样做(目前我这样做了)


或者,是否有人知道以不同的方式获取每个信息类型行的更改操作?

如果您将类作为本地类使用,那么使用这些包含的唯一方法就是将它们放在程序的最开始。缺点当然是那里的变量变为全局变量,但不幸的是,没有其他方法可以这样做当然,如果你想使用一个全局类(不确定你的最小工作示例是否简化为使用一个局部类而不是全局类)

报告ZZZ。

INCLUDE rpcblo00。”“多亏了Jagger,我可以使它与本地类一起工作,但如果以后有人想知道如何更改INCLUDE代码以便能够在全局方法中使用它,基本上只需要去掉
INCLUDE STRUCTURE
声明和带有标题行的交换表

所以

变成

DATA: lo_key TYPE pc400.
TYPES: BEGIN OF ty_belege,
      splkz(01) TYPE x, 
      field(10) TYPE c,   
      ftype(04) TYPE c,  
      fleng(03) TYPE n,  
      decim(02) TYPE n,  
      olddt(50) TYPE c,   
      newdt(50) TYPE c,   
    END OF ty_belege.

DATA: belege_00 TYPE STANDARD TABLE OF ty_belege.

变成

DATA: lo_key TYPE pc400.
TYPES: BEGIN OF ty_belege,
      splkz(01) TYPE x, 
      field(10) TYPE c,   
      ftype(04) TYPE c,  
      fleng(03) TYPE n,  
      decim(02) TYPE n,  
      olddt(50) TYPE c,   
      newdt(50) TYPE c,   
    END OF ty_belege.

DATA: belege_00 TYPE STANDARD TABLE OF ty_belege.

宏可以保持不变(或者我想您可以重写它)。

您是将该类作为全局类还是作为示例中的本地类使用?谢谢,这会起作用,我可能不会将该类设置为全局类。如果我这样做了,那么我想唯一的方法就是复制包含代码并使其与oo兼容?是的,似乎没有其他方法。我试着把它放在SE24的每一个可能的类部分中,事实上我还没有试过单元测试,但是没有任何效果。谢谢你的努力!
TYPES: BEGIN OF ty_belege,
      splkz(01) TYPE x, 
      field(10) TYPE c,   
      ftype(04) TYPE c,  
      fleng(03) TYPE n,  
      decim(02) TYPE n,  
      olddt(50) TYPE c,   
      newdt(50) TYPE c,   
    END OF ty_belege.

DATA: belege_00 TYPE STANDARD TABLE OF ty_belege.