簡體   English   中英

如何將舊 HR INCLUDE 添加到本地 class 中?

[英]How to add old HR INCLUDE into local class?

所以我需要使用INCLUDES rpcblo00 and rpcbdt00來獲取信息類型更改的類型(創建、更新、刪除)。 之前我使用了一個對包含沒有問題的子例程,但我終生無法將它們放入 class 中。

如果我嘗試將 include 放入這里描述的方法中(它甚至與 HR include 相同) ,我會收到以下錯誤(因為lo-key中的減號):

語法錯誤:名稱只能包含字符“AZ”、“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

有誰知道一個好的解決方案? 提前致謝

編輯:包含有一些聲明和一個從數據集群讀取的宏。 當然,我可以直接將它們放入方法中,但我想避免這種情況(現在我這樣做了)。

或者,是否有人知道每個信息類型行獲取更改操作的不同方法?

如果您將 class 用作本地,那么使用這些包含的唯一方法是將它們放在程序的最開始。 缺點當然是那里的變量變成了全局變量,但不幸的是沒有其他方法可以做到這一點,如果你想使用全局 class 肯定不會(不確定你的最小工作示例是否只是簡化為使用本地class 而不是全局或不)。

REPORT ZZZ.

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

CLASS lcl_infotypaenderungen DEFINITION.

" ...

感謝 Jagger,我可以使它與本地 class 一起工作,但如果以后有人想知道您需要如何更改包含代碼才能在全局方法中使用它,您基本上只需要擺脫INCLUDE STRUCTURE聲明和使用 header 線交換表。

所以

DATA BEGIN OF LO-KEY.
       INCLUDE STRUCTURE PC400.
DATA END OF LO-KEY.

變成

DATA: lo_key TYPE pc400.

DATA BEGIN OF BELEGE_00 OCCURS 100.
  DATA:
  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.            
DATA END OF BELEGE_00.

變成

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.

宏可以保持不變(或者我猜你可以重寫它)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM