diff --git a/src/zoblomov_cl_util.clas.abap b/src/zoblomov_cl_util.clas.abap index 0bc38a2..bb6a331 100644 --- a/src/zoblomov_cl_util.clas.abap +++ b/src/zoblomov_cl_util.clas.abap @@ -11,6 +11,14 @@ CLASS zoblomov_cl_util DEFINITION " author: https://github.com/oblomov-dev " license: MIT. + CONSTANTS: + BEGIN OF cs_ui5_msg_type, + e TYPE string VALUE `Error` ##NO_TEXT, + s TYPE string VALUE `Success` ##NO_TEXT, + w TYPE string VALUE `Warning` ##NO_TEXT, + i TYPE string VALUE `Information` ##NO_TEXT, + END OF cs_ui5_msg_type. + TYPES: BEGIN OF ty_s_name_value, n TYPE string, @@ -164,14 +172,6 @@ CLASS zoblomov_cl_util DEFINITION RETURNING VALUE(result) TYPE string. - CLASS-METHODS tab_get_where_by_dfies - IMPORTING - mv_check_tab_field TYPE string - ms_data_row TYPE REF TO data - it_dfies TYPE zoblomov_cl_util=>ty_t_dfies - RETURNING - VALUE(result) TYPE string. - CLASS-METHODS itab_get_itab_by_csv IMPORTING val TYPE string @@ -204,7 +204,7 @@ CLASS zoblomov_cl_util DEFINITION CLASS-METHODS filter_get_sql_where IMPORTING - val TYPE zoblomov_cl_util=>ty_t_filter_multi + val TYPE ty_t_filter_multi RETURNING VALUE(result) TYPE string. @@ -423,7 +423,7 @@ CLASS zoblomov_cl_util DEFINITION CLASS-METHODS filter_get_range_by_token IMPORTING - VALUE(value) TYPE string + val TYPE string RETURNING VALUE(result) TYPE ty_s_range. @@ -449,6 +449,12 @@ CLASS zoblomov_cl_util DEFINITION CHANGING !tab TYPE STANDARD TABLE. + CLASS-METHODS itab_get_by_struc + IMPORTING + val TYPE any + RETURNING + VALUE(result) TYPE zoblomov_cl_util=>ty_t_name_value. + CLASS-METHODS itab_filter_by_t_range IMPORTING val TYPE ty_t_filter_multi @@ -516,7 +522,8 @@ CLASS zoblomov_cl_util IMPLEMENTATION. TRY. DATA(lv_type_name) = rtti_get_type_name( val ). result = boolean_check_by_name( lv_type_name ). - CATCH cx_root. + CATCH cx_root INTO DATA(x). + DATA(lv_error) = x->get_text( ). ENDTRY. ENDMETHOD. @@ -586,7 +593,8 @@ CLASS zoblomov_cl_util IMPLEMENTATION. METHOD conv_get_as_data_ref. - GET REFERENCE OF val INTO result. +* GET REFERENCE OF val INTO result. + result = REF #( val ). ENDMETHOD. @@ -652,51 +660,53 @@ CLASS zoblomov_cl_util IMPLEMENTATION. METHOD filter_get_range_by_token. - DATA(lv_length) = strlen( value ) - 1. - CASE VALUE(1). + DATA(lv_value) = val. + DATA(lv_length) = strlen( lv_value ) - 1. + + CASE lv_value(1). WHEN `=`. result = VALUE #( sign = `I` option = `EQ` - low = value+1 ). + low = lv_value+1 ). WHEN `<`. - IF value+1(1) = `=`. + IF lv_value+1(1) = `=`. result = VALUE #( sign = `I` option = `LE` - low = value+2 ). + low = lv_value+2 ). ELSE. result = VALUE #( sign = `I` option = `LT` - low = value+1 ). + low = lv_value+1 ). ENDIF. WHEN `>`. - IF value+1(1) = `=`. + IF lv_value+1(1) = `=`. result = VALUE #( sign = `I` option = `GE` - low = value+2 ). + low = lv_value+2 ). ELSE. result = VALUE #( sign = `I` option = `GT` - low = value+1 ). + low = lv_value+1 ). ENDIF. WHEN `*`. - IF value+lv_length(1) = `*`. - SHIFT value RIGHT DELETING TRAILING `*`. - SHIFT value LEFT DELETING LEADING `*`. + IF lv_value+lv_length(1) = `*`. + SHIFT lv_value RIGHT DELETING TRAILING `*`. + SHIFT lv_value LEFT DELETING LEADING `*`. result = VALUE #( sign = `I` option = `CP` - low = value ). + low = lv_value ). ENDIF. WHEN OTHERS. - IF value CP `...`. - SPLIT value AT `...` INTO result-low result-high. + IF lv_value CP `...`. + SPLIT lv_value AT `...` INTO result-low result-high. result-option = `BT`. ELSE. result = VALUE #( sign = `I` option = `EQ` - low = value ). + low = lv_value ). ENDIF. ENDCASE. @@ -838,47 +848,6 @@ CLASS zoblomov_cl_util IMPLEMENTATION. ENDMETHOD. - METHOD tab_get_where_by_dfies. - - DATA val TYPE string. - - LOOP AT it_dfies REFERENCE INTO DATA(dfies). - - IF NOT ( dfies->keyflag = abap_true OR dfies->fieldname = mv_check_tab_field ). - CONTINUE. - ENDIF. - - ASSIGN ms_data_row->* TO FIELD-SYMBOL(). - - ASSIGN COMPONENT dfies->fieldname OF STRUCTURE TO FIELD-SYMBOL(). - IF IS NOT ASSIGNED. - CONTINUE. - ENDIF. - IF IS INITIAL. - CONTINUE. - ENDIF. - - IF result IS NOT INITIAL. - DATA(and) = ` AND `. - ENDIF. - - IF CA `_`. - DATA(escape) = `ESCAPE '#'`. - ELSE. - CLEAR escape. - ENDIF. - - val = . - - IF val CA `_`. - REPLACE ALL OCCURRENCES OF `_` IN val WITH `#_`. - ENDIF. - - result = |{ result }{ and } ( { dfies->fieldname } LIKE '%{ val }%' { escape } )|. - - ENDLOOP. - - ENDMETHOD. METHOD itab_get_itab_by_csv. @@ -961,8 +930,8 @@ CLASS zoblomov_cl_util IMPLEMENTATION. result = abap_true. ENDIF. - CATCH cx_root. - " cx_sy_rtti_syntax_error + CATCH cx_root INTO DATA(x). + DATA(lv_error) = x->get_text( ). ENDTRY. ENDMETHOD. @@ -974,7 +943,8 @@ CLASS zoblomov_cl_util IMPLEMENTATION. DATA(lo_typdescr) = cl_abap_typedescr=>describe_by_data( val ). DATA(lo_ref) = CAST cl_abap_refdescr( lo_typdescr ) ##NEEDED. result = abap_true. - CATCH cx_root. + CATCH cx_root INTO DATA(x). + DATA(lv_error) = x->get_text( ). ENDTRY. ENDMETHOD. @@ -1022,17 +992,25 @@ CLASS zoblomov_cl_util IMPLEMENTATION. DATA(lo_ele) = CAST cl_abap_elemdescr( lo_descr ). result = lo_ele->get_relative_name( ). - CATCH cx_root. + CATCH cx_root INTO DATA(x). + DATA(lv_error) = x->get_text( ). ENDTRY. ENDMETHOD. METHOD rtti_get_t_attri_by_include. - cl_abap_typedescr=>describe_by_name( EXPORTING p_name = type->absolute_name - RECEIVING p_descr_ref = DATA(type_desc) - EXCEPTIONS type_not_found = 1 ). + TRY. + + cl_abap_typedescr=>describe_by_name( EXPORTING p_name = type->absolute_name + RECEIVING p_descr_ref = DATA(type_desc) + EXCEPTIONS type_not_found = 1 ). + CATCH cx_root INTO DATA(x). + RAISE EXCEPTION TYPE zoblomov_cx_util_error + EXPORTING + previous = x. + ENDTRY. DATA(sdescr) = CAST cl_abap_structdescr( type_desc ). DATA(comps) = sdescr->get_components( ). @@ -1127,7 +1105,8 @@ CLASS zoblomov_cl_util IMPLEMENTATION. result = rtti_get_t_fixvalues( elemdescr = elemdescr langu = langu ). - CATCH cx_root. + CATCH cx_root INTO DATA(x). + DATA(lv_error) = x->get_text( ). ENDTRY. ENDMETHOD. @@ -1154,7 +1133,8 @@ CLASS zoblomov_cl_util IMPLEMENTATION. result = rtti_tab_get_relative_name( ). ENDCASE. - CATCH cx_root. + CATCH cx_root INTO DATA(x). + DATA(lv_error) = x->get_text( ). ENDTRY. ENDMETHOD. @@ -1168,7 +1148,7 @@ CLASS zoblomov_cl_util IMPLEMENTATION. |pt, json, jsoniq, jsp, jsx, julia, kotlin, latex, lean, less, liquid, lisp, live_script, livescript, logiql, lsl, lua, luapage, lucene, makefile, markdown, mask, matlab, mavens_mate_log, maze, mel, mips_assembler, mipsassembler, mushcode, mysql, ni| && |x, nsis, objectivec, ocaml, pascal, perl, pgsql, php, plain_text, powershell, praat, prolog, properties, protobuf, python, r, razor, rdoc, rhtml, rst, ruby, rust, sass, scad, scala, scheme, scss, sh, sjs, smarty, snippets, soy_template, space, sql,| && | sqlserver, stylus, svg, swift, swig, tcl, tex, text, textile, toml, tsx, twig, typescript, vala, vbscript, velocity, verilog, vhdl, wollok, xml, xquery, terraform, slim, redshift, red, puppet, php_laravel_blade, mixal, jssm, fsharp, edifact,| && - | csp, cssound_score, cssound_orchestra, cssound_document|. + | csp, cssound_score, cssound_orchestra, cssound_document| ##NO_TEXT. SPLIT lv_types AT ',' INTO TABLE result. ENDMETHOD. @@ -1189,7 +1169,8 @@ CLASS zoblomov_cl_util IMPLEMENTATION. LOOP AT it_source INTO DATA(lv_source). TRY. result = result && lv_source+1 && cl_abap_char_utilities=>newline. - CATCH cx_root. + CATCH cx_root INTO DATA(x). + DATA(lv_error) = x->get_text( ). ENDTRY. ENDLOOP. @@ -1230,6 +1211,7 @@ CLASS zoblomov_cl_util IMPLEMENTATION. result = cl_abap_tstmp=>subtractsecs( tstmp = time secs = seconds ). + ENDMETHOD. @@ -1376,7 +1358,6 @@ CLASS zoblomov_cl_util IMPLEMENTATION. data_object = data RECEIVING srtti = srtti. - CALL TRANSFORMATION id SOURCE srtti = srtti dobj = data RESULT XML result. ELSE. @@ -1387,18 +1368,16 @@ CLASS zoblomov_cl_util IMPLEMENTATION. data_object = data RECEIVING srtti = srtti. - CALL TRANSFORMATION id SOURCE srtti = srtti dobj = data RESULT XML result. CATCH cx_root. - DATA(lv_text) = `UNSUPPORTED_FEATURE - Please install the open-source project S-RTTI by sandraros and try again: https://github.com/sandraros/S-RTTI`. + DATA(lv_text) = `UNSUPPORTED_FEATURE`. RAISE EXCEPTION TYPE zoblomov_cx_util_error EXPORTING val = lv_text. ENDTRY. - ENDIF. ENDMETHOD. @@ -1532,6 +1511,32 @@ CLASS zoblomov_cl_util IMPLEMENTATION. ENDMETHOD. + METHOD itab_get_by_struc. + + DATA(lt_attri) = zoblomov_cl_util=>rtti_get_t_attri_by_any( val ). +* result = VALUE z2ui5_cl_util=>ty_t_name_value( ). + LOOP AT lt_attri REFERENCE INTO DATA(lr_attri). + + ASSIGN COMPONENT lr_attri->name OF STRUCTURE val TO FIELD-SYMBOL(). + IF sy-subrc <> 0. + CONTINUE. + ENDIF. + + CASE zoblomov_cl_util=>rtti_get_type_kind( ). + + WHEN cl_abap_typedescr=>typekind_table. + + WHEN OTHERS. + INSERT VALUE #( + n = lr_attri->name + v = + ) INTO TABLE result. + ENDCASE. + + ENDLOOP. + + ENDMETHOD. + METHOD itab_filter_by_t_range. ENDMETHOD. @@ -1588,6 +1593,11 @@ CLASS zoblomov_cl_util IMPLEMENTATION. EXCEPTIONS internal_error = 1 OTHERS = 2. + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE zoblomov_cx_util_error + EXPORTING + val = zoblomov_cl_util=>context_get_sy( ). + ENDIF. ENDIF. @@ -1618,10 +1628,10 @@ CLASS zoblomov_cl_util IMPLEMENTATION. METHOD ui5_get_msg_type. result = SWITCH #( val - WHEN 'E' THEN `Error` - WHEN 'S' THEN `Success` - WHEN `W` THEN `Warning` - ELSE `Information` ). + WHEN 'E' THEN cs_ui5_msg_type-e + WHEN 'S' THEN cs_ui5_msg_type-s + WHEN `W` THEN cs_ui5_msg_type-w + ELSE cs_ui5_msg_type-i ). ENDMETHOD. diff --git a/src/zoblomov_cl_util.clas.testclasses.abap b/src/zoblomov_cl_util.clas.testclasses.abap index 10b7345..2b18e46 100644 --- a/src/zoblomov_cl_util.clas.testclasses.abap +++ b/src/zoblomov_cl_util.clas.testclasses.abap @@ -122,6 +122,7 @@ ENDCLASS. CLASS ltcl_unit_test_open_abap IMPLEMENTATION. + METHOD test_assign. DATA(lo_app) = NEW ltcl_test_app( ). @@ -129,8 +130,8 @@ CLASS ltcl_unit_test_open_abap IMPLEMENTATION. lo_app->mv_val = `ABC`. - DATA(lv_assign) = |LO_APP->MV_VAL|. - ASSIGN (lv_assign) TO . + DATA(lv_assign) = |MV_VAL|. + ASSIGN lo_app->(lv_assign) TO . ASSERT sy-subrc = 0. cl_abap_unit_assert=>assert_equals( exp = `ABC` @@ -321,7 +322,8 @@ CLASS ltcl_unit_test IMPLEMENTATION. DATA(lv_test) = `test`. DATA lr_data TYPE REF TO data. - GET REFERENCE OF lv_test INTO lr_data. +* GET REFERENCE OF lv_test INTO lr_data. + lr_data = REF #( lv_test ). cl_abap_unit_assert=>assert_true( zoblomov_cl_util=>rtti_check_ref_data( lr_data ) ). @@ -333,7 +335,8 @@ CLASS ltcl_unit_test IMPLEMENTATION. DATA(lv_test) = `test`. DATA lr_data TYPE REF TO data. - GET REFERENCE OF lv_test INTO lr_data. +* GET REFERENCE OF lv_test INTO lr_data. + lr_data = REF #( lv_test ). DATA(lr_test2) = zoblomov_cl_util=>conv_copy_ref_data( lr_data ). @@ -407,6 +410,10 @@ CLASS ltcl_unit_test IMPLEMENTATION. METHOD test_func_get_user_tech. + IF sy-sysid = 'ABC'. + RETURN. + ENDIF. + cl_abap_unit_assert=>assert_equals( exp = zoblomov_cl_util=>context_get_user_tech( ) act = sy-uname ). @@ -756,6 +763,10 @@ CLASS ltcl_unit_test IMPLEMENTATION. DATA END OF ms_struc2. DATA(lo_datadescr) = cl_abap_typedescr=>describe_by_data( ms_struc2 ). + + IF zoblomov_cl_util=>context_check_abap_cloud( ). + RETURN. + ENDIF. DATA(lt_attri) = zoblomov_cl_util=>rtti_get_t_attri_by_include( CAST #( lo_datadescr ) ). IF lines( lt_attri ) <> 6. diff --git a/src/zoblomov_cl_util_abap.clas.abap b/src/zoblomov_cl_util_abap.clas.abap index eb305c9..9eafa65 100644 --- a/src/zoblomov_cl_util_abap.clas.abap +++ b/src/zoblomov_cl_util_abap.clas.abap @@ -3,6 +3,7 @@ CLASS zoblomov_cl_util_abap DEFINITION CREATE PUBLIC. PUBLIC SECTION. + TYPES: BEGIN OF ty_s_fix_val, low TYPE string, @@ -11,81 +12,180 @@ CLASS zoblomov_cl_util_abap DEFINITION END OF ty_s_fix_val. TYPES ty_t_fix_val TYPE STANDARD TABLE OF ty_s_fix_val WITH DEFAULT KEY. - TYPES: BEGIN OF ty_usr01, - mandt TYPE c LENGTH 3, " Client - bname TYPE c LENGTH 12, " User Name - stcod TYPE c LENGTH 20, " Start Menu (old) - spld TYPE c LENGTH 4, " Output Device - splg TYPE c LENGTH 1, " Print Parameter 1 - spdb TYPE c LENGTH 1, " Print Parameter 2 - spda TYPE c LENGTH 1, " Print Parameter 3 - datfm TYPE c LENGTH 1, " Date Format - dcpfm TYPE c LENGTH 1, " Decimal Format - hdest TYPE c LENGTH 8, " Host Destination - hmand TYPE c LENGTH 3, " Default Host Client - hname TYPE c LENGTH 12, " Default Host Username - menon TYPE c LENGTH 1, " Automatic Start - menue TYPE c LENGTH 20, " Menu Name - strtt TYPE c LENGTH 20, " Start Menu (again) - langu TYPE c LENGTH 1, " Logon Language - cattkennz TYPE c LENGTH 1, " CATT Test Status - timefm TYPE c LENGTH 1, " Time Format (12h/24h) - ianatzonecode TYPE n LENGTH 4, " IANA Timezone Code - END OF ty_usr01. - TYPES: - BEGIN OF ty_s_dfies, - tabname TYPE c LENGTH 30, - fieldname TYPE c LENGTH 30, - langu TYPE string, - position TYPE n LENGTH 4, - offset TYPE n LENGTH 6, - domname TYPE c LENGTH 30, - rollname TYPE c LENGTH 30, - checktable TYPE c LENGTH 30, - leng TYPE n LENGTH 6, - intlen TYPE n LENGTH 6, - outputlen TYPE n LENGTH 6, - decimals TYPE n LENGTH 6, - datatype TYPE c LENGTH 4, - inttype TYPE c LENGTH 1, - reftable TYPE c LENGTH 30, - reffield TYPE c LENGTH 30, - precfield TYPE c LENGTH 30, - authorid TYPE c LENGTH 3, - memoryid TYPE c LENGTH 20, - logflag TYPE c LENGTH 1, - mask TYPE c LENGTH 20, - masklen TYPE n LENGTH 4, - convexit TYPE c LENGTH 5, - headlen TYPE n LENGTH 2, - scrlen1 TYPE n LENGTH 2, - scrlen2 TYPE n LENGTH 2, - scrlen3 TYPE n LENGTH 2, - fieldtext TYPE c LENGTH 60, - reptext TYPE c LENGTH 55, - scrtext_s TYPE c LENGTH 10, - scrtext_m TYPE c LENGTH 20, - scrtext_l TYPE c LENGTH 40, - keyflag TYPE c LENGTH 1, - lowercase TYPE c LENGTH 1, - mac TYPE c LENGTH 1, - genkey TYPE c LENGTH 1, - noforkey TYPE c LENGTH 1, - valexi TYPE c LENGTH 1, - noauthch TYPE c LENGTH 1, - sign TYPE c LENGTH 1, - dynpfld TYPE c LENGTH 1, - f4availabl TYPE c LENGTH 1, - comptype TYPE c LENGTH 1, - lfieldname TYPE c LENGTH 132, - ltrflddis TYPE c LENGTH 1, - bidictrlc TYPE c LENGTH 1, - outputstyle TYPE n LENGTH 2, - nohistory TYPE c LENGTH 1, - ampmformat TYPE c LENGTH 1, - END OF ty_s_dfies, - ty_t_dfies TYPE STANDARD TABLE OF ty_s_dfies WITH DEFAULT KEY. + BEGIN OF ty_syst, + index TYPE i, + pagno TYPE i, + tabix TYPE i, + tfill TYPE i, + tlopc TYPE i, + tmaxl TYPE i, + toccu TYPE i, + ttabc TYPE i, + tstis TYPE i, + ttabi TYPE i, + dbcnt TYPE i, + fdpos TYPE i, + colno TYPE i, + linct TYPE i, + linno TYPE i, + linsz TYPE i, + pagct TYPE i, + macol TYPE i, + marow TYPE i, + tleng TYPE i, + sfoff TYPE i, + willi TYPE i, + lilli TYPE i, + subrc TYPE i, + fleng TYPE i, + cucol TYPE i, + curow TYPE i, + lsind TYPE i, + listi TYPE i, + stepl TYPE i, + tpagi TYPE i, + winx1 TYPE i, + winy1 TYPE i, + winx2 TYPE i, + winy2 TYPE i, + winco TYPE i, + winro TYPE i, + windi TYPE i, + srows TYPE i, + scols TYPE i, + loopc TYPE i, + folen TYPE i, + fodec TYPE i, + tzone TYPE i, + dayst TYPE c LENGTH 1, + ftype TYPE c LENGTH 1, + appli TYPE x LENGTH 2, + fdayw TYPE int1, + ccurs TYPE p LENGTH 9 DECIMALS 0, + ccurt TYPE p LENGTH 9 DECIMALS 0, + debug TYPE c LENGTH 1, + ctype TYPE c LENGTH 1, + input TYPE c LENGTH 1, + langu TYPE c LENGTH 1, + modno TYPE i, + batch TYPE c LENGTH 1, + binpt TYPE c LENGTH 1, + calld TYPE c LENGTH 1, + dynnr TYPE c LENGTH 4, + dyngr TYPE c LENGTH 4, + newpa TYPE c LENGTH 1, + pri40 TYPE c LENGTH 1, + rstrt TYPE c LENGTH 1, + wtitl TYPE c LENGTH 1, + cpage TYPE i, + dbnam TYPE c LENGTH 20, + mandt TYPE c LENGTH 3, + prefx TYPE c LENGTH 3, + fmkey TYPE c LENGTH 3, + pexpi TYPE n LENGTH 1, + prini TYPE n LENGTH 1, + primm TYPE c LENGTH 1, + prrel TYPE c LENGTH 1, + playo TYPE c LENGTH 5, + prbig TYPE c LENGTH 1, + playp TYPE c LENGTH 1, + prnew TYPE c LENGTH 1, + prlog TYPE c LENGTH 1, + pdest TYPE c LENGTH 4, + plist TYPE c LENGTH 12, + pauth TYPE n LENGTH 2, + prdsn TYPE c LENGTH 6, + pnwpa TYPE c LENGTH 1, + callr TYPE c LENGTH 8, + repi2 TYPE c LENGTH 40, + rtitl TYPE c LENGTH 70, + prrec TYPE c LENGTH 12, + prtxt TYPE c LENGTH 68, + prabt TYPE c LENGTH 12, + lpass TYPE c LENGTH 4, + nrpag TYPE c LENGTH 1, + paart TYPE c LENGTH 16, + prcop TYPE n LENGTH 3, + batzs TYPE c LENGTH 1, + bspld TYPE c LENGTH 1, + brep4 TYPE c LENGTH 4, + batzo TYPE c LENGTH 1, + batzd TYPE c LENGTH 1, + batzw TYPE c LENGTH 1, + batzm TYPE c LENGTH 1, + ctabl TYPE c LENGTH 4, + dbsys TYPE c LENGTH 10, + dcsys TYPE c LENGTH 4, + macdb TYPE c LENGTH 4, + sysid TYPE c LENGTH 8, + opsys TYPE c LENGTH 10, + pfkey TYPE c LENGTH 20, + saprl TYPE c LENGTH 4, + tcode TYPE c LENGTH 20, + ucomm TYPE c LENGTH 70, + cfwae TYPE c LENGTH 5, + chwae TYPE c LENGTH 5, + spono TYPE n LENGTH 10, + sponr TYPE n LENGTH 10, + waers TYPE c LENGTH 5, + cdate TYPE d, + datum TYPE d, + slset TYPE c LENGTH 14, + subty TYPE x LENGTH 1, + subcs TYPE c LENGTH 1, + group TYPE c LENGTH 1, + ffile TYPE c LENGTH 8, + uzeit TYPE t, + dsnam TYPE c LENGTH 8, + tabid TYPE c LENGTH 8, + tfdsn TYPE c LENGTH 8, + uname TYPE c LENGTH 12, + lstat TYPE c LENGTH 16, + abcde TYPE c LENGTH 26, + marky TYPE c LENGTH 1, + sfnam TYPE c LENGTH 30, + tname TYPE c LENGTH 30, + msgli TYPE c LENGTH 60, + title TYPE c LENGTH 70, + entry TYPE c LENGTH 72, + lisel TYPE c LENGTH 255, + uline TYPE c LENGTH 255, + xcode TYPE c LENGTH 70, + cprog TYPE c LENGTH 40, + xprog TYPE c LENGTH 40, + xform TYPE c LENGTH 30, + ldbpg TYPE c LENGTH 40, + tvar0 TYPE c LENGTH 20, + tvar1 TYPE c LENGTH 20, + tvar2 TYPE c LENGTH 20, + tvar3 TYPE c LENGTH 20, + tvar4 TYPE c LENGTH 20, + tvar5 TYPE c LENGTH 20, + tvar6 TYPE c LENGTH 20, + tvar7 TYPE c LENGTH 20, + tvar8 TYPE c LENGTH 20, + tvar9 TYPE c LENGTH 20, + msgid TYPE c LENGTH 20, + msgty TYPE c LENGTH 1, + msgno TYPE n LENGTH 3, + msgv1 TYPE c LENGTH 50, + msgv2 TYPE c LENGTH 50, + msgv3 TYPE c LENGTH 50, + msgv4 TYPE c LENGTH 50, + oncom TYPE c LENGTH 1, + vline TYPE c LENGTH 1, + winsl TYPE c LENGTH 79, + staco TYPE i, + staro TYPE i, + datar TYPE c LENGTH 1, + host TYPE c LENGTH 32, + locdb TYPE c LENGTH 1, + locop TYPE c LENGTH 1, + datlo TYPE d, + timlo TYPE t, + zonlo TYPE c LENGTH 6, + END OF ty_syst. TYPES: BEGIN OF ty_s_data_element_text, @@ -100,14 +200,16 @@ CLASS zoblomov_cl_util_abap DEFINITION classname TYPE string, description TYPE string, END OF ty_s_class_descr. - TYPES ty_t_classes TYPE STANDARD TABLE OF ty_s_class_descr WITH NON-UNIQUE DEFAULT KEY. + TYPES ty_t_classes TYPE STANDARD TABLE OF ty_s_class_descr WITH DEFAULT KEY. - CLASS-METHODS conv_exit - IMPORTING - name TYPE ty_s_dfies - val TYPE data - CHANGING - result TYPE data. + TYPES: + BEGIN OF ty_s_stack, + class TYPE string, + include TYPE string, + method TYPE string, + line TYPE string, + END OF ty_s_stack. + TYPES ty_t_stack TYPE STANDARD TABLE OF ty_s_stack WITH DEFAULT KEY. CLASS-METHODS bal_read IMPORTING @@ -126,12 +228,16 @@ CLASS zoblomov_cl_util_abap DEFINITION CLASS-METHODS context_get_callstack RETURNING - VALUE(result) TYPE string_table. + VALUE(result) TYPE ty_t_stack. CLASS-METHODS context_get_tenant RETURNING VALUE(result) TYPE string. + CLASS-METHODS context_get_sy + RETURNING + VALUE(result) TYPE ty_syst. + CLASS-METHODS context_check_abap_cloud RETURNING VALUE(result) TYPE abap_bool. @@ -203,12 +309,6 @@ CLASS zoblomov_cl_util_abap DEFINITION RETURNING VALUE(result) TYPE ty_t_classes. - CLASS-METHODS rtti_get_t_dfies_by_table_name - IMPORTING - table_name TYPE string - RETURNING - VALUE(result) TYPE ty_t_dfies. - CLASS-METHODS rtti_get_t_fixvalues IMPORTING elemdescr TYPE REF TO cl_abap_elemdescr @@ -223,206 +323,8 @@ CLASS zoblomov_cl_util_abap DEFINITION RETURNING VALUE(result) TYPE string ##NEEDED. - TYPES trobj_name TYPE c LENGTH 120. - TYPES sxco_transport TYPE c LENGTH 20. - TYPES: - BEGIN OF ty_s_transport, - short_description TYPE string, - transport TYPE sxco_transport, - task TYPE sxco_transport, - selkz TYPE abap_bool, - locl TYPE abap_bool, - END OF ty_s_transport. - - TYPES ty_t_data TYPE STANDARD TABLE OF ty_s_transport WITH EMPTY KEY. - - TYPES: - BEGIN OF ty_s_dfies_2, - tabname TYPE c LENGTH 30, " Table Name - fieldname TYPE c LENGTH 30, " Field Name - langu TYPE c LENGTH 1, " Language Key - position TYPE n LENGTH 4, " Position of the field in the table - offset TYPE n LENGTH 6, " Offset of a field - domname TYPE c LENGTH 30, " Domain name - rollname TYPE c LENGTH 30, " Data element (semantic domain) - checktable TYPE c LENGTH 30, " Check Table - leng TYPE n LENGTH 6, " Length (Characters) - intlen TYPE n LENGTH 6, " Internal Length (Bytes) - outputlen TYPE n LENGTH 6, " Output Length - decimals TYPE n LENGTH 6, " Number of Decimal Places - datatype TYPE c LENGTH 4, " Dynpro Data Type - inttype TYPE c LENGTH 1, " ABAP Data Type (C,D,N,...) - reftable TYPE c LENGTH 30, " Reference Table - reffield TYPE c LENGTH 30, " Reference Field - precfield TYPE c LENGTH 30, " Included Table Name - authorid TYPE c LENGTH 3, " Authorization Class - memoryid TYPE c LENGTH 20, " Set/Get Parameter ID - logflag TYPE c LENGTH 1, " Change Documents Indicator - mask TYPE c LENGTH 20, " Template - masklen TYPE n LENGTH 4, " Template Length - convexit TYPE c LENGTH 5, " Conversion Routine - headlen TYPE n LENGTH 2, " Heading Length - scrlen1 TYPE n LENGTH 2, " Short Field Label Length - scrlen2 TYPE n LENGTH 2, " Medium Field Label Length - scrlen3 TYPE n LENGTH 2, " Long Field Label Length - fieldtext TYPE c LENGTH 60, " Short Description - reptext TYPE c LENGTH 55, " Heading - scrtext_s TYPE c LENGTH 10, " Short Field Label - scrtext_m TYPE c LENGTH 20, " Medium Field Label - scrtext_l TYPE c LENGTH 40, " Long Field Label - keyflag TYPE c LENGTH 1, " Key Field Indicator - lowercase TYPE c LENGTH 1, " Lowercase Allowed - mac TYPE c LENGTH 1, " Search Help Attached - genkey TYPE c LENGTH 1, " Flag (X or Blank) - noforkey TYPE c LENGTH 1, " Flag (X or Blank) - valexi TYPE c LENGTH 1, " Fixed Values Exist - noauthch TYPE c LENGTH 1, " Flag (X or Blank) - sign TYPE c LENGTH 1, " Sign Flag - dynpfld TYPE c LENGTH 1, " Field Displayed on Dynpro - f4availabl TYPE c LENGTH 1, " Input Help Available - comptype TYPE c LENGTH 1, " Component Type - lfieldname TYPE c LENGTH 132, " Long Field Name - ltrflddis TYPE c LENGTH 1, " Left-to-Right Write Direction - bidictrlc TYPE c LENGTH 1, " No BIDI Character Filtering - outputstyle TYPE n LENGTH 2, " Output Style (Decfloat Types) - nohistory TYPE c LENGTH 1, " Input History Deactivated - ampmformat TYPE c LENGTH 1, " AM/PM Time Format Indicator - END OF ty_s_dfies_2. - TYPES ty_t_dfies_2 TYPE STANDARD TABLE OF ty_s_dfies_2 WITH EMPTY KEY. - - TYPES: - BEGIN OF ty_shlp_intdescr, - issimple TYPE c LENGTH 1, " Elementary Search Help Flag - hotkey TYPE c LENGTH 1, " Hot Key - selmtype TYPE c LENGTH 1, " Category of Selection Method - selmethod TYPE c LENGTH 30, " Selection Method Name - texttab TYPE c LENGTH 30, " Text Table Name - selmexit TYPE c LENGTH 30, " Search Help Exit - dialogtype TYPE c LENGTH 1, " Dialog Type - ddlanguage TYPE c LENGTH 1, " Language Key - ddtext TYPE c LENGTH 60, " Short Text - dialoginfo TYPE c LENGTH 1, " Flag: SELFIELDS/LISTFIELDS read - f4state TYPE c LENGTH 1, " Internal Usage Only - tabname TYPE c LENGTH 30, " Table Name - fieldname TYPE c LENGTH 30, " Field Name - title TYPE c LENGTH 60, " Title Text - history TYPE c LENGTH 1, " Deprecated Usage - handle TYPE int4, " Reference Handle (int4) - autosuggest TYPE c LENGTH 1, " Autosuggest Flag - fuzzy_search TYPE c LENGTH 1, " Fuzzy Search Flag - fuzzy_similarity TYPE p DECIMALS 1 LENGTH 2, " Accuracy for Fuzzy Search (DEC 2,1) - END OF ty_shlp_intdescr. - - TYPES: - BEGIN OF ty_ddshiface, - shlpfield TYPE c LENGTH 30, " Field Name for Pass by Value to F4 Help - valtabname TYPE c LENGTH 30, " Structure Name for Input Help Assignment - valfield TYPE c LENGTH 132, " Field for Input Help Assignment - value TYPE c LENGTH 132, " Field Content from Dynpro - internal TYPE c LENGTH 1, " Flag: Internal Representation - dispfield TYPE c LENGTH 1, " Display-Only Field Flag - f4field TYPE c LENGTH 1, " F4 Pressed Flag - topshlpnam TYPE c LENGTH 30, " Higher-Level Search Help Name - topshlpfld TYPE c LENGTH 30, " Field of Higher-Level Search Help - END OF ty_ddshiface. - - TYPES: - BEGIN OF ty_ddshfprop, - fieldname TYPE c LENGTH 30, " Name of Search Help Parameter - shlpinput TYPE c LENGTH 1, " IMPORT Parameter Flag - shlpoutput TYPE c LENGTH 1, " EXPORT Parameter Flag - shlpselpos TYPE n LENGTH 2, " Position in Dialog Box - shlplispos TYPE n LENGTH 2, " Position in Hit List - shlpseldis TYPE c LENGTH 1, " Display Field in Dialog Box - defaultval TYPE c LENGTH 21, " Default Value - END OF ty_ddshfprop. - - TYPES: - BEGIN OF ty_ddshselopt, - shlpname TYPE c LENGTH 30, " Name of Search Help - shlpfield TYPE c LENGTH 30, " Name of Search Help Parameter - sign TYPE c LENGTH 1, " Include/Exclude Flag (I/E) - option TYPE c LENGTH 2, " Selection Option (EQ/BT/CP/..) - low TYPE c LENGTH 45, " Low Value for Selection - high TYPE c LENGTH 45, " High Value for Selection - END OF ty_ddshselopt. - - TYPES: - BEGIN OF ty_ddshtextsearch_field, - fieldname TYPE c LENGTH 30, " Name of a searchable field (frei gewählt, da nicht spezifiziert) - END OF ty_ddshtextsearch_field. - - TYPES tt_ddshtextsearch_fields TYPE STANDARD TABLE OF ty_ddshtextsearch_field WITH DEFAULT KEY. - - TYPES: - BEGIN OF ty_ddshtextsearch, - request TYPE c LENGTH 60, " Text Search Request - fields TYPE tt_ddshtextsearch_fields, " Fields eligible for text search - END OF ty_ddshtextsearch. - - TYPES: - BEGIN OF ty_shlp_descr, - shlpname TYPE c LENGTH 30, " Name of a Search Help - shlptype TYPE c LENGTH 2, " Type of an input help (fixed values) - intdescr TYPE ty_shlp_intdescr, " Placeholder for Internal Info of Search Help - interface TYPE STANDARD TABLE OF ty_ddshiface WITH EMPTY KEY, " Placeholder for Interface of Search Help - fielddescr TYPE STANDARD TABLE OF ty_s_dfies_2 WITH EMPTY KEY, - fieldprop TYPE STANDARD TABLE OF ty_ddshfprop WITH EMPTY KEY, - selopt TYPE STANDARD TABLE OF ty_ddshselopt WITH EMPTY KEY, - textsearch TYPE ty_ddshtextsearch, - END OF ty_shlp_descr. - - CLASS-METHODS bus_tr_read - RETURNING - VALUE(mt_data) TYPE ty_t_data. - - CLASS-METHODS bus_tr_add - IMPORTING - ir_data TYPE REF TO data - iv_tabname TYPE string - is_transport TYPE ty_s_transport. - - CLASS-METHODS bus_search_help_read - CHANGING - ms_shlp TYPE ty_shlp_descr - mv_fname TYPE string - mv_table TYPE string - mr_data TYPE REF TO data - mt_result_desc TYPE ty_t_dfies_2 - mv_shlpfield TYPE string - mt_data TYPE REF TO data - ms_data_row TYPE REF TO data. PROTECTED SECTION. - CLASS-METHODS _set_e071k - IMPORTING - ir_data TYPE REF TO data - iv_tabname TYPE string - is_transport TYPE ty_s_transport - RETURNING - VALUE(result) TYPE REF TO data. - - CLASS-METHODS _set_e071 - IMPORTING - iv_tabname TYPE string - is_transport TYPE ty_s_transport - RETURNING - VALUE(result) TYPE REF TO data. - - CLASS-METHODS _get_e071k_tabkey - IMPORTING - line TYPE any - dfies TYPE zoblomov_cl_util=>ty_t_dfies - RETURNING - VALUE(rv_tabkey) TYPE trobj_name. - - CLASS-METHODS _read_e070 - CHANGING - mt_data TYPE ty_t_data. - - CLASS-METHODS set_mandt - IMPORTING - ir_data TYPE REF TO data. CLASS-METHODS rtti_get_class_descr_on_cloud IMPORTING @@ -430,18 +332,6 @@ CLASS zoblomov_cl_util_abap DEFINITION RETURNING VALUE(result) TYPE string. - CLASS-METHODS rtti_get_t_attri_on_prem - IMPORTING - tabname TYPE string - RETURNING - VALUE(result) TYPE ty_t_dfies. - - CLASS-METHODS rtti_get_t_attri_on_cloud - IMPORTING - tabname TYPE string - RETURNING - VALUE(result) TYPE ty_t_dfies ##NEEDED. - PRIVATE SECTION. ENDCLASS. @@ -450,7 +340,13 @@ ENDCLASS. CLASS zoblomov_cl_util_abap IMPLEMENTATION. METHOD context_get_user_tech. - result = sy-uname. + + IF context_check_abap_cloud( ). + result = zoblomov_cl_util_abap_c=>context_get_user_tech( ). + ELSE. + result = zoblomov_cl_util_abap_s=>context_get_user_tech( ). + ENDIF. + ENDMETHOD. METHOD context_check_abap_cloud. @@ -660,7 +556,7 @@ CLASS zoblomov_cl_util_abap IMPLEMENTATION. RECEIVING ro_class = object. - ASSIGN ('OBJECT->IF_XCO_AO_CLASS~IMPLEMENTATION') TO . + ASSIGN object->('IF_XCO_AO_CLASS~IMPLEMENTATION') TO . ASSERT sy-subrc = 0. object = . @@ -744,7 +640,7 @@ CLASS zoblomov_cl_util_abap IMPLEMENTATION. DATA temp3 TYPE zoblomov_cl_util_abap=>ty_t_classes. DATA implementation_name LIKE LINE OF lt_implementation_names. DATA temp4 LIKE LINE OF temp3. - DATA lv_fm TYPE string. + DATA type TYPE c LENGTH 12. FIELD-SYMBOLS TYPE data. DATA temp5 LIKE LINE OF lt_impl. @@ -752,99 +648,100 @@ CLASS zoblomov_cl_util_abap IMPLEMENTATION. FIELD-SYMBOLS TYPE any. DATA temp6 TYPE zoblomov_cl_util_abap=>ty_s_class_descr. - TRY. + IF context_check_abap_cloud( ). - ls_clskey-clsname = val. + ls_clskey-clsname = val. - xco_cp_abap = 'XCO_CP_ABAP'. - CALL METHOD (xco_cp_abap)=>interface - EXPORTING - iv_name = ls_clskey-clsname - RECEIVING - ro_interface = obj. + xco_cp_abap = 'XCO_CP_ABAP'. + CALL METHOD (xco_cp_abap)=>interface + EXPORTING + iv_name = ls_clskey-clsname + RECEIVING + ro_interface = obj. - ASSIGN obj->('IF_XCO_AO_INTERFACE~IMPLEMENTATIONS') TO . - IF sy-subrc <> 0. - RAISE EXCEPTION TYPE cx_sy_dyn_call_illegal_class. - ENDIF. - obj = . + ASSIGN obj->('IF_XCO_AO_INTERFACE~IMPLEMENTATIONS') TO . + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE cx_sy_dyn_call_illegal_class. + ENDIF. + obj = . - ASSIGN obj->('IF_XCO_INTF_IMPLEMENTATIONS_FC~ALL') TO . - IF sy-subrc <> 0. - RAISE EXCEPTION TYPE cx_sy_dyn_call_illegal_class. - ENDIF. - obj = . + ASSIGN obj->('IF_XCO_INTF_IMPLEMENTATIONS_FC~ALL') TO . + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE cx_sy_dyn_call_illegal_class. + ENDIF. + obj = . - CALL METHOD obj->('IF_XCO_INTF_IMPLEMENTATIONS~GET_NAMES') - RECEIVING - rt_names = lt_implementation_names. + CALL METHOD obj->('IF_XCO_INTF_IMPLEMENTATIONS~GET_NAMES') + RECEIVING + rt_names = lt_implementation_names. - CLEAR temp3. + CLEAR temp3. - LOOP AT lt_implementation_names INTO implementation_name. + LOOP AT lt_implementation_names INTO implementation_name. - temp4-classname = implementation_name. - temp4-description = rtti_get_class_descr_on_cloud( implementation_name ). - INSERT temp4 INTO TABLE temp3. - ENDLOOP. - result = temp3. + temp4-classname = implementation_name. + temp4-description = rtti_get_class_descr_on_cloud( implementation_name ). + INSERT temp4 INTO TABLE temp3. + ENDLOOP. + result = temp3. - CATCH cx_root. + ELSE. + + ls_key-intkey = val. + + DATA lv_fm TYPE string. + lv_fm = `SEO_INTERFACE_IMPLEM_GET_ALL`. + CALL FUNCTION lv_fm + EXPORTING + intkey = ls_key + IMPORTING + impkeys = lt_impl + EXCEPTIONS + error_message = 1 + OTHERS = 2. + IF sy-subrc <> 0. + RETURN. + ENDIF. + + type = 'SEOC_CLASS_R'. + CREATE DATA class TYPE (type). + + ASSIGN class->* TO . + + LOOP AT lt_impl REFERENCE INTO lr_impl. - ls_key-intkey = val. + CLEAR . - lv_fm = `SEO_INTERFACE_IMPLEM_GET_ALL`. + ls_clskey-clsname = lr_impl->clsname. + + lv_fm = `SEO_CLASS_READ`. CALL FUNCTION lv_fm EXPORTING - intkey = ls_key + clskey = ls_clskey IMPORTING - impkeys = lt_impl + class = EXCEPTIONS error_message = 1 OTHERS = 2. IF sy-subrc <> 0. - RETURN. + RAISE EXCEPTION TYPE zoblomov_cx_util_error. ENDIF. - type = 'SEOC_CLASS_R'. - CREATE DATA class TYPE (type). - - ASSIGN class->* TO . - - LOOP AT lt_impl REFERENCE INTO lr_impl. - - CLEAR . - - ls_clskey-clsname = lr_impl->clsname. - - lv_fm = `SEO_CLASS_READ`. - CALL FUNCTION lv_fm - EXPORTING - clskey = ls_clskey - IMPORTING - class = - EXCEPTIONS - error_message = 1 - OTHERS = 2. - IF sy-subrc <> 0. - RAISE EXCEPTION TYPE zoblomov_cx_util_error. - ENDIF. + ASSIGN + COMPONENT 'DESCRIPT' + OF STRUCTURE + TO . + ASSERT sy-subrc = 0. - ASSIGN - COMPONENT 'DESCRIPT' - OF STRUCTURE - TO . - ASSERT sy-subrc = 0. - - CLEAR temp6. - temp6-classname = lr_impl->clsname. - temp6-description = . - INSERT - temp6 - INTO TABLE result. - ENDLOOP. + CLEAR temp6. + temp6-classname = lr_impl->clsname. + temp6-description = . + INSERT + temp6 + INTO TABLE result. + ENDLOOP. - ENDTRY. + ENDIF. ENDMETHOD. @@ -1043,400 +940,33 @@ CLASS zoblomov_cl_util_abap IMPLEMENTATION. ENDMETHOD. METHOD rtti_get_class_descr_on_cloud. - - DATA obj TYPE REF TO object. - DATA content TYPE REF TO object. - DATA lv_classname TYPE c LENGTH 30. - DATA xco_cp_abap TYPE c LENGTH 11. - - lv_classname = i_classname. - - xco_cp_abap = 'XCO_CP_ABAP'. - CALL METHOD (xco_cp_abap)=>('CLASS') - EXPORTING - iv_name = lv_classname - RECEIVING - ro_class = obj. - - CALL METHOD obj->('IF_XCO_AO_CLASS~CONTENT') - RECEIVING - ro_content = content. - - CALL METHOD content->('IF_XCO_CLAS_CONTENT~GET_SHORT_DESCRIPTION') - RECEIVING - rv_short_description = result. - - ENDMETHOD. - - METHOD rtti_get_t_attri_on_prem. - - DATA structdescr TYPE REF TO cl_abap_structdescr. - DATA dfies TYPE REF TO data. - DATA s_dfies TYPE ty_s_dfies. - - FIELD-SYMBOLS TYPE STANDARD TABLE. - FIELD-SYMBOLS TYPE any. - - DATA temp9 TYPE cl_abap_structdescr=>component_table. - DATA comps LIKE temp9. - DATA temp10 TYPE REF TO cl_abap_structdescr. - DATA lo_struct LIKE temp10. - DATA new_struct_desc TYPE REF TO cl_abap_structdescr. - DATA new_table_desc TYPE REF TO cl_abap_tabledescr. - DATA comp LIKE LINE OF comps. - FIELD-SYMBOLS TYPE any. - FIELD-SYMBOLS TYPE any. - - comps = temp9. - -* TYPES: BEGIN OF ty_s_dfies, -* tabname TYPE c LENGTH 30, -* fieldname TYPE c LENGTH 30, -* langu TYPE c LENGTH 1, -* position TYPE n LENGTH 4, -* offset TYPE n LENGTH 6, -* domname TYPE c LENGTH 30, -* rollname TYPE c LENGTH 30, -* checktable TYPE c LENGTH 30, -* leng TYPE n LENGTH 6, -* intlen TYPE n LENGTH 6, -* outputlen TYPE n LENGTH 6, -* decimals TYPE n LENGTH 6, -* datatype TYPE c LENGTH 4, -* inttype TYPE c LENGTH 1, -* reftable TYPE c LENGTH 30, -* reffield TYPE c LENGTH 30, -* precfield TYPE c LENGTH 30, -* authorid TYPE c LENGTH 3, -* memoryid TYPE c LENGTH 20, -* logflag TYPE c LENGTH 1, -* mask TYPE c LENGTH 20, -* masklen TYPE n LENGTH 4, -* convexit TYPE c LENGTH 5, -* headlen TYPE n LENGTH 2, -* scrlen1 TYPE n LENGTH 2, -* scrlen2 TYPE n LENGTH 2, -* scrlen3 TYPE n LENGTH 2, -* fieldtext TYPE c LENGTH 60, -* reptext TYPE c LENGTH 55, -* scrtext_s TYPE c LENGTH 10, -* scrtext_m TYPE c LENGTH 20, -* scrtext_l TYPE c LENGTH 40, -* keyflag TYPE c LENGTH 1, -* lowercase TYPE c LENGTH 1, -* mac TYPE c LENGTH 1, -* genkey TYPE c LENGTH 1, -* noforkey TYPE c LENGTH 1, -* valexi TYPE c LENGTH 1, -* noauthch TYPE c LENGTH 1, -* sign TYPE c LENGTH 1, -* dynpfld TYPE c LENGTH 1, -* f4availabl TYPE c LENGTH 1, -* comptype TYPE c LENGTH 1, -* lfieldname TYPE c LENGTH 132, -* ltrflddis TYPE c LENGTH 1, -* bidictrlc TYPE c LENGTH 1, -* outputstyle TYPE n LENGTH 2, -* nohistory TYPE c LENGTH 1, -* ampmformat TYPE c LENGTH 1, -* END OF ty_s_dfies. -* temp10 ?= cl_abap_structdescr=>describe_by_name( 'TY_S_DFIES' ). - - temp10 ?= cl_abap_structdescr=>describe_by_name( 'DFIES' ). - - lo_struct = temp10. - comps = lo_struct->get_components( ). - TRY. - new_struct_desc = cl_abap_structdescr=>create( comps ). - - new_table_desc = cl_abap_tabledescr=>create( p_line_type = new_struct_desc - p_table_kind = cl_abap_tabledescr=>tablekind_std ). - - CREATE DATA dfies TYPE HANDLE new_table_desc. - - ASSIGN dfies->* TO . - IF IS NOT ASSIGNED. - RETURN. - ENDIF. - - IF tabname IS INITIAL. - RAISE EXCEPTION TYPE zoblomov_cx_util_error - EXPORTING - val = `RTTI_BY_NAME_TAB_INITIAL`. - ENDIF. - - structdescr ?= cl_abap_structdescr=>describe_by_name( tabname ). - = structdescr->get_ddic_field_list( ). - - LOOP AT ASSIGNING . - - LOOP AT comps INTO comp. - - ASSIGN COMPONENT comp-name OF STRUCTURE TO . - IF IS NOT ASSIGNED. - CONTINUE. - ENDIF. - - ASSIGN COMPONENT comp-name OF STRUCTURE s_dfies TO . - IF IS NOT ASSIGNED. - CONTINUE. - ENDIF. - - = . - - UNASSIGN . - UNASSIGN . - - ENDLOOP. - - APPEND s_dfies TO result. - CLEAR s_dfies. - - ENDLOOP. - - CATCH cx_root INTO DATA(x). - DATA(error) = x->get_text( ). - ENDTRY. + DATA obj TYPE REF TO object. + DATA content TYPE REF TO object. + DATA lv_classname TYPE c LENGTH 30. + DATA xco_cp_abap TYPE c LENGTH 11. - ENDMETHOD. + lv_classname = i_classname. - METHOD rtti_get_t_attri_on_cloud. + xco_cp_abap = 'XCO_CP_ABAP'. + CALL METHOD (xco_cp_abap)=>('CLASS') + EXPORTING + iv_name = lv_classname + RECEIVING + ro_class = obj. - DATA obj TYPE REF TO object. - DATA lv_tabname TYPE c LENGTH 16. - DATA lr_ddfields TYPE REF TO data. - TYPES ty_c30 TYPE c LENGTH 30. - DATA names TYPE STANDARD TABLE OF ty_c30 WITH EMPTY KEY. - FIELD-SYMBOLS TYPE any. - FIELD-SYMBOLS TYPE simple. - FIELD-SYMBOLS TYPE ANY TABLE. + CALL METHOD obj->('IF_XCO_AO_CLASS~CONTENT') + RECEIVING + ro_content = content. -* convert to correct type, - lv_tabname = tabname. + CALL METHOD content->('IF_XCO_CLAS_CONTENT~GET_SHORT_DESCRIPTION') + RECEIVING + rv_short_description = result. - TRY. - TRY. - DATA(lv_method2) = `XCO_CP_ABAP_DICTIONARY`. - CALL METHOD (lv_method2)=>('DATABASE_TABLE') - EXPORTING - iv_name = lv_tabname - RECEIVING - ro_database_table = obj. - ASSIGN obj->('IF_XCO_DATABASE_TABLE~FIELDS->IF_XCO_DBT_FIELDS_FACTORY~KEY') TO . - IF sy-subrc <> 0. -* fallback to RTTI, KEY field does not exist in S/4 2020 - RAISE EXCEPTION TYPE cx_sy_dyn_call_illegal_class. - ENDIF. - obj = . - CALL METHOD obj->('IF_XCO_DBT_FIELDS~GET_NAMES') - RECEIVING - rt_names = names. - CATCH cx_sy_dyn_call_illegal_class. - DATA(workaround) = 'DDFIELDS'. - CREATE DATA lr_ddfields TYPE (workaround). - ASSIGN lr_ddfields->* TO . - ASSERT sy-subrc = 0. - = CAST cl_abap_structdescr( cl_abap_typedescr=>describe_by_name( - lv_tabname ) )->get_ddic_field_list( ). - LOOP AT ASSIGNING . - ASSIGN COMPONENT 'KEYFLAG' OF STRUCTURE TO . - IF sy-subrc <> 0 OR <> abap_true. - CONTINUE. - ENDIF. - ASSIGN COMPONENT 'FIELDNAME' OF STRUCTURE TO . - ASSERT sy-subrc = 0. - APPEND TO names. - ENDLOOP. - ENDTRY. CATCH cx_root INTO DATA(x). - DATA(error) = x->get_text( ). + DATA(lv_error) = x->get_text( ). ENDTRY. - - - DATA(lt_comp) = zoblomov_cl_util=>rtti_get_t_attri_by_any( tabname ). - LOOP AT lt_comp REFERENCE INTO DATA(lr_comp). - - DATA(lv_check_key) = abap_false. - IF line_exists( names[ table_line = lr_comp->name ] ). - lv_check_key = abap_true. - ENDIF. - - INSERT VALUE #( - fieldname = lr_comp->name - rollname = lr_comp->name - keyflag = lv_check_key - scrtext_s = lr_comp->name - scrtext_m = lr_comp->name - scrtext_l = lr_comp->name - ) INTO TABLE result. - - ENDLOOP. -* structdescr-> -* = structdescr->get_ddic_field_list( ). - -* LOOP AT ASSIGNING . -* -* LOOP AT comps INTO comp. -* -* ASSIGN COMPONENT comp-name OF STRUCTURE TO . -* IF IS NOT ASSIGNED. -* CONTINUE. -* ENDIF. -* -* ASSIGN COMPONENT comp-name OF STRUCTURE s_dfies TO . -* IF IS NOT ASSIGNED. -* CONTINUE. -* ENDIF. -* -* = . -* -* UNASSIGN . -* UNASSIGN . -* -* ENDLOOP. -* -* APPEND s_dfies TO result. -* CLEAR s_dfies. -* -* ENDLOOP. - - - -* DATA db TYPE REF TO object. -* DATA fields TYPE REF TO object. -* DATA r_names TYPE REF TO data. -* DATA t_param TYPE abap_parmbind_tab. -* DATA field TYPE REF TO object. -* DATA content TYPE REF TO object. -* DATA r_content TYPE REF TO data. -* DATA type TYPE REF TO object. -* DATA element TYPE REF TO object. -* DATA tab TYPE c LENGTH 16. -* -* FIELD-SYMBOLS TYPE any. -* FIELD-SYMBOLS TYPE STANDARD TABLE. -* FIELD-SYMBOLS TYPE any. -* FIELD-SYMBOLS TYPE REF TO object. -* -* tab = tabname. -* -* CALL METHOD ('XCO_CP_ABAP_DICTIONARY')=>database_table -* EXPORTING -* iv_name = tab -* RECEIVING -* ro_database_table = db. -* -* ASSIGN db->('IF_XCO_DATABASE_TABLE~FIELDS->IF_XCO_DBT_FIELDS_FACTORY~ALL') TO . -* -* IF sy-subrc <> 0. -* RETURN. -* ENDIF. -* -* fields = . -* -* CREATE DATA r_names TYPE ('SXCO_T_AD_FIELD_NAMES'). -* ASSIGN r_names->* TO . -* IF IS NOT ASSIGNED. -* RETURN. -* ENDIF. -* -* CALL METHOD fields->('IF_XCO_DBT_FIELDS~GET_NAMES') -* RECEIVING -* rt_names = . -* -* LOOP AT ASSIGNING . -* -* CLEAR t_param. -* -* INSERT VALUE #( name = 'IV_NAME' -* kind = cl_abap_objectdescr=>exporting -* value = REF #( ) ) INTO TABLE t_param. -* INSERT VALUE #( name = 'RO_FIELD' -* kind = cl_abap_objectdescr=>receiving -* value = REF #( field ) ) INTO TABLE t_param. -* -* CALL METHOD db->(`IF_XCO_DATABASE_TABLE~FIELD`) -* PARAMETER-TABLE t_param. -* -* ASSIGN t_param[ name = 'RO_FIELD' ] TO FIELD-SYMBOL(). -* IF IS NOT ASSIGNED. -* CONTINUE. -* ENDIF. -* ASSIGN -value->* TO . -* IF IS NOT ASSIGNED. -* CONTINUE. -* ENDIF. -* -* CALL METHOD ->('IF_XCO_DBT_FIELD~CONTENT') -* RECEIVING -* ro_content = content. -* -* CREATE DATA r_content TYPE ('IF_XCO_DBT_FIELD_CONTENT=>TS_CONTENT'). -* ASSIGN r_content->* TO FIELD-SYMBOL() CASTING TYPE ('IF_XCO_DBT_FIELD_CONTENT=>TS_CONTENT'). -* IF IS NOT ASSIGNED. -* CONTINUE. -* ENDIF. -* -* CALL METHOD content->('IF_XCO_DBT_FIELD_CONTENT~GET') -* RECEIVING -* rs_content = . -* -* ASSIGN COMPONENT 'KEY_INDICATOR' OF STRUCTURE TO FIELD-SYMBOL(). -* IF IS NOT ASSIGNED. -* CONTINUE. -* ENDIF. -* ASSIGN COMPONENT 'SHORT_DESCRIPTION' OF STRUCTURE TO FIELD-SYMBOL(). -* IF IS NOT ASSIGNED. -* CONTINUE. -* ENDIF. -* ASSIGN COMPONENT 'TYPE' OF STRUCTURE TO FIELD-SYMBOL(). -* IF IS NOT ASSIGNED. -* CONTINUE. -* ENDIF. -* -* type = . -* -* CALL METHOD type->('IF_XCO_DBT_FIELD_TYPE~GET_DATA_ELEMENT') -* RECEIVING -* ro_data_element = element. -* -* IF IS INITIAL. -* = . -* ENDIF. -* -* ASSIGN element->('IF_XCO_AD_OBJECT~NAME') TO FIELD-SYMBOL(). -* IF IS NOT ASSIGNED. -* CONTINUE. -* ENDIF. -* -* IF sy-subrc = 0. -* result = VALUE #( BASE result -* ( fieldname = keyflag = tabname = tab scrtext_s = rollname = ) ). -* ELSE. -* result = VALUE #( BASE result -* ( fieldname = keyflag = tabname = tab scrtext_s = rollname = ) ). -* ENDIF. -* -* UNASSIGN . -* UNASSIGN . -* UNASSIGN . -* UNASSIGN . -* UNASSIGN . -* -* ENDLOOP. - - ENDMETHOD. - - METHOD rtti_get_t_dfies_by_table_name. - - IF context_check_abap_cloud( ) IS NOT INITIAL. - result = rtti_get_t_attri_on_cloud( table_name ). - ELSE. - result = rtti_get_t_attri_on_prem( table_name ). - ENDIF. - ENDMETHOD. METHOD rtti_get_table_desrc. @@ -1472,843 +1002,57 @@ CLASS zoblomov_cl_util_abap IMPLEMENTATION. ENDMETHOD. - METHOD bus_search_help_read. - - DATA lt_result_tab TYPE TABLE OF string. - DATA ls_comp TYPE abap_componentdescr. - DATA lt_comps TYPE abap_component_tab. - DATA lo_datadescr TYPE REF TO cl_abap_datadescr. - DATA lr_line TYPE REF TO data. - - " data ls_shlp type shlp_descr. - - DATA lr_shlp TYPE REF TO data. + METHOD context_get_tenant. - DATA(lv_type) = 'SHLP_DESCR'. - CREATE DATA lr_shlp TYPE (lv_type). - FIELD-SYMBOLS TYPE any. - ASSIGN lr_shlp->* TO . + "DATA(tenant_info) = xco_cp=>current->tenant( ). + "DATA(account_id) = tenant_info->get_global_account_id( ). - DATA lv_tabname TYPE c LENGTH 30. - DATA lv_fieldname TYPE c LENGTH 30. - lv_tabname = mv_table. - lv_fieldname = mv_fname. + ENDMETHOD. - IF ms_shlp IS INITIAL. - " Suchhilfe lesen - DATA(lv_fm) = 'F4IF_DETERMINE_SEARCHHELP'. - CALL FUNCTION lv_fm - EXPORTING - tabname = lv_tabname - fieldname = lv_fieldname - IMPORTING - shlp = - EXCEPTIONS - field_not_found = 1 - no_help_for_field = 2 - inconsistent_help = 3 - OTHERS = 4. - IF sy-subrc <> 0. - " FEHLER - ENDIF. - ms_shlp = CORRESPONDING #( ). + METHOD context_get_callstack. - IF ms_shlp-intdescr-issimple = abap_false. + DATA lo_util TYPE REF TO object. + IF context_check_abap_cloud( ). -* DATA lt_shlp TYPE shlp_desct. - DATA lr_t_shlp TYPE REF TO data. - DATA(lv_type2) = 'SHLP_DESCT'. - CREATE DATA lr_t_shlp TYPE (lv_type2). - FIELD-SYMBOLS TYPE STANDARD TABLE. - ASSIGN lr_t_shlp->* TO . + CREATE OBJECT lo_util TYPE ('Z2UI5_CL_UTIL_ABAP_C'). + CALL METHOD lo_util->('CONTEXT_GET_CALLSTACK') + RECEIVING + result = result. - lv_fm = 'F4IF_EXPAND_SEARCHHELP'. - CALL FUNCTION lv_fm - EXPORTING - shlp_top = ms_shlp - IMPORTING - shlp_tab = . + ELSE. -* DATA(ls_row) = CORRESPONDING #( [ 1 ] OPTIONAL ). - FIELD-SYMBOLS TYPE any. - ASSIGN [ 1 ] TO . - ms_shlp = CORRESPONDING #( ). - ENDIF. ENDIF. - IF mr_data IS BOUND. - " Values from Caller app to Interface Values - LOOP AT ms_shlp-interface REFERENCE INTO DATA(r_interface) WHERE value IS INITIAL. - - FIELD-SYMBOLS TYPE any. - ASSIGN mr_data->* TO . - FIELD-SYMBOLS TYPE any. - ASSIGN COMPONENT r_interface->shlpfield OF STRUCTURE TO . + ENDMETHOD. - IF sy-subrc <> 0. - CONTINUE. - ENDIF. + METHOD conv_get_xlsx_by_itab. - r_interface->value = . +* DATA(write_access) = xco_cp_xlsx=>document->empty( )->write_access( ). +* DATA(worksheet) = write_access->get_workbook( )->worksheet->at_position( 1 ). +* DATA(selection_pattern) = xco_cp_xlsx_selection=>pattern_builder->simple_from_to( )->get_pattern( ). +* worksheet->select( selection_pattern +* )->row_stream( +* )->operation->write_from( REF #( val ) +* )->execute( ). +* result = write_access->get_file_content( ). - ENDLOOP. - ENDIF. + ENDMETHOD. - " Interface Fixed Values to Selopt - LOOP AT ms_shlp-interface INTO DATA(interface). + METHOD conv_get_itab_by_xlsx. - " Match the name of the SH Field to the Input field name - IF interface-valfield = mv_fname. - mv_shlpfield = interface-shlpfield. - ENDIF. +* CLEAR result. +* DATA(document) = xco_cp_xlsx=>document->for_file_content( val )->read_access( ). +* DATA(sheet) = document->get_workbook( )->worksheet->at_position( 1 ). +* DATA(pattern) = xco_cp_xlsx_selection=>pattern_builder->simple_from_to( )->get_pattern( ). +* sheet->select( pattern +* )->row_stream( +* )->operation->write_to( REF #( result ) +* )->set_value_transformation( xco_cp_xlsx_read_access=>value_transformation->string_value +* )->execute( ). - IF interface-value IS NOT INITIAL. + ENDMETHOD. - ms_shlp-selopt = VALUE #( BASE ms_shlp-selopt - ( shlpfield = interface-shlpfield - shlpname = interface-valtabname - option = COND #( WHEN interface-value CA `*` THEN 'CP' ELSE 'EQ' ) - sign = 'I' - low = interface-value ) ). - - ENDIF. - - ENDLOOP. - - LOOP AT ms_shlp-fieldprop INTO DATA(fieldrop). - - IF fieldrop-defaultval IS INITIAL. - CONTINUE. - ENDIF. - - DATA(valule) = fieldrop-defaultval. - REPLACE ALL OCCURRENCES OF `'` IN valule WITH ``. - - ms_shlp-selopt = VALUE #( BASE ms_shlp-selopt - ( shlpfield = fieldrop-fieldname -* shlpname = - option = COND #( WHEN fieldrop-defaultval CA `*` THEN 'CP' ELSE 'EQ' ) - sign = 'I' - low = valule ) ). - - ENDLOOP. - - CREATE DATA lr_shlp TYPE (lv_type). - ASSIGN lr_shlp->* TO . - CLEAR: . - MOVE-CORRESPONDING ms_shlp TO . - - lv_fm = 'F4IF_SELECT_VALUES'. - CALL FUNCTION lv_fm - EXPORTING - shlp = - sort = space - call_shlp_exit = abap_true - TABLES - record_tab = lt_result_tab - recdescr_tab = mt_result_desc. - - SORT ms_shlp-fieldprop BY shlplispos ASCENDING. - - LOOP AT ms_shlp-fieldprop INTO DATA(field_props) WHERE shlplispos IS NOT INITIAL. - - DATA(descption) = VALUE #( mt_result_desc[ fieldname = field_props-fieldname ] OPTIONAL ). - - ls_comp-name = descption-fieldname. - ls_comp-type ?= cl_abap_datadescr=>describe_by_name( descption-rollname ). - APPEND ls_comp TO lt_comps. - - ENDLOOP. - - IF NOT line_exists( lt_comps[ name = 'ROW_ID' ] ). - lo_datadescr ?= cl_abap_datadescr=>describe_by_name( 'INT4' ). - ls_comp-name = 'ROW_ID'. - ls_comp-type ?= lo_datadescr. - APPEND ls_comp TO lt_comps. - ENDIF. - - DATA(strucdescr) = cl_abap_structdescr=>create( p_components = lt_comps ). - - DATA(tabdescr) = cl_abap_tabledescr=>create( p_line_type = strucdescr ). - - IF mt_data IS NOT BOUND. - CREATE DATA mt_data TYPE HANDLE tabdescr. - ENDIF. - - FIELD-SYMBOLS TYPE STANDARD TABLE. - ASSIGN mt_data->* TO . - - CLEAR . - - " we dont want to loose all inputs in row ... - IF ms_data_row IS NOT BOUND. - CREATE DATA ms_data_row TYPE HANDLE strucdescr. - ENDIF. - - LOOP AT lt_result_tab INTO DATA(result_line). - - CREATE DATA lr_line TYPE HANDLE strucdescr. - ASSIGN lr_line->* TO FIELD-SYMBOL(). - - LOOP AT mt_result_desc INTO DATA(result_desc). - - ASSIGN COMPONENT result_desc-fieldname OF STRUCTURE - TO FIELD-SYMBOL(). - - IF sy-subrc <> 0. - CONTINUE. - ENDIF. - - IF result_desc-leng < result_desc-intlen. - " interne Darstellung anders als externe Darstellung - " UNICODE, offset halbieren - result_desc-offset = result_desc-offset / 2. - ENDIF. - - TRY. - = result_line+result_desc-offset(result_desc-outputlen). - CATCH cx_root. - - TRY. - " Sting table will crash if value length <> outputlen - = result_line+result_desc-offset. - CATCH cx_root INTO DATA(x). - DATA(error) = x->get_text( ). - ENDTRY. - ENDTRY. - - ENDLOOP. - - INSERT INTO TABLE . - - ENDLOOP. - - " Set default values - LOOP AT ms_shlp-interface INTO interface. - - IF interface-value IS NOT INITIAL. - - UNASSIGN . - ASSIGN ms_data_row->* TO . - ASSIGN COMPONENT interface-shlpfield OF STRUCTURE TO . - - IF sy-subrc <> 0. - CONTINUE. - ENDIF. - = interface-value. - - ENDIF. - - ENDLOOP. - -* LOOP AT ms_shlp-fieldprop INTO fieldrop. -* -* IF fieldrop-defaultval IS NOT INITIAL. -* -* ASSIGN COMPONENT fieldrop-fieldname OF STRUCTURE ms_data_row->* TO . -* -* IF sy-subrc <> 0. -* CONTINUE. -* ENDIF. -* = fieldrop-defaultval. -* REPLACE ALL OCCURRENCES OF `'` in with ``. -* ENDIF. -* -* ENDLOOP. - -* set_row_id( ). - - FIELD-SYMBOLS TYPE STANDARD TABLE. - FIELD-SYMBOLS TYPE any. - - ASSIGN mt_data->* TO . - - LOOP AT ASSIGNING . - - ASSIGN COMPONENT 'ROW_ID' OF STRUCTURE TO FIELD-SYMBOL(). - IF IS ASSIGNED. - = sy-tabix. - ENDIF. - ENDLOOP. - - ENDMETHOD. - - METHOD _get_e071k_tabkey. - - DATA lv_type TYPE c LENGTH 1. - DATA lv_tabkey TYPE c LENGTH 999. - DATA lv_tabkey_len TYPE i. - DATA lv_field_len TYPE i. - DATA lv_offset TYPE i. - - LOOP AT dfies INTO DATA(s_dfies) WHERE keyflag = abap_true. - - ASSIGN COMPONENT s_dfies-fieldname OF STRUCTURE line TO FIELD-SYMBOL(). - IF IS NOT ASSIGNED. - CONTINUE. - ENDIF. - - lv_type = cl_abap_typedescr=>describe_by_data( )->type_kind. - - IF lv_type NA 'CDNT'. - lv_tabkey+lv_tabkey_len = '*'. - rv_tabkey = lv_tabkey. - RETURN. - ELSE. - lv_field_len = cl_abap_typedescr=>describe_by_data( )->length / cl_abap_char_utilities=>charsize. - ENDIF. - - lv_field_len = cl_abap_typedescr=>describe_by_data( )->length / cl_abap_char_utilities=>charsize. - lv_tabkey+lv_tabkey_len(lv_field_len) = . - lv_tabkey_len = lv_tabkey_len + lv_field_len. - - ENDLOOP. - - IF lv_tabkey_len > 119. - - IF lv_tabkey CS '_'. - lv_offset = sy-fdpos. - lv_tabkey+lv_offset = '*'. - ELSE. - lv_tabkey+119 = '*'. - ENDIF. - - ENDIF. - rv_tabkey = lv_tabkey. - ENDMETHOD. - - METHOD bus_tr_add. - - IF zoblomov_cl_util=>context_check_abap_cloud( ). - - ELSE. - - FIELD-SYMBOLS TYPE any. - FIELD-SYMBOLS TYPE STANDARD TABLE. - FIELD-SYMBOLS TYPE STANDARD TABLE. - - " We need to set the MANDT is necessary - set_mandt( ir_data ). - - DATA(r_e071k) = _set_e071k( ir_data = ir_data - iv_tabname = iv_tabname - is_transport = is_transport ). - ASSIGN r_e071k->* TO . - IF IS INITIAL. - RETURN. - ENDIF. - - DATA(r_e071) = _set_e071( iv_tabname = iv_tabname - is_transport = is_transport ). - - ASSIGN r_e071k->* TO . - ASSIGN r_e071->* TO . - - DATA(fb1) = 'TR_APPEND_TO_COMM_OBJS_KEYS'. - CALL FUNCTION fb1 - EXPORTING - wi_trkorr = is_transport-transport - iv_dialog = abap_false - TABLES - wt_e071 = - wt_e071k = - EXCEPTIONS - error_message = 1 - OTHERS = 2. - IF sy-subrc <> 0. - RAISE EXCEPTION TYPE zoblomov_cx_util_error. - ENDIF. - - DATA(fb2) = 'TR_SORT_AND_COMPRESS_COMM'. - CALL FUNCTION fb2 - EXPORTING - iv_trkorr = is_transport-task - EXCEPTIONS - error_message = 1 - OTHERS = 2. - IF sy-subrc <> 0. - RAISE EXCEPTION TYPE zoblomov_cx_util_error. - ELSE. - COMMIT WORK AND WAIT. - ENDIF. - - ENDIF. - - ENDMETHOD. - - METHOD _set_e071k. - - DATA t_e071k TYPE REF TO data. - DATA s_e071k TYPE REF TO data. - - FIELD-SYMBOLS TYPE STANDARD TABLE. - FIELD-SYMBOLS TYPE any. - FIELD-SYMBOLS TYPE any. - FIELD-SYMBOLS TYPE STANDARD TABLE. - FIELD-SYMBOLS TYPE any. - - DATA(t_comp) = zoblomov_cl_util=>rtti_get_t_attri_by_table_name( 'E071K' ). - - TRY. - - DATA(struct_desc) = cl_abap_structdescr=>create( t_comp ). - - DATA(table_desc) = cl_abap_tabledescr=>create( p_line_type = struct_desc - p_table_kind = cl_abap_tabledescr=>tablekind_std ). - - CREATE DATA t_e071k TYPE HANDLE table_desc. - CREATE DATA s_e071k TYPE HANDLE struct_desc. - - ASSIGN t_e071k->* TO . - ASSIGN s_e071k->* TO . - - CATCH cx_root INTO DATA(x). - DATA(error) = x->get_text( ). - ENDTRY. - - DATA(dfies) = zoblomov_cl_util=>rtti_get_t_dfies_by_table_name( iv_tabname ). - -* is_transport-transport = assign_value( component = 'TRKORR' -* structure = ). ) - - ASSIGN COMPONENT 'TRKORR' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - RETURN. - ELSE. - = is_transport-task. - ENDIF. - UNASSIGN . - ASSIGN COMPONENT 'PGMID' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - RETURN. - ELSE. - = 'R3TR'. - ENDIF. - UNASSIGN . - ASSIGN COMPONENT 'MASTERTYPE' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - RETURN. - ELSE. - = 'TABU'. - ENDIF. - UNASSIGN . - ASSIGN COMPONENT 'OBJECT' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - RETURN. - ELSE. - = 'TABU'. - ENDIF. - UNASSIGN . - ASSIGN COMPONENT 'MASTERNAME' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - RETURN. - ELSE. - = iv_tabname. - ENDIF. - UNASSIGN . - ASSIGN COMPONENT 'OBJNAME' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - RETURN. - ELSE. - = iv_tabname. - ENDIF. - UNASSIGN . - - ASSIGN ir_data->* TO . - -* IF IS INITIAL. -* RETURN. -* ENDIF. - - LOOP AT ASSIGNING . - - ASSIGN COMPONENT 'TABKEY' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - RETURN. - ELSE. - = _get_e071k_tabkey( dfies = dfies - line = ). - ENDIF. - - APPEND TO . - - ENDLOOP. - - result = t_e071k. - - ENDMETHOD. - - METHOD _set_e071. - - DATA t_e071 TYPE REF TO data. - DATA s_e071 TYPE REF TO data. - - FIELD-SYMBOLS TYPE STANDARD TABLE. - FIELD-SYMBOLS TYPE any. - FIELD-SYMBOLS TYPE any. - - DATA(t_comp) = zoblomov_cl_util=>rtti_get_t_attri_by_table_name( 'E071' ). - - TRY. - - DATA(struct_desc_new) = cl_abap_structdescr=>create( t_comp ). - - DATA(table_desc_new) = cl_abap_tabledescr=>create( p_line_type = struct_desc_new - p_table_kind = cl_abap_tabledescr=>tablekind_std ). - - CREATE DATA t_e071 TYPE HANDLE table_desc_new. - CREATE DATA s_e071 TYPE HANDLE struct_desc_new. - - ASSIGN t_e071->* TO . - ASSIGN s_e071->* TO . - - CATCH cx_root INTO DATA(x). - DATA(error) = x->get_text( ). - ENDTRY. - - ASSIGN COMPONENT 'TRKORR' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - RETURN. - ELSE. - = is_transport-task. - ENDIF. - UNASSIGN . - ASSIGN COMPONENT 'PGMID' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - RETURN. - ELSE. - = 'R3TR'. - ENDIF. - UNASSIGN . - ASSIGN COMPONENT 'OBJECT' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - RETURN. - ELSE. - = 'TABU'. - ENDIF. - UNASSIGN . - ASSIGN COMPONENT 'OBJ_NAME' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - RETURN. - ELSE. - = iv_tabname. - ENDIF. - UNASSIGN . - ASSIGN COMPONENT 'OBJFUNC' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - RETURN. - ELSE. - = 'K'. - ENDIF. - UNASSIGN . - - APPEND TO . - - result = t_e071. - - ENDMETHOD. - - METHOD _read_e070. - - DATA lo_tab TYPE REF TO data. - DATA lo_line TYPE REF TO data. - DATA ls_data TYPE ty_s_transport. - - FIELD-SYMBOLS
TYPE STANDARD TABLE. - FIELD-SYMBOLS TYPE any. - FIELD-SYMBOLS TYPE any. - - DATA(table_name) = 'E070'. - - TRY. - DATA(t_comp) = zoblomov_cl_util=>rtti_get_t_attri_by_table_name( table_name ). - - DATA(new_struct_desc) = cl_abap_structdescr=>create( t_comp ). - - DATA(new_table_desc) = cl_abap_tabledescr=>create( p_line_type = new_struct_desc - p_table_kind = cl_abap_tabledescr=>tablekind_std ). - - CREATE DATA lo_tab TYPE HANDLE new_table_desc. - CREATE DATA lo_line TYPE HANDLE new_struct_desc. - - ASSIGN lo_tab->* TO
. - ASSIGN lo_line->* TO . - - DATA(where) = - |( TRFUNCTION EQ 'Q' ) AND ( TRSTATUS EQ 'D' ) AND ( KORRDEV EQ 'CUST' ) AND ( AS4USER EQ '{ sy-uname }' )|. - - SELECT trkorr, - trfunction, - trstatus, - tarsystem, - korrdev, - as4user, - as4date, - as4time, - strkorr - FROM (table_name) - WHERE (where) - INTO TABLE @
. - IF sy-subrc <> 0. - RETURN. - ENDIF. - CATCH cx_root INTO DATA(x). - DATA(error) = x->get_text( ). - ENDTRY. - - LOOP AT
INTO . - - ASSIGN COMPONENT 'TRKORR' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - CONTINUE. - ELSE. - ls_data-transport = . - ENDIF. - - UNASSIGN . - - ASSIGN COMPONENT 'STRKORR' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - CONTINUE. - ELSE. - ls_data-task = . - ENDIF. - - UNASSIGN . - - APPEND ls_data TO mt_data. - - ENDLOOP. - - ENDMETHOD. - - METHOD bus_tr_read. - - IF zoblomov_cl_util=>context_check_abap_cloud( ). - -* data(lo_current_user) = xco_cp=>sy->user( ). -* -* DATA(lo_kind_filter) = xco_cp_transport=>filter->kind( xco_cp_transport=>kind->task ). -* DATA(lo_owner_filter) = xco_cp_transport=>filter->owner( xco_cp_abap_sql=>constraint->equal( lo_current_user->name ) ). -* DATA(lo_status_filter) = xco_cp_transport=>filter->status( xco_cp_transport=>status->modifiable ). -* DATA(lo_type_filter) = xco_cp_transport=>filter->type( io_type = xco_cp_transport=>type->customizing_task ). -* DATA(lt_transports) = xco_cp_cts=>transports->where( VALUE #( ( lo_kind_filter ) -* ( lo_owner_filter ) -* ( lo_status_filter ) -* ( lo_type_filter ) ) -* )->resolve( xco_cp_transport=>resolution->request ). -* -* LOOP AT lt_transports INTO DATA(lo_transport). -* DATA(lo_transport_request) = lo_transport->get_request( ). -* -* DATA(prop) = lo_transport_request->properties( )->get( ). -* -* DATA(tasks) = lo_transport_request->get_tasks( ). -* -* LOOP AT tasks INTO DATA(task). -* -* IF lo_current_user->name = task->properties( )->get_owner( )->name. -* -* DATA(data) = VALUE ty_s_data( short_description = prop-short_description -* transport = lo_transport_request->value -* task = task->value ). -* APPEND data TO mt_data. -* -* ENDIF. -* -* ENDLOOP. -* -* ENDLOOP. - - ELSE. - - DATA lo_tab TYPE REF TO data. - DATA lo_line TYPE REF TO data. - - FIELD-SYMBOLS
TYPE STANDARD TABLE. - FIELD-SYMBOLS TYPE any. - FIELD-SYMBOLS TYPE any. - - _read_e070( CHANGING mt_data = mt_data ). - - DATA(table_name) = 'E07T'. - - TRY. - DATA(t_comp) = zoblomov_cl_util=>rtti_get_t_attri_by_table_name( table_name ). - - DATA(new_struct_desc) = cl_abap_structdescr=>create( t_comp ). - - DATA(new_table_desc) = cl_abap_tabledescr=>create( p_line_type = new_struct_desc - p_table_kind = cl_abap_tabledescr=>tablekind_std ). - - CREATE DATA lo_tab TYPE HANDLE new_table_desc. - CREATE DATA lo_line TYPE HANDLE new_struct_desc. - - ASSIGN lo_tab->* TO
. - ASSIGN lo_line->* TO . - - DATA(index) = 0. - - LOOP AT mt_data INTO DATA(line). - index = index + 1. - IF index = 1. - DATA(where) = |TRKORR EQ '{ line-task }'|. - ELSE. - where = |{ where }OR TRKORR EQ '{ line-task }'|. - ENDIF. - where = |( { where } )|. - ENDLOOP. - - SELECT trkorr, - langu, - as4text - FROM (table_name) - WHERE (where) - INTO TABLE @
. - IF sy-subrc <> 0. - RETURN. - ENDIF. - - CATCH cx_root INTO DATA(x). - DATA(error) = x->get_text( ). - ENDTRY. - - LOOP AT
INTO . - - ASSIGN COMPONENT 'TRKORR' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - CONTINUE. - ELSE. - - READ TABLE mt_data REFERENCE INTO DATA(data) WITH KEY task = . - IF sy-subrc = 0. - - ASSIGN COMPONENT 'AS4TEXT' OF STRUCTURE TO . - IF IS NOT ASSIGNED. - CONTINUE. - ELSE. - - data->short_description = . - - ENDIF. - - ENDIF. - - ENDIF. - - ENDLOOP. - - ENDIF. - - ENDMETHOD. - - METHOD set_mandt. - - FIELD-SYMBOLS TYPE STANDARD TABLE. - FIELD-SYMBOLS TYPE any. - - ASSIGN ir_data->* TO . - - LOOP AT ASSIGNING . - - ASSIGN COMPONENT `MANDT` OF STRUCTURE TO FIELD-SYMBOL(). - IF IS ASSIGNED. - - TRY. - = sy-mandt. - CATCH cx_root INTO DATA(x). - DATA(error) = x->get_text( ). - ENDTRY. - - ENDIF. - ENDLOOP. - - ENDMETHOD. - - METHOD conv_exit. - - IF zoblomov_cl_util=>context_check_abap_cloud( ). - - ELSE. - - DATA(conv) = |CONVERSION_EXIT_{ name-convexit }_INPUT|. - DATA conex TYPE c LENGTH 30. - DATA(lv_tab) = 'TFDIR'. - - SELECT SINGLE funcname FROM (lv_tab) - WHERE funcname = @conv - INTO @conex. - - IF sy-subrc = 0. - - CALL FUNCTION conex - EXPORTING - input = val - IMPORTING - output = result - EXCEPTIONS - error_message = 1 - OTHERS = 2. - IF sy-subrc <> 0. - RAISE EXCEPTION TYPE zoblomov_cx_util_error. - ENDIF. - - - ENDIF. - - ENDIF. - - ENDMETHOD. - - METHOD context_get_tenant. - - "DATA(tenant_info) = xco_cp=>current->tenant( ). - "DATA(account_id) = tenant_info->get_global_account_id( ). - - ENDMETHOD. - - METHOD context_get_callstack. - -* "callstack -* DATA(stack) = xco_cp=>current->call_stack. -* DATA(full_stack) = stack->full( ). -* DATA(format_source) = xco_cp_call_stack=>format->adt( )->with_line_number_flavor( -* xco_cp_call_stack=>line_number_flavor->source ). -* -* LOOP AT full_stack->as_text( format_source )->get_lines( )->value INTO DATA(text). -* INSERT text INTO TABLE result. -* ENDLOOP. - - ENDMETHOD. - - METHOD conv_get_xlsx_by_itab. - -* DATA(write_access) = xco_cp_xlsx=>document->empty( )->write_access( ). -* DATA(worksheet) = write_access->get_workbook( )->worksheet->at_position( 1 ). -* DATA(selection_pattern) = xco_cp_xlsx_selection=>pattern_builder->simple_from_to( )->get_pattern( ). -* worksheet->select( selection_pattern -* )->row_stream( -* )->operation->write_from( REF #( val ) -* )->execute( ). -* result = write_access->get_file_content( ). - - ENDMETHOD. - - METHOD conv_get_itab_by_xlsx. - -* CLEAR result. -* DATA(document) = xco_cp_xlsx=>document->for_file_content( val )->read_access( ). -* DATA(sheet) = document->get_workbook( )->worksheet->at_position( 1 ). -* DATA(pattern) = xco_cp_xlsx_selection=>pattern_builder->simple_from_to( )->get_pattern( ). -* sheet->select( pattern -* )->row_stream( -* )->operation->write_to( REF #( result ) -* )->set_value_transformation( xco_cp_xlsx_read_access=>value_transformation->string_value -* )->execute( ). - - ENDMETHOD. - - METHOD bal_read. + METHOD bal_read. *" Create and set header * @@ -2343,4 +1087,10 @@ CLASS zoblomov_cl_util_abap IMPLEMENTATION. ENDMETHOD. + METHOD context_get_sy. + + result = CORRESPONDING #( sy ). + + ENDMETHOD. + ENDCLASS. diff --git a/src/zoblomov_cl_util_db.clas.abap b/src/zoblomov_cl_util_db.clas.abap deleted file mode 100644 index 9027b83..0000000 --- a/src/zoblomov_cl_util_db.clas.abap +++ /dev/null @@ -1,154 +0,0 @@ -CLASS zoblomov_cl_util_db DEFINITION - PUBLIC - FINAL - CREATE PUBLIC . - - PUBLIC SECTION. - - CLASS-METHODS delete_by_handle - IMPORTING - uname TYPE clike OPTIONAL - handle TYPE clike OPTIONAL - handle2 TYPE clike OPTIONAL - handle3 TYPE clike OPTIONAL - check_commit TYPE abap_bool DEFAULT abap_true. - - CLASS-METHODS save - IMPORTING - uname TYPE clike OPTIONAL - handle TYPE clike OPTIONAL - handle2 TYPE clike OPTIONAL - handle3 TYPE clike OPTIONAL - data TYPE any - check_commit TYPE abap_bool DEFAULT abap_true - RETURNING - VALUE(result) TYPE string. - - CLASS-METHODS load_by_id - IMPORTING - id TYPE clike OPTIONAL - EXPORTING - VALUE(result) TYPE any. - - CLASS-METHODS load_by_handle - IMPORTING - uname TYPE clike OPTIONAL - handle TYPE clike OPTIONAL - handle2 TYPE clike OPTIONAL - handle3 TYPE clike OPTIONAL - EXPORTING - VALUE(result) TYPE any. - - PROTECTED SECTION. - PRIVATE SECTION. -ENDCLASS. - - - -CLASS zoblomov_cl_util_db IMPLEMENTATION. - - - - METHOD delete_by_handle. - - DELETE FROM zoblomov_t_91 - WHERE - uname = @uname - AND handle = @handle - AND handle2 = @handle2 - AND handle3 = @handle3. - - IF check_commit = abap_true. - COMMIT WORK AND WAIT. - ENDIF. - - ENDMETHOD. - - - METHOD load_by_handle. - - DATA lt_db TYPE STANDARD TABLE OF zoblomov_t_91 WITH EMPTY KEY. - - SELECT data - FROM zoblomov_t_91 - WHERE - uname = @uname - AND handle = @handle - AND handle2 = @handle2 - AND handle3 = @handle3 - INTO CORRESPONDING FIELDS OF TABLE @lt_db. - IF sy-subrc <> 0. - RAISE EXCEPTION TYPE zoblomov_cx_util_error - EXPORTING - val = `No entry for handle exists`. - ENDIF. - - DATA(ls_db) = lt_db[ 1 ]. - - zoblomov_cl_util=>xml_parse( - EXPORTING - xml = ls_db-data - IMPORTING - any = result ). - - ENDMETHOD. - - - METHOD load_by_id. - - DATA lt_db TYPE STANDARD TABLE OF zoblomov_t_91 WITH EMPTY KEY. - - SELECT data - FROM zoblomov_t_91 - WHERE id = @id - INTO CORRESPONDING FIELDS OF TABLE @lt_db. - ASSERT sy-subrc = 0. - - DATA(ls_db) = lt_db[ 1 ]. - - zoblomov_cl_util=>xml_parse( - EXPORTING - xml = ls_db-data - IMPORTING - any = result ). - - ENDMETHOD. - - - METHOD save. - - DATA lt_db TYPE STANDARD TABLE OF zoblomov_t_91 WITH EMPTY KEY. - SELECT id - FROM zoblomov_t_91 - WHERE - uname = @uname - AND handle = @handle - AND handle2 = @handle2 - AND handle3 = @handle3 - INTO CORRESPONDING FIELDS OF TABLE @lt_db ##SUBRC_OK. - - DATA(ls_db) = VALUE zoblomov_t_91( - uname = uname - handle = handle - handle2 = handle2 - handle3 = handle3 - data = zoblomov_cl_util=>xml_stringify( data ) ). - - TRY. - ls_db-id = lt_db[ 1 ]-id. - CATCH cx_root. - ls_db-id = zoblomov_cl_util=>uuid_get_c32( ). - ENDTRY. - - MODIFY zoblomov_t_91 FROM @ls_db. - ASSERT sy-subrc = 0. - - IF check_commit = abap_true. - COMMIT WORK AND WAIT. - ENDIF. - - result = ls_db-id. - - ENDMETHOD. - -ENDCLASS. diff --git a/src/zoblomov_cl_util_abap_http.clas.abap b/src/zoblomov_cl_util_http.clas.abap similarity index 72% rename from src/zoblomov_cl_util_abap_http.clas.abap rename to src/zoblomov_cl_util_http.clas.abap index 74cb90b..6ac0f56 100644 --- a/src/zoblomov_cl_util_abap_http.clas.abap +++ b/src/zoblomov_cl_util_http.clas.abap @@ -1,19 +1,31 @@ -CLASS zoblomov_cl_util_abap_http DEFINITION PUBLIC. +CLASS zoblomov_cl_util_http DEFINITION PUBLIC. PUBLIC SECTION. + TYPES: + BEGIN OF ty_s_http_req, + method TYPE string, + body TYPE string, + path TYPE string, + t_params TYPE zoblomov_cl_util=>ty_t_name_value, + END OF ty_s_http_req. + CLASS-METHODS factory IMPORTING server TYPE REF TO object RETURNING - VALUE(result) TYPE REF TO zoblomov_cl_util_abap_http. + VALUE(result) TYPE REF TO zoblomov_cl_util_http. CLASS-METHODS factory_cloud IMPORTING req TYPE REF TO object res TYPE REF TO object RETURNING - VALUE(result) TYPE REF TO zoblomov_cl_util_abap_http. + VALUE(result) TYPE REF TO zoblomov_cl_util_http. + + METHODS get_req_info + RETURNING + VALUE(result) TYPE ty_s_http_req. METHODS get_header_field IMPORTING @@ -67,7 +79,8 @@ CLASS zoblomov_cl_util_abap_http DEFINITION PUBLIC. ENDCLASS. -CLASS zoblomov_cl_util_abap_http IMPLEMENTATION. +CLASS zoblomov_cl_util_http IMPLEMENTATION. + METHOD delete_response_cookie. DATA(lv_val) = CONV string( val ). @@ -81,7 +94,8 @@ CLASS zoblomov_cl_util_abap_http IMPLEMENTATION. object = . CALL METHOD object->('DELETE_COOKIE') - EXPORTING name = lv_val. + EXPORTING + name = lv_val. ELSE. @@ -106,8 +120,10 @@ CLASS zoblomov_cl_util_abap_http IMPLEMENTATION. object = . CALL METHOD object->('GET_COOKIE') - EXPORTING name = lv_val - IMPORTING value = result. + EXPORTING + name = lv_val + IMPORTING + value = result. ELSE. @@ -134,14 +150,18 @@ CLASS zoblomov_cl_util_abap_http IMPLEMENTATION. object = . CALL METHOD object->('GET_HEADER_FIELD') - EXPORTING name = lv_val - RECEIVING value = result. + EXPORTING + name = lv_val + RECEIVING + value = result. ELSE. CALL METHOD mo_request_cloud->('IF_WEB_HTTP_REQUEST~GET_HEADER_FIELD') - EXPORTING i_name = lv_val - RECEIVING r_value = result. + EXPORTING + i_name = lv_val + RECEIVING + r_value = result. ENDIF. @@ -160,14 +180,16 @@ CLASS zoblomov_cl_util_abap_http IMPLEMENTATION. object = . CALL METHOD object->('SET_HEADER_FIELD') - EXPORTING name = lv_n - value = lv_v. + EXPORTING + name = lv_n + value = lv_v. ELSE. CALL METHOD mo_response_cloud->('IF_WEB_HTTP_RESPONSE~SET_HEADER_FIELD') - EXPORTING i_name = lv_n - i_value = lv_v. + EXPORTING + i_name = lv_n + i_value = lv_v. ENDIF. @@ -199,12 +221,14 @@ CLASS zoblomov_cl_util_abap_http IMPLEMENTATION. object = . CALL METHOD object->('GET_CDATA') - RECEIVING data = result. + RECEIVING + data = result. ELSE. CALL METHOD mo_request_cloud->('IF_WEB_HTTP_REQUEST~GET_TEXT') - RECEIVING r_value = result. + RECEIVING + r_value = result. ENDIF. @@ -221,12 +245,14 @@ CLASS zoblomov_cl_util_abap_http IMPLEMENTATION. object = . CALL METHOD object->('IF_HTTP_REQUEST~GET_METHOD') - RECEIVING method = result. + RECEIVING + method = result. ELSE. CALL METHOD mo_request_cloud->('IF_WEB_HTTP_REQUEST~GET_METHOD') - RECEIVING r_value = result. + RECEIVING + r_value = result. ENDIF. @@ -243,12 +269,14 @@ CLASS zoblomov_cl_util_abap_http IMPLEMENTATION. object = . CALL METHOD object->('SET_CDATA') - EXPORTING data = val. + EXPORTING + data = val. ELSE. CALL METHOD mo_response_cloud->('IF_WEB_HTTP_RESPONSE~SET_TEXT') - EXPORTING i_text = val. + EXPORTING + i_text = val. ENDIF. @@ -267,14 +295,16 @@ CLASS zoblomov_cl_util_abap_http IMPLEMENTATION. object = . CALL METHOD object->('IF_HTTP_RESPONSE~SET_STATUS') - EXPORTING code = code - reason = lv_reason. + EXPORTING + code = code + reason = lv_reason. ELSE. CALL METHOD mo_response_cloud->('IF_WEB_HTTP_RESPONSE~SET_STATUS') - EXPORTING i_code = code - i_reason = lv_reason. + EXPORTING + i_code = code + i_reason = lv_reason. ENDIF. @@ -285,7 +315,8 @@ CLASS zoblomov_cl_util_abap_http IMPLEMENTATION. IF mo_server_onprem IS BOUND. CALL METHOD mo_server_onprem->('SET_SESSION_STATEFUL') - EXPORTING stateful = val. + EXPORTING + stateful = val. ELSE. @@ -295,4 +326,21 @@ CLASS zoblomov_cl_util_abap_http IMPLEMENTATION. ENDIF. ENDMETHOD. + + METHOD get_req_info. + + result-body = get_cdata( ). + result-method = get_method( ). + + IF mo_request_cloud IS BOUND. + result-path = get_header_field( `~path` ). + result-t_params = zoblomov_cl_util=>url_param_get_tab( get_header_field( `~request_uri` ) ). + ELSE. + "todo are the names the same in on premise?? + result-path = get_header_field( `~path` ). + result-t_params = zoblomov_cl_util=>url_param_get_tab( get_header_field( `~request_uri` ) ). + ENDIF. + + ENDMETHOD. + ENDCLASS. diff --git a/src/zoblomov_cl_util_abap_http.clas.xml b/src/zoblomov_cl_util_http.clas.xml similarity index 81% rename from src/zoblomov_cl_util_abap_http.clas.xml rename to src/zoblomov_cl_util_http.clas.xml index 12697d0..64c21c2 100644 --- a/src/zoblomov_cl_util_abap_http.clas.xml +++ b/src/zoblomov_cl_util_http.clas.xml @@ -3,9 +3,9 @@ - ZOBLOMOV_CL_UTIL_ABAP_HTTP + ZOBLOMOV_CL_UTIL_HTTP E - util - api http + util - http 1 X X diff --git a/src/zoblomov_cl_util_log.clas.abap b/src/zoblomov_cl_util_log.clas.abap new file mode 100644 index 0000000..25de2d6 --- /dev/null +++ b/src/zoblomov_cl_util_log.clas.abap @@ -0,0 +1,91 @@ +CLASS zoblomov_cl_util_log DEFINITION + PUBLIC + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + METHODS add + IMPORTING + val TYPE any. + + METHODS bal_save + IMPORTING + object TYPE clike + subobject TYPE clike + id TYPE clike. + + METHODS bal_read + IMPORTING + object TYPE clike + subobject TYPE clike + id TYPE clike. + + METHODS to_csv + RETURNING + VALUE(result) TYPE string. + + METHODS to_xlsx + RETURNING + VALUE(result) TYPE string. + + METHODS to_msg + RETURNING + VALUE(result) TYPE zoblomov_cl_util=>ty_t_msg. + + PROTECTED SECTION. + DATA mt_log TYPE zoblomov_cl_util=>ty_t_msg. + + PRIVATE SECTION. +ENDCLASS. + + + +CLASS zoblomov_cl_util_log IMPLEMENTATION. + + METHOD add. + + DATA(lt_msg) = zoblomov_cl_util=>msg_get_t( val ). + INSERT LINES OF lt_msg INTO TABLE mt_log. + + ENDMETHOD. + + METHOD bal_read. + + DATA(lt_msg) = zoblomov_cl_util=>bal_read( + object = object + subobject = subobject + id = id ). + INSERT LINES OF lt_msg INTO TABLE mt_log. + + ENDMETHOD. + + METHOD bal_save. + + zoblomov_cl_util=>bal_save( + object = object + subobject = subobject + id = id + t_log = mt_log ). + + ENDMETHOD. + + METHOD to_csv. + + result = zoblomov_cl_util=>itab_get_csv_by_itab( mt_log ). + + ENDMETHOD. + + METHOD to_xlsx. + + result = zoblomov_cl_util=>conv_get_xlsx_by_itab( mt_log ). + + ENDMETHOD. + + METHOD to_msg. + + result = mt_log. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/zoblomov_cl_util_db.clas.xml b/src/zoblomov_cl_util_log.clas.xml similarity index 83% rename from src/zoblomov_cl_util_db.clas.xml rename to src/zoblomov_cl_util_log.clas.xml index 64421bf..9d8df3c 100644 --- a/src/zoblomov_cl_util_db.clas.xml +++ b/src/zoblomov_cl_util_log.clas.xml @@ -3,9 +3,9 @@ - ZOBLOMOV_CL_UTIL_DB + ZOBLOMOV_CL_UTIL_LOG E - util - db + util - log 1 X X diff --git a/src/zoblomov_cl_util_msg.clas.abap b/src/zoblomov_cl_util_msg.clas.abap index 53670a3..f47319f 100644 --- a/src/zoblomov_cl_util_msg.clas.abap +++ b/src/zoblomov_cl_util_msg.clas.abap @@ -16,10 +16,19 @@ CLASS zoblomov_cl_util_msg DEFINITION PUBLIC RETURNING VALUE(result) TYPE zoblomov_cl_util=>ty_t_msg. + CLASS-METHODS msg_get_by_sy + RETURNING + VALUE(result) TYPE zoblomov_cl_util=>ty_t_msg. + + PROTECTED SECTION. + PRIVATE SECTION. ENDCLASS. + + CLASS zoblomov_cl_util_msg IMPLEMENTATION. + METHOD msg_get. DATA(lv_kind) = zoblomov_cl_util=>rtti_get_type_kind( val ). @@ -43,8 +52,9 @@ CLASS zoblomov_cl_util_msg IMPLEMENTATION. DATA(ls_result) = VALUE zoblomov_cl_util=>ty_s_msg( ). LOOP AT lt_attri REFERENCE INTO DATA(ls_attri). - DATA(lv_name) = |VAL-{ ls_attri->name }|. - ASSIGN (lv_name) TO FIELD-SYMBOL(). +* DATA(lv_name) = |VAL-{ ls_attri->name }|. + ASSIGN COMPONENT ls_attri->name OF STRUCTURE val TO FIELD-SYMBOL(). +* ASSIGN (lv_name) TO FIELD-SYMBOL(). IF ls_attri->name = 'ITEM'. lt_tab = msg_get( ). @@ -70,8 +80,8 @@ CLASS zoblomov_cl_util_msg IMPLEMENTATION. DATA(lt_attri_o) = zoblomov_cl_util=>rtti_get_t_attri_by_oref( val ). LOOP AT lt_attri_o REFERENCE INTO DATA(ls_attri_o) WHERE visibility = 'U'. - lv_name = |VAL->{ ls_attri_o->name }|. - ASSIGN (lv_name) TO . + DATA(lv_name) = ls_attri_o->name. + ASSIGN val->(lv_name) TO . ls_result = msg_map( name = ls_attri_o->name val = is_msg = ls_result ). ENDLOOP. INSERT ls_result INTO TABLE result. @@ -113,8 +123,8 @@ CLASS zoblomov_cl_util_msg IMPLEMENTATION. lt_attri_o = zoblomov_cl_util=>rtti_get_t_attri_by_oref( val ). LOOP AT lt_attri_o REFERENCE INTO ls_attri_o WHERE visibility = 'U'. - lv_name = |OBJ->{ ls_attri_o->name }|. - ASSIGN (lv_name) TO . + lv_name = ls_attri_o->name. + ASSIGN obj->(lv_name) TO . ls_result = msg_map( name = ls_attri_o->name val = is_msg = ls_result ). ENDLOOP. INSERT ls_result INTO TABLE result. @@ -135,6 +145,7 @@ CLASS zoblomov_cl_util_msg IMPLEMENTATION. ENDMETHOD. + METHOD msg_map. result = is_msg. @@ -160,4 +171,11 @@ CLASS zoblomov_cl_util_msg IMPLEMENTATION. ENDCASE. ENDMETHOD. + + METHOD msg_get_by_sy. + + result = msg_get( zoblomov_cl_util=>context_get_sy( ) ). + + ENDMETHOD. + ENDCLASS. diff --git a/src/zoblomov_cl_util_msg.clas.testclasses.abap b/src/zoblomov_cl_util_msg.clas.testclasses.abap index 272d89d..1819b45 100644 --- a/src/zoblomov_cl_util_msg.clas.testclasses.abap +++ b/src/zoblomov_cl_util_msg.clas.testclasses.abap @@ -23,7 +23,7 @@ CLASS ltcl_unit_test_msg_mapper IMPLEMENTATION. data(lv_dummy2) = 'NET'. MESSAGE ID lv_dummy2 TYPE 'I' NUMBER '001' INTO DATA(lv_dummy). - DATA(lt_result) = zoblomov_cl_util_msg=>msg_get( sy ). + DATA(lt_result) = zoblomov_cl_util_msg=>msg_get_by_sy( ). cl_abap_unit_assert=>assert_equals( exp = `NET` act = lt_result[ 1 ]-id ). diff --git a/src/zoblomov_cl_util_msg.clas.xml b/src/zoblomov_cl_util_msg.clas.xml index 08d4731..09cbbc2 100644 --- a/src/zoblomov_cl_util_msg.clas.xml +++ b/src/zoblomov_cl_util_msg.clas.xml @@ -5,7 +5,7 @@ ZOBLOMOV_CL_UTIL_MSG E - util - messages + util - message 1 X X diff --git a/src/zoblomov_cl_util_range.clas.xml b/src/zoblomov_cl_util_range.clas.xml index f4eec63..8ffda18 100644 --- a/src/zoblomov_cl_util_range.clas.xml +++ b/src/zoblomov_cl_util_range.clas.xml @@ -5,7 +5,7 @@ ZOBLOMOV_CL_UTIL_RANGE E - util - ranges + util - range 1 X X diff --git a/src/zoblomov_cx_util_error.clas.abap b/src/zoblomov_cx_util_error.clas.abap index 0201bc9..4fd1949 100644 --- a/src/zoblomov_cx_util_error.clas.abap +++ b/src/zoblomov_cx_util_error.clas.abap @@ -51,7 +51,7 @@ CLASS zoblomov_cx_util_error IMPLEMENTATION. error = abap_true. ENDIF. - result = COND #( WHEN error = abap_true AND result IS INITIAL THEN `unknown error` ELSE result ). + result = COND #( WHEN error = abap_true AND result IS INITIAL THEN `UNKNOWN_ERROR` ELSE result ). ENDMETHOD. ENDCLASS. diff --git a/src/zoblomov_t_91.tabl.xml b/src/zoblomov_t_91.tabl.xml deleted file mode 100644 index 0700446..0000000 --- a/src/zoblomov_t_91.tabl.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - ZOBLOMOV_T_91 - E - TRANSP - util - db - E - A - 1 - - - ZOBLOMOV_T_91 - A - 0 - APPL0 - N - - - - MANDT - X - 0 - C - 000006 - X - CHAR - 000003 - CHAR - - - ID - X - 0 - C - 000064 - X - CHAR - 000032 - CHAR - - - UNAME - 0 - C - 000064 - CHAR - 000032 - CHAR - - - HANDLE - 0 - C - 000064 - CHAR - 000032 - CHAR - - - HANDLE2 - 0 - C - 000064 - CHAR - 000032 - CHAR - - - HANDLE3 - 0 - C - 000064 - CHAR - 000032 - CHAR - - - HANDLE4 - 0 - C - 000064 - CHAR - 000032 - CHAR - - - HANDLE5 - 0 - C - 000064 - CHAR - 000032 - CHAR - - - DATA - 0 - g - 000008 - STRG - STRG - - - DATA2 - 0 - g - 000008 - STRG - STRG - - - DATA3 - 0 - g - 000008 - STRG - STRG - - - - -