├── .abapgit.xml ├── LICENSE ├── README.md ├── s3_demo_programs ├── zlnkeaws_s3_demo_bucket.prog.abap ├── zlnkeaws_s3_demo_bucket.prog.xml ├── zlnkeaws_s3_demo_file.prog.abap ├── zlnkeaws_s3_demo_file.prog.xml ├── zlnkeaws_s3_demo_folder.prog.abap ├── zlnkeaws_s3_demo_folder.prog.xml ├── zlnkeaws_s3_demo_iam.prog.abap ├── zlnkeaws_s3_demo_iam.prog.xml ├── zlnkeaws_s3_demo_s3.prog.abap └── zlnkeaws_s3_demo_s3.prog.xml └── s3_sdk ├── zlnkeacckey_de.dtel.xml ├── zlnkeacckey_do.doma.xml ├── zlnkeaws_account_id_de.dtel.xml ├── zlnkeaws_account_id_do.doma.xml ├── zlnkeaws_s3.msag.xml ├── zlnkebucket.tabl.xml ├── zlnkebucket_de.dtel.xml ├── zlnkebucket_do.doma.xml ├── zlnkebucket_lifecycle_de.dtel.xml ├── zlnkebucket_prefix_de.dtel.xml ├── zlnkebucket_prefix_do.doma.xml ├── zlnkechdat.dtel.xml ├── zlnkechtim.dtel.xml ├── zlnkechusr.dtel.xml ├── zlnkecl_aws_iam.clas.abap ├── zlnkecl_aws_iam.clas.xml ├── zlnkecl_aws_inherit_switch.clas.abap ├── zlnkecl_aws_inherit_switch.clas.xml ├── zlnkecl_aws_rest.clas.abap ├── zlnkecl_aws_rest.clas.xml ├── zlnkecl_aws_s3.clas.abap ├── zlnkecl_aws_s3.clas.xml ├── zlnkecl_aws_s3_bucket.clas.abap ├── zlnkecl_aws_s3_bucket.clas.xml ├── zlnkecl_aws_sign_v4_base.clas.abap ├── zlnkecl_aws_sign_v4_base.clas.xml ├── zlnkecl_aws_sign_v4_header.clas.abap ├── zlnkecl_aws_sign_v4_header.clas.xml ├── zlnkecl_aws_sqs.clas.abap ├── zlnkecl_aws_sqs.clas.xml ├── zlnkecl_hash.clas.abap ├── zlnkecl_hash.clas.xml ├── zlnkecl_http.clas.abap ├── zlnkecl_http.clas.xml ├── zlnkecl_log.clas.abap ├── zlnkecl_log.clas.xml ├── zlnkecl_rfc_connections.clas.abap ├── zlnkecl_rfc_connections.clas.xml ├── zlnkecl_ssf.clas.abap ├── zlnkecl_ssf.clas.xml ├── zlnkecl_string_conversions.clas.abap ├── zlnkecl_string_conversions.clas.xml ├── zlnkecl_xml_utils.clas.abap ├── zlnkecl_xml_utils.clas.xml ├── zlnkeclient_side_encryption_de.dtel.xml ├── zlnkecrdat.dtel.xml ├── zlnkecrtim.dtel.xml ├── zlnkecrusr.dtel.xml ├── zlnkecx_aws_s3.clas.abap ├── zlnkecx_aws_s3.clas.xml ├── zlnkeendpoint_de.dtel.xml ├── zlnkeendpoint_do.doma.xml ├── zlnkeguid.dtel.xml ├── zlnkeif_version.intf.abap ├── zlnkeif_version.intf.xml ├── zlnkekey_size_st.tabl.xml ├── zlnkekey_size_tt.ttyp.xml ├── zlnkelog.tabl.xml ├── zlnkelog_cfg.tabl.xml ├── zlnkelog_event_de.dtel.xml ├── zlnkelog_event_do.doma.xml ├── zlnkelog_keep_days_de.dtel.xml ├── zlnkelog_msgtyp_de.dtel.xml ├── zlnkelog_msgtyp_do.doma.xml ├── zlnkempart_upld.tabl.xml ├── zlnkempart_upld_state_de.dtel.xml ├── zlnkempart_upld_state_do.doma.xml ├── zlnkempart_upload_st.tabl.xml ├── zlnkempart_upload_tt.ttyp.xml ├── zlnkeno_prefix_flag_de.dtel.xml ├── zlnkeregion.tabl.xml ├── zlnkeregion_de.dtel.xml ├── zlnkeregion_do.doma.xml ├── zlnkers3_log_viewer.prog.abap ├── zlnkers3_log_viewer.prog.xml ├── zlnkers3_purge_mpart_upload.prog.abap ├── zlnkers3_purge_mpart_upload.prog.xml ├── zlnkers3_strust.prog.abap ├── zlnkers3_strust.prog.xml ├── zlnkers3_tables_initial_load.prog.abap ├── zlnkers3_tables_initial_load.prog.xml ├── zlnkesecacckey_de.dtel.xml ├── zlnkesecacckey_do.doma.xml ├── zlnkeserver_side_encryption_de.dtel.xml ├── zlnkessfbin_tt.ttyp.xml ├── zlnkeuser.tabl.xml ├── zlnkeusername_de.dtel.xml ├── zlnkeusername_do.doma.xml └── zlnkezipflag_de.dtel.xml /.abapgit.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | E 6 | / 7 | PREFIX 8 | 9 | /.gitignore 10 | /LICENSE 11 | /README.md 12 | /package.json 13 | /.travis.yml 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This is a fork, original code by https://github.com/linkeit, now deleted by LinkeIT, repo not maintained 2 | 3 | # AWS_S3_SDK_for_ABAP_Z 4 | AWS S3 for ABAP is an ABAP development wich enables native integration from ABAP to AWS S3. You will be able to manage buckets, folders and files on AWS S3. It has two editions: Community and Enterprise. 5 | 6 | The Community Edition is the ABAP SDK which you can use as a tool to write your own programs to read from AWS S3 and write to AWS S3. Demo programs are provided as a reference. 7 | 8 | The Enterprise Edition (complete solution) maps from ArchiveLink to AWS S3. In this way you can use S3 as a Content Server. As well you can make use of the ABAP SDK to develop your own programs. 9 | 10 | AWS S3 for SAP runs on any SAP Netweaver 7.0 or higher (SAP_BASIS 700 0028 SAPKB70028). It only depends on BASIS package, so you can use it in ERP, CRM, SRM, etc... 11 | 12 | # Installing 13 | Follow detailed instructions in this document 14 | 15 | # FAQ 16 | For questions/comments/bugs/feature requests/wishes please create an issue 17 | -------------------------------------------------------------------------------- /s3_demo_programs/zlnkeaws_s3_demo_bucket.prog.abap: -------------------------------------------------------------------------------- 1 | *&---------------------------------------------------------------------* 2 | *& Report ZLNKEAWS_S3_DEMO_BUCKET 3 | *& 4 | *&---------------------------------------------------------------------* 5 | *& Company: RocketSteam 6 | *& Author: Jordi Escoda, 8th September 2017 7 | *& e-mail: jordi.escoda@rocket-steam.com or jordi.escoda@linkeit.com 8 | *& This demo program shows how use Bucket operations 9 | *&---------------------------------------------------------------------* 10 | REPORT zlnkeaws_s3_demo_bucket. 11 | 12 | *--------------------------------------------------------------------* 13 | * Types 14 | *--------------------------------------------------------------------* 15 | TYPE-POOLS: abap. 16 | 17 | *--------------------------------------------------------------------* 18 | * Selection screen 19 | *--------------------------------------------------------------------* 20 | SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. 21 | PARAMETERS: p_creat RADIOBUTTON GROUP rb1 USER-COMMAND rb, 22 | p_delet RADIOBUTTON GROUP rb1, 23 | p_list RADIOBUTTON GROUP rb1, 24 | p_loc RADIOBUTTON GROUP rb1, 25 | p_head RADIOBUTTON GROUP rb1. 26 | PARAMETERS: p_dbg AS CHECKBOX. 27 | PARAMETERS: p_bucket TYPE zlnkebucket-bucket LOWER CASE, 28 | p_iam TYPE zlnkeuser-user_name LOWER CASE, 29 | p_region TYPE zlnkeregion-region LOWER CASE. 30 | PARAMETERS: p_exists AS CHECKBOX. 31 | SELECTION-SCREEN END OF BLOCK b1. 32 | 33 | *----------------------------------------------------------------------* 34 | * CLASS lcl_demo_bucket DEFINITION 35 | *----------------------------------------------------------------------* 36 | * 37 | *----------------------------------------------------------------------* 38 | CLASS lcl_demo_bucket DEFINITION. 39 | PUBLIC SECTION. 40 | CLASS-METHODS: 41 | execute, 42 | selection_screen_visibility. 43 | 44 | PRIVATE SECTION. 45 | CLASS-METHODS: 46 | create_bucket, 47 | create_bucket_only_db, 48 | delete_bucket, 49 | list_bucket, 50 | bucket_location, 51 | head_bucket. 52 | 53 | ENDCLASS. "lcl_demo_bucket DEFINITION 54 | 55 | *----------------------------------------------------------------------* 56 | * CLASS lcl_demo_bucket IMPLEMENTATION 57 | *----------------------------------------------------------------------* 58 | * 59 | *----------------------------------------------------------------------* 60 | CLASS lcl_demo_bucket IMPLEMENTATION. 61 | 62 | *--------------------------------------------------------------------* 63 | * Highest level of abstraction 64 | *--------------------------------------------------------------------* 65 | METHOD execute. 66 | CASE abap_true. 67 | WHEN p_creat. 68 | IF p_exists = abap_false. 69 | create_bucket( ). 70 | ELSE. 71 | create_bucket_only_db( ). 72 | ENDIF. 73 | WHEN p_delet. 74 | delete_bucket( ). 75 | WHEN p_list. 76 | list_bucket( ). 77 | WHEN p_loc. 78 | bucket_location( ). 79 | WHEN p_head. 80 | head_bucket( ). 81 | ENDCASE. 82 | ENDMETHOD. "execute 83 | 84 | *--------------------------------------------------------------------* 85 | * Creates a Bucket on AWS and DB 86 | *--------------------------------------------------------------------* 87 | METHOD create_bucket. 88 | DATA: lv_xml TYPE string. 89 | DATA: lv_msg TYPE string. 90 | DATA: lv_http_status TYPE i. 91 | DATA: ls_zlnkebucket TYPE zlnkebucket. 92 | DATA: lr_bucket TYPE REF TO zlnkecl_aws_s3_bucket. "#EC NEEDED 93 | DATA: lr_cx_aws_s3 TYPE REF TO zlnkecx_aws_s3. 94 | 95 | TRY. 96 | CALL METHOD zlnkecl_aws_s3_bucket=>create_bucket 97 | EXPORTING 98 | i_bucket_name = p_bucket 99 | i_user_name = p_iam 100 | i_region = p_region 101 | i_dbg = p_dbg 102 | IMPORTING 103 | e_http_status = lv_http_status 104 | e_response_content = lv_xml 105 | e_aws_s3_bucket = lr_bucket. "Reference to the bucket created 106 | 107 | IF lv_xml IS NOT INITIAL. 108 | zlnkecl_xml_utils=>show_xml_in_dialog( lv_xml ). 109 | ENDIF. 110 | 111 | IF lv_http_status = zlnkecl_http=>c_status_200_ok. 112 | ls_zlnkebucket-bucket = p_bucket. 113 | ls_zlnkebucket-user_name = p_iam. 114 | ls_zlnkebucket-region = p_region. 115 | ls_zlnkebucket-crusr = sy-uname. 116 | ls_zlnkebucket-crdat = sy-datum. 117 | ls_zlnkebucket-crtim = sy-uzeit. 118 | INSERT zlnkebucket FROM ls_zlnkebucket. 119 | CONCATENATE 'Bucket ' p_bucket ' created successfully' 120 | INTO lv_msg RESPECTING BLANKS. 121 | ELSE. 122 | CONCATENATE 'Bucket ' p_bucket ' could not be created' 123 | INTO lv_msg RESPECTING BLANKS. 124 | ENDIF. 125 | CONDENSE lv_msg. 126 | WRITE:/ lv_msg. 127 | 128 | CATCH zlnkecx_aws_s3 INTO lr_cx_aws_s3. 129 | lv_msg = lr_cx_aws_s3->get_text( ). 130 | WRITE:/ lv_msg. 131 | ENDTRY. 132 | 133 | ENDMETHOD. "create_bucket 134 | 135 | *--------------------------------------------------------------------* 136 | * Creates a Bucket only on DB. Makes sense when your bucket 137 | * is already existing on AWS. 138 | *--------------------------------------------------------------------* 139 | METHOD create_bucket_only_db. 140 | DATA: lv_msg TYPE string. 141 | DATA: lv_bucket TYPE zlnkebucket-bucket. 142 | DATA: ls_zlnkebucket TYPE zlnkebucket. 143 | 144 | SELECT SINGLE bucket 145 | INTO lv_bucket 146 | FROM zlnkebucket 147 | WHERE bucket = p_bucket. 148 | IF sy-subrc <> 0. 149 | ls_zlnkebucket-bucket = p_bucket. 150 | ls_zlnkebucket-user_name = p_iam. 151 | ls_zlnkebucket-region = p_region. 152 | ls_zlnkebucket-no_prefix = abap_true. 153 | ls_zlnkebucket-crusr = sy-uname. 154 | ls_zlnkebucket-crdat = sy-datum. 155 | ls_zlnkebucket-crtim = sy-uzeit. 156 | INSERT zlnkebucket FROM ls_zlnkebucket. 157 | CONCATENATE 'Bucket ' p_bucket ' created successfully' 158 | INTO lv_msg RESPECTING BLANKS. 159 | ELSE. 160 | CONCATENATE 'Bucket ' p_bucket ' already exists in DB' 161 | INTO lv_msg RESPECTING BLANKS. 162 | ENDIF. 163 | CONDENSE lv_msg. 164 | WRITE:/ lv_msg. 165 | 166 | ENDMETHOD. "create_bucket_only_db 167 | 168 | *--------------------------------------------------------------------* 169 | * Deletes a Bucket (must be empty) 170 | *--------------------------------------------------------------------* 171 | METHOD delete_bucket. 172 | DATA: lv_xml TYPE string. 173 | DATA: lv_msg TYPE string. 174 | DATA: lv_http_status TYPE i. 175 | DATA: lr_bucket TYPE REF TO zlnkecl_aws_s3_bucket. 176 | DATA: lr_cx_aws_s3 TYPE REF TO zlnkecx_aws_s3. 177 | 178 | TRY. 179 | CREATE OBJECT lr_bucket 180 | EXPORTING 181 | i_bucket_name = p_bucket 182 | i_dbg = p_dbg. 183 | 184 | CALL METHOD lr_bucket->delete_bucket 185 | IMPORTING 186 | e_http_status = lv_http_status 187 | e_response_content = lv_xml. 188 | 189 | IF lv_xml IS NOT INITIAL. 190 | zlnkecl_xml_utils=>show_xml_in_dialog( lv_xml ). 191 | ENDIF. 192 | 193 | IF lv_http_status = zlnkecl_http=>c_status_204_no_content. 194 | DELETE FROM zlnkebucket WHERE bucket = p_bucket. 195 | CONCATENATE 'Bucket ' p_bucket ' deleted successfully' 196 | INTO lv_msg RESPECTING BLANKS. 197 | ELSE. 198 | CONCATENATE 'Bucket ' p_bucket ' could not be deleted' 199 | INTO lv_msg RESPECTING BLANKS. 200 | ENDIF. 201 | CONDENSE lv_msg. 202 | WRITE:/ lv_msg. 203 | 204 | CATCH zlnkecx_aws_s3 INTO lr_cx_aws_s3. 205 | lv_msg = lr_cx_aws_s3->get_text( ). 206 | WRITE:/ lv_msg. 207 | ENDTRY. 208 | 209 | ENDMETHOD. "delete_bucket 210 | 211 | *--------------------------------------------------------------------* 212 | * Lists Bucket content 213 | *--------------------------------------------------------------------* 214 | METHOD list_bucket. 215 | DATA: lv_xml TYPE string. 216 | DATA: lv_msg TYPE string. 217 | DATA: lv_http_status TYPE i. "#EC NEEDED 218 | DATA: lr_bucket TYPE REF TO zlnkecl_aws_s3_bucket. 219 | DATA: lr_cx_aws_s3 TYPE REF TO zlnkecx_aws_s3. 220 | 221 | TRY. 222 | CREATE OBJECT lr_bucket 223 | EXPORTING 224 | i_bucket_name = p_bucket 225 | i_dbg = p_dbg. 226 | 227 | CALL METHOD lr_bucket->list_objects 228 | * EXPORTING 229 | * i_prefix = 230 | * i_marker = 231 | * i_max_keys = 232 | IMPORTING 233 | e_http_status = lv_http_status 234 | e_response_content = lv_xml. 235 | 236 | IF lv_xml IS NOT INITIAL. 237 | zlnkecl_xml_utils=>show_xml_in_dialog( lv_xml ). 238 | ENDIF. 239 | 240 | CATCH zlnkecx_aws_s3 INTO lr_cx_aws_s3. 241 | lv_msg = lr_cx_aws_s3->get_text( ). 242 | WRITE:/ lv_msg. 243 | ENDTRY. 244 | ENDMETHOD. "list_bucket 245 | 246 | *--------------------------------------------------------------------* 247 | * Shows Bucket location 248 | *--------------------------------------------------------------------* 249 | METHOD bucket_location. 250 | DATA: lv_xml TYPE string. 251 | DATA: lv_msg TYPE string. 252 | DATA: lv_http_status TYPE i. "#EC NEEDED 253 | DATA: lr_bucket TYPE REF TO zlnkecl_aws_s3_bucket. 254 | DATA: lr_cx_aws_s3 TYPE REF TO zlnkecx_aws_s3. 255 | 256 | TRY. 257 | CREATE OBJECT lr_bucket 258 | EXPORTING 259 | i_bucket_name = p_bucket 260 | i_dbg = p_dbg. 261 | 262 | CALL METHOD lr_bucket->get_bucket_location 263 | IMPORTING 264 | e_http_status = lv_http_status 265 | e_response_content = lv_xml. 266 | 267 | IF lv_xml IS NOT INITIAL. 268 | zlnkecl_xml_utils=>show_xml_in_dialog( lv_xml ). 269 | ENDIF. 270 | 271 | CATCH zlnkecx_aws_s3 INTO lr_cx_aws_s3. 272 | lv_msg = lr_cx_aws_s3->get_text( ). 273 | WRITE:/ lv_msg. 274 | ENDTRY. 275 | 276 | ENDMETHOD. "bucket_location 277 | 278 | *--------------------------------------------------------------------* 279 | * Head 280 | *--------------------------------------------------------------------* 281 | METHOD head_bucket. 282 | DATA: lv_msg TYPE string. 283 | DATA: lv_http_status TYPE i. 284 | DATA: lt_response_headers TYPE tihttpnvp. "#EC NEEDED 285 | DATA: lr_bucket TYPE REF TO zlnkecl_aws_s3_bucket. 286 | DATA: lr_cx_aws_s3 TYPE REF TO zlnkecx_aws_s3. 287 | 288 | TRY. 289 | CREATE OBJECT lr_bucket 290 | EXPORTING 291 | i_bucket_name = p_bucket 292 | i_dbg = p_dbg. 293 | 294 | CALL METHOD lr_bucket->head_bucket 295 | IMPORTING 296 | e_http_status = lv_http_status 297 | e_response_headers = lt_response_headers. 298 | 299 | lv_msg = zlnkecl_http=>get_reason_by_status( lv_http_status ). 300 | WRITE:/ lv_http_status, lv_msg. 301 | 302 | CATCH zlnkecx_aws_s3 INTO lr_cx_aws_s3. 303 | lv_msg = lr_cx_aws_s3->get_text( ). 304 | WRITE:/ lv_msg. 305 | ENDTRY. 306 | ENDMETHOD. "head_bucket 307 | 308 | *--------------------------------------------------------------------* 309 | * Handles selection screen elements 310 | *--------------------------------------------------------------------* 311 | METHOD selection_screen_visibility. 312 | LOOP AT SCREEN. 313 | IF screen-name CS 'P_IAM' 314 | OR screen-name CS 'P_REGION' 315 | OR screen-name CS 'P_EXISTS'. 316 | IF p_creat = abap_true. 317 | screen-active = 1. 318 | ELSE. 319 | screen-active = 0. 320 | ENDIF. 321 | ENDIF. 322 | MODIFY SCREEN. 323 | ENDLOOP. 324 | ENDMETHOD. "SELECTION_screen_visibility 325 | ENDCLASS. "lcl_demo_bucket IMPLEMENTATION 326 | 327 | *--------------------------------------------------------------------* 328 | * INITIALIZATION 329 | *--------------------------------------------------------------------* 330 | INITIALIZATION. 331 | p_creat = abap_true. 332 | 333 | *--------------------------------------------------------------------* 334 | * AT SELECTION-SCREEN OUTPUT 335 | *--------------------------------------------------------------------* 336 | AT SELECTION-SCREEN OUTPUT. 337 | lcl_demo_bucket=>selection_screen_visibility( ). 338 | 339 | *--------------------------------------------------------------------* 340 | * START-OF-SELECTION 341 | *--------------------------------------------------------------------* 342 | START-OF-SELECTION. 343 | lcl_demo_bucket=>execute( ). 344 | -------------------------------------------------------------------------------- /s3_demo_programs/zlnkeaws_s3_demo_bucket.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEAWS_S3_DEMO_BUCKET 7 | A 8 | X 9 | 1 10 | E 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | 001 18 | Parameters 19 | 10 20 | 21 | 22 | R 23 | Demo Create / Delete Bucket 24 | 27 25 | 26 | 27 | S 28 | P_BUCKET 29 | Bucket name 30 | 19 31 | 32 | 33 | S 34 | P_CREAT 35 | Create Bucket 36 | 21 37 | 38 | 39 | S 40 | P_DBG 41 | Write headers 42 | 21 43 | 44 | 45 | S 46 | P_DELET 47 | Delete Bucket 48 | 21 49 | 50 | 51 | S 52 | P_EXISTS 53 | Bucket already exists on AWS 54 | 36 55 | 56 | 57 | S 58 | P_HEAD 59 | Head Bucket 60 | 19 61 | 62 | 63 | S 64 | P_IAM 65 | IAM user 66 | 16 67 | 68 | 69 | S 70 | P_LIST 71 | List Bucket 72 | 19 73 | 74 | 75 | S 76 | P_LOC 77 | Bucket location 78 | 23 79 | 80 | 81 | S 82 | P_REGION 83 | AWS Region 84 | 18 85 | 86 | 87 | 88 | 89 | 90 | -------------------------------------------------------------------------------- /s3_demo_programs/zlnkeaws_s3_demo_file.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEAWS_S3_DEMO_FILE 7 | A 8 | X 9 | 1 10 | E 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | 001 18 | Parameters 19 | 10 20 | 21 | 22 | R 23 | Demo working with Files 24 | 28 25 | 26 | 27 | S 28 | P_BUCKET 29 | Bucket name 30 | 19 31 | 32 | 33 | S 34 | P_DBG 35 | Write headers 36 | 21 37 | 38 | 39 | S 40 | P_DELET 41 | Delete file 42 | 19 43 | 44 | 45 | S 46 | P_FNAME 47 | File name 48 | 17 49 | 50 | 51 | S 52 | P_FOLDER 53 | Folder 54 | 14 55 | 56 | 57 | S 58 | P_GET 59 | Get file 60 | 16 61 | 62 | 63 | S 64 | P_HEAD 65 | Head file 66 | 17 67 | 68 | 69 | S 70 | P_PUT 71 | Put file 72 | 16 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /s3_demo_programs/zlnkeaws_s3_demo_folder.prog.abap: -------------------------------------------------------------------------------- 1 | *&---------------------------------------------------------------------* 2 | *& Report ZLNKEAWS_S3_DEMO_FOLDER 3 | *& 4 | *&---------------------------------------------------------------------* 5 | *& Company: RocketSteam 6 | *& Author: Jordi Escoda, 8th September 2017 7 | *& e-mail: jordi.escoda@rocket-steam.com or jordi.escoda@linkeit.com 8 | *& This demo program shows how to use folders 9 | *--------------------------------------------------------------------* 10 | REPORT zlnkeaws_s3_demo_folder. 11 | 12 | *--------------------------------------------------------------------* 13 | * Types 14 | *--------------------------------------------------------------------* 15 | TYPE-POOLS: abap. 16 | 17 | *--------------------------------------------------------------------* 18 | * Selection screen 19 | *--------------------------------------------------------------------* 20 | SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. 21 | PARAMETERS: p_put RADIOBUTTON GROUP rb1 USER-COMMAND rb, 22 | p_delet RADIOBUTTON GROUP rb1, 23 | p_head RADIOBUTTON GROUP rb1. 24 | PARAMETERS: p_dbg AS CHECKBOX. 25 | PARAMETERS: p_bucket TYPE zlnkebucket-bucket LOWER CASE, 26 | p_folder TYPE string LOWER CASE. 27 | SELECTION-SCREEN END OF BLOCK b1. 28 | 29 | *----------------------------------------------------------------------* 30 | * CLASS lcl_demo_folder DEFINITION 31 | *----------------------------------------------------------------------* 32 | * 33 | *----------------------------------------------------------------------* 34 | CLASS lcl_demo_folder DEFINITION. 35 | PUBLIC SECTION. 36 | CLASS-METHODS: 37 | execute. 38 | 39 | PRIVATE SECTION. 40 | CLASS-METHODS: 41 | put_folder, 42 | delete_folder, 43 | head_folder. 44 | 45 | ENDCLASS. "lcl_demo_FILE DEFINITION 46 | 47 | *----------------------------------------------------------------------* 48 | * CLASS lcl_ DEFINITION 49 | *----------------------------------------------------------------------* 50 | * 51 | *----------------------------------------------------------------------* 52 | CLASS lcl_demo_folder IMPLEMENTATION. 53 | 54 | *--------------------------------------------------------------------* 55 | * Highest level of abstraction 56 | *--------------------------------------------------------------------* 57 | METHOD execute. 58 | CASE abap_true. 59 | WHEN p_put. 60 | put_folder( ). 61 | WHEN p_delet. 62 | delete_folder( ). 63 | WHEN p_head. 64 | head_folder( ). 65 | ENDCASE. 66 | ENDMETHOD. "execute 67 | 68 | *--------------------------------------------------------------------* 69 | * Creates a Folder 70 | *--------------------------------------------------------------------* 71 | METHOD put_folder. 72 | DATA: lv_folder TYPE string. 73 | DATA: lv_msg TYPE string. 74 | DATA: lv_xml TYPE string. 75 | DATA: lv_http_status TYPE i. 76 | DATA: lr_bucket TYPE REF TO zlnkecl_aws_s3_bucket. 77 | DATA: lr_cx_aws_s3 TYPE REF TO zlnkecx_aws_s3. 78 | 79 | TRY. 80 | * Escape for considering special characters in folder name 81 | lv_folder = zlnkecl_http=>escape_url( p_folder ). 82 | CONCATENATE lv_folder '/' INTO lv_folder. 83 | 84 | CREATE OBJECT lr_bucket 85 | EXPORTING 86 | i_bucket_name = p_bucket 87 | i_dbg = p_dbg. 88 | 89 | CALL METHOD lr_bucket->put_object 90 | EXPORTING 91 | i_object_name = lv_folder 92 | i_escape_url = abap_false 93 | IMPORTING 94 | e_http_status = lv_http_status 95 | e_response_content = lv_xml. 96 | 97 | IF lv_xml IS NOT INITIAL. 98 | zlnkecl_xml_utils=>show_xml_in_dialog( lv_xml ). 99 | ENDIF. 100 | 101 | IF lv_http_status = zlnkecl_http=>c_status_200_ok. 102 | CONCATENATE 'Folder ' lv_folder ' created successfully' 103 | INTO lv_msg RESPECTING BLANKS. 104 | ELSE. 105 | CONCATENATE 'Folder ' lv_folder ' could not be created' 106 | INTO lv_msg RESPECTING BLANKS. 107 | ENDIF. 108 | CONDENSE lv_msg. 109 | WRITE:/ lv_msg. 110 | 111 | CATCH zlnkecx_aws_s3 INTO lr_cx_aws_s3. 112 | lv_msg = lr_cx_aws_s3->get_text( ). 113 | WRITE:/ lv_msg. 114 | ENDTRY. 115 | 116 | ENDMETHOD. "put_folder 117 | 118 | *--------------------------------------------------------------------* 119 | * Deletes a folder (must be empty) 120 | *--------------------------------------------------------------------* 121 | METHOD delete_folder. 122 | DATA: lv_folder TYPE string. 123 | DATA: lv_msg TYPE string. 124 | DATA: lv_xml TYPE string. 125 | DATA: lv_http_status TYPE i. 126 | DATA: lr_bucket TYPE REF TO zlnkecl_aws_s3_bucket. 127 | DATA: lr_cx_aws_s3 TYPE REF TO zlnkecx_aws_s3. 128 | 129 | TRY. 130 | * Escape for considering special characters in folder name 131 | lv_folder = zlnkecl_http=>escape_url( p_folder ). 132 | CONCATENATE lv_folder '/' INTO lv_folder. 133 | 134 | CREATE OBJECT lr_bucket 135 | EXPORTING 136 | i_bucket_name = p_bucket 137 | i_dbg = p_dbg. 138 | 139 | CALL METHOD lr_bucket->head_object 140 | EXPORTING 141 | i_object_name = lv_folder 142 | IMPORTING 143 | e_http_status = lv_http_status. 144 | 145 | IF lv_http_status = zlnkecl_http=>c_status_200_ok. 146 | CALL METHOD lr_bucket->delete_object 147 | EXPORTING 148 | i_object_name = lv_folder 149 | IMPORTING 150 | e_http_status = lv_http_status 151 | e_response_content = lv_xml. 152 | 153 | IF lv_xml IS NOT INITIAL. 154 | zlnkecl_xml_utils=>show_xml_in_dialog( lv_xml ). 155 | ENDIF. 156 | 157 | IF lv_http_status = zlnkecl_http=>c_status_204_no_content. 158 | CONCATENATE 'Folder ' lv_folder ' deleted successfully' 159 | INTO lv_msg RESPECTING BLANKS. 160 | ELSE. 161 | CONCATENATE 'Folder ' lv_folder ' could not be deleted' 162 | INTO lv_msg RESPECTING BLANKS. 163 | ENDIF. 164 | CONDENSE lv_msg. 165 | WRITE:/ lv_msg. 166 | 167 | ELSE. 168 | lv_msg = zlnkecl_http=>get_reason_by_status( lv_http_status ). 169 | WRITE:/ lv_http_status, lv_msg. 170 | ENDIF. 171 | 172 | CATCH zlnkecx_aws_s3 INTO lr_cx_aws_s3. 173 | lv_msg = lr_cx_aws_s3->get_text( ). 174 | WRITE:/ lv_msg. 175 | ENDTRY. 176 | 177 | ENDMETHOD. "delete_folder 178 | 179 | *--------------------------------------------------------------------* 180 | * Head, to check if folder exists 181 | *--------------------------------------------------------------------* 182 | METHOD head_folder. 183 | DATA: lv_folder TYPE string. 184 | DATA: lv_msg TYPE string. 185 | DATA: lv_xml TYPE string. 186 | DATA: lv_http_status TYPE i. 187 | DATA: lt_response_headers TYPE tihttpnvp. "#EC NEEDED 188 | DATA: lr_bucket TYPE REF TO zlnkecl_aws_s3_bucket. 189 | DATA: lr_cx_aws_s3 TYPE REF TO zlnkecx_aws_s3. 190 | 191 | TRY. 192 | * Escape for considering special characters in folder name 193 | lv_folder = zlnkecl_http=>escape_url( p_folder ). 194 | CONCATENATE lv_folder '/' INTO lv_folder. 195 | 196 | CREATE OBJECT lr_bucket 197 | EXPORTING 198 | i_bucket_name = p_bucket 199 | i_dbg = p_dbg. 200 | 201 | CALL METHOD lr_bucket->head_object 202 | EXPORTING 203 | i_object_name = lv_folder 204 | IMPORTING 205 | e_http_status = lv_http_status 206 | e_response_headers = lt_response_headers. 207 | 208 | lv_msg = zlnkecl_http=>get_reason_by_status( lv_http_status ). 209 | WRITE:/ lv_http_status, lv_msg. 210 | 211 | IF lv_xml IS NOT INITIAL. 212 | zlnkecl_xml_utils=>show_xml_in_dialog( lv_xml ). 213 | ENDIF. 214 | 215 | CATCH zlnkecx_aws_s3 INTO lr_cx_aws_s3. 216 | lv_msg = lr_cx_aws_s3->get_text( ). 217 | WRITE:/ lv_msg. 218 | ENDTRY. 219 | ENDMETHOD. "head_folder 220 | 221 | ENDCLASS. "lcl_demo_folder IMPLEMENTATION 222 | 223 | *--------------------------------------------------------------------* 224 | * START-OF-SELECTION 225 | *--------------------------------------------------------------------* 226 | START-OF-SELECTION. 227 | lcl_demo_folder=>execute( ). 228 | -------------------------------------------------------------------------------- /s3_demo_programs/zlnkeaws_s3_demo_folder.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEAWS_S3_DEMO_FOLDER 7 | A 8 | X 9 | 1 10 | E 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | 001 18 | Parameters 19 | 10 20 | 21 | 22 | R 23 | Demo working with Folders 24 | 31 25 | 26 | 27 | S 28 | P_BUCKET 29 | Bucket name 30 | 19 31 | 32 | 33 | S 34 | P_DBG 35 | Write headers 36 | 21 37 | 38 | 39 | S 40 | P_DELET 41 | Delete folder 42 | 21 43 | 44 | 45 | S 46 | P_FOLDER 47 | Folder 48 | 14 49 | 50 | 51 | S 52 | P_HEAD 53 | Head folder 54 | 19 55 | 56 | 57 | S 58 | P_PUT 59 | Put folder 60 | 18 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /s3_demo_programs/zlnkeaws_s3_demo_iam.prog.abap: -------------------------------------------------------------------------------- 1 | *&---------------------------------------------------------------------* 2 | *& Report ZLNKEAWS_S3_DEMO_IAM 3 | *& 4 | *&---------------------------------------------------------------------* 5 | *& Company: RocketSteam 6 | *& Author: Jordi Escoda, 12th September 2017 7 | *& e-mail: jordi.escoda@rocket-steam.com or jordi.escoda@linkeit.com 8 | *& This demo program shows how to create an IAM user in S3 for SAP 9 | *& 10 | *& NOTE: The IAM user must exist in your AWS account, and must have 11 | *& proper permissions for bucket operations. Create User Policy for that. 12 | *& Permissions for Bucket: 13 | * { 14 | * "Version": "2012-10-17", 15 | * "Statement": [ 16 | * { 17 | * "Effect": "Allow", 18 | * "Action": [ 19 | * "s3:*" 20 | * ], 21 | * "Resource": [ 22 | * "arn:aws:s3:::-*" 23 | * ] 24 | * } 25 | * ] 26 | * } 27 | * 28 | *& Permissions for IAM 29 | * { 30 | * "Version": "2012-10-17", 31 | * "Statement": [ 32 | * { 33 | * "Effect": "Allow", 34 | * "Action": [ 35 | * "iam:GetUser" 36 | * ], 37 | * "Resource": [ 38 | * "arn:aws:iam:::user/" 39 | * ] 40 | * } 41 | * ] 42 | * } 43 | * 44 | *& Permissions for Listing all Buckets 45 | * { 46 | * "Version": "2012-10-17", 47 | * "Statement": [ 48 | * { 49 | * "Effect": "Allow", 50 | * "Action": [ 51 | * "s3:ListAllMyBuckets" 52 | * ], 53 | * "Resource": [ 54 | * "arn:aws:s3:::*" 55 | * ] 56 | * } 57 | * ] 58 | * } 59 | * 60 | * Where is your sid and is your IAM user 61 | * 62 | * Examples for operating on buckets with name beginning : des-tests3 63 | * on AWS account 999643172801 with IAM user S3_user 64 | * { 65 | * "Version": "2012-10-17", 66 | * "Statement": [ 67 | * { 68 | * "Sid": "PolicyGeneratedByLicenseServer", 69 | * "Effect": "Allow", 70 | * "Action": [ 71 | * "s3:*" 72 | * ], 73 | * "Resource": [ 74 | * "arn:aws:s3:::rck-*" 75 | * ] 76 | * } 77 | * ] 78 | * } 79 | * 80 | * { 81 | * "Version": "2012-10-17", 82 | * "Statement": [ 83 | * { 84 | * "Sid": "Stmt1404903638000", 85 | * "Effect": "Allow", 86 | * "Action": [ 87 | * "iam:GetUser" 88 | * ], 89 | * "Resource": [ 90 | * "arn:aws:iam::999643172801:user/S3_user" 91 | * ] 92 | * } 93 | * ] 94 | * } 95 | *&---------------------------------------------------------------------* 96 | REPORT zlnkeaws_s3_demo_iam. 97 | 98 | *--------------------------------------------------------------------* 99 | * Types 100 | *--------------------------------------------------------------------* 101 | TYPE-POOLS: abap. 102 | 103 | *--------------------------------------------------------------------* 104 | * Selection screen 105 | *--------------------------------------------------------------------* 106 | SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. 107 | PARAMETERS: p_aws TYPE char12. 108 | PARAMETERS: p_iam TYPE text128 LOWER CASE. 109 | PARAMETERS: p_key TYPE text128 LOWER CASE. 110 | PARAMETERS: p_seckey TYPE text128 LOWER CASE. 111 | SELECTION-SCREEN END OF BLOCK b1. 112 | 113 | *----------------------------------------------------------------------* 114 | * CLASS lcl_iam_demo DEFINITION 115 | *----------------------------------------------------------------------* 116 | * 117 | *----------------------------------------------------------------------* 118 | CLASS lcl_iam_demo DEFINITION. 119 | PUBLIC SECTION. 120 | CLASS-METHODS: 121 | execute. 122 | 123 | ENDCLASS. "lcl_iam_demo DEFINITION 124 | 125 | *----------------------------------------------------------------------* 126 | * CLASS lcl_iam_demo IMPLEMENTATION 127 | *----------------------------------------------------------------------* 128 | * 129 | *----------------------------------------------------------------------* 130 | CLASS lcl_iam_demo IMPLEMENTATION. 131 | 132 | METHOD execute. 133 | DATA: lv_msg TYPE string. 134 | DATA: lv_user_name TYPE zlnkeusername_de. 135 | DATA: lv_aws_account_id TYPE zlnkeaws_account_id_de. 136 | DATA: lv_access_key TYPE zlnkeacckey_de. 137 | DATA: lv_secret_access_key TYPE zlnkesecacckey_de. 138 | DATA: lv_user_id TYPE string. "#EC NEEDED 139 | DATA: ls_rs3_user TYPE zlnkeuser. 140 | DATA: lr_cx_aws_s3 TYPE REF TO zlnkecx_aws_s3. 141 | 142 | TRY. 143 | IF zlnkecl_rfc_connections=>http_dest_to_ext_exists_iam( ) = abap_false. 144 | zlnkecl_rfc_connections=>create_http_dest_to_ext_iam( ). 145 | WRITE:/ 'Created AWS destination for IAM endpoint'. 146 | ENDIF. 147 | 148 | lv_user_name = p_iam. 149 | lv_aws_account_id = p_aws. 150 | lv_access_key = p_key. 151 | lv_secret_access_key = p_seckey. 152 | CALL METHOD zlnkecl_aws_iam=>check_aws_user 153 | EXPORTING 154 | i_user_name = lv_user_name 155 | i_aws_account_id = lv_aws_account_id 156 | i_access_key = lv_access_key 157 | i_secret_access_key = lv_secret_access_key 158 | RECEIVING 159 | e_user_id = lv_user_id. 160 | 161 | ls_rs3_user-user_name = lv_user_name. 162 | ls_rs3_user-access_key = lv_access_key. 163 | ls_rs3_user-secr_access_key = lv_secret_access_key. 164 | ls_rs3_user-aws_account_id = lv_aws_account_id. 165 | ls_rs3_user-crusr = sy-uname. 166 | ls_rs3_user-crdat = sy-datum. 167 | ls_rs3_user-crtim = sy-uzeit. 168 | INSERT zlnkeuser FROM ls_rs3_user. 169 | IF sy-subrc = 0. 170 | WRITE:/ 'IAM user insert success in table ZLNKEUSER'. 171 | ENDIF. 172 | 173 | CATCH zlnkecx_aws_s3 INTO lr_cx_aws_s3. 174 | lv_msg = lr_cx_aws_s3->get_text( ). 175 | WRITE:/ lv_msg. 176 | ENDTRY. 177 | 178 | ENDMETHOD. "execute 179 | ENDCLASS. "lcl_iam_demo IMPLEMENTATION 180 | 181 | START-OF-SELECTION. 182 | lcl_iam_demo=>execute( ). 183 | -------------------------------------------------------------------------------- /s3_demo_programs/zlnkeaws_s3_demo_iam.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEAWS_S3_DEMO_IAM 7 | A 8 | X 9 | 1 10 | E 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | 001 18 | Parameters 19 | 10 20 | 21 | 22 | R 23 | Demo creation for a IAM user 24 | 28 25 | 26 | 27 | S 28 | P_AWS 29 | AWS account ID 30 | 22 31 | 32 | 33 | S 34 | P_IAM 35 | IAM user 36 | 16 37 | 38 | 39 | S 40 | P_KEY 41 | Access Key 42 | 18 43 | 44 | 45 | S 46 | P_SECKEY 47 | Secret Access Key 48 | 25 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /s3_demo_programs/zlnkeaws_s3_demo_s3.prog.abap: -------------------------------------------------------------------------------- 1 | *&---------------------------------------------------------------------* 2 | *& Report ZLNKEAWS_S3_DEMO_S3 3 | *& 4 | *&---------------------------------------------------------------------* 5 | *& Company: RocketSteam 6 | *& Author: Jordi Escoda, 15th September 2017 7 | *& e-mail: jordi.escoda@rocket-steam.com or jordi.escoda@linkeit.com 8 | *& This demo program shows how use list buckets 9 | *&---------------------------------------------------------------------* 10 | REPORT zlnkeaws_s3_demo_s3. 11 | 12 | *--------------------------------------------------------------------* 13 | * Selection screen 14 | *--------------------------------------------------------------------* 15 | SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. 16 | PARAMETERS: p_dbg AS CHECKBOX. 17 | PARAMETERS: p_iam TYPE zlnkeuser-user_name LOWER CASE. 18 | SELECTION-SCREEN END OF BLOCK b1. 19 | 20 | *----------------------------------------------------------------------* 21 | * CLASS lcl_demo_bucket DEFINITION 22 | *----------------------------------------------------------------------* 23 | * 24 | *----------------------------------------------------------------------* 25 | CLASS lcl_demo_s3 DEFINITION. 26 | PUBLIC SECTION. 27 | CLASS-METHODS: 28 | list_buckets. 29 | ENDCLASS. "lcl_demo_bucket DEFINITION 30 | 31 | *----------------------------------------------------------------------* 32 | * CLASS lcl_demo_bucket IMPLEMENTATION 33 | *----------------------------------------------------------------------* 34 | * 35 | *----------------------------------------------------------------------* 36 | CLASS lcl_demo_s3 IMPLEMENTATION. 37 | 38 | METHOD list_buckets. 39 | DATA: lr_s3 TYPE REF TO zlnkecl_aws_s3. 40 | DATA: lv_response_content TYPE string. 41 | DATA: lr_cx_aws_s3 TYPE REF TO zlnkecx_aws_s3. 42 | DATA: lv_exception_text TYPE string. 43 | TRY. 44 | CREATE OBJECT lr_s3 45 | EXPORTING 46 | i_user_name = p_iam 47 | i_dbg = p_dbg. 48 | 49 | CALL METHOD lr_s3->get_service 50 | IMPORTING 51 | e_response_content = lv_response_content. 52 | 53 | CALL METHOD zlnkecl_xml_utils=>show_xml_in_dialog 54 | EXPORTING 55 | i_xml = lv_response_content. 56 | 57 | CATCH zlnkecx_aws_s3 INTO lr_cx_aws_s3. 58 | lv_exception_text = lr_cx_aws_s3->get_text( ). 59 | WRITE:/ lv_exception_text. 60 | ENDTRY. 61 | 62 | ENDMETHOD. "execute 63 | 64 | ENDCLASS. "lcl_demo_bucket IMPLEMENTATION 65 | 66 | *--------------------------------------------------------------------* 67 | * START-OF-SELECTION 68 | *--------------------------------------------------------------------* 69 | START-OF-SELECTION. 70 | lcl_demo_s3=>list_buckets( ). 71 | -------------------------------------------------------------------------------- /s3_demo_programs/zlnkeaws_s3_demo_s3.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEAWS_S3_DEMO_S3 7 | A 8 | X 9 | 1 10 | E 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | 001 18 | Parameters 19 | 10 20 | 21 | 22 | R 23 | Demo S3 List Buckets 24 | 27 25 | 26 | 27 | S 28 | P_DBG 29 | Write headers 30 | 21 31 | 32 | 33 | S 34 | P_IAM 35 | IAM user 36 | 16 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeacckey_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEACCKEY_DE 7 | E 8 | ZLNKEACCKEY_DO 9 | 10 10 | 07 11 | 10 12 | 10 13 | RocketSteam. Access Key 14 | Access Key 15 | Acc.Key 16 | Access Key 17 | Access Key 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeacckey_do.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEACCKEY_DO 7 | E 8 | CHAR 9 | 000128 10 | 000128 11 | X 12 | Rocket Steam. Access Key 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeaws_account_id_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEAWS_ACCOUNT_ID_DE 7 | E 8 | ZLNKEAWS_ACCOUNT_ID_DO 9 | 14 10 | 10 11 | 15 12 | 20 13 | RocketSteam. AWS Account ID 14 | AWS Accoint ID 15 | AWS AccID 16 | AWS Acc. ID 17 | AWS Account ID 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeaws_account_id_do.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEAWS_ACCOUNT_ID_DO 7 | E 8 | CHAR 9 | 000012 10 | 000012 11 | X 12 | AWS Account ID 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /s3_sdk/zlnkebucket.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEBUCKET 7 | E 8 | TRANSP 9 | Rocket Steam. AWS S3 Buckets 10 | C 11 | 1 12 | 13 | 14 | ZLNKEBUCKET 15 | A 16 | 0 17 | APPL0 18 | N 19 | C 20 | 21 | 22 | 23 | ZLNKEBUCKET 24 | BUCKET 25 | 0001 26 | X 27 | ZLNKEBUCKET_DE 28 | 0 29 | X 30 | E 31 | 32 | 33 | ZLNKEBUCKET 34 | USER_NAME 35 | 0002 36 | ZLNKEUSERNAME_DE 37 | ZLNKEUSER 38 | 0 39 | P 40 | E 41 | 42 | 43 | ZLNKEBUCKET 44 | REGION 45 | 0003 46 | ZLNKEREGION_DE 47 | ZLNKEREGION 48 | 0 49 | P 50 | E 51 | 52 | 53 | ZLNKEBUCKET 54 | CONTENT_REP 55 | 0004 56 | SCMS_CREP 57 | CREP_HTTP 58 | 0 59 | P 60 | E 61 | 62 | 63 | ZLNKEBUCKET 64 | LIFECYCLE 65 | 0005 66 | ZLNKEBUCKET_LIFECYCLE_DE 67 | 0 68 | E 69 | 70 | 71 | ZLNKEBUCKET 72 | CLIENT_ENCRYPT 73 | 0006 74 | ZLNKESERVER_SIDE_ENCRYPTION_DE 75 | 0 76 | X 77 | F 78 | E 79 | 80 | 81 | ZLNKEBUCKET 82 | SERVER_ENCRYPT 83 | 0007 84 | ZLNKESERVER_SIDE_ENCRYPTION_DE 85 | 0 86 | X 87 | F 88 | E 89 | 90 | 91 | ZLNKEBUCKET 92 | ZIP 93 | 0008 94 | ZLNKEZIPFLAG_DE 95 | 0 96 | X 97 | F 98 | E 99 | 100 | 101 | ZLNKEBUCKET 102 | NO_PREFIX 103 | 0009 104 | ZLNKENO_PREFIX_FLAG_DE 105 | 0 106 | E 107 | 108 | 109 | ZLNKEBUCKET 110 | CRUSR 111 | 0010 112 | ZLNKECRUSR 113 | 0 114 | E 115 | 116 | 117 | ZLNKEBUCKET 118 | CRDAT 119 | 0011 120 | ZLNKECRDAT 121 | 0 122 | T 123 | E 124 | 125 | 126 | ZLNKEBUCKET 127 | CRTIM 128 | 0012 129 | ZLNKECRTIM 130 | 0 131 | T 132 | E 133 | 134 | 135 | ZLNKEBUCKET 136 | CHUSR 137 | 0013 138 | ZLNKECHUSR 139 | 0 140 | E 141 | 142 | 143 | ZLNKEBUCKET 144 | CHDAT 145 | 0014 146 | ZLNKECHDAT 147 | 0 148 | T 149 | E 150 | 151 | 152 | ZLNKEBUCKET 153 | CHTIM 154 | 0015 155 | ZLNKECHTIM 156 | 0 157 | T 158 | E 159 | 160 | 161 | 162 | 163 | ZLNKEBUCKET 164 | CONTENT_REP 165 | ZLNKEBUCKET 166 | CONTENT_REP 167 | CREP_HTTP 168 | CREP_ID 169 | 0001 170 | SCMS_CREP 171 | CHAR 172 | 000030 173 | 174 | 175 | ZLNKEBUCKET 176 | REGION 177 | ZLNKEBUCKET 178 | REGION 179 | ZLNKEREGION 180 | REGION 181 | 0001 182 | ZLNKEREGION_DO 183 | CHAR 184 | 000050 185 | 186 | 187 | ZLNKEBUCKET 188 | USER_NAME 189 | ZLNKEBUCKET 190 | USER_NAME 191 | ZLNKEUSER 192 | USER_NAME 193 | 0001 194 | ZLNKEUSERNAME_DO 195 | CHAR 196 | 000064 197 | 198 | 199 | 200 | 201 | ZLNKEBUCKET 202 | CONTENT_REP 203 | E 204 | CREP_HTTP 205 | 206 | 207 | ZLNKEBUCKET 208 | REGION 209 | E 210 | ZLNKEREGION 211 | 212 | 213 | ZLNKEBUCKET 214 | USER_NAME 215 | E 216 | ZLNKEUSER 217 | 218 | 219 | 220 | 221 | 222 | -------------------------------------------------------------------------------- /s3_sdk/zlnkebucket_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEBUCKET_DE 7 | E 8 | ZLNKEBUCKET_DO 9 | 06 10 | 06 11 | 06 12 | 06 13 | RocketSteam. Bucket Name 14 | Bucket 15 | Bucket 16 | Bucket 17 | Bucket 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkebucket_do.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEBUCKET_DO 7 | E 8 | CHAR 9 | 000050 10 | 000050 11 | X 12 | ZLNKEBUCKET 13 | Rocket Steam. Bucket 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /s3_sdk/zlnkebucket_lifecycle_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEBUCKET_LIFECYCLE_DE 7 | E 8 | INT4 9 | 16 10 | 10 11 | 16 12 | 20 13 | RocketSteam. Bucket Lifecycle 14 | Bucket Lifecycle 15 | BucktLife 16 | Buckt Lifecycle 17 | Bucket Lifecycle 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkebucket_prefix_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEBUCKET_PREFIX_DE 7 | E 8 | ZLNKEBUCKET_PREFIX_DO 9 | 13 10 | 10 11 | 11 12 | 13 13 | RocketSteam. Bucket Prefix. 14 | Bucket prefix 15 | Bckt.prfx. 16 | Bckt.prefix 17 | Bucket prefix 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkebucket_prefix_do.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEBUCKET_PREFIX_DO 7 | E 8 | CHAR 9 | 000032 10 | 000032 11 | X 12 | RocketSteam. BucketPrefix 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /s3_sdk/zlnkechdat.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECHDAT 7 | E 8 | DATUM 9 | 10 10 | 08 11 | 10 12 | 10 13 | RocketSteam. Date on which the object was last changed 14 | Changed on 15 | Chngd on 16 | Changed on 17 | Changed on 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkechtim.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECHTIM 7 | E 8 | UZEIT 9 | 10 10 | 10 11 | 10 12 | 10 13 | RocketSteam. Time at which object was last changed 14 | Changed at 15 | Changed at 16 | Changed at 17 | Changed at 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkechusr.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECHUSR 7 | E 8 | UNAME 9 | 10 10 | 10 11 | 10 12 | 10 13 | RocketSteam. Last user to change object 14 | Changed by 15 | Changed by 16 | Changed by 17 | Changed by 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_aws_iam.clas.abap: -------------------------------------------------------------------------------- 1 | class ZLNKECL_AWS_IAM definition 2 | public 3 | inheriting from ZLNKECL_AWS_INHERIT_SWITCH 4 | final 5 | create public . 6 | 7 | *"* public components of class ZLNKECL_AWS_IAM 8 | *"* do not include other source files here!!! 9 | public section. 10 | 11 | constants C_SERVICE_NAME type STRING value 'iam'. "#EC NOTEXT 12 | constants C_API_VERSION type STRING value '2010-05-08'. "#EC NOTEXT 13 | 14 | methods CONSTRUCTOR 15 | importing 16 | !I_USER_NAME type ZLNKEUSERNAME_DE optional 17 | !I_ACCESS_KEY type STRING optional 18 | !I_SECRET_ACCESS_KEY type STRING optional 19 | !I_DBG type ABAP_BOOL default ABAP_FALSE . 20 | methods GET_USER 21 | exporting 22 | !E_HTTP_STATUS type I 23 | !E_RESPONSE_HEADERS type TIHTTPNVP 24 | !E_RESPONSE_CONTENT type STRING 25 | raising 26 | ZLNKECX_AWS_S3 . 27 | class-methods GET_HOST_NAME 28 | returning 29 | value(E_HOST_NAME) type STRING . 30 | class-methods CHECK_AWS_USER 31 | importing 32 | !I_USER_NAME type ZLNKEUSERNAME_DE 33 | !I_AWS_ACCOUNT_ID type ZLNKEAWS_ACCOUNT_ID_DE optional 34 | !I_ACCESS_KEY type ZLNKEACCKEY_DE 35 | !I_SECRET_ACCESS_KEY type ZLNKESECACCKEY_DE 36 | returning 37 | value(E_USER_ID) type STRING 38 | raising 39 | ZLNKECX_AWS_S3 . 40 | protected section. 41 | *"* protected components of class ZLNKECL_AWS_IAM 42 | *"* do not include other source files here!!! 43 | private section. 44 | *"* private components of class ZLNKECL_AWS_IAM 45 | *"* do not include other source files here!!! 46 | ENDCLASS. 47 | 48 | 49 | 50 | CLASS ZLNKECL_AWS_IAM IMPLEMENTATION. 51 | 52 | 53 | METHOD check_aws_user. 54 | *--------------------------------------------------------------------* 55 | * Company: RocketSteam 56 | * Author: Jordi Escoda, 30th April 2014 57 | * Test AWS user 58 | *--------------------------------------------------------------------* 59 | DATA: lr_ZLNKEcl_aws_iam TYPE REF TO ZLNKEcl_aws_iam. 60 | DATA: l_msg TYPE string. "#EC NEEDED 61 | DATA: l_access_key_s TYPE string. 62 | DATA: l_secret_access_key_s TYPE string. 63 | DATA: l_http_status TYPE i. 64 | DATA: l_response_content TYPE string. 65 | DATA: l_err_msg TYPE string. 66 | DATA: l_arn TYPE string. 67 | DATA: l_aws_account_id TYPE string. 68 | DATA: lt_arn TYPE STANDARD TABLE OF string. 69 | 70 | l_access_key_s = i_access_key. 71 | l_secret_access_key_s = i_secret_access_key. 72 | 73 | CREATE OBJECT lr_ZLNKEcl_aws_iam 74 | EXPORTING 75 | i_user_name = i_user_name 76 | i_access_key = l_access_key_s 77 | i_secret_access_key = l_secret_access_key_s. 78 | 79 | CALL METHOD lr_ZLNKEcl_aws_iam->get_user 80 | IMPORTING 81 | e_http_status = l_http_status 82 | e_response_content = l_response_content. 83 | 84 | IF l_http_status = ZLNKEcl_http=>c_status_200_ok. 85 | IF i_aws_account_id IS NOT INITIAL. 86 | l_arn = ZLNKEcl_xml_utils=>get_node_value_from_xmlstring( "#EC NOTEXT 87 | i_xml_string = l_response_content 88 | i_node_name = 'Arn' ). 89 | * ARN example: arn:aws:iam::111122223333:user/theuser 90 | SPLIT l_arn AT ':' INTO TABLE lt_arn. 91 | READ TABLE lt_arn INDEX 5 INTO l_aws_account_id. 92 | IF l_aws_account_id <> i_aws_account_id. 93 | * 065 AWS Account ID does not match 94 | MESSAGE i065 INTO l_msg. 95 | ZLNKEcx_aws_s3=>raise_from_sy_msg( ). 96 | ENDIF. 97 | ENDIF. 98 | 99 | e_user_id = ZLNKEcl_xml_utils=>get_node_value_from_xmlstring( "#EC NOTEXT 100 | i_xml_string = l_response_content 101 | i_node_name = 'UserId' ). 102 | ELSE. 103 | l_err_msg = ZLNKEcl_xml_utils=>get_node_value_from_xmlstring( "#EC NOTEXT 104 | i_xml_string = l_response_content 105 | i_node_name = 'Message' ). 106 | * 048 User validation failed: & 107 | MESSAGE i048 WITH space INTO l_msg. 108 | CONCATENATE l_msg l_err_msg INTO l_err_msg. 109 | ZLNKEcx_aws_s3=>raise_giving_string( l_err_msg ). 110 | ENDIF. 111 | 112 | ENDMETHOD. 113 | 114 | 115 | METHOD constructor. 116 | *--------------------------------------------------------------------* 117 | * Company: RocketSteam 118 | * Author: Jordi Escoda, 28th April 2014 119 | * Object constructor 120 | *--------------------------------------------------------------------* 121 | CALL METHOD super->constructor. 122 | 123 | attr_service_name = c_service_name. 124 | attr_user = i_user_name. 125 | attr_access_key = i_access_key. 126 | attr_secret_access_key = i_secret_access_key. 127 | attr_dbg = i_dbg. 128 | 129 | ENDMETHOD. 130 | 131 | 132 | METHOD get_host_name. 133 | *--------------------------------------------------------------------* 134 | * Company: RocketSteam 135 | * Author: Jordi Escoda, 17th July 2014 136 | * Returns the hostname for IAM 137 | *--------------------------------------------------------------------* 138 | CONCATENATE c_service_name 139 | '.' 140 | c_host_name 141 | INTO e_host_name. 142 | 143 | ENDMETHOD. 144 | 145 | 146 | METHOD get_user. 147 | *--------------------------------------------------------------------* 148 | * Company: RocketSteam 149 | * Author: Jordi Escoda, 28th April 2014 150 | * Executes request to AWS get user 151 | *--------------------------------------------------------------------* 152 | DATA: l_rfcddest TYPE rfcdest. 153 | DATA: l_request TYPE string. 154 | DATA: l_region_s TYPE string. 155 | DATA: l_response_xcontent TYPE xstring. 156 | 157 | l_region_s = c_default_region. 158 | l_rfcddest = ZLNKEcl_rfc_connections=>get_httpsdest_iam( ). 159 | 160 | CONCATENATE '/?Action=GetUser' 161 | '&UserName=' attr_user 162 | '&Version=' c_api_version 163 | INTO l_request. 164 | 165 | CALL METHOD rest 166 | EXPORTING 167 | i_rfcdest = l_rfcddest 168 | i_region = l_region_s 169 | i_http_method = ZLNKEcl_http=>c_method_get 170 | i_request = l_request 171 | i_body_hash = ZLNKEcl_hash=>c_empty_body_sha256 172 | IMPORTING 173 | e_http_status = e_http_status 174 | e_response_headers = e_response_headers 175 | e_response_xcontent = l_response_xcontent. 176 | 177 | CALL METHOD ZLNKEcl_string_conversions=>xstring_to_string 178 | EXPORTING 179 | input = l_response_xcontent 180 | IMPORTING 181 | output = e_response_content. 182 | 183 | ENDMETHOD. 184 | ENDCLASS. 185 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_aws_iam.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_AWS_IAM 7 | 1 8 | E 9 | RocketSteam. Identity & Access Management 10 | 2 11 | 1 12 | X 13 | X 14 | X 15 | X 16 | S 17 | ZLNKEAWS_S3 18 | 19 | 20 | 21 | ZLNKECL_AWS_IAM 22 | CHECK_AWS_USER 23 | E 24 | Test AWS user 25 | 26 | 27 | ZLNKECL_AWS_IAM 28 | CONSTRUCTOR 29 | E 30 | CONSTRUCTOR 31 | 32 | 33 | ZLNKECL_AWS_IAM 34 | GET_HOST_NAME 35 | E 36 | Returns Hostname for IAM Service 37 | 38 | 39 | ZLNKECL_AWS_IAM 40 | GET_USER 41 | E 42 | Executes request to AWS get user 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_aws_inherit_switch.clas.abap: -------------------------------------------------------------------------------- 1 | class ZLNKECL_AWS_INHERIT_SWITCH definition 2 | public 3 | inheriting from ZLNKECL_AWS_REST 4 | create public . 5 | 6 | *"* public components of class ZLNKECL_AWS_INHERIT_SWITCH 7 | *"* do not include other source files here!!! 8 | public section. 9 | 10 | constants C_DEFAULT_REGION type STRING value 'us-east-1'. "#EC NOTEXT 11 | constants C_HOST_NAME type STRING value 'amazonaws.com'. "#EC NOTEXT 12 | 13 | methods CONSTRUCTOR . 14 | type-pools ABAP . 15 | methods RUNNING_AS_SAAS 16 | returning 17 | value(E_RUNNING_AS_SAAS) type ABAP_BOOL . 18 | protected section. 19 | *"* protected components of class ZLNKECL_AWS_INHERIT_SWITCH 20 | *"* do not include other source files here!!! 21 | private section. 22 | *"* private components of class ZLNKECL_AWS_INHERIT_SWITCH 23 | *"* do not include other source files here!!! 24 | ENDCLASS. 25 | 26 | 27 | 28 | CLASS ZLNKECL_AWS_INHERIT_SWITCH IMPLEMENTATION. 29 | 30 | 31 | METHOD constructor. 32 | *--------------------------------------------------------------------* 33 | * Company: RocketSteam 34 | * Author: Jordi Escoda, 13th May 2014 35 | * Object constructor 36 | *--------------------------------------------------------------------* 37 | CALL METHOD super->constructor. 38 | 39 | ENDMETHOD. 40 | 41 | 42 | METHOD running_as_saas. 43 | *--------------------------------------------------------------------* 44 | * Company: RocketSteam 45 | * Author: Jordi Escoda, 14th May 2014 46 | * Returns true if it is running as Software as a Service 47 | *--------------------------------------------------------------------* 48 | IF class_get_name( ) = 'ZLNKECL_AWS_REST_SAAS'. 49 | e_running_as_saas = abap_true. 50 | ENDIF. 51 | 52 | ENDMETHOD. 53 | ENDCLASS. 54 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_aws_inherit_switch.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_AWS_INHERIT_SWITCH 7 | 1 8 | E 9 | RocketSteam. Inheritance Switch 10 | 2 11 | 1 12 | X 13 | X 14 | X 15 | S 16 | 17 | 18 | 19 | ZLNKECL_AWS_INHERIT_SWITCH 20 | CONSTRUCTOR 21 | E 22 | CONSTRUCTOR 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_aws_rest.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_AWS_REST 7 | 1 8 | E 9 | RocketSteam. AWS Rest 10 | 2 11 | 1 12 | X 13 | X 14 | X 15 | X 16 | S 17 | ZLNKEAWS_S3 18 | 19 | 20 | 21 | ZLNKECL_AWS_REST 22 | ATTR_R_HTTP_CLIENT 23 | E 24 | HTTP Client Abstraction 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_aws_s3.clas.abap: -------------------------------------------------------------------------------- 1 | class ZLNKECL_AWS_S3 definition 2 | public 3 | inheriting from ZLNKECL_AWS_INHERIT_SWITCH 4 | create public . 5 | 6 | *"* public components of class ZLNKECL_AWS_S3 7 | *"* do not include other source files here!!! 8 | public section. 9 | 10 | constants C_SERVICE_NAME type STRING value 's3'. "#EC NOTEXT 11 | 12 | type-pools ABAP . 13 | methods CONSTRUCTOR 14 | importing 15 | !I_USER_NAME type ZLNKEUSERNAME_DE optional 16 | !I_CREATE type ABAP_BOOL default ABAP_FALSE 17 | !I_DBG type ABAP_BOOL default ABAP_FALSE 18 | raising 19 | ZLNKECX_AWS_S3 . 20 | methods GET_SERVICE 21 | exporting 22 | !E_HTTP_STATUS type I 23 | !E_RESPONSE_HEADERS type TIHTTPNVP 24 | !E_RESPONSE_CONTENT type STRING 25 | raising 26 | ZLNKECX_AWS_S3 . 27 | class-methods GET_HOST_NAME 28 | returning 29 | value(E_HOST_NAME) type STRING . 30 | protected section. 31 | *"* protected components of class ZLNKECL_AWS_S3 32 | *"* do not include other source files here!!! 33 | private section. 34 | *"* private components of class ZLNKECL_AWS_S3 35 | *"* do not include other source files here!!! 36 | ENDCLASS. 37 | 38 | 39 | 40 | CLASS ZLNKECL_AWS_S3 IMPLEMENTATION. 41 | 42 | 43 | METHOD constructor. 44 | *--------------------------------------------------------------------* 45 | * Company: RocketSteam 46 | * Author: Jordi Escoda, 9th April 2014 47 | * Object constructor 48 | *--------------------------------------------------------------------* 49 | DATA: l_destination_exists TYPE abap_bool. 50 | DATA: l_region TYPE ZLNKEregion_de. 51 | DATA: l_msg TYPE string. "#EC NEEDED 52 | DATA: l_tabname TYPE tabname. 53 | 54 | CALL METHOD super->constructor. 55 | 56 | attr_service_name = c_service_name. 57 | 58 | * Parameter i_create is true when bucket creation 59 | CHECK i_create = abap_false. 60 | 61 | attr_user = i_user_name. 62 | attr_dbg = i_dbg. 63 | 64 | * For SaaS credentials are not coming from ZLNKEuser 65 | IF running_as_saas( ) = abap_false. 66 | * Get keys from user 67 | SELECT SINGLE access_key secr_access_key aws_account_id 68 | INTO (attr_access_key, attr_secret_access_key, attr_aws_account_id) 69 | FROM ZLNKEuser 70 | WHERE user_name = i_user_name. 71 | 72 | IF sy-subrc <> 0. 73 | * 020 AWS S3 User & not found 74 | MESSAGE i020 WITH i_user_name INTO l_msg. 75 | ZLNKEcx_aws_s3=>raise_from_sy_msg( ). 76 | ENDIF. 77 | ELSE. 78 | * Is SaaS. 79 | * Avoid syntax error in case Stand-alone (table ZLNKEACTIV_CODE is not delivered) 80 | l_tabname = 'ZLNKEACTIV_CODE'. 81 | TRY. 82 | * Get the aws account ID 83 | SELECT SINGLE aws_account_id "#EC * 84 | INTO attr_aws_account_id 85 | FROM (l_tabname). 86 | CATCH cx_sy_dynamic_osql_semantics. 87 | * Should not happen! 88 | * 078 Table & not found 89 | MESSAGE i078 WITH l_tabname INTO l_msg. 90 | ZLNKEcx_aws_s3=>raise_from_sy_msg( ). 91 | ENDTRY. 92 | ENDIF. 93 | 94 | * Checks if HTTP to ext destination exists 95 | l_region = c_default_region. 96 | CALL METHOD ZLNKEcl_rfc_connections=>http_dest_to_ext_exists_region 97 | EXPORTING 98 | i_region = l_region 99 | RECEIVING 100 | e_destination_exists = l_destination_exists. 101 | 102 | IF l_destination_exists = abap_false. 103 | * HTTP to ext destination does not exist. Create it. 104 | CALL METHOD ZLNKEcl_rfc_connections=>create_http_dest_to_ext_region 105 | EXPORTING 106 | i_region = l_region. 107 | ENDIF. 108 | 109 | ENDMETHOD. 110 | 111 | 112 | METHOD get_host_name. 113 | *--------------------------------------------------------------------* 114 | * Company: RocketSteam 115 | * Author: Jordi Escoda, 17th July 2014 116 | * Returns the hostname for S3 117 | *--------------------------------------------------------------------* 118 | CONCATENATE c_service_name 119 | '.' 120 | c_host_name 121 | INTO e_host_name. 122 | ENDMETHOD. 123 | 124 | 125 | METHOD get_service. 126 | *--------------------------------------------------------------------* 127 | * Company: RocketSteam 128 | * Author: Jordi Escoda, 15th April 2014 129 | * Executes request to AWS S3 to get service 130 | *--------------------------------------------------------------------* 131 | DATA: l_rfcddest TYPE rfcdest. 132 | DATA: l_request TYPE string. 133 | DATA: l_region TYPE ZLNKEregion_de. 134 | DATA: l_response_xcontent TYPE xstring. 135 | 136 | l_region = c_default_region. 137 | l_rfcddest = ZLNKEcl_rfc_connections=>get_httpdest_by_region( 138 | l_region ). 139 | 140 | l_request = '/'. 141 | 142 | CALL METHOD rest 143 | EXPORTING 144 | i_rfcdest = l_rfcddest 145 | i_region = c_default_region 146 | i_http_method = ZLNKEcl_http=>c_method_get 147 | i_request = l_request 148 | i_body_hash = ZLNKEcl_hash=>c_empty_body_sha256 149 | IMPORTING 150 | e_http_status = e_http_status 151 | e_response_headers = e_response_headers 152 | e_response_xcontent = l_response_xcontent. 153 | 154 | CALL METHOD ZLNKEcl_string_conversions=>xstring_to_string 155 | EXPORTING 156 | input = l_response_xcontent 157 | IMPORTING 158 | output = e_response_content. 159 | 160 | ENDMETHOD. 161 | ENDCLASS. 162 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_aws_s3.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_AWS_S3 7 | 1 8 | E 9 | RocketSteam. S3 Service 10 | 2 11 | 1 12 | X 13 | X 14 | X 15 | S 16 | ZLNKEAWS_S3 17 | 18 | 19 | 20 | ZLNKECL_AWS_S3 21 | CONSTRUCTOR 22 | E 23 | CONSTRUCTOR 24 | 25 | 26 | ZLNKECL_AWS_S3 27 | GET_HOST_NAME 28 | E 29 | Returns the Hostname for S3 Service 30 | 31 | 32 | ZLNKECL_AWS_S3 33 | GET_SERVICE 34 | E 35 | List buckets 36 | 37 | 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_aws_s3_bucket.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_AWS_S3_BUCKET 7 | 1 8 | E 9 | RocketSteam. Bucket 10 | 2 11 | 1 12 | X 13 | X 14 | X 15 | X 16 | S 17 | ZLNKEAWS_S3 18 | 19 | 20 | 21 | ZLNKECL_AWS_S3_BUCKET 22 | ATTR_BUCKET_NAME 23 | E 24 | Bucket name 25 | 26 | 27 | ZLNKECL_AWS_S3_BUCKET 28 | ATTR_CLIENT_ENCRYPT 29 | E 30 | General Flag 31 | 32 | 33 | ZLNKECL_AWS_S3_BUCKET 34 | ATTR_REGION 35 | E 36 | Rocket Steam. Region. 37 | 38 | 39 | ZLNKECL_AWS_S3_BUCKET 40 | ATTR_RFCDEST 41 | E 42 | Logical Destination (Specified in Function Call) 43 | 44 | 45 | ZLNKECL_AWS_S3_BUCKET 46 | ATTR_SERVER_ENCRYPT 47 | E 48 | General Flag 49 | 50 | 51 | ZLNKECL_AWS_S3_BUCKET 52 | ATTR_ZIP 53 | E 54 | General Flag 55 | 56 | 57 | ZLNKECL_AWS_S3_BUCKET 58 | CONSTRUCTOR 59 | E 60 | CONSTRUCTOR 61 | 62 | 63 | ZLNKECL_AWS_S3_BUCKET 64 | CREATE_BUCKET 65 | E 66 | Creates a Bucket 67 | 68 | 69 | ZLNKECL_AWS_S3_BUCKET 70 | C_BUCKET_PREFIX_SEPARATOR 71 | E 72 | Bucket prefix separator 73 | 74 | 75 | ZLNKECL_AWS_S3_BUCKET 76 | C_MPART_SIZE 77 | E 78 | Part size for multipart upload 79 | 80 | 81 | ZLNKECL_AWS_S3_BUCKET 82 | C_MPART_UPLD_RETRIES 83 | E 84 | Multipart upload retries 85 | 86 | 87 | ZLNKECL_AWS_S3_BUCKET 88 | C_MPART_UPLD_STATE_ABORTED 89 | E 90 | Multipart state aborted 91 | 92 | 93 | ZLNKECL_AWS_S3_BUCKET 94 | C_MPART_UPLD_STATE_COMPL_ERR 95 | E 96 | Multipart state errors 97 | 98 | 99 | ZLNKECL_AWS_S3_BUCKET 100 | C_MPART_UPLD_STATE_COMPL_OK 101 | E 102 | Multipart state completed OK 103 | 104 | 105 | ZLNKECL_AWS_S3_BUCKET 106 | C_MPART_UPLD_STATE_INPROGRESS 107 | E 108 | Multipart state in progress 109 | 110 | 111 | ZLNKECL_AWS_S3_BUCKET 112 | C_THRESHOLD_MPART 113 | E 114 | Threshold to switch to multipart upload 115 | 116 | 117 | ZLNKECL_AWS_S3_BUCKET 118 | DELETE_BUCKET 119 | E 120 | Deletes a Bucket if is empty 121 | 122 | 123 | ZLNKECL_AWS_S3_BUCKET 124 | DELETE_BUCKET_LIFECYCLE 125 | E 126 | Deletes Bucket Lifecycle 127 | 128 | 129 | ZLNKECL_AWS_S3_BUCKET 130 | DELETE_OBJECT 131 | E 132 | Given an object name deletes it 133 | 134 | 135 | ZLNKECL_AWS_S3_BUCKET 136 | GET_BUCKET_LIFECYCLE 137 | E 138 | Returns Bucket Lifecycle 139 | 140 | 141 | ZLNKECL_AWS_S3_BUCKET 142 | GET_BUCKET_LOCATION 143 | E 144 | Returns Bucket Location 145 | 146 | 147 | ZLNKECL_AWS_S3_BUCKET 148 | GET_BUCKET_NAME_EXTERNAL 149 | E 150 | Returns Bucket name external 151 | 152 | 153 | ZLNKECL_AWS_S3_BUCKET 154 | GET_BUCKET_NAME_INTERNAL 155 | E 156 | Returns Bucket name internal 157 | 158 | 159 | ZLNKECL_AWS_S3_BUCKET 160 | GET_BUCKET_SIZE 161 | E 162 | Returns bucket size (may take long time!) 163 | 164 | 165 | ZLNKECL_AWS_S3_BUCKET 166 | GET_KEY_SIZE_FROM_XML 167 | E 168 | XML from List to table containing key & size pairs 169 | 170 | 171 | ZLNKECL_AWS_S3_BUCKET 172 | GET_OBJECT 173 | E 174 | Given an object name returns it 175 | 176 | 177 | ZLNKECL_AWS_S3_BUCKET 178 | HEAD_BUCKET 179 | E 180 | Executes a HEAD request for the Bucket 181 | 182 | 183 | ZLNKECL_AWS_S3_BUCKET 184 | HEAD_OBJECT 185 | E 186 | Executes a HEAD request for an object 187 | 188 | 189 | ZLNKECL_AWS_S3_BUCKET 190 | LIST_OBJECTS 191 | E 192 | Returns an XML with the Bucket List (max 1000 items) 193 | 194 | 195 | ZLNKECL_AWS_S3_BUCKET 196 | LIST_OBJECTS_V2 197 | E 198 | Returns an XML with the Bucket List (max 1000 items) V2 199 | 200 | 201 | ZLNKECL_AWS_S3_BUCKET 202 | LIST_PARTS_MULTIPART_UPLOAD 203 | E 204 | List parts of a multipart upload 205 | 206 | 207 | ZLNKECL_AWS_S3_BUCKET 208 | PUT_BUCKET_LIFECYCLE 209 | E 210 | Sets Bucket Lifecycle 211 | 212 | 213 | ZLNKECL_AWS_S3_BUCKET 214 | PUT_OBJECT 215 | E 216 | Given an object and optionally MIME type puts it 217 | 218 | 219 | ZLNKECL_AWS_S3_BUCKET 220 | PUT_OBJECT_MULTIPART_UPLOAD 221 | E 222 | Given an object and optionally MIME type puts it (Multipart) 223 | 224 | 225 | 226 | 227 | 228 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_aws_sign_v4_base.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_AWS_SIGN_V4_BASE 7 | 1 8 | E 9 | RocketSteam. Common methods and properties for AWS V4 signer 10 | 2 11 | 1 12 | X 13 | X 14 | X 15 | X 16 | S 17 | 18 | 19 | 20 | ZLNKECL_AWS_SIGN_V4_BASE 21 | CONSTRUCTOR 22 | E 23 | CONSTRUCTOR 24 | 25 | 26 | ZLNKECL_AWS_SIGN_V4_BASE 27 | LR_ATTR_HTTP_REQUEST 28 | E 29 | HTTP Framework (iHTTP) HTTP Request 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_aws_sign_v4_header.clas.abap: -------------------------------------------------------------------------------- 1 | class ZLNKECL_AWS_SIGN_V4_HEADER definition 2 | public 3 | inheriting from ZLNKECL_AWS_SIGN_V4_BASE 4 | final 5 | create public . 6 | 7 | *"* public components of class ZLNKECL_AWS_SIGN_V4_HEADER 8 | *"* do not include other source files here!!! 9 | public section. 10 | 11 | methods CONSTRUCTOR 12 | importing 13 | !I_HTTP_REQUEST type ref to IF_HTTP_REQUEST 14 | !I_ENDPOINT_URL type STRING 15 | !I_HTTP_METHOD type STRING 16 | !I_SERVICE_NAME type STRING default 's3' 17 | !I_REGION type STRING . 18 | methods COMPUTESIGNATURE 19 | importing 20 | !I_BODY_HASH type STRING 21 | !I_AWS_ACCESS_KEY type STRING 22 | !I_AWS_SECRET_KEY type STRING 23 | raising 24 | CX_ABAP_MESSAGE_DIGEST . 25 | protected section. 26 | *"* protected components of class ZLNKECL_AWS_SIGN_V4_HEADER 27 | *"* do not include other source files here!!! 28 | private section. 29 | *"* private components of class ZLNKECL_AWS_SIGN_V4_HEADER 30 | *"* do not include other source files here!!! 31 | ENDCLASS. 32 | 33 | 34 | 35 | CLASS ZLNKECL_AWS_SIGN_V4_HEADER IMPLEMENTATION. 36 | 37 | 38 | METHOD computesignature. 39 | *--------------------------------------------------------------------* 40 | * Company: RocketSteam 41 | * Author: Jordi Escoda, 26th March 2014 42 | * Signs the http_request adding to the header the required data 43 | *--------------------------------------------------------------------* 44 | DATA: l_date TYPE datum, 45 | l_time TYPE uzeit. 46 | DATA: l_x_amz_date TYPE string, 47 | l_datestmp TYPE string. 48 | DATA: l_host TYPE string. 49 | DATA: l_canonicalizedheadernames TYPE string. 50 | DATA: l_canonicalizedheaders TYPE string. 51 | DATA: l_canonicalizedqueryparameters TYPE string. 52 | DATA: l_canonicalrequest TYPE string. 53 | DATA: l_scope TYPE string. 54 | DATA: l_stringtosign TYPE string. 55 | DATA: l_ksecret TYPE string, 56 | l_signature TYPE string. 57 | DATA: l_xkdate TYPE xstring, 58 | l_xkregion TYPE xstring, 59 | l_xkservice TYPE xstring, 60 | l_xksigning TYPE xstring, 61 | l_xsignature TYPE xstring. 62 | DATA: l_authorizationheader TYPE string. 63 | 64 | lr_attr_http_request->set_header_field( name = 'x-amz-content-sha256' "#EC NOTEXT 65 | value = i_body_hash ). 66 | 67 | get_date_time_utc( IMPORTING e_date_utc = l_date 68 | e_time_utc = l_time ). 69 | 70 | l_x_amz_date = get_tstmp_iso8601basicformat( 71 | i_date = l_date 72 | i_time = l_time ). 73 | 74 | lr_attr_http_request->set_header_field( name = 'x-amz-date' "#EC NOTEXT 75 | value = l_x_amz_date ). 76 | 77 | l_host = get_host( ). 78 | lr_attr_http_request->set_header_field( name = 'Host' "#EC NOTEXT 79 | value = l_host ). 80 | 81 | l_canonicalizedheadernames = get_canonicalizeheadernames( ). 82 | 83 | l_canonicalizedheaders = get_canonicalizedheaderstring( ). 84 | 85 | l_canonicalizedqueryparameters = get_canonicalizedquerystring( ). 86 | 87 | * WRITE:/ 'Canonicalized Query Parameters:'. 88 | * WRITE:/ l_canonicalizedqueryparameters. 89 | 90 | l_canonicalrequest = get_canonicalrequest( 91 | i_canonicalizedqueryparameters = l_canonicalizedqueryparameters 92 | i_canonicalizedheadernames = l_canonicalizedheadernames 93 | i_canonicalizedheaders = l_canonicalizedheaders 94 | i_bodyhash = i_body_hash ). 95 | 96 | * Builds the scope 97 | CONCATENATE l_date 98 | attr_region 99 | attr_service_name 100 | c_terminator 101 | INTO l_scope SEPARATED BY '/'. 102 | 103 | l_stringtosign = get_stringtosign( 104 | i_scheme = c_scheme 105 | i_algorithm = c_algorithm 106 | i_datetime = l_x_amz_date 107 | i_scope = l_scope 108 | i_canonicalrequest = l_canonicalrequest ). 109 | 110 | * WRITE:/ 'Canonical Request:'. 111 | * WRITE:/ l_canonicalrequest. 112 | * WRITE:/ 'String to sign:'. 113 | * WRITE:/ l_stringtosign. 114 | * WRITE:/. 115 | 116 | CONCATENATE c_scheme i_aws_secret_key INTO l_ksecret. 117 | l_datestmp = l_date. 118 | l_xkdate = hmac_sign_kstring( i_string = l_datestmp 119 | i_key = l_ksecret ). 120 | l_xkregion = hmac_sign_kxstring( i_string = attr_region 121 | i_xkey = l_xkdate ). 122 | l_xkservice = hmac_sign_kxstring( i_string = attr_service_name 123 | i_xkey = l_xkregion ). 124 | l_xksigning = hmac_sign_kxstring( i_string = c_terminator 125 | i_xkey = l_xkservice ). 126 | l_xsignature = hmac_sign_kxstring( i_string = l_stringtosign 127 | i_xkey = l_xksigning ). 128 | l_signature = l_xsignature. 129 | TRANSLATE l_signature TO LOWER CASE. 130 | 131 | CONCATENATE c_scheme '-' c_algorithm ' ' "#EC NOTEXT 132 | 'Credential=' 133 | i_aws_access_key 134 | '/' 135 | l_scope 136 | ', ' 137 | 'SignedHeaders=' 138 | l_canonicalizedheadernames 139 | ', ' 140 | 'Signature=' 141 | l_signature 142 | INTO l_authorizationheader RESPECTING BLANKS. 143 | 144 | lr_attr_http_request->set_header_field( name = 'Authorization' "#EC NOTEXT 145 | value = l_authorizationheader ). 146 | 147 | ENDMETHOD. 148 | 149 | 150 | METHOD CONSTRUCTOR. 151 | *--------------------------------------------------------------------* 152 | * Company: RocketSteam 153 | * Author: Jordi Escoda, 26th March 2014 154 | * Object constructor 155 | *--------------------------------------------------------------------* 156 | CALL METHOD super->constructor 157 | EXPORTING 158 | i_http_request = i_http_request 159 | i_endpoint_url = i_endpoint_url 160 | i_http_method = i_http_method 161 | i_service_name = i_service_name 162 | i_region = i_region. 163 | 164 | ENDMETHOD. 165 | ENDCLASS. 166 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_aws_sign_v4_header.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_AWS_SIGN_V4_HEADER 7 | 1 8 | E 9 | RocketSteam. AWS V4 Signer, requests with Authoriz. header 10 | 2 11 | 1 12 | X 13 | X 14 | X 15 | X 16 | S 17 | 18 | 19 | 20 | ZLNKECL_AWS_SIGN_V4_HEADER 21 | COMPUTESIGNATURE 22 | E 23 | Computes authentication signature 24 | 25 | 26 | ZLNKECL_AWS_SIGN_V4_HEADER 27 | CONSTRUCTOR 28 | E 29 | CONSTRUCTOR 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_aws_sqs.clas.abap: -------------------------------------------------------------------------------- 1 | class ZLNKECL_AWS_SQS definition 2 | public 3 | inheriting from ZLNKECL_AWS_INHERIT_SWITCH 4 | final 5 | create public . 6 | 7 | *"* public components of class ZLNKECL_AWS_SQS 8 | *"* do not include other source files here!!! 9 | public section. 10 | 11 | constants C_SERVICE_NAME type STRING value 'sqs'. "#EC NOTEXT 12 | 13 | type-pools ABAP . 14 | methods CONSTRUCTOR 15 | importing 16 | !I_ACCESS_KEY type STRING optional 17 | !I_SECRET_ACCESS_KEY type STRING optional 18 | !I_REGION type STRING optional 19 | !I_AWS_ACCOUNT_ID type STRING 20 | !I_DBG type ABAP_BOOL default ABAP_FALSE 21 | preferred parameter I_REGION . 22 | methods SEND_MESSAGE 23 | exporting 24 | !E_HTTP_STATUS type I 25 | !E_RESPONSE_HEADERS type TIHTTPNVP 26 | !E_RESPONSE_CONTENT type STRING 27 | raising 28 | ZLNKECX_AWS_S3 . 29 | protected section. 30 | *"* protected components of class ZLNKECL_AWS_SQS 31 | *"* do not include other source files here!!! 32 | private section. 33 | *"* private components of class ZLNKECL_AWS_SQS 34 | *"* do not include other source files here!!! 35 | 36 | constants C_QUEUE_NAME type STRING value 'RocketSteamS4LicenseServer_In'. "#EC NOTEXT 37 | data ATTR_REGION type STRING . 38 | ENDCLASS. 39 | 40 | 41 | 42 | CLASS ZLNKECL_AWS_SQS IMPLEMENTATION. 43 | 44 | 45 | METHOD constructor. 46 | 47 | super->constructor( ). 48 | 49 | attr_access_key = i_access_key. 50 | attr_secret_access_key = i_secret_access_key. 51 | 52 | attr_service_name = c_service_name. 53 | 54 | IF i_region IS INITIAL. 55 | attr_region = c_default_region. 56 | ELSE. 57 | attr_region = i_region. 58 | ENDIF. 59 | 60 | attr_aws_account_id = i_aws_account_id. 61 | attr_dbg = i_dbg. 62 | 63 | ENDMETHOD. 64 | 65 | 66 | METHOD send_message. 67 | *--------------------------------------------------------------------* 68 | * Company: RocketSteam 69 | * Author: Jordi Escoda, 18th July 2014 70 | * Test for a public SQS 71 | *--------------------------------------------------------------------* 72 | DATA: l_rfcddest TYPE rfcdest. 73 | DATA: l_request TYPE string. 74 | DATA: l_response_xcontent TYPE xstring. 75 | 76 | l_rfcddest = 'RS3_SQS_IN'. 77 | 78 | CONCATENATE '/' 79 | attr_aws_account_id 80 | '/' 81 | c_queue_name 82 | '/?Action=SendMessage' 83 | '&MessageBody=HelloWorld' 84 | INTO l_request. 85 | 86 | CALL METHOD rest_no_sign 87 | EXPORTING 88 | i_rfcdest = l_rfcddest 89 | i_region = attr_region 90 | i_http_method = ZLNKEcl_http=>c_method_get 91 | i_request = l_request 92 | i_body_hash = ZLNKEcl_hash=>c_empty_body_sha256 93 | IMPORTING 94 | e_http_status = e_http_status 95 | e_response_headers = e_response_headers 96 | e_response_xcontent = l_response_xcontent. 97 | 98 | CALL METHOD ZLNKEcl_string_conversions=>xstring_to_string 99 | EXPORTING 100 | input = l_response_xcontent 101 | IMPORTING 102 | output = e_response_content. 103 | 104 | ENDMETHOD. 105 | ENDCLASS. 106 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_aws_sqs.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_AWS_SQS 7 | 1 8 | E 9 | RocketSteam. AWS SQS class 10 | 2 11 | 1 12 | X 13 | X 14 | X 15 | X 16 | S 17 | 18 | 19 | 20 | ZLNKECL_AWS_SQS 21 | CONSTRUCTOR 22 | E 23 | CONSTRUCTOR 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_hash.clas.abap: -------------------------------------------------------------------------------- 1 | class ZLNKECL_HASH definition 2 | public 3 | final 4 | create private . 5 | 6 | *"* public components of class ZLNKECL_HASH 7 | *"* do not include other source files here!!! 8 | public section. 9 | 10 | constants C_EMPTY_BODY_SHA256 type STRING value 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'. "#EC NOTEXT 11 | 12 | class-methods HASH_SHA256_FOR_CHAR 13 | importing 14 | !I_STRING type STRING 15 | returning 16 | value(E_HASH) type STRING 17 | raising 18 | CX_ABAP_MESSAGE_DIGEST . 19 | class-methods HASH_SHA256_FOR_HEX 20 | importing 21 | !I_XSTRING type XSTRING 22 | returning 23 | value(E_HASH) type STRING 24 | raising 25 | CX_ABAP_MESSAGE_DIGEST . 26 | class-methods HASH_MD5_FOR_CHAR 27 | importing 28 | !I_STRING type STRING 29 | returning 30 | value(E_HASH) type STRING 31 | raising 32 | CX_ABAP_MESSAGE_DIGEST . 33 | class-methods HASH_MD5_FOR_HEX_BASE64 34 | importing 35 | !I_XSTRING type XSTRING 36 | returning 37 | value(E_HASH) type STRING 38 | raising 39 | CX_ABAP_MESSAGE_DIGEST . 40 | protected section. 41 | *"* protected components of class ZLNKECL_HASH 42 | *"* do not include other source files here!!! 43 | private section. 44 | *"* private components of class ZLNKECL_HASH 45 | *"* do not include other source files here!!! 46 | ENDCLASS. 47 | 48 | 49 | 50 | CLASS ZLNKECL_HASH IMPLEMENTATION. 51 | 52 | 53 | METHOD hash_md5_for_char. 54 | *--------------------------------------------------------------------* 55 | * Company: RocketSteam 56 | * Author: Jordi Escoda, 28th March 2014 57 | * Calculates MD5 hash for the given string, Output Base64 58 | *--------------------------------------------------------------------* 59 | CALL METHOD cl_abap_message_digest=>calculate_hash_for_char 60 | EXPORTING 61 | if_algorithm = 'MD5' 62 | if_data = i_string 63 | IMPORTING 64 | ef_hashstring = e_hash. 65 | 66 | ENDMETHOD. 67 | 68 | 69 | METHOD HASH_MD5_FOR_HEX_BASE64. 70 | *--------------------------------------------------------------------* 71 | * Company: RocketSteam 72 | * Author: Jordi Escoda, 28th March 2014 73 | * Calculates MD5 hash for the given xstring, Output Base64 74 | *--------------------------------------------------------------------* 75 | CALL METHOD cl_abap_message_digest=>calculate_hash_for_raw 76 | EXPORTING 77 | if_algorithm = 'MD5' 78 | if_data = i_xstring 79 | IMPORTING 80 | ef_hashb64string = e_hash. 81 | 82 | ENDMETHOD. 83 | 84 | 85 | METHOD hash_sha256_for_char. 86 | *--------------------------------------------------------------------* 87 | * Company: RocketSteam 88 | * Author: Jordi Escoda, 25th March 2014 89 | * Calculates SHA-256 hash for the given text 90 | *--------------------------------------------------------------------* 91 | CALL METHOD cl_abap_message_digest=>calculate_hash_for_char 92 | EXPORTING 93 | if_algorithm = 'SHA-256' 94 | if_data = i_string 95 | IMPORTING 96 | ef_hashstring = e_hash. 97 | 98 | TRANSLATE e_hash TO LOWER CASE. 99 | 100 | ENDMETHOD. 101 | 102 | 103 | METHOD hash_sha256_for_hex. 104 | *--------------------------------------------------------------------* 105 | * Company: RocketSteam 106 | * Author: Jordi Escoda, 28th March 2014 107 | * Calculates SHA-256 hash for the given xstring 108 | *--------------------------------------------------------------------* 109 | CALL METHOD cl_abap_message_digest=>calculate_hash_for_raw 110 | EXPORTING 111 | if_algorithm = 'SHA-256' 112 | if_data = i_xstring 113 | IMPORTING 114 | ef_hashstring = e_hash. 115 | 116 | TRANSLATE e_hash TO LOWER CASE. 117 | ENDMETHOD. 118 | ENDCLASS. 119 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_hash.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_HASH 7 | 1 8 | E 9 | RocketSteam. Hash class 10 | 1 11 | X 12 | X 13 | X 14 | X 15 | S 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_http.clas.abap: -------------------------------------------------------------------------------- 1 | class ZLNKECL_HTTP definition 2 | public 3 | final 4 | create private . 5 | 6 | *"* public components of class ZLNKECL_HTTP 7 | *"* do not include other source files here!!! 8 | public section. 9 | 10 | constants C_METHOD_GET type STRING value 'GET'. "#EC NOTEXT 11 | constants C_METHOD_POST type STRING value 'POST'. "#EC NOTEXT 12 | constants C_METHOD_HEAD type STRING value 'HEAD'. "#EC NOTEXT 13 | constants C_METHOD_PUT type STRING value 'PUT'. "#EC NOTEXT 14 | constants C_METHOD_DELETE type STRING value 'DELETE'. "#EC NOTEXT 15 | constants C_STATUS_200_OK type I value 200. "#EC NOTEXT 16 | constants C_STATUS_201_CREATED type I value 201. "#EC NOTEXT 17 | constants C_STATUS_204_NO_CONTENT type I value 204. "#EC NOTEXT 18 | constants C_STATUS_206_PARTIAL_CONTENT type I value 206. "#EC NOTEXT 19 | constants C_STATUS_250_MISSINGDOCCREATED type I value 250. "#EC NOTEXT 20 | constants C_STATUS_307_TEMP_REDIRECT type I value 307. "#EC NOTEXT 21 | constants C_STATUS_400_BAD_REQUEST type I value 400. "#EC NOTEXT 22 | constants C_STATUS_401_UNAUTHORIZED type I value 401. "#EC NOTEXT 23 | constants C_STATUS_403_FORBIDDEN type I value 403. "#EC NOTEXT 24 | constants C_STATUS_404_NOT_FOUND type I value 404. "#EC NOTEXT 25 | constants C_STATUS_405_METH_NOT_ALLOWED type I value 405. "#EC NOTEXT 26 | constants C_STATUS_406_NOT_ACCEPTABLE type I value 406. "#EC NOTEXT 27 | constants C_STATUS_409_CONFLICT type I value 409. "#EC NOTEXT 28 | constants C_STATUS_411_LENGTH_REQUIRED type I value 411. "#EC NOTEXT 29 | constants C_STATUS_412_PRECOND_FAILED type I value 412. "#EC NOTEXT 30 | constants C_STATUS_416_REQRANGENOTSATISF type I value 416. "#EC NOTEXT 31 | constants C_STATUS_500_INTNAL_SERVER_ERR type I value 500. "#EC NOTEXT 32 | constants C_STATUS_501_NOT_IMPLEMENTED type I value 501. "#EC NOTEXT 33 | constants C_STATUS_503_SERVICE_UNAVAILAB type I value 503. "#EC NOTEXT 34 | 35 | class-methods GET_REASON_BY_STATUS 36 | importing 37 | !I_HTTP_STATUS type I 38 | returning 39 | value(E_REASON) type STRING . 40 | class-methods ESCAPE_URL 41 | importing 42 | !I_UNESCAPED type STRING 43 | returning 44 | value(E_ESCAPED) type STRING . 45 | class-methods UNESCAPE_URL 46 | importing 47 | !I_ESCAPED type STRING 48 | returning 49 | value(E_UNESCAPED) type STRING . 50 | protected section. 51 | *"* protected components of class ZLNKECL_HTTP 52 | *"* do not include other source files here!!! 53 | private section. 54 | *"* private components of class ZLNKECL_HTTP 55 | *"* do not include other source files here!!! 56 | ENDCLASS. 57 | 58 | 59 | 60 | CLASS ZLNKECL_HTTP IMPLEMENTATION. 61 | 62 | 63 | METHOD escape_url. 64 | *--------------------------------------------------------------------* 65 | * Company: RocketSteam 66 | * Author: Jordi Escoda, 11th April 2016 67 | *--------------------------------------------------------------------* 68 | DATA: lv_text(512) TYPE c. 69 | DATA: lv_string TYPE string. 70 | DATA: lt_result TYPE match_result_tab. 71 | FIELD-SYMBOLS: TYPE match_result. 72 | 73 | * This escapes dots. Do not wish to escape dots!. And escape are lowercase 74 | * CALL METHOD cl_http_utility=>if_http_utility~escape_url 75 | * EXPORTING 76 | * unescaped = i_unescaped 77 | * OPTIONS = 0 78 | * RECEIVING 79 | * escaped = lv_string. 80 | 81 | * This does not escape dots, but returns escaped in lowercase 82 | CALL METHOD cl_abap_dyn_prg=>escape_xss_url 83 | EXPORTING 84 | val = i_unescaped 85 | RECEIVING 86 | out = lv_string. 87 | 88 | lv_text = lv_string. 89 | 90 | * Unescape %2f -> / (needed for path) 91 | REPLACE ALL OCCURRENCES OF '%2f' IN lv_text WITH '/'. 92 | 93 | * AWS does not accept escaped in lowercase. Convert to uppercase 94 | FIND ALL OCCURRENCES OF REGEX '%..' IN lv_text RESULTS lt_result. 95 | LOOP AT lt_result ASSIGNING . 96 | TRANSLATE lv_text+-offset(-length) TO UPPER CASE. 97 | ENDLOOP. 98 | 99 | e_escaped = lv_text. 100 | 101 | ENDMETHOD. 102 | 103 | 104 | METHOD get_reason_by_status. 105 | *--------------------------------------------------------------------* 106 | * Company: RocketSteam 107 | * Author: Jordi Escoda, 26th March 2014 108 | * Given an HTTP status code returns the reason 109 | *--------------------------------------------------------------------* 110 | 111 | DATA: l_status TYPE c. 112 | 113 | CASE i_http_status. 114 | WHEN c_status_200_ok. 115 | e_reason = 'OK'. "#EC NOTEXT 116 | WHEN c_status_201_created. 117 | e_reason = 'Created'. "#EC NOTEXT 118 | WHEN c_status_204_no_content. 119 | e_reason = 'No content'. "#EC NOTEXT 120 | WHEN c_status_206_partial_content. 121 | e_reason = 'Partial content'. "#EC NOTEXT 122 | WHEN c_status_250_missingdoccreated. 123 | e_reason = 'Missing document(s) created'. "#EC NOTEXT 124 | WHEN c_status_307_temp_redirect. 125 | e_reason = 'Temporary Redirect'. "#EC NOTEXT 126 | WHEN c_status_400_bad_request. 127 | e_reason = 'Bad Request'. "#EC NOTEXT 128 | WHEN c_status_401_unauthorized. 129 | e_reason = 'Unauthorized'. "#EC NOTEXT 130 | WHEN c_status_403_forbidden. 131 | e_reason = 'Forbidden'. "#EC NOTEXT 132 | WHEN c_status_404_not_found. 133 | e_reason = 'Not Found'. "#EC NOTEXT 134 | WHEN c_status_405_meth_not_allowed. 135 | e_reason = 'Method not allowed'. "#EC NOTEXT 136 | WHEN c_status_406_not_acceptable. 137 | e_reason = 'Not acceptable'. "#EC NOTEXT 138 | WHEN c_status_409_conflict. 139 | e_reason = 'Conflict'. "#EC NOTEXT 140 | WHEN c_status_411_length_required. 141 | e_reason = 'Length Required'. "#EC NOTEXT 142 | WHEN c_status_412_precond_failed. 143 | e_reason = 'Precondition Failed'. "#EC NOTEXT 144 | WHEN c_status_416_reqrangenotsatisf. 145 | e_reason = 'Requested Range Not Satisfiable'. "#EC NOTEXT 146 | WHEN c_status_500_intnal_server_err. 147 | e_reason = 'Internal Server Error'. "#EC NOTEXT 148 | WHEN c_status_501_not_implemented. 149 | e_reason = 'Not implemented'. "#EC NOTEXT 150 | WHEN c_status_503_service_unavailab. 151 | e_reason = 'Service unavailable'. "#EC NOTEXT 152 | WHEN OTHERS. 153 | l_status = i_http_status. 154 | CONCATENATE 'HTTP Status' l_status INTO e_reason. "#EC NOTEXT 155 | ENDCASE. 156 | 157 | ENDMETHOD. 158 | 159 | 160 | METHOD unescape_url. 161 | *--------------------------------------------------------------------* 162 | * Company: RocketSteam 163 | * Author: Jordi Escoda, 14th April 2016 164 | *--------------------------------------------------------------------* 165 | 166 | CALL METHOD cl_http_utility=>if_http_utility~unescape_url 167 | EXPORTING 168 | escaped = i_escaped 169 | RECEIVING 170 | unescaped = e_unescaped. 171 | 172 | ENDMETHOD. 173 | ENDCLASS. 174 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_http.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_HTTP 7 | 1 8 | E 9 | RocketSteam. HTTP protocol constants 10 | 1 11 | X 12 | X 13 | X 14 | X 15 | S 16 | 17 | 18 | 19 | ZLNKECL_HTTP 20 | ESCAPE_URL 21 | E 22 | Escape URL in uppercase and without dots. 23 | 24 | 25 | ZLNKECL_HTTP 26 | GET_REASON_BY_STATUS 27 | E 28 | Given a HTTP status returns the reason 29 | 30 | 31 | ZLNKECL_HTTP 32 | UNESCAPE_URL 33 | E 34 | Unescape URL 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_log.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_LOG 7 | 1 8 | E 9 | RocketSteam. Log class 10 | 1 11 | X 12 | X 13 | X 14 | X 15 | S 16 | 17 | 18 | 19 | ZLNKECL_LOG 20 | ATTR_KEEP_DAYS 21 | E 22 | RocketSteam. Days to keep log 23 | 24 | 25 | ZLNKECL_LOG 26 | ATTR_LOG_CONT_SERV_REQUEST 27 | E 28 | Log Content server requests 29 | 30 | 31 | ZLNKECL_LOG 32 | ATTR_LOG_REQ_RESP_FROM_AWS 33 | E 34 | Log request and responses from AWS 35 | 36 | 37 | ZLNKECL_LOG 38 | ATTR_LOG_RESPONSE_FROM_AWS 39 | E 40 | Log response from AWS 41 | 42 | 43 | ZLNKECL_LOG 44 | CLASS_CONSTRUCTOR 45 | E 46 | CLASS_CONSTRUCTOR 47 | 48 | 49 | ZLNKECL_LOG 50 | C_LOG_EVT_AOBJ_ADD_BUCKET 51 | E 52 | RocketSteam. Log event 53 | 54 | 55 | ZLNKECL_LOG 56 | C_LOG_EVT_AOBJ_EDITION 57 | E 58 | RocketSteam. Log event 59 | 60 | 61 | ZLNKECL_LOG 62 | C_LOG_EVT_AOBJ_REMOVE_BUCKET 63 | E 64 | RocketSteam. Log event 65 | 66 | 67 | ZLNKECL_LOG 68 | C_LOG_EVT_BUCKET_CREATE 69 | E 70 | RocketSteam. Log event 71 | 72 | 73 | ZLNKECL_LOG 74 | C_LOG_EVT_BUCKET_DELETE 75 | E 76 | RocketSteam. Log event 77 | 78 | 79 | ZLNKECL_LOG 80 | C_LOG_EVT_BUCKET_ENCRYPT 81 | E 82 | RocketSteam. Log event 83 | 84 | 85 | ZLNKECL_LOG 86 | C_LOG_EVT_BUCKET_LIFECYCLE 87 | E 88 | RocketSteam. Log event 89 | 90 | 91 | ZLNKECL_LOG 92 | C_LOG_EVT_CONT_SERVER_CX 93 | E 94 | RocketSteam. Log event 95 | 96 | 97 | ZLNKECL_LOG 98 | C_LOG_EVT_CONT_SERVER_REQ 99 | E 100 | RocketSteam. Log event 101 | 102 | 103 | ZLNKECL_LOG 104 | C_LOG_EVT_REQ_TO_AWS 105 | E 106 | RocketSteam. Log event 107 | 108 | 109 | ZLNKECL_LOG 110 | C_LOG_EVT_RESP_FROM_AWS 111 | E 112 | RocketSteam. Log event 113 | 114 | 115 | ZLNKECL_LOG 116 | C_LOG_EVT_USER_CREATED 117 | E 118 | RocketSteam. Log event 119 | 120 | 121 | ZLNKECL_LOG 122 | C_LOG_EVT_USER_DELETED 123 | E 124 | RocketSteam. Log event 125 | 126 | 127 | ZLNKECL_LOG 128 | C_LOG_EVT_USER_EDITION 129 | E 130 | RocketSteam. Log event 131 | 132 | 133 | ZLNKECL_LOG 134 | C_LOG_MSGTYP_ABORT 135 | E 136 | RocketSteam. Log Message Type 137 | 138 | 139 | ZLNKECL_LOG 140 | C_LOG_MSGTYP_ERROR 141 | E 142 | RocketSteam. Log Message Type 143 | 144 | 145 | ZLNKECL_LOG 146 | C_LOG_MSGTYP_INFO 147 | E 148 | RocketSteam. Log Message Type 149 | 150 | 151 | ZLNKECL_LOG 152 | C_LOG_MSGTYP_SUCCESS 153 | E 154 | RocketSteam. Log Message Type 155 | 156 | 157 | ZLNKECL_LOG 158 | C_LOG_MSGTYP_WARNING 159 | E 160 | RocketSteam. Log Message Type 161 | 162 | 163 | 164 | 165 | 166 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_rfc_connections.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_RFC_CONNECTIONS 7 | 1 8 | E 9 | RocketSteam. SM59 tools 10 | 1 11 | X 12 | X 13 | X 14 | X 15 | S 16 | ZLNKEAWS_S3 17 | 18 | 19 | 20 | ZLNKECL_RFC_CONNECTIONS 21 | C_HTTPDEST_PREFIX 22 | E 23 | Character field, 8 characters long 24 | 25 | 26 | ZLNKECL_RFC_CONNECTIONS 27 | C_HTTPS_PORT 28 | E 29 | System ID 30 | 31 | 32 | ZLNKECL_RFC_CONNECTIONS 33 | C_HTTP_PORT 34 | E 35 | System ID 36 | 37 | 38 | ZLNKECL_RFC_CONNECTIONS 39 | C_LIC_SERVER_ENDPOINT 40 | E 41 | Name of Target Host 42 | 43 | 44 | ZLNKECL_RFC_CONNECTIONS 45 | C_LIC_SERVER_RFCDEST_SUFFIX 46 | E 47 | Logical Destination (Specified in Function Call) 48 | 49 | 50 | ZLNKECL_RFC_CONNECTIONS 51 | C_RFC_TYPE_HTTP_TO_EXT 52 | E 53 | Type of Entry in RFCDES 54 | 55 | 56 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_ssf.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_SSF 7 | 1 8 | E 9 | RocketSteam. Secure Store & Forward 10 | 1 11 | X 12 | X 13 | X 14 | X 15 | S 16 | ZLNKEAWS_S3 17 | 18 | 19 | 20 | ZLNKECL_SSF 21 | C_S4_SSF_APPLICATION 22 | E 23 | SSF Application 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_string_conversions.clas.abap: -------------------------------------------------------------------------------- 1 | class ZLNKECL_STRING_CONVERSIONS definition 2 | public 3 | final 4 | create private . 5 | 6 | *"* public components of class ZLNKECL_STRING_CONVERSIONS 7 | *"* do not include other source files here!!! 8 | public section. 9 | 10 | class-methods STRING_TO_XSTRING 11 | importing 12 | !INPUT type STRING 13 | exporting 14 | !OUTPUT type XSTRING . 15 | class-methods XSTRING_TO_STRING 16 | importing 17 | !INPUT type XSTRING 18 | exporting 19 | !OUTPUT type STRING . 20 | class-methods XSTRING_TO_XSTRING_TAB 21 | importing 22 | !I_XSTRING type XSTRING 23 | !I_LINE_LENGTH type I 24 | returning 25 | value(E_XSTRING_TABLE) type XSTRING_TABLE . 26 | protected section. 27 | *"* protected components of class ZLNKECL_STRING_CONVERSIONS 28 | *"* do not include other source files here!!! 29 | private section. 30 | *"* private components of class ZLNKECL_STRING_CONVERSIONS 31 | *"* do not include other source files here!!! 32 | ENDCLASS. 33 | 34 | 35 | 36 | CLASS ZLNKECL_STRING_CONVERSIONS IMPLEMENTATION. 37 | 38 | 39 | METHOD string_to_xstring. 40 | *--------------------------------------------------------------------* 41 | * Company: RocketSteam 42 | * Author: Jordi Escoda, 28th July 2014 43 | * Converts from string to xstring 44 | *--------------------------------------------------------------------* 45 | DATA: lr_conv_ce TYPE REF TO cl_abap_conv_out_ce. 46 | DATA: size TYPE i. "#EC NEEDED 47 | 48 | lr_conv_ce = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ). 49 | 50 | CALL METHOD lr_conv_ce->write 51 | EXPORTING 52 | data = input 53 | IMPORTING 54 | len = size. 55 | 56 | output = lr_conv_ce->get_buffer( ). 57 | 58 | ENDMETHOD. 59 | 60 | 61 | METHOD xstring_to_string. 62 | *--------------------------------------------------------------------* 63 | * Company: RocketSteam 64 | * Author: Jordi Escoda, 28th July 2014 65 | * Converts from xstring to string 66 | *--------------------------------------------------------------------* 67 | DATA: size TYPE i. "#EC NEEDED 68 | DATA: lr_conv_ci TYPE REF TO cl_abap_conv_in_ce. 69 | 70 | lr_conv_ci = cl_abap_conv_in_ce=>create( input = input ). 71 | 72 | CALL METHOD lr_conv_ci->read 73 | IMPORTING 74 | data = output 75 | len = size. 76 | 77 | ENDMETHOD. 78 | 79 | 80 | METHOD xstring_to_xstring_tab. 81 | *--------------------------------------------------------------------* 82 | * Company: RocketSteam 83 | * Author: Jordi Escoda, 28th Nov 2014 84 | * Converts from xstring to xstring table, with specified line length. 85 | *--------------------------------------------------------------------* 86 | 87 | DATA: l_length TYPE i. 88 | DATA: l_index_start TYPE i. 89 | DATA: l_xstr_tmp TYPE xstring. 90 | DATA: l_parts TYPE i. 91 | DATA: l_mod TYPE i. 92 | 93 | CHECK i_line_length > 0. 94 | 95 | l_length = XSTRLEN( i_xstring ). 96 | l_parts = l_length DIV i_line_length. 97 | l_mod = l_length MOD i_line_length. 98 | 99 | l_index_start = 0. 100 | DO l_parts TIMES. 101 | l_xstr_tmp = i_xstring+l_index_start(i_line_length). 102 | l_index_start = l_index_start + i_line_length. 103 | APPEND l_xstr_tmp TO e_xstring_table. 104 | ENDDO. 105 | IF l_mod > 0. 106 | l_xstr_tmp = i_xstring+l_index_start. 107 | APPEND l_xstr_tmp TO e_xstring_table. 108 | ENDIF. 109 | 110 | ENDMETHOD. 111 | ENDCLASS. 112 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_string_conversions.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_STRING_CONVERSIONS 7 | 1 8 | E 9 | RocketSteam. String conversions 10 | 1 11 | X 12 | X 13 | X 14 | X 15 | S 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_xml_utils.clas.abap: -------------------------------------------------------------------------------- 1 | class ZLNKECL_XML_UTILS definition 2 | public 3 | final 4 | create private . 5 | 6 | *"* public components of class ZLNKECL_XML_UTILS 7 | *"* do not include other source files here!!! 8 | public section. 9 | 10 | class-methods SHOW_XML_IN_DIALOG 11 | importing 12 | !I_XML type STRING . 13 | class-methods SHOW_XXML_IN_DIALOG 14 | importing 15 | !I_XXML type XSTRING . 16 | class-methods CONVERT_IXML_DOC_TO_XSTRING 17 | importing 18 | !I_IXML_DOCUMENT type ref to IF_IXML_DOCUMENT 19 | returning 20 | value(E_XML_XSTRING) type XSTRING . 21 | class-methods CONVERT_STRING_TO_IXMLDOC 22 | importing 23 | !I_XML_STRING type STRING 24 | returning 25 | value(E_IXMLDOC) type ref to IF_IXML_DOCUMENT . 26 | class-methods GET_NODE_VALUE 27 | importing 28 | !I_IXML_DOC type ref to IF_IXML_DOCUMENT 29 | !I_NODE_NAME type STRING 30 | returning 31 | value(E_NODE_VALUE) type STRING . 32 | class-methods GET_NODE_VALUES_FROM_XMLSTRING 33 | importing 34 | !I_XML_STRING type STRING 35 | !I_NODE_NAME type STRING 36 | returning 37 | value(E_NODE_VALUES) type STRING_TABLE . 38 | class-methods GET_NODE_VALUE_FROM_XMLSTRING 39 | importing 40 | !I_XML_STRING type STRING 41 | !I_NODE_NAME type STRING 42 | returning 43 | value(E_NODE_VALUE) type STRING . 44 | protected section. 45 | *"* protected components of class ZLNKECL_XML_UTILS 46 | *"* do not include other source files here!!! 47 | private section. 48 | *"* private components of class ZLNKECL_XML_UTILS 49 | *"* do not include other source files here!!! 50 | ENDCLASS. 51 | 52 | 53 | 54 | CLASS ZLNKECL_XML_UTILS IMPLEMENTATION. 55 | 56 | 57 | METHOD convert_ixml_doc_to_xstring. 58 | *-------------------------------------------------------------------* 59 | * Company: RocketSteam 60 | * Author: Jordi Escoda, 28th March 2014 61 | * Given an IXML document, converts it to xstring 62 | *--------------------------------------------------------------------* 63 | DATA: lr_ixml TYPE REF TO if_ixml, 64 | lr_ixml_stream_factory TYPE REF TO if_ixml_stream_factory, 65 | lr_ixml_ostream TYPE REF TO if_ixml_ostream, 66 | lr_ixml_renderer TYPE REF TO if_ixml_renderer. 67 | 68 | lr_ixml = cl_ixml=>create( ). 69 | 70 | lr_ixml_stream_factory = lr_ixml->create_stream_factory( ). 71 | 72 | lr_ixml_ostream = lr_ixml_stream_factory->create_ostream_xstring( 73 | e_xml_xstring ). 74 | 75 | lr_ixml_renderer = lr_ixml->create_renderer( 76 | document = i_ixml_document 77 | ostream = lr_ixml_ostream ). 78 | 79 | lr_ixml_renderer->set_normalizing( ). 80 | 81 | lr_ixml_renderer->render( ). 82 | 83 | ENDMETHOD. 84 | 85 | 86 | METHOD convert_string_to_ixmldoc. 87 | *-------------------------------------------------------------------* 88 | * Company: RocketSteam 89 | * Author: Jordi Escoda, 30th April 2014 90 | * Given an XML string, converts it to ixml document 91 | *--------------------------------------------------------------------* 92 | DATA lr_ixml TYPE REF TO if_ixml. 93 | DATA lr_streamfactory TYPE REF TO if_ixml_stream_factory. 94 | DATA lr_istream TYPE REF TO if_ixml_istream. 95 | DATA lr_ixmlparser TYPE REF TO if_ixml_parser. 96 | 97 | lr_ixml = cl_ixml=>create( ). 98 | e_ixmldoc = lr_ixml->create_document( ). 99 | lr_streamfactory = lr_ixml->create_stream_factory( ). 100 | lr_istream = lr_streamfactory->create_istream_string( i_xml_string ). 101 | lr_ixmlparser = lr_ixml->create_parser( stream_factory = lr_streamfactory 102 | istream = lr_istream 103 | document = e_ixmldoc ). 104 | lr_ixmlparser->parse( ). 105 | 106 | ENDMETHOD. 107 | 108 | 109 | METHOD get_node_value. 110 | *-------------------------------------------------------------------* 111 | * Company: RocketSteam 112 | * Author: Jordi Escoda, 30th April 2014 113 | * Given an IXML document and a node name, returns the node value 114 | *--------------------------------------------------------------------* 115 | DATA: lr_node_filter TYPE REF TO if_ixml_node_filter. 116 | DATA: lr_node_iterator TYPE REF TO if_ixml_node_iterator. 117 | DATA: lr_node TYPE REF TO if_ixml_node. 118 | 119 | lr_node_filter = i_ixml_doc->create_filter_name( i_node_name ). 120 | 121 | lr_node_iterator = i_ixml_doc->create_iterator_filtered( lr_node_filter ). 122 | 123 | lr_node ?= lr_node_iterator->get_next( ). 124 | IF lr_node IS NOT INITIAL. 125 | e_node_value = lr_node->get_value( ). 126 | ENDIF. 127 | 128 | ENDMETHOD. 129 | 130 | 131 | METHOD get_node_values_from_xmlstring. 132 | *-------------------------------------------------------------------* 133 | * Company: RocketSteam 134 | * Author: Jordi Escoda, 30th April 2014 135 | * Given an XML string and a node name, returns the node value 136 | *--------------------------------------------------------------------* 137 | DATA: lr_ixml_document TYPE REF TO if_ixml_document. 138 | DATA: lr_node_filter TYPE REF TO if_ixml_node_filter. 139 | DATA: lr_node_iterator TYPE REF TO if_ixml_node_iterator. 140 | DATA: lr_node TYPE REF TO if_ixml_node. 141 | DATA: l_node_value TYPE string. 142 | 143 | lr_ixml_document = convert_string_to_ixmldoc( i_xml_string ). 144 | 145 | lr_node_filter = lr_ixml_document->create_filter_name( i_node_name ). 146 | 147 | lr_node_iterator = lr_ixml_document->create_iterator_filtered( lr_node_filter ). 148 | 149 | lr_node ?= lr_node_iterator->get_next( ). 150 | WHILE lr_node IS NOT INITIAL. 151 | l_node_value = lr_node->get_value( ). 152 | APPEND l_node_value TO e_node_values. 153 | lr_node ?= lr_node_iterator->get_next( ). 154 | ENDWHILE. 155 | 156 | ENDMETHOD. 157 | 158 | 159 | METHOD GET_NODE_VALUE_FROM_XMLSTRING. 160 | *-------------------------------------------------------------------* 161 | * Company: RocketSteam 162 | * Author: Jordi Escoda, 30th April 2014 163 | * Given an XML string and a node name, returns the node value 164 | *--------------------------------------------------------------------* 165 | DATA: lr_ixml_document TYPE REF TO if_ixml_document. 166 | 167 | lr_ixml_document = convert_string_to_ixmldoc( i_xml_string ). 168 | 169 | e_node_value = get_node_value( i_ixml_doc = lr_ixml_document 170 | i_node_name = i_node_name ). 171 | 172 | ENDMETHOD. 173 | 174 | 175 | METHOD show_xml_in_dialog. 176 | *-------------------------------------------------------------------* 177 | * Company: RocketSteam 178 | * Author: Jordi Escoda, 28th March 2014 179 | * Given an XML, shows it in a dialog. 180 | *--------------------------------------------------------------------* 181 | DATA: lr_xml_document TYPE REF TO cl_xml_document. 182 | 183 | CREATE OBJECT lr_xml_document. 184 | CALL METHOD lr_xml_document->parse_string 185 | EXPORTING 186 | stream = i_xml. 187 | 188 | CALL METHOD lr_xml_document->display. 189 | 190 | ENDMETHOD. 191 | 192 | 193 | METHOD show_xxml_in_dialog. 194 | *-------------------------------------------------------------------* 195 | * Company: RocketSteam 196 | * Author: Jordi Escoda, 11th April 2014 197 | * Given an XXML, shows it in a dialog. 198 | *--------------------------------------------------------------------* 199 | DATA: lr_xml_document TYPE REF TO cl_xml_document. 200 | 201 | CREATE OBJECT lr_xml_document. 202 | CALL METHOD lr_xml_document->parse_xstring 203 | EXPORTING 204 | stream = i_xxml. 205 | 206 | CALL METHOD lr_xml_document->display( ). 207 | 208 | ENDMETHOD. 209 | ENDCLASS. 210 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecl_xml_utils.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECL_XML_UTILS 7 | 1 8 | E 9 | RocketSteam. XML Utilities 10 | 1 11 | X 12 | X 13 | X 14 | X 15 | S 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeclient_side_encryption_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECLIENT_SIDE_ENCRYPTION_DE 7 | E 8 | FLAG 9 | 14 10 | 10 11 | 15 12 | 20 13 | RocketSteam. Client side encryption 14 | Client Encrypt 15 | Cl.Encrypt 16 | Clnt.Encrypt 17 | Client Encrypt 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecrdat.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECRDAT 7 | E 8 | DATUM 9 | 10 10 | 10 11 | 10 12 | 10 13 | RocketSteam. Date on which the object was created 14 | Created on 15 | Created on 16 | Created on 17 | Created on 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecrtim.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECRTIM 7 | E 8 | UZEIT 9 | 10 10 | 10 11 | 10 12 | 10 13 | RocketSteam. Time at which the object was created 14 | Created at 15 | Created at 16 | Created at 17 | Created at 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecrusr.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECRUSR 7 | E 8 | UNAME 9 | 12 10 | 10 11 | 15 12 | 20 13 | RocketSteam. User who created the object 14 | Created by 15 | Created by 16 | Created by 17 | Created by 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecx_aws_s3.clas.abap: -------------------------------------------------------------------------------- 1 | class ZLNKECX_AWS_S3 definition 2 | public 3 | inheriting from CX_STATIC_CHECK 4 | final 5 | create public . 6 | 7 | *"* public components of class ZLNKECX_AWS_S3 8 | *"* do not include other source files here!!! 9 | public section. 10 | 11 | interfaces IF_T100_MESSAGE . 12 | 13 | constants C_MSG_CLASS type MSGID value 'ZLNKEAWS_S3'. "#EC NOTEXT 14 | data STRING type STRING . 15 | 16 | methods CONSTRUCTOR 17 | importing 18 | !TEXTID like IF_T100_MESSAGE=>T100KEY optional 19 | !PREVIOUS like PREVIOUS optional 20 | !STRING type STRING optional . 21 | class-methods GET_INSTANCE_SYST_T100 22 | returning 23 | value(E_ZLNKECX_AWS_S3) type ref to ZLNKECX_AWS_S3 . 24 | methods GET_TEXT_AS_STRING 25 | returning 26 | value(E_TEXT) type STRING . 27 | class-methods RAISE_FROM_SY_MSG 28 | importing 29 | !PREVIOUS like PREVIOUS optional 30 | raising 31 | ZLNKECX_AWS_S3 . 32 | class-methods RAISE_FROM_FM_EXCEPTION 33 | importing 34 | !I_FUNCNAME type FUNCNAME 35 | !I_SY_SUBRC type SY-SUBRC optional 36 | raising 37 | ZLNKECX_AWS_S3 . 38 | class-methods RAISE_GIVING_STRING 39 | importing 40 | !I_STRING type STRING 41 | raising 42 | ZLNKECX_AWS_S3 . 43 | 44 | methods IF_MESSAGE~GET_TEXT 45 | redefinition . 46 | protected section. 47 | *"* protected components of class ZLNKECX_AWS_S3 48 | *"* do not include other source files here!!! 49 | private section. 50 | *"* private components of class ZLNKECX_AWS_S3 51 | *"* do not include other source files here!!! 52 | ENDCLASS. 53 | 54 | 55 | 56 | CLASS ZLNKECX_AWS_S3 IMPLEMENTATION. 57 | 58 | 59 | method CONSTRUCTOR ##ADT_SUPPRESS_GENERATION. 60 | CALL METHOD SUPER->CONSTRUCTOR 61 | EXPORTING 62 | PREVIOUS = PREVIOUS 63 | . 64 | me->STRING = STRING . 65 | clear me->textid. 66 | if textid is initial and ME->IF_T100_MESSAGE~T100KEY IS INITIAL. 67 | IF_T100_MESSAGE~T100KEY = IF_T100_MESSAGE=>DEFAULT_TEXTID. 68 | else. 69 | IF_T100_MESSAGE~T100KEY = TEXTID. 70 | endif. 71 | endmethod. 72 | 73 | 74 | METHOD GET_INSTANCE_SYST_T100. 75 | *--------------------------------------------------------------------* 76 | * Company: RocketSteam 77 | * Author: Jordi Escoda, 15th April 2014 78 | * Returns an instance of this class with populated data from sy 79 | *--------------------------------------------------------------------* 80 | CREATE OBJECT e_ZLNKEcx_aws_s3. 81 | 82 | e_ZLNKEcx_aws_s3->if_t100_message~t100key-msgid = sy-msgid. 83 | e_ZLNKEcx_aws_s3->if_t100_message~t100key-msgno = sy-msgno. 84 | e_ZLNKEcx_aws_s3->if_t100_message~t100key-attr1 = sy-msgv1. 85 | e_ZLNKEcx_aws_s3->if_t100_message~t100key-attr2 = sy-msgv2. 86 | e_ZLNKEcx_aws_s3->if_t100_message~t100key-attr3 = sy-msgv3. 87 | e_ZLNKEcx_aws_s3->if_t100_message~t100key-attr4 = sy-msgv4. 88 | 89 | ENDMETHOD. 90 | 91 | 92 | METHOD get_text_as_string. 93 | *--------------------------------------------------------------------* 94 | * Company: RocketSteam 95 | * Author: Jordi Escoda, 15th April 2014 96 | * Returns the text in long form (string) 97 | *--------------------------------------------------------------------* 98 | DATA: l_text TYPE t100-text. 99 | 100 | IF string IS NOT INITIAL. 101 | e_text = string. 102 | ELSE. 103 | SELECT SINGLE text 104 | INTO l_text 105 | FROM t100 106 | WHERE sprsl = sy-langu 107 | AND arbgb = if_t100_message~t100key-msgid 108 | AND msgnr = if_t100_message~t100key-msgno. 109 | 110 | IF sy-subrc = 0. 111 | e_text = l_text. 112 | REPLACE '&' WITH if_t100_message~t100key-attr1 INTO e_text. 113 | REPLACE '&' WITH if_t100_message~t100key-attr2 INTO e_text. 114 | REPLACE '&' WITH if_t100_message~t100key-attr3 INTO e_text. 115 | REPLACE '&' WITH if_t100_message~t100key-attr4 INTO e_text. 116 | ENDIF. 117 | ENDIF. 118 | 119 | ENDMETHOD. 120 | 121 | 122 | METHOD if_message~get_text. 123 | *--------------------------------------------------------------------* 124 | * Company: RocketSteam 125 | * Author: Jordi Escoda, 8th March 2016 126 | * Returns the text 127 | *--------------------------------------------------------------------* 128 | IF string IS INITIAL. 129 | CALL METHOD super->if_message~get_text 130 | RECEIVING 131 | result = result. 132 | REPLACE ALL OCCURRENCES OF '&' IN result WITH space. 133 | CONDENSE result. 134 | ELSE. 135 | result = string. 136 | ENDIF. 137 | 138 | ENDMETHOD. 139 | 140 | 141 | METHOD raise_from_fm_exception. 142 | *--------------------------------------------------------------------* 143 | * Company: RocketSteam 144 | * Author: Jordi Escoda, 7th March 2016 145 | * Raises exception from FM Exception 146 | *--------------------------------------------------------------------* 147 | DATA: lt_dokumentation TYPE STANDARD TABLE OF funct. 148 | DATA: lt_exception_list TYPE STANDARD TABLE OF rsexc. 149 | DATA: lt_export_parameter TYPE STANDARD TABLE OF rsexp. 150 | DATA: lt_import_parameter TYPE STANDARD TABLE OF rsimp. 151 | DATA: lt_tables_parameter TYPE STANDARD TABLE OF rstbl. 152 | DATA: lv_exception TYPE char30. 153 | DATA: lv_subrc TYPE i. 154 | DATA: lv_msg TYPE string. "#EC NEEDED 155 | 156 | IF i_sy_subrc IS INITIAL. 157 | lv_subrc = sy-subrc. 158 | ELSE. 159 | lv_subrc = i_sy_subrc. 160 | ENDIF. 161 | 162 | CALL FUNCTION 'FUNCTION_IMPORT_DOKU' 163 | EXPORTING 164 | funcname = i_funcname 165 | language = sy-langu 166 | TABLES 167 | dokumentation = lt_dokumentation 168 | exception_list = lt_exception_list 169 | export_parameter = lt_export_parameter 170 | import_parameter = lt_import_parameter 171 | tables_parameter = lt_tables_parameter 172 | EXCEPTIONS 173 | error_message = 1 174 | function_not_found = 2 175 | invalid_name = 3 176 | OTHERS = 4. 177 | 178 | IF sy-subrc = 0. 179 | READ TABLE lt_exception_list INTO lv_exception INDEX lv_subrc. 180 | IF sy-subrc = 0. 181 | MESSAGE e398(00) WITH 'Function Module' 182 | i_funcname 183 | 'raised exception' 184 | lv_exception INTO lv_msg. 185 | raise_from_sy_msg( ). 186 | ENDIF. 187 | ELSE. 188 | MESSAGE e398(00) WITH 'Function Module' 189 | 'FUNCTION_IMPORT_DOKU' 190 | 'raised exception' 191 | sy-subrc INTO lv_msg. 192 | raise_from_sy_msg( ). 193 | ENDIF. 194 | 195 | ENDMETHOD. 196 | 197 | 198 | METHOD raise_from_sy_msg. 199 | *--------------------------------------------------------------------* 200 | * Company: RocketSteam 201 | * Author: Jordi Escoda, 7th March 2016 202 | * Raises exception from SY-MSG 203 | *--------------------------------------------------------------------* 204 | DATA: ls_t100key LIKE if_t100_message=>t100key. 205 | 206 | ls_t100key-msgid = sy-msgid. 207 | ls_t100key-msgno = sy-msgno. 208 | ls_t100key-attr1 = sy-msgv1. 209 | ls_t100key-attr2 = sy-msgv2. 210 | ls_t100key-attr3 = sy-msgv3. 211 | ls_t100key-attr4 = sy-msgv4. 212 | 213 | RAISE EXCEPTION TYPE ZLNKECX_AWS_S3 214 | EXPORTING 215 | textid = ls_t100key 216 | previous = previous. 217 | 218 | ENDMETHOD. 219 | 220 | 221 | METHOD raise_giving_string. 222 | 223 | RAISE EXCEPTION TYPE ZLNKEcx_aws_s3 224 | EXPORTING 225 | string = i_string. 226 | 227 | ENDMETHOD. 228 | ENDCLASS. 229 | -------------------------------------------------------------------------------- /s3_sdk/zlnkecx_aws_s3.clas.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKECX_AWS_S3 7 | 1 8 | E 9 | RocketSteam. Exception class 10 | 40 11 | 2 12 | 1 13 | X 14 | X 15 | X 16 | X 17 | S 18 | ZLNKEAWS_S3 19 | 20 | 21 | 22 | ZLNKECX_AWS_S3 23 | CONSTRUCTOR 24 | E 25 | CONSTRUCTOR 26 | 27 | 28 | ZLNKECX_AWS_S3 29 | C_MSG_CLASS 30 | E 31 | Message identification 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeendpoint_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEENDPOINT_DE 7 | E 8 | ZLNKEENDPOINT_DO 9 | 08 10 | 08 11 | 08 12 | 08 13 | RocketSteam. Endpoint 14 | Endpoint 15 | Endpoint 16 | Endpoint 17 | Endpoint 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeendpoint_do.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEENDPOINT_DO 7 | E 8 | CHAR 9 | 000064 10 | 000064 11 | X 12 | Rocket Steam. Endpoint 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeguid.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEGUID 7 | E 8 | SYSUUID 9 | 04 10 | 04 11 | 04 12 | 04 13 | RocketSteam. GUID 14 | GUID 15 | GUID 16 | GUID 17 | GUID 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeif_version.intf.abap: -------------------------------------------------------------------------------- 1 | *"* components of interface ZLNKEIF_VERSION 2 | interface ZLNKEIF_VERSION 3 | public . 4 | 5 | 6 | constants C_ADDON_VERSION type STRING value 'V1.3.1'. "#EC NOTEXT 7 | constants C_ADDON_BUILD type STRING value '20171007_1'. "#EC NOTEXT 8 | constants C_ADDON_VENDOR type STRING value 'http://www.rocket-steam.com'. "#EC NOTEXT 9 | endinterface. 10 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeif_version.intf.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEIF_VERSION 7 | 1 8 | E 9 | RocketSteam. Version 10 | 2 11 | 1 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /s3_sdk/zlnkekey_size_st.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEKEY_SIZE_ST 7 | E 8 | INTTAB 9 | RocketSteam. Key / Size structure 10 | 1 11 | 12 | 13 | 14 | ZLNKEKEY_SIZE_ST 15 | XKEY 16 | 0001 17 | TEXT1024 18 | 0 19 | E 20 | 21 | 22 | ZLNKEKEY_SIZE_ST 23 | XSIZE 24 | 0002 25 | INT4 26 | 0 27 | E 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /s3_sdk/zlnkekey_size_tt.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEKEY_SIZE_TT 7 | E 8 | ZLNKEKEY_SIZE_ST 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | RocketSteam. Table of key size 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /s3_sdk/zlnkelog.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKELOG 7 | E 8 | TRANSP 9 | RocketSteam. Log table 10 | L 11 | 1 12 | 13 | 14 | ZLNKELOG 15 | A 16 | 2 17 | APPL1 18 | N 19 | C 20 | 21 | 22 | 23 | ZLNKELOG 24 | GUID 25 | 0001 26 | X 27 | ZLNKEGUID 28 | 0 29 | X 30 | E 31 | 32 | 33 | ZLNKELOG 34 | TIMESTAMP 35 | 0002 36 | TIMESTAMPL 37 | 0 38 | E 39 | 40 | 41 | ZLNKELOG 42 | LOG_EVENT 43 | 0003 44 | ZLNKELOG_EVENT_DE 45 | 0 46 | X 47 | F 48 | E 49 | 50 | 51 | ZLNKELOG 52 | LOG_MSGTYP 53 | 0004 54 | ZLNKELOG_MSGTYP_DE 55 | 0 56 | X 57 | F 58 | E 59 | 60 | 61 | ZLNKELOG 62 | EVENT_USER 63 | 0005 64 | UNAME 65 | 0 66 | E 67 | 68 | 69 | ZLNKELOG 70 | RAWDATA 71 | 0006 72 | RSRAWSTRING 73 | 0 74 | E 75 | 76 | 77 | 78 | 79 | 80 | -------------------------------------------------------------------------------- /s3_sdk/zlnkelog_cfg.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKELOG_CFG 7 | E 8 | TRANSP 9 | RocketSteam. Log configuration 10 | X 11 | C 12 | 1 13 | 14 | 15 | ZLNKELOG_CFG 16 | A 17 | 0 18 | APPL0 19 | X 20 | X 21 | C 22 | 23 | 24 | 25 | ZLNKELOG_CFG 26 | DUMMYID 27 | 0001 28 | X 29 | FLAG 30 | 0 31 | X 32 | X 33 | F 34 | E 35 | 36 | 37 | ZLNKELOG_CFG 38 | KEEP_DAYS 39 | 0002 40 | ZLNKELOG_KEEP_DAYS_DE 41 | 0 42 | E 43 | 44 | 45 | ZLNKELOG_CFG 46 | LOG_XML_RESP_AWS 47 | 0003 48 | FLAG 49 | 0 50 | X 51 | F 52 | E 53 | 54 | 55 | ZLNKELOG_CFG 56 | LOG_REQ_RESP_AWS 57 | 0004 58 | FLAG 59 | 0 60 | X 61 | F 62 | E 63 | 64 | 65 | ZLNKELOG_CFG 66 | LOG_CONTSERV_REQ 67 | 0005 68 | FLAG 69 | 0 70 | X 71 | F 72 | E 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /s3_sdk/zlnkelog_event_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKELOG_EVENT_DE 7 | E 8 | ZLNKELOG_EVENT_DO 9 | 09 10 | 10 11 | 15 12 | 20 13 | RocketSteam. Log event 14 | Log Event 15 | LogEvt. 16 | Log Event 17 | Log Event 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkelog_event_do.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKELOG_EVENT_DO 7 | E 8 | CHAR 9 | 000001 10 | 000001 11 | X 12 | RocketSteam. Log Event 13 | 14 | 15 | 16 | ZLNKELOG_EVENT_DO 17 | 0001 18 | E 19 | A 20 | Content Server request 21 | 22 | 23 | ZLNKELOG_EVENT_DO 24 | 0002 25 | E 26 | B 27 | Request to AWS 28 | 29 | 30 | ZLNKELOG_EVENT_DO 31 | 0003 32 | E 33 | C 34 | Response from AWS 35 | 36 | 37 | ZLNKELOG_EVENT_DO 38 | 0004 39 | E 40 | D 41 | Bucket creation 42 | 43 | 44 | ZLNKELOG_EVENT_DO 45 | 0005 46 | E 47 | E 48 | Bucket deletion 49 | 50 | 51 | ZLNKELOG_EVENT_DO 52 | 0006 53 | E 54 | F 55 | Bucket Lifecycle 56 | 57 | 58 | ZLNKELOG_EVENT_DO 59 | 0007 60 | E 61 | G 62 | User created 63 | 64 | 65 | ZLNKELOG_EVENT_DO 66 | 0008 67 | E 68 | H 69 | User edition 70 | 71 | 72 | ZLNKELOG_EVENT_DO 73 | 0009 74 | E 75 | I 76 | User deleted 77 | 78 | 79 | ZLNKELOG_EVENT_DO 80 | 0010 81 | E 82 | J 83 | Bucket Encrypt edition 84 | 85 | 86 | ZLNKELOG_EVENT_DO 87 | 0011 88 | E 89 | K 90 | Archive Object add bucket 91 | 92 | 93 | ZLNKELOG_EVENT_DO 94 | 0012 95 | E 96 | L 97 | Archive Object remove bucket 98 | 99 | 100 | ZLNKELOG_EVENT_DO 101 | 0013 102 | E 103 | M 104 | Archive Object edition 105 | 106 | 107 | ZLNKELOG_EVENT_DO 108 | 0014 109 | E 110 | N 111 | Content Server exception 112 | 113 | 114 | 115 | 116 | 117 | -------------------------------------------------------------------------------- /s3_sdk/zlnkelog_keep_days_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKELOG_KEEP_DAYS_DE 7 | E 8 | INT4 9 | 13 10 | 10 11 | 15 12 | 20 13 | RocketSteam. Days to keep log 14 | Log Keep Days 15 | LogKeepD. 16 | Log Keep Days 17 | Log Keep Days 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkelog_msgtyp_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKELOG_MSGTYP_DE 7 | E 8 | ZLNKELOG_MSGTYP_DO 9 | 16 10 | 10 11 | 15 12 | 20 13 | RocketSteam. Log Message Type 14 | Log Message Type 15 | LogMsgTyp 16 | Log Msg Type 17 | Log Message Type 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkelog_msgtyp_do.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKELOG_MSGTYP_DO 7 | E 8 | CHAR 9 | 000001 10 | 000001 11 | X 12 | RocketSteam. Log Message Type 13 | 14 | 15 | 16 | ZLNKELOG_MSGTYP_DO 17 | 0001 18 | E 19 | A 20 | Abort 21 | 22 | 23 | ZLNKELOG_MSGTYP_DO 24 | 0002 25 | E 26 | E 27 | Error 28 | 29 | 30 | ZLNKELOG_MSGTYP_DO 31 | 0003 32 | E 33 | I 34 | Info 35 | 36 | 37 | ZLNKELOG_MSGTYP_DO 38 | 0004 39 | E 40 | S 41 | Success 42 | 43 | 44 | ZLNKELOG_MSGTYP_DO 45 | 0005 46 | E 47 | W 48 | Warning 49 | 50 | 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /s3_sdk/zlnkempart_upld.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEMPART_UPLD 7 | E 8 | TRANSP 9 | RocketSteam. Multipart uploads 10 | L 11 | 1 12 | 13 | 14 | ZLNKEMPART_UPLD 15 | A 16 | 2 17 | APPL1 18 | N 19 | C 20 | 21 | 22 | 23 | ZLNKEMPART_UPLD 24 | GUID 25 | 0001 26 | X 27 | ZLNKEGUID 28 | 0 29 | X 30 | E 31 | 32 | 33 | ZLNKEMPART_UPLD 34 | BUCKET 35 | 0002 36 | ZLNKEBUCKET_DE 37 | 0 38 | E 39 | 40 | 41 | ZLNKEMPART_UPLD 42 | OBJECT_NAME 43 | 0003 44 | TEXT255 45 | 0 46 | E 47 | 48 | 49 | ZLNKEMPART_UPLD 50 | UPLOAD_ID 51 | 0004 52 | TEXT255 53 | 0 54 | E 55 | 56 | 57 | ZLNKEMPART_UPLD 58 | TIMESTAMP 59 | 0005 60 | TIMESTAMPL 61 | 0 62 | E 63 | 64 | 65 | ZLNKEMPART_UPLD 66 | STATE 67 | 0006 68 | ZLNKEMPART_UPLD_STATE_DE 69 | 0 70 | X 71 | F 72 | E 73 | 74 | 75 | 76 | 77 | 78 | -------------------------------------------------------------------------------- /s3_sdk/zlnkempart_upld_state_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEMPART_UPLD_STATE_DE 7 | E 8 | ZLNKEMPART_UPLD_STATE_DO 9 | 22 10 | 10 11 | 15 12 | 22 13 | RocketSteam. Multipart upload state 14 | Multipart Upload State 15 | MpartState 16 | Multipart State 17 | Multipart Upload State 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkempart_upld_state_do.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEMPART_UPLD_STATE_DO 7 | E 8 | CHAR 9 | 000001 10 | 000001 11 | X 12 | RocketSteam. Multipart upload state 13 | 14 | 15 | 16 | ZLNKEMPART_UPLD_STATE_DO 17 | 0001 18 | E 19 | P 20 | In progress 21 | 22 | 23 | ZLNKEMPART_UPLD_STATE_DO 24 | 0002 25 | E 26 | S 27 | Completed successfully 28 | 29 | 30 | ZLNKEMPART_UPLD_STATE_DO 31 | 0003 32 | E 33 | E 34 | Completed with errors 35 | 36 | 37 | ZLNKEMPART_UPLD_STATE_DO 38 | 0004 39 | E 40 | A 41 | Aborted 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /s3_sdk/zlnkempart_upload_st.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEMPART_UPLOAD_ST 7 | E 8 | INTTAB 9 | RocketSteam. Multipart Upload Structure 10 | 1 11 | 12 | 13 | 14 | ZLNKEMPART_UPLOAD_ST 15 | PART_NUMBER 16 | 0001 17 | INT4 18 | 0 19 | E 20 | 21 | 22 | ZLNKEMPART_UPLOAD_ST 23 | ETAG 24 | 0002 25 | TEXT255 26 | 0 27 | E 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /s3_sdk/zlnkempart_upload_tt.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEMPART_UPLOAD_TT 7 | E 8 | ZLNKEMPART_UPLOAD_ST 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | RocketSteam. Multipart upload table type 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeno_prefix_flag_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKENO_PREFIX_FLAG_DE 7 | E 8 | CHAR1 9 | 09 10 | 10 11 | 15 12 | 20 13 | RocketSteam. No prefix flag 14 | No Prefix 15 | NoPrefix 16 | No Prefix 17 | No Prefix 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeregion.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEREGION 7 | E 8 | TRANSP 9 | Rocket Steam. AWS S3 Regions 10 | X 11 | C 12 | 1 13 | 14 | 15 | ZLNKEREGION 16 | A 17 | 0 18 | APPL2 19 | N 20 | C 21 | 22 | 23 | 24 | ZLNKEREGION 25 | REGION 26 | 0001 27 | X 28 | ZLNKEREGION_DE 29 | 0 30 | X 31 | E 32 | 33 | 34 | ZLNKEREGION 35 | REGION_NAME 36 | 0002 37 | TEXT50 38 | 0 39 | E 40 | 41 | 42 | ZLNKEREGION 43 | ENDPOINT 44 | 0003 45 | ZLNKEENDPOINT_DE 46 | 0 47 | E 48 | 49 | 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeregion_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEREGION_DE 7 | E 8 | ZLNKEREGION_DO 9 | 06 10 | 06 11 | 06 12 | 06 13 | RocketSteam. Region. 14 | Region 15 | Region 16 | Region 17 | Region 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeregion_do.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEREGION_DO 7 | E 8 | CHAR 9 | 000050 10 | 000050 11 | X 12 | ZLNKEREGION 13 | Rocket Steam. Region 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /s3_sdk/zlnkers3_log_viewer.prog.abap: -------------------------------------------------------------------------------- 1 | *&---------------------------------------------------------------------* 2 | *& Report ZLNKERS3_LOG_VIEWER 3 | *& 4 | *&---------------------------------------------------------------------* 5 | *& Company: RocketSteam 6 | *& Author: Jordi Escoda, 14th April 2014 7 | *& Log viewer 8 | *&---------------------------------------------------------------------* 9 | REPORT zlnkers3_log_viewer. 10 | 11 | *--------------------------------------------------------------------* 12 | * Types. 13 | *--------------------------------------------------------------------* 14 | TYPE-POOLS: icon. 15 | 16 | *--------------------------------------------------------------------* 17 | * Global data 18 | *--------------------------------------------------------------------* 19 | DATA: g_date TYPE datum. 20 | DATA: g_time TYPE uzeit. 21 | DATA: g_log_event TYPE zlnkelog-log_event. 22 | 23 | *--------------------------------------------------------------------* 24 | * Selection screen 25 | *--------------------------------------------------------------------* 26 | SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. 27 | SELECT-OPTIONS: so_date FOR g_date NO-EXTENSION. 28 | SELECT-OPTIONS: so_time FOR g_time NO-EXTENSION. 29 | SELECT-OPTIONS: so_evnt FOR g_log_event. 30 | SELECTION-SCREEN END OF BLOCK b1. 31 | *----------------------------------------------------------------------* 32 | * CLASS lcl_data_select DEFINITION 33 | *----------------------------------------------------------------------* 34 | * 35 | *----------------------------------------------------------------------* 36 | CLASS lcl_data_select DEFINITION FINAL. 37 | PUBLIC SECTION. 38 | TYPES: typ_range_log_event TYPE RANGE OF zlnkelog-log_event. 39 | 40 | DATA: attr_t_log TYPE STANDARD TABLE OF zlnkelog. 41 | 42 | METHODS: 43 | select_log IMPORTING i_date_from TYPE datum 44 | i_time_from TYPE uzeit 45 | i_date_to TYPE datum 46 | i_time_to TYPE uzeit 47 | i_log_event TYPE typ_range_log_event. 48 | 49 | ENDCLASS. "lcl_data_select DEFINITION 50 | 51 | *----------------------------------------------------------------------* 52 | * CLASS lcl_salv DEFINITION 53 | *----------------------------------------------------------------------* 54 | * 55 | *----------------------------------------------------------------------* 56 | CLASS lcl_salv DEFINITION FINAL. 57 | PUBLIC SECTION. 58 | TYPES: BEGIN OF typ_alv, 59 | icon TYPE iconname, 60 | log_msgtyp TYPE zlnkelog-log_msgtyp, 61 | log_event TYPE zlnkelog-log_event, 62 | log_event_txt TYPE dd07v-ddtext, 63 | timestamp TYPE zlnkelog-timestamp, 64 | guid TYPE zlnkelog-guid, 65 | event_user TYPE zlnkelog-event_user, 66 | END OF typ_alv. 67 | 68 | CLASS-DATA: 69 | lr_attr_salv_table TYPE REF TO cl_salv_table, 70 | lt_attr_alv TYPE STANDARD TABLE OF typ_alv. 71 | CLASS-METHODS: 72 | alv_build IMPORTING i_r_data_select 73 | TYPE REF TO lcl_data_select, 74 | show_xml IMPORTING i_row TYPE i. 75 | 76 | PRIVATE SECTION. 77 | CLASS-DATA: 78 | attr_r_data_select TYPE REF TO lcl_data_select. 79 | CLASS-METHODS: 80 | fill_table, 81 | alv_set_columns, 82 | alv_set_functions, 83 | alv_set_events. 84 | 85 | ENDCLASS. "lcl_alv DEFINITION 86 | 87 | 88 | *----------------------------------------------------------------------* 89 | * CLASS lcl_salv_table_handle_events DEFINITION 90 | *----------------------------------------------------------------------* 91 | * 92 | *----------------------------------------------------------------------* 93 | CLASS lcl_salv_table_handle_events DEFINITION FINAL. 94 | 95 | PUBLIC SECTION. 96 | METHODS: 97 | on_double_click FOR EVENT double_click OF cl_salv_events_table 98 | IMPORTING row. 99 | ENDCLASS. "lcl_salv_table_handle_events DEFINITION 100 | 101 | 102 | *----------------------------------------------------------------------* 103 | * CLASS lcl_data_select IMPLEMENTATION 104 | *----------------------------------------------------------------------* 105 | * 106 | *----------------------------------------------------------------------* 107 | CLASS lcl_data_select IMPLEMENTATION. 108 | 109 | *--------------------------------------------------------------------* 110 | * Data select to ZLNKELOG 111 | *--------------------------------------------------------------------* 112 | METHOD select_log. 113 | DATA: l_timestamp_c TYPE char21. 114 | DATA: l_timestamp_from TYPE timestamp, 115 | l_timestamp_to TYPE timestamp. 116 | 117 | l_timestamp_c(8) = i_date_from. 118 | l_timestamp_c+8(6) = i_time_from. 119 | l_timestamp_from = l_timestamp_c. 120 | l_timestamp_c(8) = i_date_to. 121 | l_timestamp_c+8(6) = i_time_to. 122 | l_timestamp_to = l_timestamp_c. 123 | 124 | SELECT * "#EC CI_NOFIELD 125 | INTO CORRESPONDING FIELDS OF TABLE attr_t_log 126 | FROM zlnkelog 127 | WHERE timestamp >= l_timestamp_from 128 | AND timestamp <= l_timestamp_to 129 | AND log_event IN i_log_event 130 | ORDER BY timestamp. 131 | 132 | ENDMETHOD. "select_log 133 | 134 | ENDCLASS. "lcl_data_select IMPLEMENTATION 135 | 136 | *----------------------------------------------------------------------* 137 | * CLASS lcl_salv IMPLEMENTATION 138 | *----------------------------------------------------------------------* 139 | * 140 | *----------------------------------------------------------------------* 141 | CLASS lcl_salv IMPLEMENTATION. 142 | 143 | *--------------------------------------------------------------------* 144 | * Builds ALV 145 | *--------------------------------------------------------------------* 146 | METHOD alv_build. 147 | DATA: lr_cx_root TYPE REF TO cx_root. 148 | DATA: l_text_error TYPE string. 149 | 150 | * Avoids building every PBO 151 | CHECK lr_attr_salv_table IS NOT BOUND. 152 | 153 | attr_r_data_select = i_r_data_select. 154 | 155 | fill_table( ). 156 | 157 | TRY. 158 | cl_salv_table=>factory( 159 | IMPORTING 160 | r_salv_table = lr_attr_salv_table 161 | CHANGING 162 | t_table = lt_attr_alv ). 163 | CATCH cx_salv_msg INTO lr_cx_root. 164 | l_text_error = lr_cx_root->get_text( ). 165 | MESSAGE e208(00) WITH l_text_error. 166 | ENDTRY. 167 | 168 | alv_set_columns( ). 169 | alv_set_functions( ). 170 | alv_set_events( ). 171 | 172 | lr_attr_salv_table->display( ). 173 | 174 | ENDMETHOD. "alv_build 175 | 176 | 177 | *--------------------------------------------------------------------* 178 | * ALV Columns 179 | *--------------------------------------------------------------------* 180 | METHOD alv_set_columns. 181 | DATA: lr_salv_columns TYPE REF TO cl_salv_columns. 182 | DATA: lr_salv_column_table TYPE REF TO cl_salv_column_table. 183 | DATA: l_edit_mask TYPE lvc_edtmsk. 184 | 185 | lr_salv_columns = lr_attr_salv_table->get_columns( ). 186 | lr_salv_columns->set_optimize( abap_true ). 187 | 188 | TRY. 189 | * Sets mask for timestamp 190 | lr_salv_column_table ?= lr_salv_columns->get_column( 191 | columnname = 'TIMESTAMP' ). 192 | l_edit_mask = '____-__-__ __:__:__ ms ___'. 193 | lr_salv_column_table->set_edit_mask( l_edit_mask ). 194 | 195 | CATCH cx_salv_not_found . 196 | "#EC NO_HANDLER) 197 | ENDTRY. 198 | 199 | 200 | ENDMETHOD. "alv_set_columns 201 | 202 | *--------------------------------------------------------------------* 203 | * ALV Buttons 204 | *--------------------------------------------------------------------* 205 | METHOD alv_set_functions. 206 | DATA: lr_functions TYPE REF TO cl_salv_functions_list. 207 | 208 | lr_functions = lr_attr_salv_table->get_functions( ). 209 | lr_functions->set_all( abap_true ). 210 | 211 | ENDMETHOD. "alv_set_functions 212 | 213 | *--------------------------------------------------------------------* 214 | * Sets event handler 215 | *--------------------------------------------------------------------* 216 | METHOD alv_set_events. 217 | DATA: lr_salv_events_table TYPE REF TO cl_salv_events_table. 218 | DATA: lr_event_handler TYPE REF TO lcl_salv_table_handle_events. 219 | 220 | lr_salv_events_table = lr_attr_salv_table->get_event( ). 221 | 222 | CREATE OBJECT lr_event_handler. 223 | 224 | SET HANDLER lr_event_handler->on_double_click FOR lr_salv_events_table. 225 | 226 | ENDMETHOD. "alv_set_events 227 | 228 | *--------------------------------------------------------------------* 229 | * Fills table to show in ALV 230 | *--------------------------------------------------------------------* 231 | METHOD fill_table. 232 | DATA: lt_dd07v TYPE STANDARD TABLE OF dd07v. 233 | FIELD-SYMBOLS: TYPE zlnkelog. 234 | FIELD-SYMBOLS: TYPE typ_alv. 235 | FIELD-SYMBOLS: TYPE dd07v. 236 | 237 | CALL FUNCTION 'DD_DOMVALUES_GET' 238 | EXPORTING 239 | domname = 'ZLNKELOG_EVENT_DO' 240 | text = abap_true 241 | langu = sy-langu 242 | TABLES 243 | dd07v_tab = lt_dd07v 244 | EXCEPTIONS 245 | wrong_textflag = 1 246 | OTHERS = 2. 247 | IF sy-subrc <> 0. 248 | CLEAR lt_dd07v[]. 249 | ENDIF. 250 | 251 | * Completes information: Icon and event text 252 | LOOP AT attr_r_data_select->attr_t_log ASSIGNING . 253 | APPEND INITIAL LINE TO lt_attr_alv ASSIGNING . 254 | MOVE-CORRESPONDING TO . 255 | CASE -log_msgtyp. 256 | WHEN zlnkecl_log=>c_log_msgtyp_abort. 257 | -icon = icon_message_critical_small. 258 | WHEN zlnkecl_log=>c_log_msgtyp_error. 259 | -icon = icon_message_error_small. 260 | WHEN zlnkecl_log=>c_log_msgtyp_info. 261 | -icon = icon_message_information_small. 262 | WHEN zlnkecl_log=>c_log_msgtyp_success. 263 | -icon = icon_led_green. 264 | WHEN zlnkecl_log=>c_log_msgtyp_warning. 265 | -icon = icon_message_warning_small. 266 | ENDCASE. 267 | 268 | READ TABLE lt_dd07v WITH KEY domvalue_l = -log_event 269 | ASSIGNING . 270 | IF sy-subrc = 0. 271 | -log_event_txt = -ddtext. 272 | ENDIF. 273 | ENDLOOP. 274 | 275 | ENDMETHOD. "fill_table 276 | 277 | *--------------------------------------------------------------------* 278 | * Shows XML in a dialog. 279 | *--------------------------------------------------------------------* 280 | METHOD show_xml. 281 | DATA: ls_log TYPE zlnkelog. 282 | 283 | READ TABLE attr_r_data_select->attr_t_log INDEX i_row 284 | INTO ls_log. 285 | IF sy-subrc = 0. 286 | CALL METHOD zlnkecl_xml_utils=>show_xxml_in_dialog 287 | EXPORTING 288 | i_xxml = ls_log-rawdata. 289 | ENDIF. 290 | ENDMETHOD. "show_xml 291 | ENDCLASS. "lcl_salv IMPLEMENTATION 292 | 293 | *----------------------------------------------------------------------* 294 | * CLASS lcl_salv_table_handle_events IMPLEMENTATION 295 | *----------------------------------------------------------------------* 296 | * 297 | *----------------------------------------------------------------------* 298 | CLASS lcl_salv_table_handle_events IMPLEMENTATION. 299 | METHOD on_double_click. 300 | lcl_salv=>show_xml( row ). 301 | ENDMETHOD. "on_double_click 302 | ENDCLASS. "lcl_salv_table_handle_events IMPLEMENTATION 303 | 304 | 305 | *--------------------------------------------------------------------* 306 | * INITIALIZATION. 307 | *--------------------------------------------------------------------* 308 | INITIALIZATION. 309 | so_date-sign = 'I'. 310 | so_date-option = 'BT'. 311 | so_date-low = sy-datum. 312 | so_date-high = sy-datum. 313 | APPEND so_date. 314 | 315 | so_time-sign = 'I'. 316 | so_time-option = 'BT'. 317 | so_time-low = '000000'. 318 | so_time-high = '235959'. 319 | APPEND so_time. 320 | 321 | *--------------------------------------------------------------------* 322 | * START-OF-SELECTION. 323 | *--------------------------------------------------------------------* 324 | START-OF-SELECTION. 325 | DATA: lr_data_select TYPE REF TO lcl_data_select. 326 | 327 | CREATE OBJECT lr_data_select. 328 | lr_data_select->select_log( i_date_from = so_date-low 329 | i_time_from = so_time-low 330 | i_date_to = so_date-high 331 | i_time_to = so_time-high 332 | i_log_event = so_evnt[] ). 333 | 334 | lcl_salv=>alv_build( lr_data_select ). 335 | -------------------------------------------------------------------------------- /s3_sdk/zlnkers3_log_viewer.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKERS3_LOG_VIEWER 7 | A 8 | X 9 | 1 10 | E 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | 001 18 | Parameters 19 | 10 20 | 21 | 22 | R 23 | RocketSteam. RS3 Log Viewer 24 | 27 25 | 26 | 27 | S 28 | SO_DATE 29 | Date 30 | 12 31 | 32 | 33 | S 34 | SO_EVNT 35 | Event 36 | 13 37 | 38 | 39 | S 40 | SO_TIME 41 | Time 42 | 12 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /s3_sdk/zlnkers3_purge_mpart_upload.prog.abap: -------------------------------------------------------------------------------- 1 | *&---------------------------------------------------------------------* 2 | *& Report ZLNKERS3_PURGE_MPART_UPLOAD 3 | *& 4 | *&---------------------------------------------------------------------* 5 | *& Company: RocketSteam 6 | *& Author: Jordi Escoda, 21th March 2016 7 | *& Purges multipart upload 8 | *& It deletes records from table ZLNKEMPART_UPLD for transactions 9 | *& aborted or success 10 | *&---------------------------------------------------------------------* 11 | REPORT zlnkers3_purge_mpart_upload. 12 | 13 | *--------------------------------------------------------------------* 14 | * Tables 15 | *--------------------------------------------------------------------* 16 | TABLES: zlnkempart_upld. 17 | 18 | *--------------------------------------------------------------------* 19 | * Selection screen 20 | *--------------------------------------------------------------------* 21 | SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001. 22 | SELECT-OPTIONS: so_bckt FOR zlnkempart_upld-bucket. 23 | SELECT-OPTIONS: so_objnm FOR zlnkempart_upld-object_name. 24 | SELECTION-SCREEN END OF BLOCK b1. 25 | 26 | *----------------------------------------------------------------------* 27 | * CLASS lcl_main DEFINITION 28 | *----------------------------------------------------------------------* 29 | * 30 | *----------------------------------------------------------------------* 31 | CLASS lcl_main DEFINITION FINAL. 32 | PUBLIC SECTION. 33 | CLASS-METHODS: 34 | execute, 35 | f4_bucket. 36 | ENDCLASS. "lcl_main DEFINITION 37 | 38 | 39 | *----------------------------------------------------------------------* 40 | * CLASS lcl_main IMPLEMENTATION 41 | *----------------------------------------------------------------------* 42 | * 43 | *----------------------------------------------------------------------* 44 | CLASS lcl_main IMPLEMENTATION. 45 | METHOD f4_bucket. 46 | TYPES: BEGIN OF lty_bucket, 47 | bucket TYPE zlnkebucket-bucket, 48 | region TYPE zlnkebucket-region, 49 | content_rep TYPE zlnkebucket-content_rep, 50 | END OF lty_bucket. 51 | DATA: lt_bucket TYPE STANDARD TABLE OF lty_bucket. 52 | 53 | SELECT bucket region content_rep 54 | INTO TABLE lt_bucket 55 | FROM zlnkebucket. 56 | 57 | CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' 58 | EXPORTING 59 | retfield = 'BUCKET' 60 | dynpprog = sy-repid 61 | dynpnr = sy-dynnr 62 | dynprofield = 'SO_BCKT' 63 | value_org = 'S' 64 | TABLES 65 | value_tab = lt_bucket 66 | EXCEPTIONS 67 | parameter_error = 1 68 | no_values_found = 2 69 | OTHERS = 3. 70 | 71 | IF sy-subrc <> 0. 72 | MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 73 | WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 74 | ENDIF. 75 | 76 | ENDMETHOD. "f4_bucket 77 | 78 | METHOD execute. 79 | CONSTANTS: lc_mpart_upld_state_compl_ok TYPE c 80 | VALUE zlnkecl_aws_s3_bucket=>c_mpart_upld_state_compl_ok. 81 | CONSTANTS: lc_mpart_upld_state_aborted TYPE c 82 | VALUE zlnkecl_aws_s3_bucket=>c_mpart_upld_state_aborted. 83 | 84 | DELETE 85 | FROM zlnkempart_upld 86 | WHERE bucket IN so_bckt 87 | AND object_name IN so_objnm 88 | AND state IN (lc_mpart_upld_state_compl_ok, 89 | lc_mpart_upld_state_aborted). 90 | IF sy-subrc <> 0. 91 | WRITE:/ 'Nothing deleted'. 92 | ELSE. 93 | WRITE:/ 'Deleted', sy-dbcnt, 'registers'. 94 | ENDIF. 95 | ENDMETHOD. "execute 96 | ENDCLASS. "lcl_main IMPLEMENTATION 97 | 98 | *--------------------------------------------------------------------* 99 | * Selection screen events 100 | *--------------------------------------------------------------------* 101 | AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_bckt-low. 102 | lcl_main=>f4_bucket( ). 103 | 104 | AT SELECTION-SCREEN ON VALUE-REQUEST FOR so_bckt-high. 105 | lcl_main=>f4_bucket( ). 106 | 107 | *--------------------------------------------------------------------* 108 | * START-OF-SELECTION. 109 | *--------------------------------------------------------------------* 110 | START-OF-SELECTION. 111 | lcl_main=>execute( ). 112 | -------------------------------------------------------------------------------- /s3_sdk/zlnkers3_purge_mpart_upload.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKERS3_PURGE_MPART_UPLOAD 7 | A 8 | X 9 | 1 10 | E 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | 001 18 | Parameters 19 | 10 20 | 21 | 22 | R 23 | RocketSteam. Abort Multipart Upload 24 | 35 25 | 26 | 27 | S 28 | SO_BCKT 29 | Bucket 30 | 14 31 | 32 | 33 | S 34 | SO_OBJNM 35 | Object name 36 | 19 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /s3_sdk/zlnkers3_strust.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKERS3_STRUST 7 | A 8 | X 9 | 1 10 | E 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | 001 18 | Parameters 19 | 10 20 | 21 | 22 | I 23 | 002 24 | For initial installation only! (if SSL Client (Standard) does not exist) 25 | 90 26 | 27 | 28 | R 29 | RocketSteam. STRUST automatic maintenance for SSL certificates 30 | 62 31 | 32 | 33 | S 34 | P_DAYS 35 | Remove certs, days before 36 | 33 37 | 38 | 39 | S 40 | P_RMOLD 41 | Remove old SSL certificates 42 | 35 43 | 44 | 45 | S 46 | P_SSLCR 47 | Create SSL Client (Standard) 48 | 36 49 | 50 | 51 | S 52 | S_ENDPNT 53 | Endpoint 54 | 20 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /s3_sdk/zlnkers3_tables_initial_load.prog.abap: -------------------------------------------------------------------------------- 1 | *&---------------------------------------------------------------------* 2 | *& Report ZLNKERS3_TABLES_INITIAL_LOAD 3 | *&---------------------------------------------------------------------* 4 | *& Company: RocketSteam 5 | *& Author: Jordi Escoda, 21th December 2016 6 | *& Initial load for tables (Run once at installation) 7 | *&---------------------------------------------------------------------* 8 | REPORT zlnkers3_tables_initial_load. 9 | 10 | PARAMETERS: p_test AS CHECKBOX DEFAULT abap_true. 11 | 12 | CLASS lcl_load DEFINITION FINAL. 13 | PUBLIC SECTION. 14 | CLASS-METHODS: 15 | execute. 16 | 17 | PRIVATE SECTION. 18 | CLASS-METHODS: 19 | load_zlnkeregion, 20 | load_zlnkelog_cfg. 21 | ENDCLASS. 22 | 23 | CLASS lcl_load IMPLEMENTATION. 24 | METHOD execute. 25 | load_zlnkeregion( ). 26 | load_zlnkelog_cfg( ). 27 | ENDMETHOD. 28 | 29 | METHOD load_zlnkeregion. 30 | DATA: ls_zlnkeregion TYPE zlnkeregion. 31 | DATA: lt_zlnkeregion TYPE STANDARD TABLE OF zlnkeregion. 32 | 33 | SELECT * 34 | INTO TABLE lt_zlnkeregion 35 | FROM zlnkeregion. 36 | 37 | IF sy-subrc <> 0. 38 | ls_zlnkeregion-region = 'ap-northeast-1'. 39 | ls_zlnkeregion-region_name = 'Asia Pacific (Tokyo)'. 40 | ls_zlnkeregion-endpoint = 's3-ap-northeast-1.amazonaws.com'. 41 | APPEND ls_zlnkeregion TO lt_zlnkeregion. 42 | 43 | ls_zlnkeregion-region = 'ap-northeast-2'. 44 | ls_zlnkeregion-region_name = 'Asia Pacific (Seoul)'. 45 | ls_zlnkeregion-endpoint = 's3-ap-northeast-2.amazonaws.com'. 46 | APPEND ls_zlnkeregion TO lt_zlnkeregion. 47 | 48 | ls_zlnkeregion-region = 'ap-south-1'. 49 | ls_zlnkeregion-region_name = 'Asia Pacific (Mumbai)'. 50 | ls_zlnkeregion-endpoint = 's3-ap-south-1.amazonaws.com'. 51 | APPEND ls_zlnkeregion TO lt_zlnkeregion. 52 | 53 | ls_zlnkeregion-region = 'ap-southeast-1'. 54 | ls_zlnkeregion-region_name = 'Asia Pacific (Singapore)'. 55 | ls_zlnkeregion-endpoint = 's3-ap-southeast-1.amazonaws.com'. 56 | APPEND ls_zlnkeregion TO lt_zlnkeregion. 57 | 58 | ls_zlnkeregion-region = 'ap-southeast-2'. 59 | ls_zlnkeregion-region_name = 'Asia Pacific (Sydney)'. 60 | ls_zlnkeregion-endpoint = 's3-ap-southeast-2.amazonaws.com'. 61 | APPEND ls_zlnkeregion TO lt_zlnkeregion. 62 | 63 | ls_zlnkeregion-region = 'ca-central-1'. 64 | ls_zlnkeregion-region_name = 'Canada (Central)'. 65 | ls_zlnkeregion-endpoint = 's3-ca-central-1.amazonaws.com'. 66 | APPEND ls_zlnkeregion TO lt_zlnkeregion. 67 | 68 | ls_zlnkeregion-region = 'eu-central-1'. 69 | ls_zlnkeregion-region_name = 'EU (Frankfurt)'. 70 | ls_zlnkeregion-endpoint = 's3.eu-central-1.amazonaws.com'. 71 | APPEND ls_zlnkeregion TO lt_zlnkeregion. 72 | 73 | ls_zlnkeregion-region = 'eu-west-1'. 74 | ls_zlnkeregion-region_name = 'EU (Ireland)'. 75 | ls_zlnkeregion-endpoint = 's3-eu-west-1.amazonaws.com'. 76 | APPEND ls_zlnkeregion TO lt_zlnkeregion. 77 | 78 | ls_zlnkeregion-region = 'eu-west-2'. 79 | ls_zlnkeregion-region_name = 'EU (London)'. 80 | ls_zlnkeregion-endpoint = 's3-eu-west-2.amazonaws.com'. 81 | APPEND ls_zlnkeregion TO lt_zlnkeregion. 82 | 83 | ls_zlnkeregion-region = 'sa-east-1'. 84 | ls_zlnkeregion-region_name = 'South America (Sao Paulo)'. 85 | ls_zlnkeregion-endpoint = 's3-sa-east-1.amazonaws.com'. 86 | APPEND ls_zlnkeregion TO lt_zlnkeregion. 87 | 88 | ls_zlnkeregion-region = 'us-east-1'. 89 | ls_zlnkeregion-region_name = 'US Standard *'. 90 | ls_zlnkeregion-endpoint = 's3.amazonaws.com'. 91 | APPEND ls_zlnkeregion TO lt_zlnkeregion. 92 | 93 | ls_zlnkeregion-region = 'us-east-2'. 94 | ls_zlnkeregion-region_name = 'US East (Ohio)'. 95 | ls_zlnkeregion-endpoint = 's3-us-east-2.amazonaws.com'. 96 | APPEND ls_zlnkeregion TO lt_zlnkeregion. 97 | 98 | ls_zlnkeregion-region = 'us-west-1'. 99 | ls_zlnkeregion-region_name = 'US West (Northern California)'. 100 | ls_zlnkeregion-endpoint = 's3-us-west-1.amazonaws.com'. 101 | APPEND ls_zlnkeregion TO lt_zlnkeregion. 102 | 103 | ls_zlnkeregion-region = 'us-west-2'. 104 | ls_zlnkeregion-region_name = 'US West (Oregon)'. 105 | ls_zlnkeregion-endpoint = 's3-us-west-2.amazonaws.com'. 106 | APPEND ls_zlnkeregion TO lt_zlnkeregion. 107 | 108 | IF p_test = abap_false. 109 | MODIFY zlnkeregion FROM TABLE lt_zlnkeregion. 110 | IF sy-subrc = 0. 111 | WRITE:/ 'Table LNKEREGION initial load success'. 112 | ELSE. 113 | WRITE:/ 'Table LNKEREGION initial load: Something went wrong'. 114 | ENDIF. 115 | ELSE. 116 | WRITE:/ 'Table LNKEREGION initial load success (Test mode)'. 117 | ENDIF. 118 | ELSE. 119 | WRITE:/ 'Table LNKEREGION already has data'. 120 | ENDIF. 121 | ENDMETHOD. 122 | 123 | METHOD load_zlnkelog_cfg. 124 | DATA: ls_zlnkelog_cfg TYPE zlnkelog_cfg. 125 | 126 | SELECT SINGLE * 127 | INTO ls_zlnkelog_cfg 128 | FROM zlnkelog_cfg 129 | WHERE dummyid = space. 130 | 131 | IF sy-subrc <> 0. 132 | ls_zlnkelog_cfg-keep_days = 3. 133 | IF p_test = abap_false. 134 | MODIFY zlnkelog_cfg FROM ls_zlnkelog_cfg. 135 | IF sy-subrc = 0. 136 | WRITE:/ 'Table ZLNKELOG_CFG initial load success'. 137 | ELSE. 138 | WRITE:/ 'Table ZLNKELOG_CFG initial load: Something went wrong'. 139 | ENDIF. 140 | ELSE. 141 | WRITE:/ 'Table ZLNKELOG_CFG initial load success (Test mode)'. 142 | ENDIF. 143 | ELSE. 144 | WRITE:/ 'Table ZLNKELOG_CFG already has data'. 145 | ENDIF. 146 | 147 | ENDMETHOD. 148 | ENDCLASS. 149 | 150 | START-OF-SELECTION. 151 | lcl_load=>execute( ). 152 | -------------------------------------------------------------------------------- /s3_sdk/zlnkers3_tables_initial_load.prog.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKERS3_TABLES_INITIAL_LOAD 7 | A 8 | X 9 | 1 10 | E 11 | X 12 | X 13 | 14 | 15 | 16 | R 17 | Initial load for AWS Regions and log configuration 18 | 50 19 | 20 | 21 | S 22 | P_TEST 23 | Test run 24 | 16 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /s3_sdk/zlnkesecacckey_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKESECACCKEY_DE 7 | E 8 | ZLNKESECACCKEY_DO 9 | 55 10 | 10 11 | 15 12 | 20 13 | RocketSteam. Secret access key 14 | Secret Access Key 15 | Sec.Acc.K 16 | Secr.Acc.Key 17 | Secret Access Key 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkesecacckey_do.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKESECACCKEY_DO 7 | E 8 | CHAR 9 | 000128 10 | 000128 11 | X 12 | Rocket Steam. Secret Access Key 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeserver_side_encryption_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKESERVER_SIDE_ENCRYPTION_DE 7 | E 8 | FLAG 9 | 22 10 | 10 11 | 15 12 | 22 13 | RocketSteam. Server side encryption flag 14 | Server side Encryption 15 | S.Encrypt 16 | Serv.Encrypt 17 | Server side Encryption 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkessfbin_tt.ttyp.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKESSFBIN_TT 7 | E 8 | SSFBIN 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | RocketSteam. Table of ssfbin 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeuser.tabl.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEUSER 7 | E 8 | TRANSP 9 | Rocket Steam. Users and Access Keys 10 | X 11 | C 12 | 1 13 | 14 | 15 | ZLNKEUSER 16 | A 17 | 0 18 | APPL0 19 | N 20 | C 21 | 22 | 23 | 24 | ZLNKEUSER 25 | USER_NAME 26 | 0001 27 | X 28 | ZLNKEUSERNAME_DE 29 | 0 30 | X 31 | E 32 | 33 | 34 | ZLNKEUSER 35 | ACCESS_KEY 36 | 0002 37 | ZLNKEACCKEY_DE 38 | 0 39 | E 40 | 41 | 42 | ZLNKEUSER 43 | SECR_ACCESS_KEY 44 | 0003 45 | ZLNKESECACCKEY_DE 46 | 0 47 | E 48 | 49 | 50 | ZLNKEUSER 51 | AWS_ACCOUNT_ID 52 | 0004 53 | ZLNKEAWS_ACCOUNT_ID_DE 54 | 0 55 | E 56 | 57 | 58 | ZLNKEUSER 59 | CRUSR 60 | 0005 61 | ZLNKECRUSR 62 | 0 63 | E 64 | 65 | 66 | ZLNKEUSER 67 | CRDAT 68 | 0006 69 | ZLNKECRDAT 70 | 0 71 | T 72 | E 73 | 74 | 75 | ZLNKEUSER 76 | CRTIM 77 | 0007 78 | ZLNKECRTIM 79 | 0 80 | T 81 | E 82 | 83 | 84 | ZLNKEUSER 85 | CHUSR 86 | 0008 87 | ZLNKECHUSR 88 | 0 89 | E 90 | 91 | 92 | ZLNKEUSER 93 | CHDAT 94 | 0009 95 | ZLNKECHDAT 96 | 0 97 | T 98 | E 99 | 100 | 101 | ZLNKEUSER 102 | CHTIM 103 | 0010 104 | ZLNKECHTIM 105 | 0 106 | T 107 | E 108 | 109 | 110 | 111 | 112 | 113 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeusername_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEUSERNAME_DE 7 | E 8 | ZLNKEUSERNAME_DO 9 | 55 10 | 10 11 | 15 12 | 20 13 | RocketSteam. User name 14 | User Name 15 | Us.Name 16 | User Name 17 | User Name 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /s3_sdk/zlnkeusername_do.doma.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEUSERNAME_DO 7 | E 8 | CHAR 9 | 000064 10 | 000064 11 | X 12 | ZLNKEUSER 13 | Rocket Steam. User name 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /s3_sdk/zlnkezipflag_de.dtel.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | ZLNKEZIPFLAG_DE 7 | E 8 | FLAG 9 | 03 10 | 03 11 | 03 12 | 03 13 | RocketSteam. Zip Flag 14 | Zip 15 | Zip 16 | Zip 17 | Zip 18 | E 19 | D 20 | 21 | 22 | 23 | 24 | --------------------------------------------------------------------------------