Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | CLASS zcl_abapgit_user_record DEFINITION PUBLIC FINAL CREATE PRIVATE GLOBAL FRIENDS zcl_abapgit_env_factory. PUBLIC SECTION. CLASS-METHODS reset. INTERFACES zif_abapgit_user_record. PROTECTED SECTION. PRIVATE SECTION. TYPES: BEGIN OF ty_user, user TYPE sy-uname, name TYPE string, email TYPE string, END OF ty_user. CLASS-DATA gt_user TYPE HASHED TABLE OF ty_user WITH UNIQUE KEY user. CLASS-METHODS check_user_exists IMPORTING iv_user TYPE sy-uname EXPORTING ev_fullname TYPE string ev_email TYPE string RAISING zcx_abapgit_exception. CLASS-METHODS get_user_dtls_from_other_clnt IMPORTING iv_user TYPE sy-uname RETURNING VALUE(rs_user) TYPE ty_user. CLASS-METHODS build_cache IMPORTING iv_user TYPE sy-uname RETURNING VALUE(rs_user) TYPE ty_user. CLASS-METHODS read_cache IMPORTING iv_user TYPE sy-uname RETURNING VALUE(rs_user) TYPE ty_user. ENDCLASS. CLASS ZCL_ABAPGIT_USER_RECORD IMPLEMENTATION. METHOD build_cache. " Get user details TRY. check_user_exists( EXPORTING iv_user = iv_user IMPORTING ev_fullname = rs_user-name ev_email = rs_user-email ). CATCH zcx_abapgit_exception. " Could not find user, try to get from other clients rs_user = get_user_dtls_from_other_clnt( iv_user ). ENDTRY. rs_user-user = iv_user. INSERT rs_user INTO TABLE gt_user. ENDMETHOD. METHOD check_user_exists. DATA lt_return TYPE STANDARD TABLE OF bapiret2 WITH DEFAULT KEY. DATA ls_address TYPE bapiaddr3. DATA lt_smtp TYPE TABLE OF bapiadsmtp. DATA ls_smtp LIKE LINE OF lt_smtp. CALL FUNCTION 'BAPI_USER_GET_DETAIL' EXPORTING username = iv_user IMPORTING address = ls_address TABLES return = lt_return addsmtp = lt_smtp. LOOP AT lt_return TRANSPORTING NO FIELDS WHERE type CA 'EA'. zcx_abapgit_exception=>raise( |User: { iv_user } not found| ). ENDLOOP. ev_fullname = ls_address-fullname. " Choose the first email from SU01 SORT lt_smtp BY consnumber ASCENDING. LOOP AT lt_smtp INTO ls_smtp. ev_email = ls_smtp-e_mail. EXIT. ENDLOOP. ENDMETHOD. METHOD get_user_dtls_from_other_clnt. CONSTANTS lc_cc_category TYPE string VALUE 'C'. TYPES ty_dev_clients TYPE SORTED TABLE OF sy-mandt WITH UNIQUE KEY table_line. DATA lt_dev_clients TYPE ty_dev_clients. FIELD-SYMBOLS <lv_dev_client> LIKE LINE OF lt_dev_clients. " Could not find the user, try other development clients SELECT mandt FROM t000 INTO TABLE lt_dev_clients WHERE cccategory = lc_cc_category AND mandt <> sy-mandt ORDER BY PRIMARY KEY. LOOP AT lt_dev_clients ASSIGNING <lv_dev_client>. SELECT SINGLE u~bname p~name_text a~smtp_addr INTO (rs_user-user, rs_user-name, rs_user-email) FROM usr21 AS u INNER JOIN adrp AS p ON p~persnumber = u~persnumber AND p~client = u~mandt INNER JOIN adr6 AS a ON a~persnumber = u~persnumber AND a~addrnumber = u~addrnumber AND a~client = u~mandt CLIENT SPECIFIED WHERE u~mandt = <lv_dev_client> AND u~bname = iv_user AND p~date_from <= sy-datum AND p~date_to >= sy-datum AND a~date_from <= sy-datum. IF sy-subrc = 0. EXIT. ENDIF. ENDLOOP. ENDMETHOD. METHOD read_cache. READ TABLE gt_user INTO rs_user WITH TABLE KEY user = iv_user. IF sy-subrc <> 0. rs_user = build_cache( iv_user ). ENDIF. ENDMETHOD. METHOD reset. CLEAR gt_user. ENDMETHOD. METHOD zif_abapgit_user_record~get_email. rv_email = read_cache( iv_username )-email. ENDMETHOD. METHOD zif_abapgit_user_record~get_name. rv_name = read_cache( iv_username )-name. ENDMETHOD. METHOD zif_abapgit_user_record~get_title. * the queried username might not exist, refactored for open-abap compatibility DATA lr_addr3 TYPE REF TO data. FIELD-SYMBOLS <ls_addr3> TYPE any. FIELD-SYMBOLS <lv_simple> TYPE simple. TRY. CREATE DATA lr_addr3 TYPE ('ADDR3_VAL'). CATCH cx_sy_create_data_error. RETURN. ENDTRY. ASSIGN lr_addr3->* TO <ls_addr3>. CALL FUNCTION 'SUSR_USER_ADDRESS_READ' EXPORTING user_name = iv_username IMPORTING user_address = <ls_addr3> EXCEPTIONS user_address_not_found = 1 OTHERS = 2. IF sy-subrc = 0. ASSIGN COMPONENT 'NAME_TEXT' OF STRUCTURE <ls_addr3> TO <lv_simple>. rv_title = <lv_simple>. ENDIF. ENDMETHOD. ENDCLASS. |