INTERFACE zif_masterdata.
METHODS set_data RETURNING VALUE(masterdata) TYPE REF TO zif_masterdata
RAISING RESUMABLE(cx_no_data_found).
METHODS get_data EXPORTING result TYPE any
RETURNING VALUE(masterdata) TYPE REF TO zif_masterdata.
ENDINTERFACE.
CLASS lcl_employee DEFINITION FINAL CREATE PUBLIC.
" Interface Usage added
PUBLIC SECTION.
INTERFACES zif_masterdata.
CLASS lcl_employee IMPLEMENTATION.
METHOD zif_masterdata~set_data.
me->empl_data = VALUE #(
empid = me->get_emp_id( )
emptyp = me->get_emptyp( )
salary = me->get_salary( )
phone = me->get_phone( )
).
masterdata = me.
ENDMETHOD.
METHOD zif_masterdata~get_data.
result = me->empl_data.
masterdata = me.
ENDMETHOD.
ENDCLASS.
CLASS lcl_user DEFINITION FINAL CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES zif_masterdata.
TYPES: BEGIN OF ty_data,
userid TYPE string,
role TYPE string,
END OF ty_data.
METHODS constructor IMPORTING i_empid TYPE int4.
PRIVATE SECTION.
DATA emp_id TYPE int4.
DATA user_data TYPE ty_data.
ENDCLASS.
CLASS lcl_user IMPLEMENTATION.
METHOD constructor.
me->emp_id = i_empid.
ENDMETHOD.
METHOD zif_masterdata~set_data.
me->user_data =
VALUE #(
userid = SWITCH #( me->emp_id
WHEN 1 THEN |USER001|
WHEN 2 THEN |USER002|
WHEN 3 THEN |USER003|
WHEN 4 THEN |USER004|
WHEN 5 THEN |USER005|
ELSE THROW RESUMABLE cx_no_data_found(
rel_proc_id = CONV #( me->emp_id ) )
)
role = SWITCH #( me->emp_id
WHEN 1 THEN |Business Analyst|
WHEN 2 THEN |Configurer|
WHEN 3 THEN |Developer|
"WHEN 4 THEN |User|
WHEN 5 THEN |Tester|
ELSE THROW RESUMABLE cx_no_data_found(
rel_proc_id = CONV #( me->emp_id ) )
)
).
masterdata = me.
ENDMETHOD.
METHOD zif_masterdata~get_data.
result = me->user_data.
masterdata = me.
ENDMETHOD.
ENDCLASS.
CLASS zcl_report DEFINITION PUBLIC CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
TYPES: BEGIN OF extract,
empid TYPE int4, "Employee ID
emptyp TYPE string, "Org Assignment data
salary TYPE decfloat16, "Pay data
phone TYPE numc10, "Communication data
userid TYPE string, "System User ID
role TYPE string, "System Role
END OF extract,
tty_extract TYPE SORTED TABLE OF extract WITH UNIQUE KEY empid.
CLASS-METHODS create
IMPORTING
i_all_instances_t TYPE int4_table
RETURNING
VALUE(report) TYPE REF TO zcl_report.
METHODS process RETURNING VALUE(report) TYPE REF TO zcl_report.
PROTECTED SECTION.
DATA all_instances_t TYPE int4_table.
DATA error_t TYPE string_table.
METHODS get_data RETURNING VALUE(report) TYPE REF TO zcl_report.
METHODS get_errors RETURNING VALUE(rt_result) TYPE string_table.
PRIVATE SECTION.
DATA extract_t TYPE tty_extract.
ENDCLASS.
CLASS zcl_report IMPLEMENTATION.
METHOD create.
report = NEW zcl_report( ).
report->all_instances_t = i_all_instances_t.
ENDMETHOD.
METHOD process.
DATA empl_data TYPE lcl_employee=>ty_data.
DATA user_data TYPE lcl_user=>ty_data.
LOOP AT me->all_instances_t ASSIGNING FIELD-SYMBOL(<instance>).
TRY.
me->extract_t =
VALUE #(
LET o_employee = NEW lcl_employee( employee
)->zif_masterdata~set_data( )
if_empl = o_employee->get_data( IMPORTING
result = empl_data )
o_user = NEW lcl_user( employee
)->zif_masterdata~set_data( )
if_user = o_user->get_data( IMPORTING
result = user_data )
IN BASE me->extract_t
( CORRESPONDING #( CORRESPONDING extract(
BASE ( CORRESPONDING extract( empl_data ) ) user_data ) ) ) ).
CATCH BEFORE UNWIND cx_no_data_found INTO DATA(lx_no_data_found).
IF lx_no_data_found->is_resumable = abap_true.
RESUME.
ELSE.
me->error_t = VALUE #( BASE me->error_t (
lx_no_data_found->get_text( )
) ).
ENDIF.
ENDTRY.
ENDLOOP.
report = me.
ENDMETHOD.
METHOD get_errors.
rt_result = me->error_t.
ENDMETHOD.
METHOD get_data.
report = me.
ENDMETHOD.
METHOD if_oo_adt_classrun~main.
DATA(lo_report) = zcl_report=>create( VALUE #( ( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) )
)->process( ).
out->begin_section( |DATA| )->write( lo_report->get_data( )->extract_t
)->begin_section( |ERRORS| )->write( lo_report->get_errors( ) ).
ENDMETHOD.
ENDCLASS.
CLASS lcl_employee DEFINITION FINAL CREATE PUBLIC.
PUBLIC SECTION.
* He extends the data structure by adding two new fields
TYPES: BEGIN OF empl_data,
empid TYPE int4, "Employee ID
emptyp TYPE string, "Org Assignment data
salary TYPE decfloat16, "Pay data
phone TYPE numc10, "Communication data
userid TYPE string, "System User ID
role type string, "System Role
END OF empl_data,
empl_data_t TYPE SORTED TABLE OF empl_data WITH UNIQUE KEY empid.
PRIVATE SECTION.
* And adds two new methods for the additional requirement
METHODS get_userid RETURNING VALUE(r_result) TYPE string
RAISING RESUMABLE(cx_no_data_found).
METHODS get_role RETURNING VALUE(r_result) TYPE string
RAISING RESUMABLE(cx_no_data_found).
ENDCLASS.
CLASS lcl_employee IMPLEMENTATION.
METHOD get_userid.
r_result = SWITCH #( me->get_emp_id( )
WHEN 1 THEN |USER001|
WHEN 2 THEN |USER002|
WHEN 3 THEN |USER003|
WHEN 4 THEN |USER004|
WHEN 5 THEN |USER005|
ELSE THROW RESUMABLE cx_no_data_found(
rel_proc_id = CONV #( me->emp_id ) )
).
ENDMETHOD.
METHOD get_role.
r_result = SWITCH #( me->get_emp_id( )
WHEN 1 THEN |Business Analyst|
WHEN 2 THEN |Configurer|
WHEN 3 THEN |Developer|
"WHEN 4 THEN |User|
WHEN 5 THEN |Tester|
ELSE THROW RESUMABLE cx_no_data_found(
rel_proc_id = CONV #( me->emp_id ) )
).
ENDMETHOD.
ENDCLASS.
METHOD get_data.
rs_result = VALUE #( empid = me->get_emp_id( )
emptyp = me->get_emptyp( )
salary = me->get_salary( )
phone = me->get_phone( )
userid = me->get_userid( )
role = me->get_role( )
).
ENDMETHOD.
DATA extract_t TYPE lcl_employee=>empl_data_t.
DATA error_t TYPE string_table.
START-OF-SELECTION.
DATA(all_employees_t) = VALUE int4_table( ( 1 ) ( 2 ) ( 3 ) ( 4 ) ( 5 ) ).
LOOP AT all_employees_t REFERENCE INTO DATA(dref).
TRY.
INSERT NEW lcl_employee( dref->* )->get_data( ) INTO TABLE extract_t.
CATCH BEFORE UNWIND cx_no_data_found INTO DATA(lx_no_data).
IF lx_no_data->is_resumable = abap_true.
RESUME.
ELSE.
error_t = VALUE #( BASE error_t ( lx_no_data->get_text( ) ) ).
ENDIF.
ENDTRY.
ENDLOOP.
cl_demo_output=>new( )->write( extract_t )->write( error_t )->display( ).
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
5 | |
4 | |
3 | |
3 | |
2 | |
2 | |
2 | |
1 | |
1 | |
1 |