mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
430 lines
14 KiB
ABAP
430 lines
14 KiB
ABAP
*&---------------------------------------------------------------------*
|
|
*& Include ZABAPGIT_OBJECT_SICF
|
|
*&---------------------------------------------------------------------*
|
|
|
|
*----------------------------------------------------------------------*
|
|
* CLASS lcl_object_sicf DEFINITION
|
|
*----------------------------------------------------------------------*
|
|
*
|
|
*----------------------------------------------------------------------*
|
|
CLASS lcl_object_sicf DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
|
|
|
PUBLIC SECTION.
|
|
INTERFACES lif_object.
|
|
ALIASES mo_files FOR lif_object~mo_files.
|
|
|
|
PRIVATE SECTION.
|
|
TYPES: ty_icfhandler_tt TYPE STANDARD TABLE OF icfhandler WITH DEFAULT KEY.
|
|
|
|
TYPES: BEGIN OF ty_sicf_key,
|
|
icf_name TYPE icfservice-icf_name,
|
|
icfparguid TYPE icfservice-icfparguid,
|
|
END OF ty_sicf_key.
|
|
|
|
METHODS read
|
|
IMPORTING iv_clear TYPE abap_bool DEFAULT abap_true
|
|
EXPORTING es_icfservice TYPE icfservice
|
|
es_icfdocu TYPE icfdocu
|
|
et_icfhandler TYPE ty_icfhandler_tt
|
|
ev_url TYPE string
|
|
RAISING lcx_exception.
|
|
|
|
METHODS insert_sicf
|
|
IMPORTING is_icfservice TYPE icfservice
|
|
is_icfdocu TYPE icfdocu
|
|
it_icfhandler TYPE ty_icfhandler_tt
|
|
iv_package TYPE devclass
|
|
iv_url TYPE string
|
|
RAISING lcx_exception.
|
|
|
|
METHODS change_sicf
|
|
IMPORTING is_icfservice TYPE icfservice
|
|
is_icfdocu TYPE icfdocu
|
|
it_icfhandler TYPE ty_icfhandler_tt
|
|
iv_package TYPE devclass
|
|
iv_parent TYPE icfparguid
|
|
RAISING lcx_exception.
|
|
|
|
METHODS to_icfhndlist
|
|
IMPORTING it_list TYPE ty_icfhandler_tt
|
|
RETURNING VALUE(rt_list) TYPE icfhndlist.
|
|
|
|
METHODS find_parent
|
|
IMPORTING iv_url TYPE string
|
|
RETURNING VALUE(rv_parent) TYPE icfparguid
|
|
RAISING lcx_exception.
|
|
|
|
ENDCLASS. "lcl_object_sicf DEFINITION
|
|
|
|
*----------------------------------------------------------------------*
|
|
* CLASS lcl_object_sicf IMPLEMENTATION
|
|
*----------------------------------------------------------------------*
|
|
*
|
|
*----------------------------------------------------------------------*
|
|
CLASS lcl_object_sicf IMPLEMENTATION.
|
|
|
|
METHOD lif_object~has_changed_since.
|
|
rv_changed = abap_true.
|
|
ENDMETHOD. "lif_object~has_changed_since
|
|
|
|
METHOD lif_object~changed_by.
|
|
|
|
DATA: ls_icfservice TYPE icfservice.
|
|
|
|
|
|
read( EXPORTING iv_clear = abap_false
|
|
IMPORTING es_icfservice = ls_icfservice ).
|
|
|
|
rv_user = ls_icfservice-icf_muser.
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD lif_object~get_metadata.
|
|
rs_metadata = get_metadata( ).
|
|
ENDMETHOD. "lif_object~get_metadata
|
|
|
|
METHOD lif_object~exists.
|
|
|
|
DATA: ls_icfservice TYPE icfservice.
|
|
|
|
|
|
read( IMPORTING es_icfservice = ls_icfservice ).
|
|
rv_bool = boolc( NOT ls_icfservice IS INITIAL ).
|
|
|
|
ENDMETHOD. "lif_object~exists
|
|
|
|
METHOD lif_object~serialize.
|
|
|
|
DATA: ls_icfservice TYPE icfservice,
|
|
ls_icfdocu TYPE icfdocu,
|
|
lv_url TYPE string,
|
|
lt_icfhandler TYPE TABLE OF icfhandler.
|
|
|
|
|
|
read( IMPORTING es_icfservice = ls_icfservice
|
|
es_icfdocu = ls_icfdocu
|
|
et_icfhandler = lt_icfhandler
|
|
ev_url = lv_url ).
|
|
IF ls_icfservice IS INITIAL.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
CLEAR ls_icfservice-icfnodguid.
|
|
CLEAR ls_icfservice-icfparguid.
|
|
CLEAR ls_icfservice-icf_user.
|
|
CLEAR ls_icfservice-icf_cclnt.
|
|
CLEAR ls_icfservice-icf_mclnt.
|
|
|
|
io_xml->add( iv_name = 'URL'
|
|
ig_data = lv_url ).
|
|
io_xml->add( iv_name = 'ICFSERVICE'
|
|
ig_data = ls_icfservice ).
|
|
io_xml->add( iv_name = 'ICFDOCU'
|
|
ig_data = ls_icfdocu ).
|
|
io_xml->add( iv_name = 'ICFHANDLER_TABLE'
|
|
ig_data = lt_icfhandler ).
|
|
|
|
ENDMETHOD. "serialize
|
|
|
|
METHOD read.
|
|
|
|
DATA: lt_serv_info TYPE icfservtbl,
|
|
ls_serv_info LIKE LINE OF lt_serv_info,
|
|
ls_key TYPE ty_sicf_key.
|
|
|
|
FIELD-SYMBOLS: <ls_icfhandler> LIKE LINE OF et_icfhandler.
|
|
|
|
|
|
CLEAR es_icfservice.
|
|
CLEAR es_icfdocu.
|
|
CLEAR et_icfhandler.
|
|
CLEAR ev_url.
|
|
|
|
ls_key = ms_item-obj_name.
|
|
IF ls_key-icfparguid IS INITIAL.
|
|
* limitation: name must be unique
|
|
SELECT SINGLE icfparguid FROM icfservice
|
|
INTO ls_key-icfparguid
|
|
WHERE icf_name = ls_key-icf_name
|
|
AND icf_cuser <> 'SAP' ##warn_ok.
|
|
IF sy-subrc <> 0.
|
|
RETURN.
|
|
ENDIF.
|
|
ENDIF.
|
|
|
|
cl_icf_tree=>if_icf_tree~get_info_from_serv(
|
|
EXPORTING
|
|
icf_name = ls_key-icf_name
|
|
icfparguid = ls_key-icfparguid
|
|
icf_langu = mv_language
|
|
IMPORTING
|
|
serv_info = lt_serv_info
|
|
icfdocu = es_icfdocu
|
|
url = ev_url
|
|
EXCEPTIONS
|
|
wrong_name = 1
|
|
wrong_parguid = 2
|
|
incorrect_service = 3
|
|
no_authority = 4
|
|
OTHERS = 5 ).
|
|
IF sy-subrc <> 0.
|
|
lcx_exception=>raise( 'SICF - error from get_info_from_serv' ).
|
|
ENDIF.
|
|
|
|
ASSERT lines( lt_serv_info ) = 1.
|
|
READ TABLE lt_serv_info INDEX 1 INTO ls_serv_info.
|
|
ASSERT sy-subrc = 0.
|
|
|
|
MOVE-CORRESPONDING ls_serv_info-service TO es_icfservice.
|
|
IF iv_clear = abap_true.
|
|
CLEAR es_icfservice-icf_cuser.
|
|
CLEAR es_icfservice-icf_cdate.
|
|
CLEAR es_icfservice-icf_muser.
|
|
CLEAR es_icfservice-icf_mdate.
|
|
ENDIF.
|
|
|
|
CLEAR es_icfdocu-icfparguid.
|
|
|
|
APPEND LINES OF ls_serv_info-handlertbl TO et_icfhandler.
|
|
LOOP AT et_icfhandler ASSIGNING <ls_icfhandler>.
|
|
CLEAR <ls_icfhandler>-icfparguid.
|
|
ENDLOOP.
|
|
|
|
ENDMETHOD. "read
|
|
|
|
METHOD lif_object~deserialize.
|
|
|
|
DATA: ls_icfservice TYPE icfservice,
|
|
ls_read TYPE icfservice,
|
|
ls_icfdocu TYPE icfdocu,
|
|
lv_url TYPE string,
|
|
lt_icfhandler TYPE TABLE OF icfhandler.
|
|
|
|
|
|
io_xml->read( EXPORTING iv_name = 'URL'
|
|
CHANGING cg_data = lv_url ).
|
|
io_xml->read( EXPORTING iv_name = 'ICFSERVICE'
|
|
CHANGING cg_data = ls_icfservice ).
|
|
io_xml->read( EXPORTING iv_name = 'ICFDOCU'
|
|
CHANGING cg_data = ls_icfdocu ).
|
|
io_xml->read( EXPORTING iv_name = 'ICFHANDLER_TABLE'
|
|
CHANGING cg_data = lt_icfhandler ).
|
|
|
|
read( IMPORTING es_icfservice = ls_read ).
|
|
IF ls_read IS INITIAL.
|
|
insert_sicf( is_icfservice = ls_icfservice
|
|
is_icfdocu = ls_icfdocu
|
|
it_icfhandler = lt_icfhandler
|
|
iv_package = iv_package
|
|
iv_url = lv_url ).
|
|
ELSE.
|
|
change_sicf( is_icfservice = ls_icfservice
|
|
is_icfdocu = ls_icfdocu
|
|
it_icfhandler = lt_icfhandler
|
|
iv_package = iv_package
|
|
iv_parent = ls_read-icfparguid ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD. "deserialize
|
|
|
|
METHOD to_icfhndlist.
|
|
|
|
FIELD-SYMBOLS: <ls_list> LIKE LINE OF it_list.
|
|
|
|
|
|
* convert to sorted table
|
|
LOOP AT it_list ASSIGNING <ls_list>.
|
|
INSERT <ls_list>-icfhandler INTO TABLE rt_list.
|
|
ENDLOOP.
|
|
|
|
ENDMETHOD. "to_icfhndlist
|
|
|
|
METHOD find_parent.
|
|
|
|
cl_icf_tree=>if_icf_tree~service_from_url(
|
|
EXPORTING
|
|
url = iv_url
|
|
hostnumber = 0
|
|
IMPORTING
|
|
icfnodguid = rv_parent
|
|
EXCEPTIONS
|
|
wrong_application = 1
|
|
no_application = 2
|
|
not_allow_application = 3
|
|
wrong_url = 4
|
|
no_authority = 5
|
|
OTHERS = 6 ).
|
|
IF sy-subrc <> 0.
|
|
lcx_exception=>raise( 'SICF - error from service_from_url' ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD. "find_parent
|
|
|
|
METHOD insert_sicf.
|
|
|
|
DATA: lt_icfhndlist TYPE icfhndlist,
|
|
ls_icfserdesc TYPE icfserdesc,
|
|
ls_icfdocu TYPE icfdocu,
|
|
lv_parent TYPE icfparguid.
|
|
|
|
|
|
lt_icfhndlist = to_icfhndlist( it_icfhandler ).
|
|
lv_parent = find_parent( iv_url ).
|
|
|
|
* nice, it seems that the structure should be mistreated
|
|
ls_icfdocu = is_icfdocu-icf_docu.
|
|
|
|
MOVE-CORRESPONDING is_icfservice TO ls_icfserdesc.
|
|
|
|
cl_icf_tree=>if_icf_tree~insert_node(
|
|
EXPORTING
|
|
icf_name = is_icfservice-orig_name
|
|
icfparguid = lv_parent
|
|
icfdocu = ls_icfdocu
|
|
doculang = mv_language
|
|
icfhandlst = lt_icfhndlist
|
|
package = iv_package
|
|
application = space
|
|
icfserdesc = ls_icfserdesc
|
|
icfactive = abap_true
|
|
EXCEPTIONS
|
|
empty_icf_name = 1
|
|
no_new_virtual_host = 2
|
|
special_service_error = 3
|
|
parent_not_existing = 4
|
|
enqueue_error = 5
|
|
node_already_existing = 6
|
|
empty_docu = 7
|
|
doculang_not_installed = 8
|
|
security_info_error = 9
|
|
user_password_error = 10
|
|
password_encryption_error = 11
|
|
invalid_url = 12
|
|
invalid_otr_concept = 13
|
|
formflg401_error = 14
|
|
handler_error = 15
|
|
transport_error = 16
|
|
tadir_error = 17
|
|
package_not_found = 18
|
|
wrong_application = 19
|
|
not_allow_application = 20
|
|
no_application = 21
|
|
invalid_icfparguid = 22
|
|
alt_name_invalid = 23
|
|
alternate_name_exist = 24
|
|
wrong_icf_name = 25
|
|
no_authority = 26
|
|
OTHERS = 27 ).
|
|
IF sy-subrc <> 0.
|
|
lcx_exception=>raise( |SICF - error from insert_node: { sy-subrc }| ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD. "insert_sicf
|
|
|
|
METHOD change_sicf.
|
|
|
|
DATA: lt_icfhndlist TYPE icfhndlist,
|
|
lt_existing TYPE TABLE OF icfhandler,
|
|
ls_icfserdesc TYPE icfserdesc.
|
|
|
|
FIELD-SYMBOLS: <ls_existing> LIKE LINE OF lt_existing.
|
|
|
|
|
|
lt_icfhndlist = to_icfhndlist( it_icfhandler ).
|
|
|
|
* Do not add handlers if they already exist, it will make the below
|
|
* call to SAP standard code raise an exception
|
|
SELECT * FROM icfhandler INTO TABLE lt_existing
|
|
WHERE icf_name = is_icfservice-icf_name.
|
|
LOOP AT lt_existing ASSIGNING <ls_existing>.
|
|
DELETE TABLE lt_icfhndlist FROM <ls_existing>-icfhandler.
|
|
ENDLOOP.
|
|
|
|
MOVE-CORRESPONDING is_icfservice TO ls_icfserdesc.
|
|
|
|
cl_icf_tree=>if_icf_tree~change_node(
|
|
EXPORTING
|
|
icf_name = is_icfservice-orig_name
|
|
icfparguid = iv_parent
|
|
icfdocu = is_icfdocu
|
|
doculang = mv_language
|
|
icfhandlst = lt_icfhndlist
|
|
package = iv_package
|
|
application = space
|
|
icfserdesc = ls_icfserdesc
|
|
icfactive = abap_true
|
|
EXCEPTIONS
|
|
empty_icf_name = 1
|
|
no_new_virtual_host = 2
|
|
special_service_error = 3
|
|
parent_not_existing = 4
|
|
enqueue_error = 5
|
|
node_already_existing = 6
|
|
empty_docu = 7
|
|
doculang_not_installed = 8
|
|
security_info_error = 9
|
|
user_password_error = 10
|
|
password_encryption_error = 11
|
|
invalid_url = 12
|
|
invalid_otr_concept = 13
|
|
formflg401_error = 14
|
|
handler_error = 15
|
|
transport_error = 16
|
|
tadir_error = 17
|
|
package_not_found = 18
|
|
wrong_application = 19
|
|
not_allow_application = 20
|
|
no_application = 21
|
|
invalid_icfparguid = 22
|
|
alt_name_invalid = 23
|
|
alternate_name_exist = 24
|
|
wrong_icf_name = 25
|
|
no_authority = 26
|
|
OTHERS = 27 ).
|
|
IF sy-subrc <> 0.
|
|
lcx_exception=>raise( 'SICF - error from change_node' ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD. "change_sicf
|
|
|
|
METHOD lif_object~delete.
|
|
|
|
DATA: ls_icfservice TYPE icfservice.
|
|
|
|
|
|
read( IMPORTING es_icfservice = ls_icfservice ).
|
|
|
|
cl_icf_tree=>if_icf_tree~delete_node(
|
|
EXPORTING
|
|
icfparguid = ls_icfservice-icfparguid
|
|
CHANGING
|
|
icf_name = ls_icfservice-icf_name
|
|
EXCEPTIONS
|
|
no_virtual_host_delete = 1
|
|
special_service_error = 2
|
|
enqueue_error = 3
|
|
node_not_existing = 4
|
|
node_has_childs = 5
|
|
node_is_aliased = 6
|
|
node_not_in_original_system = 7
|
|
transport_error = 8
|
|
tadir_error = 9
|
|
db_error = 10
|
|
no_authority = 11
|
|
OTHERS = 12 ).
|
|
IF sy-subrc <> 0.
|
|
lcx_exception=>raise( 'SICF - error from delete_node' ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD. "delete
|
|
|
|
METHOD lif_object~jump.
|
|
lcx_exception=>raise( 'todo, SICF, jump' ).
|
|
ENDMETHOD. "jump
|
|
|
|
METHOD lif_object~compare_to_remote_version.
|
|
CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
|
|
ENDMETHOD.
|
|
|
|
ENDCLASS. "lcl_object_sicf IMPLEMENTATION
|