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.