Wednesday, August 16, 2023

ABAP 7.5 Coding Standards in OOPS

ABAP 7.4/7.5 in OOPS:

--------------------------------------------------------------------------------------

1 Upcasting/Downcasting with CAST

Before:

DATA lo_structure TYPE REF TO CL_ABAP_STRUCTDESCR. "Structure_description

DATA lo_components TYPE ABAP_COMPDESCR_TAB.

lo_structure ?= cl_abap_typedescr=>describe_by_name( 'ZSC_MONSTER_HEADER' ).

lo_components = structure_description->components.

After:

DATA(lo_components) = CAST cl_abap_structdescr(

cl_abap_typedescr=>describe_by_name( 'ZSC_MONSTER_HEADER' ) )->components.

--------------------------------------------------------------------------------------

2 Finding the Subclass of an Object Instance

DATA: full_screen_adapter TYPE REF TO cl_salv_fullscreen_adapter,

container_adapter TYPE REF TO cl_salv_grid_adapter.

TRY.

"Presume full screen mode (No Container)

"Fullscreen Adapter (Down Casting)

"Target FULL_SCREEN_ADAPTER = CL_SALV_FULLSCREEN_ADAPTER

"CL_SALV_FULLSCREEN is a subclass of CL_SALV_ADAPTER 

full_screen_adapter ?= io_salv_adapter.

"Get the Grid

ro_alv_grid = full_screen_adapter->get_grid( ).

CATCH cx_sy_move_cast_error.

"We must be in container mode

"CL_SALV_GRID_ADAPTER is a subclass of CL_SALV_ADAPTER

container_adapter ?= io_salv_adapter.

ro_alv_grid = container_adapter->get_grid( ).

ENDTRY.

After:

IF io_salv_adapter IS INSTANCE OF cl_salv_fullscreen_adapter.

    full_screen_adapter ?= io_salv_adapter.

    ro_alv_grid = full_screen_adapter->get_grid( ).

ELSEIF io_salv_adapter IS INSTANCE OF cl_salv_grid_adapter.

    container_adapter ?= io_salv_adapter.

    ro_alv_grid = container_adapter->get_grid( ).

ENDIF.

-------------------------------------------------------------

CASE TYPE OF io_salv_adapter.

WHEN TYPE cl_salv_fullscreen_adapter INTO DATA(full_screen_adapter2).

ro_alv_grid = full_screen_adapter2->get_grid( ).

WHEN TYPE cl_salv_grid_adapter INTO DATA(container_adapter2).

ro_alv_grid = container_adapter2->get_grid( ).

WHEN OTHERS.

RETURN.

ENDCASE.

--------------------------------------------------------------------------------------

3 CHANGING and EXPORTING Parameters

DATA: monster_number TYPE zde_monster_number VALUE '0000000001',

something_spurious TYPE string,

something_unrelated TYPE string.

DATA(monster_header_record) = lcl_monster=>get_details(

EXPORTING id_monster_number = monster_number

IMPORTING ed_something_spurious = something_spurious

CHANGING cd_something_unrelated = something_unrelated ).

--------------------------------------------------------------------------------------

4 Changes to Interfaces

INTERFACE scary_behavior.

METHODS: scare_small_children,

sells_mortgages DEFAULT FAIL,

hide_under_bed DEFAULT IGNORE,

is_fire_breather

DEFAULT IGNORE

RETURNING rf_yes_it_is TYPE abap_bool.

ENDINTERFACE. "Scary Behavior

--------------------------------------------------------------------------------------



Thursday, June 08, 2023

OOPS ABAP HR Classes

 List of Classes:

CL_HRPY_MASTER_INFOTYPE_READER

Replace with HR_READ_INFOTYPE, HR_INTOYPE_OPERATIONS

Wednesday, May 24, 2023

OOPS ABAP HR Decouple Framework

 How to Read Infotype (in oops)

DATA: lo_infotype TYPE REF TO cl_hrpa_read_infotype,

       li_infotype TYPE REF TO if_hrpa_read_infotype,

       lt_pri_infty TYPE pnnnn, "primary infotype

       lt_sec_infty TYPE pnnnn, "secoundary infotype

       lv_has_data TYPE boole_d,

       lv_has_auth TYPE boole_d.

 

// Initialization of the object

 TRY.

 CALL METHOD cl_hrpa_read_infotype=>get_instance

 *  EXPORTING

 *    masterdata_buffer =

   IMPORTING

     infotype_reader   = li_infotype.

  CATCH cx_hrpa_violated_assertion.

 ENDTRY.

 // Read method to get infotype data - METHOD: READ_SINGLE

 TRY.

 CALL METHOD li_infotype->read_single

   EXPORTING

     tclas         = 'A' "employee

     pernr         = '00012345'

     infty         = '0001'

     subty         = space

     objps         = space

     sprps         = ''

     begda         = '19000101'

     endda         = sy-datum

     mode          = '3'

     no_auth_check = space

   IMPORTING

     pnnnn         = lt_pri_infty

     pnnnn2        = lt_sec_infty

 *    pref          =

     data_exists   = lv_has_data

     missing_auth  = lv_has_auth.

  CATCH cx_hrpa_violated_assertion .

 ENDTRY.

 // Read method to get infotype data - METHOD: READ

 // Manipulate Data as needed

   CLEAR lt_infotype.

   CALL METHOD lr_infotype_reader->read

     EXPORTING

       tclas         = 'A'

       pernr         = lv_pernr

       infty         =  '0001'

       begda         = iv_begda

       endda         = iv_endda

       no_auth_check = abap_true

     IMPORTING

       infotype_tab  = lt_infotype

       data_exists   = lv_data_exists

       missing_auth  = lv_missing_auth.

 // Manipulate data

   LOOP AT lt_infotype INTO ls_infotype.

     CALL METHOD cl_hr_pnnnn_type_cast=>prelp_to_pnnnn

       EXPORTING

         prelp = ls_infotype

       IMPORTING

         pnnnn = ls_p0001.

        APPEND ls_p0001 TO lt_p0001.

   ENDLOOP. 

Wednesday, May 10, 2023

OOPS ABAP HR: Pay Result (US)

Get Data from Payroll (US Payroll)

Step 1: Data declaration 

data: ls_rgdir type pc261

(lo_payresult_access) = NEW cl_hr_pay_access( ),

lo_emp_pay_result type ref to cl_hr_pay_result,

lo_emp_pay_result_us type ref to cl_hr_pay_result_us.


Step 2. Get data from table HRPY_RGDIR

Get the records from table HRPY_RGDIR and store the data in an internal table lt_rgdir[]

with needful where clause(s).


Step 3: Use class CL_HR_PAY_ACCESS and CL_HR_PAY_RESULT

LOOP the internal table lt_regdir[] to assigned fields symbol <fs_rgdir>

ls_rgdir = <fs_rgdir>.

call method lo_payresult_access->read_pay_result (by paasing ls_rgdir)

Get the result in object lo_emp_pay_result.

Use the object lo_emp_pay_result for RT/TCRT/CRT table to read or loop.


RT Result will be found (for all countries):

lo_emp_pay_result->inter-rt[].

Wide cast to US data (as needed only for MOLGA US

lo_emp_pay_result_us ?= lo_emp_pay_result.


US Garnishment result will be found in:

lo_emp_pay_result_us->natio-grdoc[] and lo_emp_pay_result->natio-grrec[]

ENDLOOP.