mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
SPRX: Proxy Object
Proxy objects are quite complex. With this commit we add basic SPRX support. Working scenarios are: - Service Consumer - Service Provider
This commit is contained in:
parent
96edce7e96
commit
6cc064d794
|
@ -172,14 +172,38 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD zif_abapgit_object~delete.
|
METHOD zif_abapgit_object~delete.
|
||||||
DATA: ls_clskey TYPE seoclskey.
|
DATA: ls_clskey TYPE seoclskey,
|
||||||
|
ls_vseointerf TYPE vseointerf.
|
||||||
|
|
||||||
ls_clskey-clsname = ms_item-obj_name.
|
ls_clskey-clsname = ms_item-obj_name.
|
||||||
|
ls_vseointerf = mi_object_oriented_object_fct->get_interface_properties( ls_clskey ).
|
||||||
|
|
||||||
|
IF ls_vseointerf-clsproxy = abap_true.
|
||||||
|
" Proxy interfaces are managed via SPRX
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF zif_abapgit_object~exists( ) = abap_false.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
mi_object_oriented_object_fct->delete( ls_clskey ).
|
mi_object_oriented_object_fct->delete( ls_clskey ).
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD zif_abapgit_object~deserialize.
|
METHOD zif_abapgit_object~deserialize.
|
||||||
|
|
||||||
|
DATA: ls_vseointerf TYPE vseointerf,
|
||||||
|
ls_clskey TYPE seoclskey.
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'VSEOINTERF'
|
||||||
|
CHANGING cg_data = ls_vseointerf ).
|
||||||
|
|
||||||
|
IF ls_vseointerf-clsproxy = abap_true.
|
||||||
|
" Proxy interfaces are managed via SPRX
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
deserialize_abap( io_xml = io_xml
|
deserialize_abap( io_xml = io_xml
|
||||||
iv_package = iv_package ).
|
iv_package = iv_package ).
|
||||||
|
|
||||||
|
@ -229,6 +253,25 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
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_name }|.
|
||||||
|
OVERLAY lv_object WITH '==============================P'.
|
||||||
|
lv_object = lv_object && '*'.
|
||||||
|
|
||||||
|
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESEOCLASS'
|
||||||
|
iv_argument = lv_object ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
METHOD zif_abapgit_object~jump.
|
METHOD zif_abapgit_object~jump.
|
||||||
CALL FUNCTION 'RS_TOOL_ACCESS'
|
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||||
EXPORTING
|
EXPORTING
|
||||||
|
@ -265,22 +308,4 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION.
|
||||||
|
|
||||||
serialize_xml( io_xml ).
|
serialize_xml( io_xml ).
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD zif_abapgit_object~is_locked.
|
|
||||||
|
|
||||||
DATA: lv_object TYPE eqegraarg.
|
|
||||||
|
|
||||||
lv_object = |{ ms_item-obj_name }|.
|
|
||||||
OVERLAY lv_object WITH '==============================P'.
|
|
||||||
lv_object = lv_object && '*'.
|
|
||||||
|
|
||||||
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'ESEOCLASS'
|
|
||||||
iv_argument = lv_object ).
|
|
||||||
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD zif_abapgit_object~is_active.
|
|
||||||
rv_active = is_active( ).
|
|
||||||
ENDMETHOD.
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
485
src/objects/zcl_abapgit_object_sprx.clas.abap
Normal file
485
src/objects/zcl_abapgit_object_sprx.clas.abap
Normal file
|
@ -0,0 +1,485 @@
|
||||||
|
CLASS zcl_abapgit_object_sprx DEFINITION
|
||||||
|
INHERITING FROM zcl_abapgit_objects_super
|
||||||
|
PUBLIC
|
||||||
|
FINAL
|
||||||
|
CREATE PUBLIC .
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
INTERFACES:
|
||||||
|
zif_abapgit_object.
|
||||||
|
|
||||||
|
METHODS:
|
||||||
|
constructor
|
||||||
|
IMPORTING
|
||||||
|
is_item TYPE zif_abapgit_definitions=>ty_item
|
||||||
|
iv_language TYPE spras
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
CONSTANTS:
|
||||||
|
BEGIN OF c_proxy,
|
||||||
|
data TYPE string VALUE 'PROXY_DATA' ##NO_TEXT,
|
||||||
|
header TYPE string VALUE 'PROXY_HEADER' ##NO_TEXT,
|
||||||
|
END OF c_proxy.
|
||||||
|
|
||||||
|
METHODS:
|
||||||
|
get_object_and_name
|
||||||
|
EXPORTING
|
||||||
|
ev_object TYPE sproxhdr-object
|
||||||
|
ev_obj_name TYPE sproxhdr-obj_name,
|
||||||
|
|
||||||
|
activate_classes
|
||||||
|
IMPORTING
|
||||||
|
it_sproxdat_new TYPE sprx_dat_t
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception,
|
||||||
|
|
||||||
|
generate_service_definition
|
||||||
|
IMPORTING
|
||||||
|
it_sproxdat_new TYPE sprx_dat_t
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception,
|
||||||
|
|
||||||
|
delta_handling
|
||||||
|
IMPORTING
|
||||||
|
io_xml TYPE REF TO zcl_abapgit_xml_input
|
||||||
|
EXPORTING
|
||||||
|
et_sproxhdr_new TYPE sprx_hdr_t
|
||||||
|
et_sproxdat_new TYPE sprx_dat_t
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception,
|
||||||
|
|
||||||
|
check_sprx_tadir
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception,
|
||||||
|
|
||||||
|
dequeue_proxy
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception,
|
||||||
|
|
||||||
|
save
|
||||||
|
IMPORTING
|
||||||
|
it_sproxhdr_new TYPE sprx_hdr_t
|
||||||
|
it_sproxdat_new TYPE sprx_dat_t.
|
||||||
|
|
||||||
|
DATA:
|
||||||
|
mv_object TYPE sproxhdr-object,
|
||||||
|
mv_obj_name TYPE sproxhdr-obj_name.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CLASS zcl_abapgit_object_sprx IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD activate_classes.
|
||||||
|
|
||||||
|
DATA: lt_objects TYPE STANDARD TABLE OF dwinactiv,
|
||||||
|
ls_object LIKE LINE OF lt_objects.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_sproxdat_new> TYPE sprx_dat.
|
||||||
|
|
||||||
|
" Somehow the classes aren't activated by the proxy framework.
|
||||||
|
" This seems weird and it's almost certain a result of wrong API calls.
|
||||||
|
" So as a quick fix we activate them ourselves. This surely has to
|
||||||
|
" be improved in the future. ZCL_ABAPGIT_OBJECTS_ACTIVATION cannot
|
||||||
|
" be used as it doesn't activate classes.
|
||||||
|
|
||||||
|
LOOP AT it_sproxdat_new ASSIGNING <ls_sproxdat_new>
|
||||||
|
WHERE object1 = 'CLAS'.
|
||||||
|
|
||||||
|
ls_object-object = <ls_sproxdat_new>-object1.
|
||||||
|
ls_object-obj_name = <ls_sproxdat_new>-obj_name1.
|
||||||
|
INSERT ls_object INTO TABLE lt_objects.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
CALL FUNCTION 'RS_WORKING_OBJECTS_ACTIVATE'
|
||||||
|
EXPORTING
|
||||||
|
activate_ddic_objects = abap_false
|
||||||
|
with_popup = abap_false
|
||||||
|
TABLES
|
||||||
|
objects = lt_objects
|
||||||
|
EXCEPTIONS
|
||||||
|
excecution_error = 1
|
||||||
|
cancelled = 2
|
||||||
|
insert_into_corr_error = 3
|
||||||
|
OTHERS = 4.
|
||||||
|
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
zcx_abapgit_exception=>raise( |Error from RS_WORKING_OBJECTS_ACTIVATE. Subrc={ sy-subrc }| ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD constructor.
|
||||||
|
|
||||||
|
super->constructor( is_item = is_item
|
||||||
|
iv_language = iv_language ).
|
||||||
|
|
||||||
|
get_object_and_name(
|
||||||
|
IMPORTING
|
||||||
|
ev_object = mv_object
|
||||||
|
ev_obj_name = mv_obj_name ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD delta_handling.
|
||||||
|
|
||||||
|
DATA: lo_proxy TYPE REF TO cl_proxy,
|
||||||
|
lt_delta TYPE sprx_t_delta,
|
||||||
|
ls_db_data TYPE sprx_db_data.
|
||||||
|
|
||||||
|
"add Delta-Handling to avoid that single objects created without the dependent objects.
|
||||||
|
"Thereby the dependent objects will be deleted
|
||||||
|
TRY.
|
||||||
|
lo_proxy = cl_proxy_fact=>load_by_abap_name(
|
||||||
|
object = mv_object
|
||||||
|
obj_name = mv_obj_name ).
|
||||||
|
|
||||||
|
|
||||||
|
lt_delta = lo_proxy->get_delta_all( ).
|
||||||
|
|
||||||
|
ls_db_data = cl_proxy_db=>serialize(
|
||||||
|
proxy = lo_proxy
|
||||||
|
inactive = abap_false
|
||||||
|
delta = lt_delta ).
|
||||||
|
|
||||||
|
et_sproxhdr_new = ls_db_data-sproxhdr.
|
||||||
|
et_sproxdat_new = ls_db_data-sproxdat.
|
||||||
|
|
||||||
|
CATCH cx_proxy_gen_error.
|
||||||
|
"No delta for this object -> create
|
||||||
|
|
||||||
|
io_xml->read(
|
||||||
|
EXPORTING
|
||||||
|
iv_name = c_proxy-header
|
||||||
|
CHANGING
|
||||||
|
cg_data = et_sproxhdr_new ).
|
||||||
|
|
||||||
|
IF et_sproxhdr_new IS INITIAL.
|
||||||
|
zcx_abapgit_exception=>raise( |SPRX - error deserialize: { ms_item-obj_name }| ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
io_xml->read(
|
||||||
|
EXPORTING
|
||||||
|
iv_name = c_proxy-data
|
||||||
|
CHANGING
|
||||||
|
cg_data = et_sproxdat_new ).
|
||||||
|
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD generate_service_definition.
|
||||||
|
|
||||||
|
DATA: lv_transport TYPE e070use-ordernum,
|
||||||
|
lo_proxy_object TYPE REF TO cl_proxy_object,
|
||||||
|
lx_proxy_fault TYPE REF TO cx_proxy_fault.
|
||||||
|
|
||||||
|
lv_transport = zcl_abapgit_default_transport=>get_instance(
|
||||||
|
)->get( )-ordernum.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
lo_proxy_object = cl_pxn_factory=>create(
|
||||||
|
application = 'PROXY_UI'
|
||||||
|
display_only = abap_false
|
||||||
|
saveable = abap_true
|
||||||
|
)->load_by_abap_name_int(
|
||||||
|
object = mv_object
|
||||||
|
obj_name = mv_obj_name
|
||||||
|
)->proxy.
|
||||||
|
|
||||||
|
lo_proxy_object->activate(
|
||||||
|
EXPORTING
|
||||||
|
activate_all = abap_true
|
||||||
|
CHANGING
|
||||||
|
transport_number = lv_transport ).
|
||||||
|
|
||||||
|
lo_proxy_object->dequeue( ).
|
||||||
|
|
||||||
|
CATCH cx_proxy_fault INTO lx_proxy_fault.
|
||||||
|
zcx_abapgit_exception=>raise( iv_text = |{ lx_proxy_fault->get_text( ) }|
|
||||||
|
ix_previous = lx_proxy_fault ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
activate_classes( it_sproxdat_new ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD get_object_and_name.
|
||||||
|
|
||||||
|
ev_object = ms_item-obj_name(4).
|
||||||
|
ev_obj_name = ms_item-obj_name+4.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD zif_abapgit_object~changed_by.
|
||||||
|
|
||||||
|
DATA lv_changed_by TYPE sproxhdr-changed_by.
|
||||||
|
|
||||||
|
rv_user = c_user_unknown.
|
||||||
|
|
||||||
|
SELECT SINGLE changed_by
|
||||||
|
FROM sproxhdr
|
||||||
|
INTO lv_changed_by
|
||||||
|
WHERE object = mv_object
|
||||||
|
AND obj_name = mv_obj_name
|
||||||
|
AND inactive = abap_false.
|
||||||
|
|
||||||
|
IF sy-subrc = 0
|
||||||
|
AND lv_changed_by IS NOT INITIAL.
|
||||||
|
rv_user = lv_changed_by.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD zif_abapgit_object~compare_to_remote_version.
|
||||||
|
CREATE OBJECT ro_comparison_result TYPE zcl_abapgit_comparison_null.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD zif_abapgit_object~delete.
|
||||||
|
|
||||||
|
DATA:
|
||||||
|
lv_object TYPE sproxhdr-object,
|
||||||
|
lv_obj_name TYPE sproxhdr-obj_name,
|
||||||
|
lv_return_code TYPE i,
|
||||||
|
lt_log TYPE sprx_log_t.
|
||||||
|
|
||||||
|
get_object_and_name(
|
||||||
|
IMPORTING
|
||||||
|
ev_object = lv_object
|
||||||
|
ev_obj_name = lv_obj_name ).
|
||||||
|
|
||||||
|
cl_proxy_data=>delete_single_proxy(
|
||||||
|
EXPORTING
|
||||||
|
object = lv_object
|
||||||
|
obj_name = lv_obj_name
|
||||||
|
CHANGING
|
||||||
|
c_return_code = lv_return_code
|
||||||
|
ct_log = lt_log ).
|
||||||
|
IF lv_return_code <> 0.
|
||||||
|
zcx_abapgit_exception=>raise( 'SPRX: Error from DELETE_SINGLE_PROXY' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD zif_abapgit_object~deserialize.
|
||||||
|
|
||||||
|
DATA: lt_sproxhdr_new TYPE sprx_hdr_t,
|
||||||
|
lt_sproxdat_new TYPE sprx_dat_t.
|
||||||
|
|
||||||
|
tadir_insert( iv_package ).
|
||||||
|
|
||||||
|
delta_handling(
|
||||||
|
EXPORTING
|
||||||
|
io_xml = io_xml
|
||||||
|
IMPORTING
|
||||||
|
et_sproxhdr_new = lt_sproxhdr_new
|
||||||
|
et_sproxdat_new = lt_sproxdat_new ).
|
||||||
|
|
||||||
|
save(
|
||||||
|
it_sproxhdr_new = lt_sproxhdr_new
|
||||||
|
it_sproxdat_new = lt_sproxdat_new ).
|
||||||
|
|
||||||
|
check_sprx_tadir( ).
|
||||||
|
|
||||||
|
dequeue_proxy( ).
|
||||||
|
|
||||||
|
IF mv_object = 'INTF'.
|
||||||
|
generate_service_definition( lt_sproxdat_new ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD zif_abapgit_object~exists.
|
||||||
|
|
||||||
|
DATA:
|
||||||
|
lv_status TYPE prx_status,
|
||||||
|
lv_status_text TYPE prx_status_t.
|
||||||
|
|
||||||
|
cl_proxy_data=>db_get_status(
|
||||||
|
EXPORTING
|
||||||
|
object = mv_object
|
||||||
|
obj_name = mv_obj_name
|
||||||
|
IMPORTING
|
||||||
|
status = lv_status
|
||||||
|
status_text = lv_status_text ).
|
||||||
|
|
||||||
|
IF lv_status = if_proxy=>c_state_active.
|
||||||
|
rv_bool = abap_true.
|
||||||
|
ELSE.
|
||||||
|
rv_bool = abap_false.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD zif_abapgit_object~get_metadata.
|
||||||
|
rs_metadata = get_metadata( ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD zif_abapgit_object~has_changed_since.
|
||||||
|
rv_changed = abap_true.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD zif_abapgit_object~is_active.
|
||||||
|
rv_active = abap_true. "dummy implementation
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD zif_abapgit_object~is_locked.
|
||||||
|
rv_is_locked = abap_false.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD zif_abapgit_object~jump.
|
||||||
|
|
||||||
|
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||||
|
EXPORTING
|
||||||
|
operation = 'SHOW'
|
||||||
|
object_name = ms_item-obj_name
|
||||||
|
object_type = ms_item-obj_type
|
||||||
|
in_new_window = abap_true.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD zif_abapgit_object~serialize.
|
||||||
|
|
||||||
|
DATA:
|
||||||
|
lo_proxy TYPE REF TO cl_proxy,
|
||||||
|
ls_sprx_db_data TYPE sprx_db_data,
|
||||||
|
lt_delta TYPE sprx_t_delta.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS:
|
||||||
|
<ls_sproxheader> LIKE LINE OF ls_sprx_db_data-sproxhdr,
|
||||||
|
<ls_sproxdat> TYPE sprx_dat.
|
||||||
|
|
||||||
|
IF zif_abapgit_object~exists( ) = abap_false.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
lo_proxy = cl_proxy_fact=>load_by_abap_name(
|
||||||
|
object = mv_object
|
||||||
|
obj_name = mv_obj_name ).
|
||||||
|
|
||||||
|
lt_delta = lo_proxy->get_delta_all( ).
|
||||||
|
|
||||||
|
ls_sprx_db_data = cl_proxy_db=>serialize(
|
||||||
|
proxy = lo_proxy
|
||||||
|
inactive = abap_false
|
||||||
|
delta = lt_delta ).
|
||||||
|
|
||||||
|
|
||||||
|
LOOP AT ls_sprx_db_data-sproxhdr ASSIGNING <ls_sproxheader>.
|
||||||
|
|
||||||
|
CLEAR:
|
||||||
|
<ls_sproxheader>-created_by,
|
||||||
|
<ls_sproxheader>-created_on,
|
||||||
|
<ls_sproxheader>-changed_by,
|
||||||
|
<ls_sproxheader>-changed_on.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
LOOP AT ls_sprx_db_data-sproxdat ASSIGNING <ls_sproxdat>.
|
||||||
|
|
||||||
|
CLEAR <ls_sproxdat>-warnings.
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
io_xml->add(
|
||||||
|
iv_name = c_proxy-header
|
||||||
|
ig_data = ls_sprx_db_data-sproxhdr ).
|
||||||
|
|
||||||
|
io_xml->add(
|
||||||
|
iv_name = c_proxy-data
|
||||||
|
ig_data = ls_sprx_db_data-sproxdat ).
|
||||||
|
|
||||||
|
CATCH cx_proxy_gen_error.
|
||||||
|
zcx_abapgit_exception=>raise( |SPRX - error load proxy { mv_obj_name }| ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD check_sprx_tadir.
|
||||||
|
|
||||||
|
DATA: lt_abap_keys TYPE prx_abapobjects,
|
||||||
|
ls_abap_key LIKE LINE OF lt_abap_keys,
|
||||||
|
lx_error TYPE REF TO cx_proxy_gen_error.
|
||||||
|
|
||||||
|
ls_abap_key-object = mv_object.
|
||||||
|
ls_abap_key-obj_name = mv_obj_name.
|
||||||
|
APPEND ls_abap_key TO lt_abap_keys.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
cl_proxy_utils=>check_sprx_tadir(
|
||||||
|
objects = lt_abap_keys
|
||||||
|
repair = abap_true ).
|
||||||
|
|
||||||
|
CATCH cx_proxy_gen_error INTO lx_error.
|
||||||
|
zcx_abapgit_exception=>raise( iv_text = |{ lx_error->get_text( ) }|
|
||||||
|
ix_previous = lx_error ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD dequeue_proxy.
|
||||||
|
|
||||||
|
DATA: lo_proxy TYPE REF TO cl_proxy,
|
||||||
|
lx_error TYPE REF TO cx_proxy_gen_error.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
lo_proxy = cl_proxy_fact=>load_by_abap_name(
|
||||||
|
object = mv_object
|
||||||
|
obj_name = mv_obj_name ).
|
||||||
|
|
||||||
|
lo_proxy->dequeue( ).
|
||||||
|
|
||||||
|
CATCH cx_proxy_gen_error INTO lx_error.
|
||||||
|
zcx_abapgit_exception=>raise( iv_text = |{ lx_error->get_text( ) }|
|
||||||
|
ix_previous = lx_error ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD save.
|
||||||
|
|
||||||
|
DATA:
|
||||||
|
lt_sproxhdr_old TYPE sprx_hdr_t,
|
||||||
|
lt_sproxdat_old TYPE sprx_dat_t,
|
||||||
|
lt_sproxsvar_old TYPE sprx_svar_t,
|
||||||
|
lt_sproxintf_old TYPE sprx_matchintf_t,
|
||||||
|
lt_sproxsvar_new TYPE sprx_svar_t,
|
||||||
|
lt_sproxintf_new TYPE sprx_matchintf_t.
|
||||||
|
|
||||||
|
cl_proxy_data=>db_save(
|
||||||
|
sproxhdr_old = lt_sproxhdr_old
|
||||||
|
sproxdat_old = lt_sproxdat_old
|
||||||
|
sproxsvar_old = lt_sproxsvar_old
|
||||||
|
sproxintf_old = lt_sproxintf_old
|
||||||
|
sproxhdr_new = it_sproxhdr_new
|
||||||
|
sproxdat_new = it_sproxdat_new
|
||||||
|
sproxsvar_new = lt_sproxsvar_new
|
||||||
|
sproxintf_new = lt_sproxintf_new ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
17
src/objects/zcl_abapgit_object_sprx.clas.xml
Normal file
17
src/objects/zcl_abapgit_object_sprx.clas.xml
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<VSEOCLASS>
|
||||||
|
<CLSNAME>ZCL_ABAPGIT_OBJECT_SPRX</CLSNAME>
|
||||||
|
<VERSION>1</VERSION>
|
||||||
|
<LANGU>E</LANGU>
|
||||||
|
<DESCRIPT>Proxy Objects</DESCRIPT>
|
||||||
|
<STATE>1</STATE>
|
||||||
|
<CLSCCINCL>X</CLSCCINCL>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<UNICODE>X</UNICODE>
|
||||||
|
</VSEOCLASS>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -432,6 +432,10 @@ CLASS ZCL_ABAPGIT_OBJECT_TABL IMPLEMENTATION.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <lg_data> TYPE any.
|
FIELD-SYMBOLS: <lg_data> TYPE any.
|
||||||
|
|
||||||
|
IF zif_abapgit_object~exists( ) = abap_false.
|
||||||
|
" Proxies e.g. delete on its own, nothing todo here then.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
lv_objname = ms_item-obj_name.
|
lv_objname = ms_item-obj_name.
|
||||||
|
|
||||||
|
|
|
@ -64,6 +64,9 @@ CLASS zcl_abapgit_object_ttyp IMPLEMENTATION.
|
||||||
|
|
||||||
DATA: lv_objname TYPE rsedd0-ddobjname.
|
DATA: lv_objname TYPE rsedd0-ddobjname.
|
||||||
|
|
||||||
|
IF zif_abapgit_object~exists( ) = abap_false.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
lv_objname = ms_item-obj_name.
|
lv_objname = ms_item-obj_name.
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,8 @@ CLASS zcl_abapgit_object_webi DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
|
||||||
pvependpoint TYPE STANDARD TABLE OF vependpoint WITH DEFAULT KEY,
|
pvependpoint TYPE STANDARD TABLE OF vependpoint WITH DEFAULT KEY,
|
||||||
pvepvisoapext TYPE STANDARD TABLE OF vepvisoapext WITH DEFAULT KEY,
|
pvepvisoapext TYPE STANDARD TABLE OF vepvisoapext WITH DEFAULT KEY,
|
||||||
pvepparasoapext TYPE STANDARD TABLE OF vepparasoapext WITH DEFAULT KEY,
|
pvepparasoapext TYPE STANDARD TABLE OF vepparasoapext WITH DEFAULT KEY,
|
||||||
|
pwsheader TYPE STANDARD TABLE OF wsheader WITH DEFAULT KEY,
|
||||||
|
pwssoapprop TYPE STANDARD TABLE OF wssoapprop WITH DEFAULT KEY,
|
||||||
END OF ty_webi.
|
END OF ty_webi.
|
||||||
|
|
||||||
DATA: mi_vi TYPE REF TO if_ws_md_vif.
|
DATA: mi_vi TYPE REF TO if_ws_md_vif.
|
||||||
|
@ -48,8 +50,7 @@ CLASS zcl_abapgit_object_webi DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
CLASS zcl_abapgit_object_webi IMPLEMENTATION.
|
||||||
CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION.
|
|
||||||
|
|
||||||
|
|
||||||
METHOD handle_endpoint.
|
METHOD handle_endpoint.
|
||||||
|
@ -113,13 +114,22 @@ CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION.
|
||||||
LOOP AT is_webi-pvepfunction ASSIGNING <ls_function>.
|
LOOP AT is_webi-pvepfunction ASSIGNING <ls_function>.
|
||||||
|
|
||||||
IF mi_vi->has_function( funcname = <ls_function>-function
|
IF mi_vi->has_function( funcname = <ls_function>-function
|
||||||
version = sews_c_vif_version-active ) = abap_true.
|
version = sews_c_vif_version-active ) = abap_true.
|
||||||
CONTINUE.
|
CONTINUE.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
li_function = mi_vi->create_function(
|
IF mi_vi->has_function( funcname = <ls_function>-function
|
||||||
funcname = <ls_function>-function
|
version = sews_c_vif_version-inactive ) = abap_true.
|
||||||
mapped_name = <ls_function>-mappedname ).
|
|
||||||
|
li_function = mi_vi->get_function( funcname = <ls_function>-function
|
||||||
|
version = sews_c_vif_version-inactive ).
|
||||||
|
|
||||||
|
ELSE.
|
||||||
|
|
||||||
|
li_function = mi_vi->create_function( funcname = <ls_function>-function
|
||||||
|
mapped_name = <ls_function>-mappedname ).
|
||||||
|
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
li_function->set_is_exposed( <ls_function>-is_exposed ).
|
li_function->set_is_exposed( <ls_function>-is_exposed ).
|
||||||
|
|
||||||
|
@ -182,7 +192,12 @@ CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION.
|
||||||
RETURN.
|
RETURN.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
li_soap = mi_vi->create_soap_extension_virtinfc( ls_soap-soap_appl_uri ).
|
IF mi_vi->has_soap_extension_virtinfc( sews_c_vif_version-inactive ) = abap_true.
|
||||||
|
li_soap = mi_vi->get_soap_extension_virtinfc( sews_c_vif_version-inactive ).
|
||||||
|
ELSE.
|
||||||
|
li_soap = mi_vi->create_soap_extension_virtinfc( ls_soap-soap_appl_uri ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
li_soap->set_namespace( ls_soap-namespace ).
|
li_soap->set_namespace( ls_soap-namespace ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
@ -300,20 +315,27 @@ CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD zif_abapgit_object~deserialize.
|
METHOD zif_abapgit_object~deserialize.
|
||||||
|
|
||||||
DATA: ls_webi TYPE ty_webi,
|
DATA: ls_webi TYPE ty_webi,
|
||||||
lv_name TYPE vepname,
|
lv_name TYPE vepname,
|
||||||
ls_header LIKE LINE OF ls_webi-pvepheader,
|
ls_header LIKE LINE OF ls_webi-pvepheader,
|
||||||
lv_text TYPE string ##needed,
|
lx_root TYPE REF TO cx_root,
|
||||||
lx_root TYPE REF TO cx_root,
|
lv_exists TYPE abap_bool,
|
||||||
lv_exists TYPE abap_bool,
|
li_root TYPE REF TO if_ws_md_vif_root,
|
||||||
li_root TYPE REF TO if_ws_md_vif_root.
|
ls_endpoint LIKE LINE OF ls_webi-pvependpoint.
|
||||||
|
|
||||||
|
|
||||||
io_xml->read( EXPORTING iv_name = 'WEBI'
|
io_xml->read( EXPORTING iv_name = 'WEBI'
|
||||||
CHANGING cg_data = ls_webi ).
|
CHANGING cg_data = ls_webi ).
|
||||||
|
|
||||||
lv_name = ms_item-obj_name.
|
lv_name = ms_item-obj_name.
|
||||||
|
|
||||||
|
READ TABLE ls_webi-pvependpoint INDEX 1 INTO ls_endpoint.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
IF ls_endpoint-auto_generated = abap_true.
|
||||||
|
" handled by SPRX.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
READ TABLE ls_webi-pvepheader INDEX 1 INTO ls_header.
|
READ TABLE ls_webi-pvepheader INDEX 1 INTO ls_header.
|
||||||
ASSERT sy-subrc = 0.
|
ASSERT sy-subrc = 0.
|
||||||
|
|
||||||
|
@ -348,8 +370,7 @@ CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION.
|
||||||
mi_vi->if_ws_md_lockable_object~unlock( ).
|
mi_vi->if_ws_md_lockable_object~unlock( ).
|
||||||
CATCH cx_ws_md_exception ##no_handler.
|
CATCH cx_ws_md_exception ##no_handler.
|
||||||
ENDTRY.
|
ENDTRY.
|
||||||
lv_text = lx_root->if_message~get_text( ).
|
zcx_abapgit_exception=>raise( lx_root->if_message~get_text( ) ).
|
||||||
zcx_abapgit_exception=>raise( 'error deserializing WEBI' ).
|
|
||||||
ENDTRY.
|
ENDTRY.
|
||||||
|
|
||||||
zcl_abapgit_objects_activation=>add_item( ms_item ).
|
zcl_abapgit_objects_activation=>add_item( ms_item ).
|
||||||
|
@ -410,8 +431,9 @@ CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION.
|
||||||
li_vi TYPE REF TO if_ws_md_vif,
|
li_vi TYPE REF TO if_ws_md_vif,
|
||||||
lv_name TYPE vepname.
|
lv_name TYPE vepname.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_header> LIKE LINE OF ls_webi-pvepheader,
|
FIELD-SYMBOLS: <ls_vepheader> LIKE LINE OF ls_webi-pvepheader,
|
||||||
<ls_endpoint> LIKE LINE OF ls_webi-pvependpoint.
|
<ls_vependpoint> LIKE LINE OF ls_webi-pvependpoint,
|
||||||
|
<ls_wsheader> TYPE wsheader.
|
||||||
|
|
||||||
CALL FUNCTION 'WEBI_GET_OBJECT'
|
CALL FUNCTION 'WEBI_GET_OBJECT'
|
||||||
EXPORTING
|
EXPORTING
|
||||||
|
@ -434,6 +456,8 @@ CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION.
|
||||||
pvependpoint = ls_webi-pvependpoint
|
pvependpoint = ls_webi-pvependpoint
|
||||||
pvepvisoapext = ls_webi-pvepvisoapext
|
pvepvisoapext = ls_webi-pvepvisoapext
|
||||||
pvepparasoapext = ls_webi-pvepparasoapext
|
pvepparasoapext = ls_webi-pvepparasoapext
|
||||||
|
pwsheader = ls_webi-pwsheader
|
||||||
|
pwssoapprop = ls_webi-pwssoapprop
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
version_not_found = 1
|
version_not_found = 1
|
||||||
webi_not_exist = 2
|
webi_not_exist = 2
|
||||||
|
@ -455,19 +479,31 @@ CLASS ZCL_ABAPGIT_OBJECT_WEBI IMPLEMENTATION.
|
||||||
zcx_abapgit_exception=>raise( 'error serializing WEBI' ).
|
zcx_abapgit_exception=>raise( 'error serializing WEBI' ).
|
||||||
ENDTRY.
|
ENDTRY.
|
||||||
|
|
||||||
LOOP AT ls_webi-pvepheader ASSIGNING <ls_header>.
|
LOOP AT ls_webi-pvepheader ASSIGNING <ls_vepheader>.
|
||||||
CLEAR <ls_header>-author.
|
CLEAR <ls_vepheader>-author.
|
||||||
CLEAR <ls_header>-createdon.
|
CLEAR <ls_vepheader>-createdon.
|
||||||
CLEAR <ls_header>-changedby.
|
CLEAR <ls_vepheader>-changedby.
|
||||||
CLEAR <ls_header>-changedon.
|
CLEAR <ls_vepheader>-changedon.
|
||||||
CLEAR <ls_header>-ctime.
|
CLEAR <ls_vepheader>-ctime.
|
||||||
CLEAR <ls_header>-text_id.
|
CLEAR <ls_vepheader>-text_id.
|
||||||
CLEAR <ls_header>-utime.
|
CLEAR <ls_vepheader>-utime.
|
||||||
CLEAR <ls_header>-wsint_version.
|
CLEAR <ls_vepheader>-wsint_version.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
LOOP AT ls_webi-pvependpoint ASSIGNING <ls_endpoint>.
|
LOOP AT ls_webi-pvependpoint ASSIGNING <ls_vependpoint>.
|
||||||
CLEAR: <ls_endpoint>-clustd.
|
CLEAR <ls_vependpoint>-clustd.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
LOOP AT ls_webi-pwsheader ASSIGNING <ls_wsheader>.
|
||||||
|
|
||||||
|
CLEAR:
|
||||||
|
<ls_wsheader>-author,
|
||||||
|
<ls_wsheader>-createdon,
|
||||||
|
<ls_wsheader>-changedby,
|
||||||
|
<ls_wsheader>-changedon,
|
||||||
|
<ls_wsheader>-ctime,
|
||||||
|
<ls_wsheader>-utime.
|
||||||
|
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
io_xml->add( iv_name = 'WEBI'
|
io_xml->add( iv_name = 'WEBI'
|
||||||
|
|
|
@ -224,11 +224,12 @@ CLASS zcl_abapgit_objects DEFINITION
|
||||||
it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
it_results TYPE zif_abapgit_definitions=>ty_results_tt
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt.
|
VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
CLASS zcl_abapgit_objects IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
METHOD adjust_namespaces.
|
METHOD adjust_namespaces.
|
||||||
|
@ -691,6 +692,8 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD filter_files_to_deserialize.
|
METHOD filter_files_to_deserialize.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_result> LIKE LINE OF rt_results.
|
||||||
|
|
||||||
rt_results = it_results.
|
rt_results = it_results.
|
||||||
|
|
||||||
DELETE rt_results WHERE match = abap_true. " Full match
|
DELETE rt_results WHERE match = abap_true. " Full match
|
||||||
|
@ -819,6 +822,16 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_result> LIKE LINE OF it_results.
|
FIELD-SYMBOLS: <ls_result> LIKE LINE OF it_results.
|
||||||
|
|
||||||
|
* WEBI has to be handled before SPRX.
|
||||||
|
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'WEBI'.
|
||||||
|
APPEND <ls_result> TO rt_results.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
* SPRX has to be handled before depended objects CLAS/INFT/TABL etc.
|
||||||
|
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'SPRX'.
|
||||||
|
APPEND <ls_result> TO rt_results.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
* XSLT has to be handled before CLAS/PROG
|
* XSLT has to be handled before CLAS/PROG
|
||||||
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'XSLT'.
|
LOOP AT it_results ASSIGNING <ls_result> WHERE obj_type = 'XSLT'.
|
||||||
APPEND <ls_result> TO rt_results.
|
APPEND <ls_result> TO rt_results.
|
||||||
|
@ -855,7 +868,9 @@ CLASS ZCL_ABAPGIT_OBJECTS IMPLEMENTATION.
|
||||||
AND obj_type <> 'XSLT'
|
AND obj_type <> 'XSLT'
|
||||||
AND obj_type <> 'PINF'
|
AND obj_type <> 'PINF'
|
||||||
AND obj_type <> 'ENHS'
|
AND obj_type <> 'ENHS'
|
||||||
AND obj_type <> 'DDLS'.
|
AND obj_type <> 'DDLS'
|
||||||
|
AND obj_type <> 'SPRX'
|
||||||
|
AND obj_type <> 'WEBI'.
|
||||||
APPEND <ls_result> TO rt_results.
|
APPEND <ls_result> TO rt_results.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user