mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 20:32:26 +08:00
508 lines
13 KiB
ABAP
508 lines
13 KiB
ABAP
CLASS zcl_abapgit_object_w3xx_super DEFINITION
|
|
PUBLIC
|
|
INHERITING FROM zcl_abapgit_objects_super
|
|
ABSTRACT
|
|
CREATE PUBLIC .
|
|
|
|
PUBLIC SECTION.
|
|
|
|
INTERFACES zif_abapgit_object .
|
|
|
|
TYPES:
|
|
ty_wwwparams_tt TYPE STANDARD TABLE OF wwwparams WITH DEFAULT KEY .
|
|
|
|
CONSTANTS:
|
|
BEGIN OF c_param_names,
|
|
version TYPE w3_name VALUE 'version',
|
|
fileext TYPE w3_name VALUE 'fileextension',
|
|
filesize TYPE w3_name VALUE 'filesize',
|
|
filename TYPE w3_name VALUE 'filename',
|
|
mimetype TYPE w3_name VALUE 'mimetype',
|
|
END OF c_param_names .
|
|
|
|
METHODS constructor
|
|
IMPORTING
|
|
!is_item TYPE zif_abapgit_definitions=>ty_item
|
|
!iv_language TYPE spras
|
|
!io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
|
|
!io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
PROTECTED SECTION.
|
|
TYPES ty_bdcdata TYPE STANDARD TABLE OF bdcdata
|
|
WITH NON-UNIQUE DEFAULT KEY.
|
|
|
|
METHODS change_bdc_jump_data ABSTRACT
|
|
CHANGING
|
|
ct_bdcdata TYPE ty_bdcdata.
|
|
|
|
PRIVATE SECTION.
|
|
|
|
DATA ms_key TYPE wwwdatatab.
|
|
|
|
METHODS get_ext
|
|
IMPORTING it_params TYPE ty_wwwparams_tt
|
|
RETURNING VALUE(rv_ext) TYPE string
|
|
RAISING zcx_abapgit_exception.
|
|
|
|
METHODS normalize_params
|
|
IMPORTING iv_size TYPE i
|
|
CHANGING ct_params TYPE ty_wwwparams_tt " Param table to patch
|
|
RAISING zcx_abapgit_exception.
|
|
|
|
METHODS strip_params
|
|
CHANGING ct_params TYPE ty_wwwparams_tt
|
|
RAISING zcx_abapgit_exception.
|
|
|
|
METHODS find_param
|
|
IMPORTING it_params TYPE ty_wwwparams_tt
|
|
iv_name TYPE w3_name
|
|
RETURNING VALUE(rv_value) TYPE string
|
|
RAISING zcx_abapgit_exception.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS zcl_abapgit_object_w3xx_super IMPLEMENTATION.
|
|
|
|
|
|
METHOD constructor.
|
|
|
|
super->constructor(
|
|
is_item = is_item
|
|
iv_language = iv_language
|
|
io_files = io_files
|
|
io_i18n_params = io_i18n_params ).
|
|
|
|
ms_key-relid = ms_item-obj_type+2(2).
|
|
ms_key-objid = ms_item-obj_name.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD find_param.
|
|
|
|
FIELD-SYMBOLS <ls_param> LIKE LINE OF it_params.
|
|
|
|
|
|
READ TABLE it_params ASSIGNING <ls_param> WITH KEY name = iv_name.
|
|
IF sy-subrc > 0.
|
|
zcx_abapgit_exception=>raise( |W3xx: Cannot find { iv_name } for { ms_key-objid }| ).
|
|
ENDIF.
|
|
|
|
rv_value = <ls_param>-value.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD get_ext.
|
|
|
|
rv_ext = find_param( it_params = it_params
|
|
iv_name = c_param_names-fileext ).
|
|
SHIFT rv_ext LEFT DELETING LEADING '.'.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD normalize_params.
|
|
|
|
FIELD-SYMBOLS <ls_param> LIKE LINE OF ct_params.
|
|
|
|
" Ensure filesize param exists
|
|
READ TABLE ct_params ASSIGNING <ls_param> WITH KEY name = c_param_names-filesize.
|
|
IF sy-subrc <> 0.
|
|
APPEND INITIAL LINE TO ct_params ASSIGNING <ls_param>.
|
|
<ls_param>-name = c_param_names-filesize.
|
|
ENDIF.
|
|
|
|
LOOP AT ct_params ASSIGNING <ls_param>.
|
|
<ls_param>-relid = ms_key-relid. " Ensure param key = object key
|
|
<ls_param>-objid = ms_key-objid.
|
|
IF <ls_param>-name = c_param_names-filesize. " Patch filesize = real file size
|
|
<ls_param>-value = iv_size.
|
|
CONDENSE <ls_param>-value.
|
|
ENDIF.
|
|
ENDLOOP.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD strip_params.
|
|
|
|
FIELD-SYMBOLS <ls_param> LIKE LINE OF ct_params.
|
|
|
|
" Remove path from filename
|
|
find_param( it_params = ct_params
|
|
iv_name = c_param_names-filename ). " Check exists
|
|
READ TABLE ct_params ASSIGNING <ls_param> WITH KEY name = c_param_names-filename.
|
|
<ls_param>-value = zcl_abapgit_path=>get_filename_from_syspath( |{ <ls_param>-value }| ).
|
|
|
|
" Clear id and object name
|
|
LOOP AT ct_params ASSIGNING <ls_param>.
|
|
CLEAR: <ls_param>-relid, <ls_param>-objid.
|
|
ENDLOOP.
|
|
|
|
" Clear version & filesize
|
|
DELETE ct_params WHERE name = c_param_names-version.
|
|
DELETE ct_params WHERE name = c_param_names-filesize.
|
|
|
|
" Avoid diffs due to different order
|
|
SORT ct_params.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~changed_by.
|
|
|
|
SELECT SINGLE chname INTO rv_user
|
|
FROM wwwdata
|
|
WHERE relid = ms_key-relid
|
|
AND objid = ms_key-objid
|
|
AND srtf2 = 0.
|
|
|
|
IF sy-subrc IS NOT INITIAL OR rv_user IS INITIAL.
|
|
rv_user = c_user_unknown.
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~delete.
|
|
|
|
CALL FUNCTION 'WWWDATA_DELETE'
|
|
EXPORTING
|
|
key = ms_key
|
|
EXCEPTIONS
|
|
wrong_object_type = 1
|
|
delete_error = 2.
|
|
|
|
IF sy-subrc IS NOT INITIAL.
|
|
zcx_abapgit_exception=>raise( 'Cannot delete W3xx data' ).
|
|
ENDIF.
|
|
|
|
CALL FUNCTION 'WWWPARAMS_DELETE_ALL'
|
|
EXPORTING
|
|
key = ms_key
|
|
EXCEPTIONS
|
|
delete_error = 1.
|
|
|
|
IF sy-subrc IS NOT INITIAL.
|
|
zcx_abapgit_exception=>raise( 'Cannot delete W3xx params' ).
|
|
ENDIF.
|
|
|
|
corr_insert( iv_package ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~deserialize.
|
|
|
|
DATA lv_base64str TYPE string.
|
|
DATA lt_w3params TYPE STANDARD TABLE OF wwwparams.
|
|
DATA lv_xstring TYPE xstring.
|
|
DATA lt_w3mime TYPE STANDARD TABLE OF w3mime.
|
|
DATA lt_w3html TYPE STANDARD TABLE OF w3html.
|
|
DATA lv_size TYPE i.
|
|
|
|
|
|
io_xml->read( EXPORTING iv_name = 'TEXT'
|
|
CHANGING cg_data = ms_key-text ).
|
|
|
|
io_xml->read( EXPORTING iv_name = 'PARAMS'
|
|
CHANGING cg_data = lt_w3params ).
|
|
|
|
CASE io_xml->get_metadata( )-version.
|
|
WHEN 'v1.0.0'.
|
|
io_xml->read( EXPORTING iv_name = 'DATA'
|
|
CHANGING cg_data = lv_base64str ).
|
|
lv_xstring = cl_http_utility=>decode_x_base64( lv_base64str ).
|
|
WHEN 'v2.0.0'.
|
|
lv_xstring = mo_files->read_raw( iv_extra = 'data'
|
|
iv_ext = get_ext( lt_w3params ) ).
|
|
WHEN OTHERS.
|
|
zcx_abapgit_exception=>raise( 'W3xx: Unknown serializer version' ).
|
|
ENDCASE.
|
|
|
|
CASE ms_key-relid.
|
|
WHEN 'MI'.
|
|
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
|
|
EXPORTING
|
|
buffer = lv_xstring
|
|
IMPORTING
|
|
output_length = lv_size
|
|
TABLES
|
|
binary_tab = lt_w3mime.
|
|
WHEN 'HT'.
|
|
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
|
|
EXPORTING
|
|
buffer = lv_xstring
|
|
IMPORTING
|
|
output_length = lv_size
|
|
TABLES
|
|
binary_tab = lt_w3mime.
|
|
|
|
CALL FUNCTION 'SCMS_BINARY_TO_TEXT'
|
|
EXPORTING
|
|
input_length = lv_size
|
|
IMPORTING
|
|
output_length = lv_size
|
|
TABLES
|
|
binary_tab = lt_w3mime
|
|
text_tab = lt_w3html
|
|
EXCEPTIONS
|
|
failed = 1.
|
|
IF sy-subrc IS NOT INITIAL.
|
|
zcx_abapgit_exception=>raise( 'Cannot update W3xx params' ).
|
|
ENDIF.
|
|
|
|
CLEAR lt_w3mime.
|
|
WHEN OTHERS.
|
|
zcx_abapgit_exception=>raise( 'Wrong W3xx type' ).
|
|
ENDCASE.
|
|
|
|
" Update size of file based on actual data file size, prove param object name
|
|
normalize_params( EXPORTING iv_size = lv_size
|
|
CHANGING ct_params = lt_w3params ).
|
|
|
|
CALL FUNCTION 'WWWPARAMS_UPDATE'
|
|
TABLES
|
|
params = lt_w3params
|
|
EXCEPTIONS
|
|
update_error = 1.
|
|
|
|
IF sy-subrc IS NOT INITIAL.
|
|
zcx_abapgit_exception=>raise( 'Cannot update W3xx params' ).
|
|
ENDIF.
|
|
|
|
ms_key-tdate = sy-datum.
|
|
ms_key-ttime = sy-uzeit.
|
|
ms_key-chname = sy-uname.
|
|
ms_key-devclass = iv_package.
|
|
|
|
CALL FUNCTION 'WWWDATA_EXPORT'
|
|
EXPORTING
|
|
key = ms_key
|
|
TABLES
|
|
mime = lt_w3mime
|
|
html = lt_w3html
|
|
EXCEPTIONS
|
|
wrong_object_type = 1
|
|
export_error = 2.
|
|
|
|
IF sy-subrc IS NOT INITIAL.
|
|
zcx_abapgit_exception=>raise( 'Cannot upload W3xx data' ).
|
|
ENDIF.
|
|
|
|
tadir_insert( iv_package ).
|
|
|
|
corr_insert( iv_package ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~exists.
|
|
|
|
SELECT SINGLE objid INTO ms_key-objid
|
|
FROM wwwdata
|
|
WHERE relid = ms_key-relid
|
|
AND objid = ms_key-objid
|
|
AND srtf2 = 0.
|
|
|
|
IF sy-subrc IS NOT INITIAL.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
rv_bool = abap_true.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_comparator.
|
|
RETURN.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_deserialize_order.
|
|
RETURN.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_deserialize_steps.
|
|
APPEND zif_abapgit_object=>gc_step_id-abap TO rt_steps.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~get_metadata.
|
|
rs_metadata = get_metadata( ).
|
|
rs_metadata-version = 'v2.0.0'. " Serialization v2, separate data file
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~is_active.
|
|
rv_active = is_active( ).
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~is_locked.
|
|
|
|
DATA: lv_object TYPE eqegraarg.
|
|
|
|
lv_object = |{ ms_item-obj_type+2(2) }{ ms_item-obj_name }|.
|
|
OVERLAY lv_object WITH ' '.
|
|
lv_object = lv_object && '*'.
|
|
|
|
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'E_WWW_HTML'
|
|
iv_argument = lv_object ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~jump.
|
|
|
|
DATA: ls_bdcdata TYPE bdcdata,
|
|
lt_bdcdata TYPE ty_bdcdata.
|
|
|
|
ls_bdcdata-program = 'SAPMWWW0'.
|
|
ls_bdcdata-dynpro = '0100'.
|
|
ls_bdcdata-dynbegin = 'X'.
|
|
APPEND ls_bdcdata TO lt_bdcdata.
|
|
|
|
change_bdc_jump_data( CHANGING ct_bdcdata = lt_bdcdata ).
|
|
|
|
CLEAR ls_bdcdata.
|
|
ls_bdcdata-fnam = 'BDC_OKCODE'.
|
|
ls_bdcdata-fval = '=CRO1'.
|
|
APPEND ls_bdcdata TO lt_bdcdata.
|
|
|
|
ls_bdcdata-program = 'RSWWWSHW'.
|
|
ls_bdcdata-dynpro = '1000'.
|
|
ls_bdcdata-dynbegin = 'X'.
|
|
APPEND ls_bdcdata TO lt_bdcdata.
|
|
|
|
CLEAR ls_bdcdata.
|
|
ls_bdcdata-fnam = 'SO_OBJID-LOW'.
|
|
ls_bdcdata-fval = ms_item-obj_name.
|
|
APPEND ls_bdcdata TO lt_bdcdata.
|
|
|
|
CLEAR ls_bdcdata.
|
|
ls_bdcdata-fnam = 'BDC_OKCODE'.
|
|
ls_bdcdata-fval = '=ONLI'.
|
|
APPEND ls_bdcdata TO lt_bdcdata.
|
|
|
|
zcl_abapgit_objects_factory=>get_gui_jumper( )->jump_batch_input(
|
|
iv_tcode = 'SMW0'
|
|
it_bdcdata = lt_bdcdata ).
|
|
|
|
rv_exit = abap_true.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~map_filename_to_object.
|
|
RETURN.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~map_object_to_filename.
|
|
RETURN.
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_object~serialize.
|
|
|
|
DATA lt_w3mime TYPE STANDARD TABLE OF w3mime.
|
|
DATA lt_w3html TYPE STANDARD TABLE OF w3html.
|
|
DATA lt_w3params TYPE STANDARD TABLE OF wwwparams.
|
|
DATA lv_xstring TYPE xstring.
|
|
DATA lv_size TYPE i.
|
|
|
|
SELECT SINGLE * INTO CORRESPONDING FIELDS OF ms_key
|
|
FROM wwwdata
|
|
WHERE relid = ms_key-relid
|
|
AND objid = ms_key-objid
|
|
AND srtf2 = 0.
|
|
|
|
IF sy-subrc IS NOT INITIAL.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
CALL FUNCTION 'WWWDATA_IMPORT'
|
|
EXPORTING
|
|
key = ms_key
|
|
TABLES
|
|
mime = lt_w3mime
|
|
html = lt_w3html
|
|
EXCEPTIONS
|
|
wrong_object_type = 1
|
|
import_error = 2.
|
|
|
|
IF sy-subrc IS NOT INITIAL.
|
|
zcx_abapgit_exception=>raise( 'Cannot read W3xx data' ).
|
|
ENDIF.
|
|
|
|
CALL FUNCTION 'WWWPARAMS_READ_ALL'
|
|
EXPORTING
|
|
type = ms_key-relid
|
|
objid = ms_key-objid
|
|
TABLES
|
|
params = lt_w3params
|
|
EXCEPTIONS
|
|
entry_not_exists = 1.
|
|
|
|
IF sy-subrc IS NOT INITIAL.
|
|
zcx_abapgit_exception=>raise( 'Cannot read W3xx data' ).
|
|
ENDIF.
|
|
|
|
lv_size = find_param( it_params = lt_w3params
|
|
iv_name = c_param_names-filesize ).
|
|
" Clean params (remove version, filesize & clear filename from path)
|
|
strip_params( CHANGING ct_params = lt_w3params ).
|
|
|
|
CASE ms_key-relid.
|
|
WHEN 'MI'.
|
|
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
|
|
EXPORTING
|
|
input_length = lv_size
|
|
IMPORTING
|
|
buffer = lv_xstring
|
|
TABLES
|
|
binary_tab = lt_w3mime
|
|
EXCEPTIONS
|
|
failed = 1.
|
|
WHEN 'HT'.
|
|
CALL FUNCTION 'SCMS_TEXT_TO_XSTRING'
|
|
IMPORTING
|
|
buffer = lv_xstring
|
|
TABLES
|
|
text_tab = lt_w3html
|
|
EXCEPTIONS
|
|
failed = 1.
|
|
WHEN OTHERS.
|
|
zcx_abapgit_exception=>raise( 'Wrong W3xx type' ).
|
|
ENDCASE.
|
|
|
|
IF sy-subrc IS NOT INITIAL.
|
|
zcx_abapgit_exception=>raise( 'Cannot convert W3xx to xstring' ).
|
|
ENDIF.
|
|
|
|
io_xml->add( iv_name = 'NAME'
|
|
ig_data = ms_key-objid ).
|
|
|
|
io_xml->add( iv_name = 'TEXT'
|
|
ig_data = ms_key-text ).
|
|
|
|
SORT lt_w3params.
|
|
|
|
io_xml->add( iv_name = 'PARAMS'
|
|
ig_data = lt_w3params ).
|
|
|
|
" Serialization v2, separate data file. 'extra' added to prevent conflict with .xml
|
|
mo_files->add_raw( iv_data = lv_xstring
|
|
iv_extra = 'data'
|
|
iv_ext = get_ext( lt_w3params ) ).
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|