mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 04:36:49 +08:00
Merge remote-tracking branch 'refs/remotes/larshp/master'
This commit is contained in:
commit
63a938ffb2
|
@ -8,6 +8,19 @@ Legend
|
||||||
+ : added
|
+ : added
|
||||||
- : removed
|
- : removed
|
||||||
|
|
||||||
|
2017-02-25 v1.27.0
|
||||||
|
------------------
|
||||||
|
+ Two factor authentication with github.com
|
||||||
|
|
||||||
|
2017-01-22 v1.26.0
|
||||||
|
------------------
|
||||||
|
+ XML ignore initial fields
|
||||||
|
+ Newline added to end of all ABAP code
|
||||||
|
|
||||||
|
2017-01-22 v1.25.2
|
||||||
|
------------------
|
||||||
|
+ Possibility to set max number of objects in list
|
||||||
|
|
||||||
2016-12-01 v1.24.0
|
2016-12-01 v1.24.0
|
||||||
------------------
|
------------------
|
||||||
+ abap syntax highlighting
|
+ abap syntax highlighting
|
||||||
|
|
|
@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100.
|
||||||
* See http://www.abapgit.org
|
* See http://www.abapgit.org
|
||||||
|
|
||||||
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
|
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
|
||||||
gc_abap_version TYPE string VALUE 'v1.24.9'. "#EC NOTEXT
|
gc_abap_version TYPE string VALUE 'v1.27.0'. "#EC NOTEXT
|
||||||
|
|
||||||
********************************************************************************
|
********************************************************************************
|
||||||
* The MIT License (MIT)
|
* The MIT License (MIT)
|
||||||
|
@ -53,6 +53,7 @@ INCLUDE zabapgit_stage.
|
||||||
INCLUDE zabapgit_git_helpers.
|
INCLUDE zabapgit_git_helpers.
|
||||||
INCLUDE zabapgit_repo.
|
INCLUDE zabapgit_repo.
|
||||||
INCLUDE zabapgit_stage_logic.
|
INCLUDE zabapgit_stage_logic.
|
||||||
|
INCLUDE zabapgit_2fa.
|
||||||
INCLUDE zabapgit_http.
|
INCLUDE zabapgit_http.
|
||||||
INCLUDE zabapgit_git.
|
INCLUDE zabapgit_git.
|
||||||
INCLUDE zabapgit_objects.
|
INCLUDE zabapgit_objects.
|
||||||
|
|
|
@ -5,32 +5,10 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT</NAME>
|
<NAME>ZABAPGIT</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL>S</DBAPL>
|
<DBAPL>S</DBAPL>
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>1</SUBC>
|
<SUBC>1</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD/>
|
|
||||||
<FIXPT>X</FIXPT>
|
<FIXPT>X</FIXPT>
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME>D$S</LDBNAME>
|
<LDBNAME>D$S</LDBNAME>
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
|
@ -38,10 +16,8 @@
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>abapGit</ENTRY>
|
<ENTRY>abapGit</ENTRY>
|
||||||
<LENGTH>7</LENGTH>
|
<LENGTH>7</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -6,20 +6,13 @@
|
||||||
<TCODE>ZABAPGIT</TCODE>
|
<TCODE>ZABAPGIT</TCODE>
|
||||||
<PGMNA>ZABAPGIT</PGMNA>
|
<PGMNA>ZABAPGIT</PGMNA>
|
||||||
<DYPNO>1000</DYPNO>
|
<DYPNO>1000</DYPNO>
|
||||||
<MENUE/>
|
|
||||||
<CINFO>gA==</CINFO>
|
<CINFO>gA==</CINFO>
|
||||||
<ARBGB/>
|
|
||||||
</TSTC>
|
</TSTC>
|
||||||
<TSTCC>
|
<TSTCC>
|
||||||
<TCODE>ZABAPGIT</TCODE>
|
<TCODE>ZABAPGIT</TCODE>
|
||||||
<S_WEBGUI>1</S_WEBGUI>
|
<S_WEBGUI>1</S_WEBGUI>
|
||||||
<S_WIN32>X</S_WIN32>
|
<S_WIN32>X</S_WIN32>
|
||||||
<S_PLATIN>X</S_PLATIN>
|
<S_PLATIN>X</S_PLATIN>
|
||||||
<S_SERVICE/>
|
|
||||||
<S_PERVAS/>
|
|
||||||
<S_DUMMY/>
|
|
||||||
<S_DUMMY1/>
|
|
||||||
<S_DUMMY2/>
|
|
||||||
</TSTCC>
|
</TSTCC>
|
||||||
<TSTCT>
|
<TSTCT>
|
||||||
<SPRSL>E</SPRSL>
|
<SPRSL>E</SPRSL>
|
||||||
|
|
792
src/zabapgit_2fa.prog.abap
Normal file
792
src/zabapgit_2fa.prog.abap
Normal file
|
@ -0,0 +1,792 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_2FA
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
"! Exception base class for two factor authentication related errors
|
||||||
|
CLASS lcx_2fa_error DEFINITION INHERITING FROM cx_static_check.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
METHODS:
|
||||||
|
constructor IMPORTING is_textid LIKE textid OPTIONAL
|
||||||
|
ix_previous LIKE previous OPTIONAL
|
||||||
|
iv_error_text TYPE csequence OPTIONAL,
|
||||||
|
get_text REDEFINITION.
|
||||||
|
DATA:
|
||||||
|
mv_text TYPE string READ-ONLY.
|
||||||
|
PROTECTED SECTION.
|
||||||
|
METHODS:
|
||||||
|
get_default_text RETURNING VALUE(rv_text) TYPE string.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcx_2fa_error IMPLEMENTATION.
|
||||||
|
METHOD constructor.
|
||||||
|
super->constructor( textid = is_textid previous = ix_previous ).
|
||||||
|
mv_text = iv_error_text.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_text.
|
||||||
|
IF mv_text IS NOT INITIAL.
|
||||||
|
result = mv_text.
|
||||||
|
ELSEIF get_default_text( ) IS NOT INITIAL.
|
||||||
|
result = get_default_text( ).
|
||||||
|
ELSE.
|
||||||
|
result = super->get_text( ).
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_default_text.
|
||||||
|
rv_text = 'Error in two factor authentication.' ##NO_TEXT.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcx_2fa_auth_failed DEFINITION INHERITING FROM lcx_2fa_error FINAL.
|
||||||
|
PROTECTED SECTION.
|
||||||
|
METHODS:
|
||||||
|
get_default_text REDEFINITION.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcx_2fa_auth_failed IMPLEMENTATION.
|
||||||
|
METHOD get_default_text.
|
||||||
|
rv_text = 'Authentication failed using 2FA.' ##NO_TEXT.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcx_2fa_token_gen_failed DEFINITION INHERITING FROM lcx_2fa_error FINAL.
|
||||||
|
PROTECTED SECTION.
|
||||||
|
METHODS:
|
||||||
|
get_default_text REDEFINITION.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcx_2fa_token_gen_failed IMPLEMENTATION.
|
||||||
|
METHOD get_default_text.
|
||||||
|
rv_text = 'Two factor access token generation failed.' ##NO_TEXT.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcx_2fa_unsupported DEFINITION INHERITING FROM lcx_2fa_error FINAL.
|
||||||
|
PROTECTED SECTION.
|
||||||
|
METHODS:
|
||||||
|
get_default_text REDEFINITION.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcx_2fa_unsupported IMPLEMENTATION.
|
||||||
|
METHOD get_default_text.
|
||||||
|
rv_text = 'The service is not supported for two factor authentication.' ##NO_TEXT.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcx_2fa_token_del_failed DEFINITION INHERITING FROM lcx_2fa_error FINAL.
|
||||||
|
PROTECTED SECTION.
|
||||||
|
METHODS:
|
||||||
|
get_default_text REDEFINITION.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcx_2fa_token_del_failed IMPLEMENTATION.
|
||||||
|
METHOD get_default_text.
|
||||||
|
rv_text = 'Deleting previous access tokens failed.' ##NO_TEXT.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcx_2fa_communication_error DEFINITION INHERITING FROM lcx_2fa_error FINAL.
|
||||||
|
PROTECTED SECTION.
|
||||||
|
METHODS:
|
||||||
|
get_default_text REDEFINITION.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcx_2fa_communication_error IMPLEMENTATION.
|
||||||
|
METHOD get_default_text.
|
||||||
|
rv_text = 'Communication error.' ##NO_TEXT.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcx_2fa_illegal_state DEFINITION INHERITING FROM lcx_2fa_error FINAL.
|
||||||
|
PROTECTED SECTION.
|
||||||
|
METHODS:
|
||||||
|
get_default_text REDEFINITION.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcx_2fa_illegal_state IMPLEMENTATION.
|
||||||
|
METHOD get_default_text.
|
||||||
|
rv_text = 'Illegal state.' ##NO_TEXT.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
"! Defines a two factor authentication authenticator
|
||||||
|
"! <p>
|
||||||
|
"! Authenticators support one or multiple services and are able to generate access tokens using the
|
||||||
|
"! service's API using the users username, password and two factor authentication token
|
||||||
|
"! (app/sms/tokengenerator). With these access tokens the user can be authenticated to the service's
|
||||||
|
"! implementation of the git http api, just like the "normal" password would.
|
||||||
|
"! </p>
|
||||||
|
"! <p>
|
||||||
|
"! <em>LCL_2FA_AUTHENTICATOR_REGISTRY</em> can be used to find a suitable implementation for a given
|
||||||
|
"! repository.
|
||||||
|
"! </p>
|
||||||
|
"! <p>
|
||||||
|
"! Using the <em>begin</em> and <em>end</em> methods an internal session can be started and
|
||||||
|
"! completed in which internal state necessary for multiple methods will be cached. This can be
|
||||||
|
"! used to avoid having multiple http sessions between <em>authenticate</em> and
|
||||||
|
"! <em>delete_access_tokens</em>.
|
||||||
|
"! </p>
|
||||||
|
INTERFACE lif_2fa_authenticator.
|
||||||
|
METHODS:
|
||||||
|
"! Generate an access token
|
||||||
|
"! @parameter iv_url | Repository url
|
||||||
|
"! @parameter iv_username | Username
|
||||||
|
"! @parameter iv_password | Password
|
||||||
|
"! @parameter iv_2fa_token | Two factor token
|
||||||
|
"! @parameter rv_access_token | Generated access token
|
||||||
|
"! @raising lcx_2fa_auth_failed | Authentication failed
|
||||||
|
"! @raising lcx_2fa_token_gen_failed | Token generation failed
|
||||||
|
authenticate IMPORTING iv_url TYPE string
|
||||||
|
iv_username TYPE string
|
||||||
|
iv_password TYPE string
|
||||||
|
iv_2fa_token TYPE string
|
||||||
|
RETURNING VALUE(rv_access_token) TYPE string
|
||||||
|
RAISING lcx_2fa_auth_failed
|
||||||
|
lcx_2fa_token_gen_failed
|
||||||
|
lcx_2fa_communication_error,
|
||||||
|
"! Check if this authenticator instance supports the give repository url
|
||||||
|
"! @parameter iv_url | Repository url
|
||||||
|
"! @parameter rv_supported | Is supported
|
||||||
|
supports_url IMPORTING iv_url TYPE string
|
||||||
|
RETURNING VALUE(rv_supported) TYPE abap_bool,
|
||||||
|
"! Get a unique identifier for the service that hosts the repository
|
||||||
|
"! @parameter iv_url | Repository url
|
||||||
|
"! @parameter rv_id | Service id
|
||||||
|
"! @raising lcx_2fa_unsupported | Url is not supported
|
||||||
|
get_service_id_from_url IMPORTING iv_url TYPE string
|
||||||
|
RETURNING VALUE(rv_id) TYPE string
|
||||||
|
RAISING lcx_2fa_unsupported,
|
||||||
|
"! Check if two factor authentication is required
|
||||||
|
"! @parameter iv_url | Repository url
|
||||||
|
"! @parameter iv_username | Username
|
||||||
|
"! @parameter iv_password | Password
|
||||||
|
"! @parameter rv_required | 2FA is required
|
||||||
|
is_2fa_required IMPORTING iv_url TYPE string
|
||||||
|
iv_username TYPE string
|
||||||
|
iv_password TYPE string
|
||||||
|
RETURNING VALUE(rv_required) TYPE abap_bool
|
||||||
|
RAISING lcx_2fa_communication_error,
|
||||||
|
"! Delete all previously created access tokens for abapGit
|
||||||
|
"! @parameter iv_url | Repository url
|
||||||
|
"! @parameter iv_username | Username
|
||||||
|
"! @parameter iv_password | Password
|
||||||
|
"! @parameter iv_2fa_token | Two factor token
|
||||||
|
"! @raising lcx_2fa_token_del_failed | Token deletion failed
|
||||||
|
"! @raising lcx_2fa_auth_failed | Authentication failed
|
||||||
|
delete_access_tokens IMPORTING iv_url TYPE string
|
||||||
|
iv_username TYPE string
|
||||||
|
iv_password TYPE string
|
||||||
|
iv_2fa_token TYPE string
|
||||||
|
RAISING lcx_2fa_token_del_failed
|
||||||
|
lcx_2fa_communication_error
|
||||||
|
lcx_2fa_auth_failed,
|
||||||
|
"! Begin an authenticator session that uses internal caching for authorizations
|
||||||
|
"! @raising lcx_2fa_illegal_state | Session already started
|
||||||
|
begin RAISING lcx_2fa_illegal_state,
|
||||||
|
"! End an authenticator session and clear internal caches
|
||||||
|
"! @raising lcx_2fa_illegal_state | Session not running
|
||||||
|
end RAISING lcx_2fa_illegal_state.
|
||||||
|
ENDINTERFACE.
|
||||||
|
|
||||||
|
"! Default <em>LIF_2FA-AUTHENTICATOR</em> implememtation
|
||||||
|
CLASS lcl_2fa_authenticator_base DEFINITION
|
||||||
|
ABSTRACT
|
||||||
|
CREATE PUBLIC.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
INTERFACES:
|
||||||
|
lif_2fa_authenticator.
|
||||||
|
ALIASES:
|
||||||
|
authenticate FOR lif_2fa_authenticator~authenticate,
|
||||||
|
supports_url FOR lif_2fa_authenticator~supports_url,
|
||||||
|
get_service_id_from_url FOR lif_2fa_authenticator~get_service_id_from_url,
|
||||||
|
is_2fa_required FOR lif_2fa_authenticator~is_2fa_required,
|
||||||
|
delete_access_tokens FOR lif_2fa_authenticator~delete_access_tokens,
|
||||||
|
begin FOR lif_2fa_authenticator~begin,
|
||||||
|
end FOR lif_2fa_authenticator~end.
|
||||||
|
METHODS:
|
||||||
|
"! @parameter iv_supported_url_regex | Regular expression to check if a repository url is
|
||||||
|
"! supported, used for default implementation of
|
||||||
|
"! <em>SUPPORTS_URL</em>
|
||||||
|
constructor IMPORTING iv_supported_url_regex TYPE clike.
|
||||||
|
PROTECTED SECTION.
|
||||||
|
CLASS-METHODS:
|
||||||
|
"! Helper method to raise class based exception after traditional exception was raised
|
||||||
|
"! <p>
|
||||||
|
"! <em>sy-msg...</em> must be set right before calling!
|
||||||
|
"! </p>
|
||||||
|
raise_comm_error_from_sy RAISING lcx_2fa_communication_error.
|
||||||
|
METHODS:
|
||||||
|
"! @parameter rv_running | Internal session is currently active
|
||||||
|
is_session_running RETURNING VALUE(rv_running) TYPE abap_bool.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
DATA:
|
||||||
|
mo_url_regex TYPE REF TO cl_abap_regex,
|
||||||
|
mv_session_running TYPE abap_bool.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_2fa_authenticator_base IMPLEMENTATION.
|
||||||
|
METHOD constructor.
|
||||||
|
CREATE OBJECT mo_url_regex
|
||||||
|
EXPORTING
|
||||||
|
pattern = iv_supported_url_regex
|
||||||
|
ignore_case = abap_true.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD authenticate.
|
||||||
|
RAISE EXCEPTION TYPE lcx_2fa_auth_failed. " Needs to be overwritten in subclasses
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD supports_url.
|
||||||
|
rv_supported = mo_url_regex->create_matcher( text = iv_url )->match( ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_service_id_from_url.
|
||||||
|
rv_id = 'UNKNOWN SERVICE'. " Please overwrite in subclasses
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD is_2fa_required.
|
||||||
|
rv_required = abap_false.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD delete_access_tokens.
|
||||||
|
RAISE EXCEPTION TYPE lcx_2fa_token_del_failed. " Needs to be overwritten in subclasses
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD raise_comm_error_from_sy.
|
||||||
|
DATA: lv_error_msg TYPE string.
|
||||||
|
|
||||||
|
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
|
||||||
|
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
|
||||||
|
INTO lv_error_msg.
|
||||||
|
RAISE EXCEPTION TYPE lcx_2fa_communication_error
|
||||||
|
EXPORTING
|
||||||
|
iv_error_text = |Communication error: { lv_error_msg }| ##NO_TEXT.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD begin.
|
||||||
|
IF mv_session_running = abap_true.
|
||||||
|
RAISE EXCEPTION TYPE lcx_2fa_illegal_state.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
mv_session_running = abap_true.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD end.
|
||||||
|
IF mv_session_running = abap_false.
|
||||||
|
RAISE EXCEPTION TYPE lcx_2fa_illegal_state.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
mv_session_running = abap_false.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD is_session_running.
|
||||||
|
rv_running = mv_session_running.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_2fa_github_authenticator DEFINITION
|
||||||
|
INHERITING FROM lcl_2fa_authenticator_base
|
||||||
|
FINAL
|
||||||
|
CREATE PUBLIC.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
METHODS:
|
||||||
|
constructor,
|
||||||
|
get_service_id_from_url REDEFINITION,
|
||||||
|
authenticate REDEFINITION,
|
||||||
|
is_2fa_required REDEFINITION,
|
||||||
|
delete_access_tokens REDEFINITION,
|
||||||
|
end REDEFINITION.
|
||||||
|
PROTECTED SECTION.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
CONSTANTS:
|
||||||
|
gc_github_api_url TYPE string VALUE `https://api.github.com/`,
|
||||||
|
gc_otp_header_name TYPE string VALUE `X-Github-OTP`,
|
||||||
|
gc_restendpoint_authorizations TYPE string VALUE `/authorizations`.
|
||||||
|
CLASS-METHODS:
|
||||||
|
set_new_token_request IMPORTING ii_request TYPE REF TO if_http_request,
|
||||||
|
get_token_from_response IMPORTING ii_response TYPE REF TO if_http_response
|
||||||
|
RETURNING VALUE(rv_token) TYPE string,
|
||||||
|
parse_repo_from_url IMPORTING iv_url TYPE string
|
||||||
|
RETURNING VALUE(rv_repo_name) TYPE string,
|
||||||
|
set_list_token_request IMPORTING ii_request TYPE REF TO if_http_request,
|
||||||
|
get_tobedel_tokens_from_resp IMPORTING ii_response TYPE REF TO if_http_response
|
||||||
|
RETURNING VALUE(rt_ids) TYPE stringtab,
|
||||||
|
set_del_token_request IMPORTING ii_request TYPE REF TO if_http_request
|
||||||
|
iv_token_id TYPE string.
|
||||||
|
METHODS:
|
||||||
|
get_authenticated_client IMPORTING iv_username TYPE string
|
||||||
|
iv_password TYPE string
|
||||||
|
iv_2fa_token TYPE string
|
||||||
|
RETURNING VALUE(ri_client) TYPE REF TO if_http_client
|
||||||
|
RAISING lcx_2fa_auth_failed
|
||||||
|
lcx_2fa_communication_error.
|
||||||
|
DATA:
|
||||||
|
mi_authenticated_session TYPE REF TO if_http_client.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_2fa_github_authenticator IMPLEMENTATION.
|
||||||
|
METHOD constructor.
|
||||||
|
super->constructor( '^https?://(www\.)?github.com.*$' ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD authenticate.
|
||||||
|
DATA: li_http_client TYPE REF TO if_http_client,
|
||||||
|
lv_http_code TYPE i,
|
||||||
|
lv_http_code_description TYPE string.
|
||||||
|
|
||||||
|
" 1. Try to login to GitHub API
|
||||||
|
li_http_client = get_authenticated_client( iv_username = iv_username
|
||||||
|
iv_password = iv_password
|
||||||
|
iv_2fa_token = iv_2fa_token ).
|
||||||
|
|
||||||
|
" 2. Create an access token which can be used instead of a password
|
||||||
|
" https://developer.github.com/v3/oauth_authorizations/#create-a-new-authorization
|
||||||
|
|
||||||
|
set_new_token_request( ii_request = li_http_client->request ).
|
||||||
|
|
||||||
|
li_http_client->send( EXCEPTIONS OTHERS = 1 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
raise_comm_error_from_sy( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
li_http_client->receive( EXCEPTIONS OTHERS = 1 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
raise_comm_error_from_sy( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
li_http_client->response->get_status(
|
||||||
|
IMPORTING
|
||||||
|
code = lv_http_code
|
||||||
|
reason = lv_http_code_description ).
|
||||||
|
IF lv_http_code <> 201.
|
||||||
|
RAISE EXCEPTION TYPE lcx_2fa_token_gen_failed
|
||||||
|
EXPORTING
|
||||||
|
iv_error_text = |Token generation failed: { lv_http_code } { lv_http_code_description }|.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
rv_access_token = get_token_from_response( li_http_client->response ).
|
||||||
|
IF rv_access_token IS INITIAL.
|
||||||
|
RAISE EXCEPTION TYPE lcx_2fa_token_gen_failed
|
||||||
|
EXPORTING
|
||||||
|
iv_error_text = 'Token generation failed: parser error' ##NO_TEXT.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
" GitHub might need some time until the new token is ready to use, give it a second
|
||||||
|
CALL FUNCTION 'RZL_SLEEP'.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD set_new_token_request.
|
||||||
|
DATA: lv_json_string TYPE string.
|
||||||
|
|
||||||
|
lv_json_string = `{"scopes":["repo"],"note":"Generated by abapGit","fingerprint":"abapGit2FA"}`.
|
||||||
|
|
||||||
|
ii_request->set_data( cl_abap_codepage=>convert_to( lv_json_string ) ).
|
||||||
|
ii_request->set_header_field( name = if_http_header_fields_sap=>request_uri
|
||||||
|
value = gc_restendpoint_authorizations ).
|
||||||
|
ii_request->set_method( if_http_request=>co_request_method_post ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD set_list_token_request.
|
||||||
|
ii_request->set_header_field( name = if_http_header_fields_sap=>request_uri
|
||||||
|
value = gc_restendpoint_authorizations ).
|
||||||
|
ii_request->set_method( if_http_request=>co_request_method_get ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD set_del_token_request.
|
||||||
|
DATA: lv_url TYPE string.
|
||||||
|
|
||||||
|
lv_url = |{ gc_restendpoint_authorizations }/{ iv_token_id }|.
|
||||||
|
|
||||||
|
ii_request->set_header_field( name = if_http_header_fields_sap=>request_uri
|
||||||
|
value = lv_url ).
|
||||||
|
" Other methods than POST and GET do not have constants unfortunately
|
||||||
|
" ii_request->set_method( if_http_request=>co_request_method_delete ).
|
||||||
|
ii_request->set_method( 'DELETE' ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_token_from_response.
|
||||||
|
CONSTANTS: lc_search_regex TYPE string VALUE `.*"token":"([^"]*).*$`.
|
||||||
|
DATA: lv_response TYPE string,
|
||||||
|
lo_regex TYPE REF TO cl_abap_regex,
|
||||||
|
lo_matcher TYPE REF TO cl_abap_matcher.
|
||||||
|
|
||||||
|
lv_response = cl_abap_codepage=>convert_from( ii_response->get_data( ) ).
|
||||||
|
|
||||||
|
CREATE OBJECT lo_regex
|
||||||
|
EXPORTING
|
||||||
|
pattern = lc_search_regex.
|
||||||
|
|
||||||
|
lo_matcher = lo_regex->create_matcher( text = lv_response ).
|
||||||
|
IF lo_matcher->match( ) = abap_true.
|
||||||
|
rv_token = lo_matcher->get_submatch( 1 ).
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_tobedel_tokens_from_resp.
|
||||||
|
CONSTANTS: lc_search_regex TYPE string
|
||||||
|
VALUE `\{"id": ?(\d+)[^\{]*"app":\{[^\{^\}]*\}[^\{]*"fingerprint": ?` &
|
||||||
|
`"abapGit2FA"[^\{]*\}`.
|
||||||
|
DATA: lv_response TYPE string,
|
||||||
|
lo_regex TYPE REF TO cl_abap_regex,
|
||||||
|
lo_matcher TYPE REF TO cl_abap_matcher.
|
||||||
|
|
||||||
|
lv_response = cl_abap_codepage=>convert_from( ii_response->get_data( ) ).
|
||||||
|
|
||||||
|
CREATE OBJECT lo_regex
|
||||||
|
EXPORTING
|
||||||
|
pattern = lc_search_regex.
|
||||||
|
|
||||||
|
lo_matcher = lo_regex->create_matcher( text = lv_response ).
|
||||||
|
WHILE lo_matcher->find_next( ) = abap_true.
|
||||||
|
APPEND lo_matcher->get_submatch( 1 ) TO rt_ids.
|
||||||
|
ENDWHILE.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD parse_repo_from_url.
|
||||||
|
CONSTANTS: lc_search_regex TYPE string VALUE 'https?:\/\/(www\.)?github.com\/(.*)$'.
|
||||||
|
DATA: lo_regex TYPE REF TO cl_abap_regex,
|
||||||
|
lo_matcher TYPE REF TO cl_abap_matcher.
|
||||||
|
|
||||||
|
CREATE OBJECT lo_regex
|
||||||
|
EXPORTING
|
||||||
|
pattern = lc_search_regex.
|
||||||
|
|
||||||
|
lo_matcher = lo_regex->create_matcher( text = iv_url ).
|
||||||
|
IF lo_matcher->match( ) = abap_true.
|
||||||
|
rv_repo_name = lo_matcher->get_submatch( 1 ).
|
||||||
|
ELSE.
|
||||||
|
rv_repo_name = '???' ##NO_TEXT.
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_service_id_from_url.
|
||||||
|
rv_id = 'github'.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD is_2fa_required.
|
||||||
|
DATA: li_client TYPE REF TO if_http_client,
|
||||||
|
lv_header_value TYPE string,
|
||||||
|
lo_settings TYPE REF TO lcl_settings.
|
||||||
|
|
||||||
|
lo_settings = lcl_app=>settings( )->read( ).
|
||||||
|
|
||||||
|
cl_http_client=>create_by_url(
|
||||||
|
EXPORTING
|
||||||
|
url = gc_github_api_url
|
||||||
|
ssl_id = 'ANONYM'
|
||||||
|
proxy_host = lo_settings->get_proxy_url( )
|
||||||
|
proxy_service = lo_settings->get_proxy_port( )
|
||||||
|
IMPORTING
|
||||||
|
client = li_client
|
||||||
|
EXCEPTIONS
|
||||||
|
argument_not_found = 1
|
||||||
|
plugin_not_active = 2
|
||||||
|
internal_error = 3
|
||||||
|
OTHERS = 4 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
raise_comm_error_from_sy( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
li_client->propertytype_logon_popup = if_http_client=>co_disabled.
|
||||||
|
|
||||||
|
" The request needs to use something other than GET and it needs to be send to an endpoint
|
||||||
|
" to trigger a SMS.
|
||||||
|
li_client->request->set_header_field( name = if_http_header_fields_sap=>request_uri
|
||||||
|
value = gc_restendpoint_authorizations ).
|
||||||
|
li_client->request->set_method( if_http_request=>co_request_method_post ).
|
||||||
|
|
||||||
|
" Try to authenticate, if 2FA is required there will be a specific response header
|
||||||
|
li_client->authenticate( username = iv_username password = iv_password ).
|
||||||
|
|
||||||
|
li_client->send( EXCEPTIONS OTHERS = 1 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
raise_comm_error_from_sy( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
li_client->receive( EXCEPTIONS OTHERS = 1 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
raise_comm_error_from_sy( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
" The response will either be UNAUTHORIZED or MALFORMED which is both fine.
|
||||||
|
|
||||||
|
IF li_client->response->get_header_field( gc_otp_header_name ) CP 'required*'.
|
||||||
|
rv_required = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD delete_access_tokens.
|
||||||
|
DATA: li_http_client TYPE REF TO if_http_client,
|
||||||
|
lv_http_code TYPE i,
|
||||||
|
lv_http_code_description TYPE string,
|
||||||
|
lt_tobedeleted_tokens TYPE stringtab.
|
||||||
|
FIELD-SYMBOLS: <lv_id> TYPE string.
|
||||||
|
|
||||||
|
li_http_client = get_authenticated_client( iv_username = iv_username
|
||||||
|
iv_password = iv_password
|
||||||
|
iv_2fa_token = iv_2fa_token ).
|
||||||
|
|
||||||
|
set_list_token_request( li_http_client->request ).
|
||||||
|
li_http_client->send( EXCEPTIONS OTHERS = 1 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
raise_comm_error_from_sy( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
li_http_client->receive( EXCEPTIONS OTHERS = 1 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
raise_comm_error_from_sy( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
li_http_client->response->get_status(
|
||||||
|
IMPORTING
|
||||||
|
code = lv_http_code
|
||||||
|
reason = lv_http_code_description ).
|
||||||
|
IF lv_http_code <> 200.
|
||||||
|
RAISE EXCEPTION TYPE lcx_2fa_token_del_failed
|
||||||
|
EXPORTING
|
||||||
|
iv_error_text = |Could not fetch current 2FA authorizations: | &&
|
||||||
|
|{ lv_http_code } { lv_http_code_description }|.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lt_tobedeleted_tokens = get_tobedel_tokens_from_resp( li_http_client->response ).
|
||||||
|
LOOP AT lt_tobedeleted_tokens ASSIGNING <lv_id> WHERE table_line IS NOT INITIAL.
|
||||||
|
set_del_token_request( ii_request = li_http_client->request
|
||||||
|
iv_token_id = <lv_id> ).
|
||||||
|
li_http_client->send( EXCEPTIONS OTHERS = 1 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
raise_comm_error_from_sy( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
li_http_client->receive( EXCEPTIONS OTHERS = 1 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
raise_comm_error_from_sy( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
li_http_client->response->get_status(
|
||||||
|
IMPORTING
|
||||||
|
code = lv_http_code
|
||||||
|
reason = lv_http_code_description ).
|
||||||
|
IF lv_http_code <> 204.
|
||||||
|
RAISE EXCEPTION TYPE lcx_2fa_token_del_failed
|
||||||
|
EXPORTING
|
||||||
|
iv_error_text = |Could not delete token '{ <lv_id> }': | &&
|
||||||
|
|{ lv_http_code } { lv_http_code_description }|.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_authenticated_client.
|
||||||
|
DATA: lv_http_code TYPE i,
|
||||||
|
lv_http_code_description TYPE string,
|
||||||
|
lo_settings TYPE REF TO lcl_settings.
|
||||||
|
|
||||||
|
" If there is a cached client return it instead
|
||||||
|
IF is_session_running( ) = abap_true AND mi_authenticated_session IS BOUND.
|
||||||
|
ri_client = mi_authenticated_session.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
" Try to login to GitHub API with username, password and 2fa token
|
||||||
|
|
||||||
|
lo_settings = lcl_app=>settings( )->read( ).
|
||||||
|
|
||||||
|
cl_http_client=>create_by_url(
|
||||||
|
EXPORTING
|
||||||
|
url = gc_github_api_url
|
||||||
|
ssl_id = 'ANONYM'
|
||||||
|
proxy_host = lo_settings->get_proxy_url( )
|
||||||
|
proxy_service = lo_settings->get_proxy_port( )
|
||||||
|
IMPORTING
|
||||||
|
client = ri_client
|
||||||
|
EXCEPTIONS
|
||||||
|
argument_not_found = 1
|
||||||
|
plugin_not_active = 2
|
||||||
|
internal_error = 3
|
||||||
|
OTHERS = 4 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
raise_comm_error_from_sy( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
" https://developer.github.com/v3/auth/#working-with-two-factor-authentication
|
||||||
|
ri_client->propertytype_accept_cookie = if_http_client=>co_enabled.
|
||||||
|
ri_client->request->set_header_field( name = gc_otp_header_name value = iv_2fa_token ).
|
||||||
|
ri_client->authenticate( username = iv_username password = iv_password ).
|
||||||
|
ri_client->propertytype_logon_popup = if_http_client=>co_disabled.
|
||||||
|
|
||||||
|
ri_client->send( EXCEPTIONS OTHERS = 1 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
raise_comm_error_from_sy( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ri_client->receive( EXCEPTIONS OTHERS = 1 ).
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
raise_comm_error_from_sy( ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
" Check if authentication has succeeded
|
||||||
|
ri_client->response->get_status(
|
||||||
|
IMPORTING
|
||||||
|
code = lv_http_code
|
||||||
|
reason = lv_http_code_description ).
|
||||||
|
IF lv_http_code <> 200.
|
||||||
|
RAISE EXCEPTION TYPE lcx_2fa_auth_failed
|
||||||
|
EXPORTING
|
||||||
|
iv_error_text = |Authentication failed: { lv_http_code_description }|.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
" Cache the authenticated http session / client to avoid unnecessary additional authentication
|
||||||
|
IF is_session_running( ) = abap_true.
|
||||||
|
mi_authenticated_session = ri_client.
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD end.
|
||||||
|
super->end( ).
|
||||||
|
FREE mi_authenticated_session.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
"! Static registry class to find <em>LIF_2FA_AUTHENTICATOR</em> instances
|
||||||
|
CLASS lcl_2fa_authenticator_registry DEFINITION
|
||||||
|
FINAL
|
||||||
|
CREATE PRIVATE.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
CLASS-METHODS:
|
||||||
|
class_constructor,
|
||||||
|
"! Retrieve an authenticator instance by url
|
||||||
|
"! @parameter iv_url | Url of the repository / service
|
||||||
|
"! @parameter ro_authenticator | Found authenticator instance
|
||||||
|
"! @raising lcx_2fa_unsupported | No authenticator found that supports the service
|
||||||
|
get_authenticator_for_url IMPORTING iv_url TYPE string
|
||||||
|
RETURNING VALUE(ro_authenticator) TYPE REF TO lif_2fa_authenticator
|
||||||
|
RAISING lcx_2fa_unsupported,
|
||||||
|
"! Check if there is a two factor authenticator available for the url
|
||||||
|
"! @parameter iv_url | Url of the repository / service
|
||||||
|
"! @parameter rv_supported | 2FA is supported
|
||||||
|
is_url_supported IMPORTING iv_url TYPE string
|
||||||
|
RETURNING VALUE(rv_supported) TYPE abap_bool,
|
||||||
|
"! Offer to use two factor authentication if supported and required
|
||||||
|
"! <p>
|
||||||
|
"! This uses GUI functionality to display a popup to request the user to enter a two factor
|
||||||
|
"! token. Also an dummy authentication request might be used to find out if two factor
|
||||||
|
"! authentication is required for the account.
|
||||||
|
"! </p>
|
||||||
|
"! @parameter iv_url | Url of the repository / service
|
||||||
|
"! @parameter cv_username | Username
|
||||||
|
"! @parameter cv_password | Password, will be replaced by an access token if two factor
|
||||||
|
"! authentication succeeds
|
||||||
|
"! @raising lcx_exception | Error in two factor authentication
|
||||||
|
use_2fa_if_required IMPORTING iv_url TYPE string
|
||||||
|
CHANGING cv_username TYPE string
|
||||||
|
cv_password TYPE string
|
||||||
|
RAISING lcx_exception.
|
||||||
|
CLASS-DATA:
|
||||||
|
"! All authenticators managed by the registry
|
||||||
|
gt_registered_authenticators TYPE HASHED TABLE OF REF TO lif_2fa_authenticator
|
||||||
|
WITH UNIQUE KEY table_line READ-ONLY.
|
||||||
|
PROTECTED SECTION.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_2fa_authenticator_registry IMPLEMENTATION.
|
||||||
|
METHOD class_constructor.
|
||||||
|
DEFINE register.
|
||||||
|
CREATE OBJECT li_authenticator TYPE &1.
|
||||||
|
INSERT li_authenticator INTO TABLE gt_registered_authenticators.
|
||||||
|
END-OF-DEFINITION.
|
||||||
|
|
||||||
|
DATA: li_authenticator TYPE REF TO lif_2fa_authenticator.
|
||||||
|
|
||||||
|
" If there are new authenticators these need to be added here manually.
|
||||||
|
" I do not think there is an equivalent to SEO_INTERFACE_IMPLEM_GET_ALL for local classes
|
||||||
|
" without invoking the compiler directly.
|
||||||
|
register: lcl_2fa_github_authenticator.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD get_authenticator_for_url.
|
||||||
|
FIELD-SYMBOLS: <lo_authenticator> LIKE LINE OF gt_registered_authenticators.
|
||||||
|
|
||||||
|
LOOP AT gt_registered_authenticators ASSIGNING <lo_authenticator>.
|
||||||
|
IF <lo_authenticator>->supports_url( iv_url ) = abap_true.
|
||||||
|
ro_authenticator = <lo_authenticator>.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
RAISE EXCEPTION TYPE lcx_2fa_unsupported.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD is_url_supported.
|
||||||
|
TRY.
|
||||||
|
get_authenticator_for_url( iv_url ).
|
||||||
|
rv_supported = abap_true.
|
||||||
|
CATCH lcx_2fa_unsupported ##NO_HANDLER.
|
||||||
|
ENDTRY.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD use_2fa_if_required.
|
||||||
|
DATA: li_authenticator TYPE REF TO lif_2fa_authenticator,
|
||||||
|
lv_2fa_token TYPE string,
|
||||||
|
lv_use_2fa TYPE abap_bool,
|
||||||
|
lv_access_token TYPE string,
|
||||||
|
lx_ex TYPE REF TO cx_root.
|
||||||
|
|
||||||
|
IF is_url_supported( iv_url ) = abap_false.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
li_authenticator = get_authenticator_for_url( iv_url ).
|
||||||
|
li_authenticator->begin( ).
|
||||||
|
|
||||||
|
" Is two factor authentication required for this account?
|
||||||
|
IF li_authenticator->is_2fa_required( iv_url = iv_url
|
||||||
|
iv_username = cv_username
|
||||||
|
iv_password = cv_password ) = abap_true.
|
||||||
|
|
||||||
|
" Get a 2FA token (app/sms)
|
||||||
|
CALL FUNCTION 'POPUP_GET_STRING'
|
||||||
|
EXPORTING
|
||||||
|
label = 'Two factor auth. token'
|
||||||
|
IMPORTING
|
||||||
|
value = lv_2fa_token
|
||||||
|
okay = lv_use_2fa.
|
||||||
|
IF lv_use_2fa = abap_false.
|
||||||
|
lcx_exception=>raise( 'Authentication cancelled' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
" Delete an old access token if it exists
|
||||||
|
li_authenticator->delete_access_tokens( iv_url = iv_url
|
||||||
|
iv_username = cv_username
|
||||||
|
iv_password = cv_password
|
||||||
|
iv_2fa_token = lv_2fa_token ).
|
||||||
|
|
||||||
|
" Get a new access token
|
||||||
|
lv_access_token = li_authenticator->authenticate( iv_url = iv_url
|
||||||
|
iv_username = cv_username
|
||||||
|
iv_password = cv_password
|
||||||
|
iv_2fa_token = lv_2fa_token ).
|
||||||
|
|
||||||
|
" Use the access token instead of the password
|
||||||
|
cv_password = lv_access_token.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
li_authenticator->end( ).
|
||||||
|
|
||||||
|
CATCH lcx_2fa_error INTO lx_ex.
|
||||||
|
TRY.
|
||||||
|
li_authenticator->end( ).
|
||||||
|
CATCH lcx_2fa_illegal_state ##NO_HANDLER.
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
RAISE EXCEPTION TYPE lcx_exception
|
||||||
|
EXPORTING
|
||||||
|
iv_text = |2FA error: { lx_ex->get_text( ) }|
|
||||||
|
ix_previous = lx_ex.
|
||||||
|
ENDTRY.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
25
src/zabapgit_2fa.prog.xml
Normal file
25
src/zabapgit_2fa.prog.xml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_2FA</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL>S</DBAPL>
|
||||||
|
<DBNA>D$</DBNA>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<LDBNAME>D$S</LDBNAME>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<ENTRY>ZABAPGIT_2FA</ENTRY>
|
||||||
|
<LENGTH>12</LENGTH>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_APP</NAME>
|
<NAME>ZABAPGIT_APP</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_APP</ENTRY>
|
<ENTRY>Include ZABAPGIT_APP</ENTRY>
|
||||||
<LENGTH>20</LENGTH>
|
<LENGTH>20</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_APP_IMPL</NAME>
|
<NAME>ZABAPGIT_APP_IMPL</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_APP_IMPL</ENTRY>
|
<ENTRY>Include ZABAPGIT_APP_IMPL</ENTRY>
|
||||||
<LENGTH>25</LENGTH>
|
<LENGTH>25</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -97,6 +97,9 @@ CLASS lcl_background IMPLEMENTATION.
|
||||||
APPEND lv_str TO lt_objects.
|
APPEND lv_str TO lt_objects.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
|
SORT lt_objects AS TEXT.
|
||||||
|
DELETE ADJACENT DUPLICATES FROM lt_objects.
|
||||||
|
|
||||||
IF lines( lt_objects ) = 1.
|
IF lines( lt_objects ) = 1.
|
||||||
rv_comment = |BG: { lv_str }|.
|
rv_comment = |BG: { lv_str }|.
|
||||||
ELSE.
|
ELSE.
|
||||||
|
@ -166,6 +169,8 @@ CLASS lcl_background IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD run.
|
METHOD run.
|
||||||
|
|
||||||
|
CONSTANTS: c_enq_type TYPE c LENGTH 12 VALUE 'BACKGROUND'.
|
||||||
|
|
||||||
DATA: lo_per TYPE REF TO lcl_persistence_background,
|
DATA: lo_per TYPE REF TO lcl_persistence_background,
|
||||||
lo_repo TYPE REF TO lcl_repo_online,
|
lo_repo TYPE REF TO lcl_repo_online,
|
||||||
lt_list TYPE lcl_persistence_background=>tt_background,
|
lt_list TYPE lcl_persistence_background=>tt_background,
|
||||||
|
@ -174,6 +179,20 @@ CLASS lcl_background IMPLEMENTATION.
|
||||||
FIELD-SYMBOLS: <ls_list> LIKE LINE OF lt_list.
|
FIELD-SYMBOLS: <ls_list> LIKE LINE OF lt_list.
|
||||||
|
|
||||||
|
|
||||||
|
CALL FUNCTION 'ENQUEUE_EZABAPGIT'
|
||||||
|
EXPORTING
|
||||||
|
mode_zabapgit = 'E'
|
||||||
|
type = c_enq_type
|
||||||
|
_scope = '3'
|
||||||
|
EXCEPTIONS
|
||||||
|
foreign_lock = 1
|
||||||
|
system_failure = 2
|
||||||
|
OTHERS = 3.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
WRITE: / 'Another intance of the program is already running'.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
CREATE OBJECT lo_per.
|
CREATE OBJECT lo_per.
|
||||||
lt_list = lo_per->list( ).
|
lt_list = lo_per->list( ).
|
||||||
|
|
||||||
|
@ -204,6 +223,10 @@ CLASS lcl_background IMPLEMENTATION.
|
||||||
WRITE: / 'Nothing configured' ##NO_TEXT.
|
WRITE: / 'Nothing configured' ##NO_TEXT.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
CALL FUNCTION 'DEQUEUE_EZABAPGIT'
|
||||||
|
EXPORTING
|
||||||
|
type = c_enq_type.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_BACKGROUND</NAME>
|
<NAME>ZABAPGIT_BACKGROUND</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_BACKGROUND</ENTRY>
|
<ENTRY>Include ZABAPGIT_BACKGROUND</ENTRY>
|
||||||
<LENGTH>27</LENGTH>
|
<LENGTH>27</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -33,15 +33,24 @@ form input:focus, textarea:focus {
|
||||||
border: 1px solid #8cadd9;
|
border: 1px solid #8cadd9;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* MODIFIERS */
|
/* COLOR PALETTE */
|
||||||
.grey { color: lightgrey !important; }
|
.grey { color: lightgrey !important; }
|
||||||
.emphasis { font-weight: bold !important; }
|
.darkgrey { color: #808080 !important; }
|
||||||
.attention { color: red !important; }
|
.attention { color: red !important; }
|
||||||
|
.error { color: #d41919 !important; }
|
||||||
|
.warning { color: #e4ae0d !important; }
|
||||||
|
.blue { color: #5e8dc9 !important; }
|
||||||
|
.red { color: red !important; }
|
||||||
|
|
||||||
|
/* MODIFIERS */
|
||||||
|
.emphasis { font-weight: bold !important; }
|
||||||
.crossout { text-decoration: line-through !important; }
|
.crossout { text-decoration: line-through !important; }
|
||||||
.right { text-align:right; }
|
.right { text-align:right; }
|
||||||
.paddings { padding: 0.5em 0.5em; }
|
.paddings { padding: 0.5em 0.5em; }
|
||||||
.pad-sides { padding: 0 0.3em; }
|
.pad-sides { padding: 0 0.3em; }
|
||||||
.pad4px { padding: 4px; }
|
.pad4px { padding: 4px; }
|
||||||
|
.w100 { width: 100%; }
|
||||||
|
.w40 { width: 40%; }
|
||||||
|
|
||||||
/* STRUCTURE DIVS, HEADER & FOOTER */
|
/* STRUCTURE DIVS, HEADER & FOOTER */
|
||||||
td.headpad { padding-top: 11px; }
|
td.headpad { padding-top: 11px; }
|
||||||
|
@ -98,15 +107,41 @@ span.page_title {
|
||||||
padding-left: 0.4em;
|
padding-left: 0.4em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ERROR LOG */
|
||||||
|
|
||||||
|
div.log {
|
||||||
|
padding: 6px;
|
||||||
|
margin: 4px;
|
||||||
|
background-color: #fee6e6;
|
||||||
|
border: 1px #fdcece solid;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.log > span { display:block; }
|
||||||
|
div.log .octicon { padding-right: 6px; }
|
||||||
|
|
||||||
/* MENU */
|
/* MENU */
|
||||||
div.menu { display: inline; }
|
div.menu { display: inline; }
|
||||||
div.menu .menu_end { border-right: 0px !important; }
|
div.menu .menu_end { border-right: 0px !important; }
|
||||||
div.menu a {
|
div.menu a {
|
||||||
padding-left: 0.5em;
|
padding-left: 0.5em;
|
||||||
padding-right: 0.5em;
|
padding-right: 0.5em;
|
||||||
border-right: 1px solid lightgrey;
|
|
||||||
font-size: 12pt;
|
font-size: 12pt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
div.menu > a {
|
||||||
|
border-right: 1px solid lightgrey;
|
||||||
|
}
|
||||||
|
div.menu > div.dropdown > a {
|
||||||
|
border-right: 1px solid lightgrey;
|
||||||
|
}
|
||||||
|
div.menu > a:last-child {
|
||||||
|
border-right: 0px !important;
|
||||||
|
}
|
||||||
|
div.menu > div.dropdown:last-child > a {
|
||||||
|
border-right: 0px !important;
|
||||||
|
}
|
||||||
|
|
||||||
div.menu_vertical { display: inline; }
|
div.menu_vertical { display: inline; }
|
||||||
div.menu_vertical a {
|
div.menu_vertical a {
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -172,6 +207,7 @@ div.menu_vertical a {
|
||||||
.dropdown_content td { text-align: left; padding: 2px; }
|
.dropdown_content td { text-align: left; padding: 2px; }
|
||||||
.dropdown_content td a { padding: 0em 0.2em; }
|
.dropdown_content td a { padding: 0em 0.2em; }
|
||||||
.dropdown_content td.icon { padding: 0 3px 0 6px; }
|
.dropdown_content td.icon { padding: 0 3px 0 6px; }
|
||||||
|
.dropdown_content td.text { width: 100%; }
|
||||||
.dropdown_content a:hover { background-color: #f1f1f1 }
|
.dropdown_content a:hover { background-color: #f1f1f1 }
|
||||||
.dropdown:hover .dropbtn { color: #79a0d2; }
|
.dropdown:hover .dropbtn { color: #79a0d2; }
|
||||||
|
|
||||||
|
@ -248,11 +284,12 @@ div.repo {
|
||||||
div.repo_container {
|
div.repo_container {
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
.repo_tab {
|
table.repo_tab {
|
||||||
border: 1px solid #DDD;
|
border: 1px solid #DDD;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
background: #fff;
|
background: #fff;
|
||||||
margin-top: 0.5em;
|
margin-top: 0.5em;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
.repo_tab td {
|
.repo_tab td {
|
||||||
border-top: 1px solid #eee;
|
border-top: 1px solid #eee;
|
||||||
|
@ -406,8 +443,8 @@ span.diff_banner {
|
||||||
padding-right: 0.3em;
|
padding-right: 0.3em;
|
||||||
}
|
}
|
||||||
.diff_ins {
|
.diff_ins {
|
||||||
border-color: #7bea7b;
|
border-color: #abf2ab;
|
||||||
background-color: #d3f8d3;
|
background-color: #e0ffe0;
|
||||||
}
|
}
|
||||||
.diff_del {
|
.diff_del {
|
||||||
border-color: #ff667d;
|
border-color: #ff667d;
|
||||||
|
@ -463,6 +500,7 @@ div.diff_head span.state-block span.none {
|
||||||
table.diff_tab {
|
table.diff_tab {
|
||||||
font-family: Consolas, Courier, monospace;
|
font-family: Consolas, Courier, monospace;
|
||||||
font-size: 10pt;
|
font-size: 10pt;
|
||||||
|
width: 100%;
|
||||||
}
|
}
|
||||||
table.diff_tab td,th {
|
table.diff_tab td,th {
|
||||||
color: #444;
|
color: #444;
|
||||||
|
@ -490,26 +528,41 @@ table.diff_tab thead.nav_line th {
|
||||||
color: #bbb;
|
color: #bbb;
|
||||||
}
|
}
|
||||||
table.diff_tab td.num, th.num {
|
table.diff_tab td.num, th.num {
|
||||||
text-align: right;
|
width: 1%;
|
||||||
|
min-width: 2em;
|
||||||
|
padding-right: 8px;
|
||||||
|
padding-left: 8px;
|
||||||
|
text-align: right !important;
|
||||||
color: #ccc;
|
color: #ccc;
|
||||||
border-left: 1px solid #eee;
|
border-left: 1px solid #eee;
|
||||||
border-right: 1px solid #eee;
|
border-right: 1px solid #eee;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
table.diff_tab td.num::before {
|
||||||
|
content: attr(line-num);
|
||||||
}
|
}
|
||||||
table.diff_tab code {
|
table.diff_tab code {
|
||||||
font-family: inherit;
|
font-family: inherit;
|
||||||
white-space: pre;
|
white-space: pre;
|
||||||
}
|
}
|
||||||
|
table.diff_tab td.code {
|
||||||
table.diff_tab code span.keyword { color: #0a69ce; }
|
word-wrap: break-word;
|
||||||
table.diff_tab code span.text { color: #48ce4f; }
|
white-space: pre-wrap;
|
||||||
table.diff_tab code span.comment { color: #808080; font-style: italic; }
|
overflow: visible;
|
||||||
table.diff_tab code span.xml_tag { color: #3370e0; }
|
}
|
||||||
table.diff_tab code span.attr { color: #f20707; }
|
|
||||||
table.diff_tab code span.attr_val { color: #7a02f9; }
|
|
||||||
|
|
||||||
table.diff_tab tbody tr:first-child td { padding-top: 0.5em; }
|
table.diff_tab tbody tr:first-child td { padding-top: 0.5em; }
|
||||||
table.diff_tab tbody tr:last-child td { padding-bottom: 0.5em; }
|
table.diff_tab tbody tr:last-child td { padding-bottom: 0.5em; }
|
||||||
|
|
||||||
|
/* STYLES for Syntax Highlighting */
|
||||||
|
.syntax-hl span.keyword { color: #0a69ce; }
|
||||||
|
.syntax-hl span.text { color: #48ce4f; }
|
||||||
|
.syntax-hl span.comment { color: #808080; font-style: italic; }
|
||||||
|
.syntax-hl span.xml_tag { color: #457ce3; }
|
||||||
|
.syntax-hl span.attr { color: #b777fb; }
|
||||||
|
.syntax-hl span.attr_val { color: #7a02f9; }
|
||||||
|
|
||||||
/* DEBUG INFO STYLES */
|
/* DEBUG INFO STYLES */
|
||||||
div.debug_container {
|
div.debug_container {
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
|
@ -517,15 +570,17 @@ div.debug_container {
|
||||||
color: #444;
|
color: #444;
|
||||||
font-family: Consolas, Courier, monospace;
|
font-family: Consolas, Courier, monospace;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.debug_container p {
|
div.debug_container p {
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DB ENTRIES */
|
/* DB ENTRIES */
|
||||||
div.db_list {
|
div.db_list {
|
||||||
background-color: #f2f2f2;
|
background-color: #fff;
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.db_tab pre {
|
table.db_tab pre {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
@ -534,10 +589,11 @@ table.db_tab pre {
|
||||||
margin: 0px;
|
margin: 0px;
|
||||||
width: 30em;
|
width: 30em;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.db_tab tr.firstrow td { padding-top: 0.5em; }
|
table.db_tab tr.firstrow td { padding-top: 0.5em; }
|
||||||
table.db_tab th {
|
table.db_tab th {
|
||||||
|
color: #888888;
|
||||||
text-align: left;
|
text-align: left;
|
||||||
color: #888;
|
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
border-bottom: 1px #ddd solid;
|
border-bottom: 1px #ddd solid;
|
||||||
}
|
}
|
||||||
|
@ -551,24 +607,34 @@ table.db_tab td.data {
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
table.db_tab tbody tr:hover, tr:active {
|
||||||
|
background-color: #f4f4f4;
|
||||||
|
}
|
||||||
|
|
||||||
/* DB ENTRY DISPLAY */
|
/* DB ENTRY DISPLAY */
|
||||||
div.db_entry {
|
div.db_entry {
|
||||||
background-color: #f2f2f2;
|
background-color: #f2f2f2;
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.db_entry pre {
|
div.db_entry pre {
|
||||||
display: block;
|
display: block;
|
||||||
|
font-size: 10pt;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
word-wrap:break-word;
|
word-wrap:break-word;
|
||||||
white-space: pre-wrap;
|
white-space: pre-wrap;
|
||||||
background-color: #eaeaea;
|
background-color: #fcfcfc;
|
||||||
|
border: 1px #eaeaea solid;
|
||||||
|
border-radius: 3px;
|
||||||
padding: 0.5em;
|
padding: 0.5em;
|
||||||
margin: 0.5em 0em;
|
margin: 0.5em 0em;
|
||||||
width: 50em;
|
width: 60em;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.db_entry table.toolbar {
|
div.db_entry table.toolbar {
|
||||||
width: 50em;
|
width: 50em;
|
||||||
}
|
}
|
||||||
|
|
||||||
table.tag {
|
table.tag {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
border: 1px #b3c1cc solid;
|
border: 1px #b3c1cc solid;
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
<asx:values>
|
<asx:values>
|
||||||
<NAME>ZABAPGIT_CSS_COMMON</NAME>
|
<NAME>ZABAPGIT_CSS_COMMON</NAME>
|
||||||
<TEXT>AbapGit common styles</TEXT>
|
<TEXT>Abapgit common CSS</TEXT>
|
||||||
<PARAMS>
|
<PARAMS>
|
||||||
<WWWPARAMS>
|
<WWWPARAMS>
|
||||||
<RELID>MI</RELID>
|
<RELID>MI</RELID>
|
||||||
|
@ -15,7 +15,7 @@
|
||||||
<RELID>MI</RELID>
|
<RELID>MI</RELID>
|
||||||
<OBJID>ZABAPGIT_CSS_COMMON</OBJID>
|
<OBJID>ZABAPGIT_CSS_COMMON</OBJID>
|
||||||
<NAME>filename</NAME>
|
<NAME>filename</NAME>
|
||||||
<VALUE>~wwwtmp.css</VALUE>
|
<VALUE>common.css</VALUE>
|
||||||
</WWWPARAMS>
|
</WWWPARAMS>
|
||||||
<WWWPARAMS>
|
<WWWPARAMS>
|
||||||
<RELID>MI</RELID>
|
<RELID>MI</RELID>
|
||||||
|
|
|
@ -14,8 +14,11 @@ TYPES: BEGIN OF ty_file_signature,
|
||||||
sha1 TYPE ty_sha1,
|
sha1 TYPE ty_sha1,
|
||||||
END OF ty_file_signature.
|
END OF ty_file_signature.
|
||||||
|
|
||||||
TYPES: ty_file_signatures_tt TYPE STANDARD TABLE OF ty_file_signature WITH DEFAULT KEY.
|
TYPES: ty_file_signatures_tt TYPE STANDARD TABLE OF
|
||||||
TYPES: ty_file_signatures_ts TYPE SORTED TABLE OF ty_file_signature WITH UNIQUE KEY path filename.
|
ty_file_signature WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
TYPES: ty_file_signatures_ts TYPE SORTED TABLE OF
|
||||||
|
ty_file_signature WITH UNIQUE KEY path filename.
|
||||||
|
|
||||||
TYPES: BEGIN OF ty_file.
|
TYPES: BEGIN OF ty_file.
|
||||||
INCLUDE TYPE ty_file_signature.
|
INCLUDE TYPE ty_file_signature.
|
||||||
|
@ -24,7 +27,6 @@ TYPES: data TYPE xstring,
|
||||||
TYPES: ty_files_tt TYPE STANDARD TABLE OF ty_file WITH DEFAULT KEY.
|
TYPES: ty_files_tt TYPE STANDARD TABLE OF ty_file WITH DEFAULT KEY.
|
||||||
|
|
||||||
TYPES: ty_string_tt TYPE STANDARD TABLE OF string WITH DEFAULT KEY.
|
TYPES: ty_string_tt TYPE STANDARD TABLE OF string WITH DEFAULT KEY.
|
||||||
TYPES: tt_w3urls TYPE STANDARD TABLE OF w3url WITH DEFAULT KEY.
|
|
||||||
|
|
||||||
TYPES: BEGIN OF ty_comment,
|
TYPES: BEGIN OF ty_comment,
|
||||||
username TYPE string,
|
username TYPE string,
|
||||||
|
@ -49,8 +51,9 @@ TYPES: ty_files_item_tt TYPE STANDARD TABLE OF ty_file_item WITH DEFAULT KEY.
|
||||||
TYPES: BEGIN OF ty_metadata,
|
TYPES: BEGIN OF ty_metadata,
|
||||||
class TYPE string,
|
class TYPE string,
|
||||||
version TYPE string,
|
version TYPE string,
|
||||||
late_deser TYPE string,
|
late_deser TYPE abap_bool,
|
||||||
delete_tadir TYPE abap_bool,
|
delete_tadir TYPE abap_bool,
|
||||||
|
ddic TYPE abap_bool,
|
||||||
END OF ty_metadata.
|
END OF ty_metadata.
|
||||||
|
|
||||||
TYPES: BEGIN OF ty_web_asset,
|
TYPES: BEGIN OF ty_web_asset,
|
||||||
|
@ -156,7 +159,7 @@ CONSTANTS: BEGIN OF gc_event_state,
|
||||||
END OF gc_event_state.
|
END OF gc_event_state.
|
||||||
|
|
||||||
CONSTANTS: BEGIN OF gc_html_opt,
|
CONSTANTS: BEGIN OF gc_html_opt,
|
||||||
emphas TYPE c VALUE 'E',
|
strong TYPE c VALUE 'E',
|
||||||
cancel TYPE c VALUE 'C',
|
cancel TYPE c VALUE 'C',
|
||||||
crossout TYPE c VALUE 'X',
|
crossout TYPE c VALUE 'X',
|
||||||
END OF gc_html_opt.
|
END OF gc_html_opt.
|
||||||
|
@ -224,6 +227,7 @@ CONSTANTS: BEGIN OF gc_action,
|
||||||
go_debuginfo TYPE string VALUE 'go_debuginfo',
|
go_debuginfo TYPE string VALUE 'go_debuginfo',
|
||||||
go_settings TYPE string VALUE 'go_settings',
|
go_settings TYPE string VALUE 'go_settings',
|
||||||
go_tutorial TYPE string VALUE 'go_tutorial',
|
go_tutorial TYPE string VALUE 'go_tutorial',
|
||||||
|
|
||||||
jump TYPE string VALUE 'jump',
|
jump TYPE string VALUE 'jump',
|
||||||
jump_pkg TYPE string VALUE 'jump_pkg',
|
jump_pkg TYPE string VALUE 'jump_pkg',
|
||||||
END OF gc_action.
|
END OF gc_action.
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_DEFINITIONS</NAME>
|
<NAME>ZABAPGIT_DEFINITIONS</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_DEFINITIONS</ENTRY>
|
<ENTRY>Include ZABAPGIT_DEFINITIONS</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_DOT_ABAPGIT</NAME>
|
<NAME>ZABAPGIT_DOT_ABAPGIT</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_DOT_ABAPGIT</ENTRY>
|
<ENTRY>Include ZABAPGIT_DOT_ABAPGIT</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_EXCEPTIONS</NAME>
|
<NAME>ZABAPGIT_EXCEPTIONS</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_EXCEPTIONS</ENTRY>
|
<ENTRY>Include ZABAPGIT_EXCEPTIONS</ENTRY>
|
||||||
<LENGTH>27</LENGTH>
|
<LENGTH>27</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -21,7 +21,8 @@ CLASS lcl_file_status DEFINITION FINAL
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
CLASS-METHODS calculate_status
|
CLASS-METHODS calculate_status
|
||||||
IMPORTING it_local TYPE ty_files_item_tt
|
IMPORTING iv_devclass TYPE devclass
|
||||||
|
it_local TYPE ty_files_item_tt
|
||||||
it_remote TYPE ty_files_tt
|
it_remote TYPE ty_files_tt
|
||||||
it_cur_state TYPE ty_file_signatures_tt
|
it_cur_state TYPE ty_file_signatures_tt
|
||||||
RETURNING VALUE(rt_results) TYPE ty_results_tt.
|
RETURNING VALUE(rt_results) TYPE ty_results_tt.
|
||||||
|
@ -36,7 +37,8 @@ CLASS lcl_file_status DEFINITION FINAL
|
||||||
IMPORTING is_local TYPE ty_file_item
|
IMPORTING is_local TYPE ty_file_item
|
||||||
RETURNING VALUE(rs_result) TYPE ty_result,
|
RETURNING VALUE(rs_result) TYPE ty_result,
|
||||||
build_new_remote
|
build_new_remote
|
||||||
IMPORTING is_remote TYPE ty_file
|
IMPORTING iv_devclass TYPE devclass
|
||||||
|
is_remote TYPE ty_file
|
||||||
it_items TYPE ty_items_ts
|
it_items TYPE ty_items_ts
|
||||||
it_state TYPE ty_file_signatures_ts
|
it_state TYPE ty_file_signatures_ts
|
||||||
RETURNING VALUE(rs_result) TYPE ty_result,
|
RETURNING VALUE(rs_result) TYPE ty_result,
|
||||||
|
@ -61,7 +63,9 @@ CLASS lcl_file_status IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
rt_results = calculate_status(
|
rt_results = calculate_status(
|
||||||
it_local = io_repo->get_files_local( io_log )
|
|
||||||
|
iv_devclass = io_repo->get_package( )
|
||||||
|
it_local = io_repo->get_files_local( io_log = io_log )
|
||||||
it_remote = io_repo->get_files_remote( )
|
it_remote = io_repo->get_files_remote( )
|
||||||
it_cur_state = io_repo->get_local_checksums_per_file( ) ).
|
it_cur_state = io_repo->get_local_checksums_per_file( ) ).
|
||||||
|
|
||||||
|
@ -147,7 +151,8 @@ CLASS lcl_file_status IMPLEMENTATION.
|
||||||
" Process new remote files (marked above with empty SHA1)
|
" Process new remote files (marked above with empty SHA1)
|
||||||
LOOP AT lt_remote ASSIGNING <ls_remote> WHERE sha1 IS NOT INITIAL.
|
LOOP AT lt_remote ASSIGNING <ls_remote> WHERE sha1 IS NOT INITIAL.
|
||||||
APPEND INITIAL LINE TO rt_results ASSIGNING <ls_result>.
|
APPEND INITIAL LINE TO rt_results ASSIGNING <ls_result>.
|
||||||
<ls_result> = build_new_remote( is_remote = <ls_remote>
|
<ls_result> = build_new_remote( iv_devclass = iv_devclass
|
||||||
|
is_remote = <ls_remote>
|
||||||
it_items = lt_items_idx
|
it_items = lt_items_idx
|
||||||
it_state = lt_state_idx ).
|
it_state = lt_state_idx ).
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
@ -170,6 +175,8 @@ CLASS lcl_file_status IMPLEMENTATION.
|
||||||
|
|
||||||
" Handle namespaces
|
" Handle namespaces
|
||||||
REPLACE ALL OCCURRENCES OF '#' IN lv_name WITH '/'.
|
REPLACE ALL OCCURRENCES OF '#' IN lv_name WITH '/'.
|
||||||
|
REPLACE ALL OCCURRENCES OF '#' IN lv_type WITH '/'.
|
||||||
|
REPLACE ALL OCCURRENCES OF '#' IN lv_ext WITH '/'.
|
||||||
|
|
||||||
CLEAR es_item.
|
CLEAR es_item.
|
||||||
es_item-obj_type = lv_type.
|
es_item-obj_type = lv_type.
|
||||||
|
@ -193,7 +200,8 @@ CLASS lcl_file_status IMPLEMENTATION.
|
||||||
|
|
||||||
" Match against current state
|
" Match against current state
|
||||||
READ TABLE it_state INTO ls_file_sig
|
READ TABLE it_state INTO ls_file_sig
|
||||||
WITH KEY path = is_local-file-path filename = is_local-file-filename
|
WITH KEY path = is_local-file-path
|
||||||
|
filename = is_local-file-filename
|
||||||
BINARY SEARCH.
|
BINARY SEARCH.
|
||||||
|
|
||||||
IF sy-subrc = 0.
|
IF sy-subrc = 0.
|
||||||
|
@ -203,7 +211,8 @@ CLASS lcl_file_status IMPLEMENTATION.
|
||||||
IF ls_file_sig-sha1 <> is_remote-sha1.
|
IF ls_file_sig-sha1 <> is_remote-sha1.
|
||||||
rs_result-rstate = gc_state-modified.
|
rs_result-rstate = gc_state-modified.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
rs_result-match = boolc( rs_result-lstate IS INITIAL AND rs_result-rstate IS INITIAL ).
|
rs_result-match = boolc( rs_result-lstate IS INITIAL
|
||||||
|
AND rs_result-rstate IS INITIAL ).
|
||||||
ELSE.
|
ELSE.
|
||||||
" This is a strange situation. As both local and remote exist
|
" This is a strange situation. As both local and remote exist
|
||||||
" the state should also be present. Maybe this is a first run of the code.
|
" the state should also be present. Maybe this is a first run of the code.
|
||||||
|
@ -276,7 +285,8 @@ CLASS lcl_file_status IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
" Item is in state and in cache but with no package - it was deleted
|
" Item is in state and in cache but with no package - it was deleted
|
||||||
IF ls_item-devclass IS INITIAL.
|
" OR devclass is the same as repo package (see #532)
|
||||||
|
IF ls_item-devclass IS INITIAL OR ls_item-devclass = iv_devclass.
|
||||||
rs_result-match = abap_false.
|
rs_result-match = abap_false.
|
||||||
rs_result-lstate = gc_state-deleted.
|
rs_result-lstate = gc_state-deleted.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_FILE_STATUS</NAME>
|
<NAME>ZABAPGIT_FILE_STATUS</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_FILE_STATUS</ENTRY>
|
<ENTRY>Include ZABAPGIT_FILE_STATUS</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -53,7 +53,8 @@ FORM branch_popup TABLES tt_fields TYPE ty_sval_tt
|
||||||
DATA: lv_url TYPE string,
|
DATA: lv_url TYPE string,
|
||||||
lx_error TYPE REF TO lcx_exception,
|
lx_error TYPE REF TO lcx_exception,
|
||||||
ls_package_data TYPE scompkdtln,
|
ls_package_data TYPE scompkdtln,
|
||||||
ls_branch TYPE lcl_git_branch_list=>ty_git_branch.
|
ls_branch TYPE lcl_git_branch_list=>ty_git_branch,
|
||||||
|
lv_create TYPE boolean.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_furl> LIKE LINE OF tt_fields,
|
FIELD-SYMBOLS: <ls_furl> LIKE LINE OF tt_fields,
|
||||||
<ls_fbranch> LIKE LINE OF tt_fields.
|
<ls_fbranch> LIKE LINE OF tt_fields.
|
||||||
|
@ -88,24 +89,9 @@ FORM branch_popup TABLES tt_fields TYPE ty_sval_tt
|
||||||
ELSEIF pv_code = 'COD2'.
|
ELSEIF pv_code = 'COD2'.
|
||||||
cv_show_popup = abap_true.
|
cv_show_popup = abap_true.
|
||||||
|
|
||||||
CALL FUNCTION 'FUNCTION_EXISTS'
|
lcl_popups=>popup_to_create_package( IMPORTING es_package_data = ls_package_data
|
||||||
EXPORTING
|
ev_create = lv_create ).
|
||||||
funcname = 'PB_POPUP_PACKAGE_CREATE'
|
IF lv_create = abap_false.
|
||||||
EXCEPTIONS
|
|
||||||
function_not_exist = 1
|
|
||||||
OTHERS = 2.
|
|
||||||
IF sy-subrc = 1.
|
|
||||||
* looks like the function module used does not exist on all
|
|
||||||
* versions since 702, so show an error
|
|
||||||
lcx_exception=>raise( 'Function module PB_POPUP_PACKAGE_CREATE does not exist' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CALL FUNCTION 'PB_POPUP_PACKAGE_CREATE'
|
|
||||||
CHANGING
|
|
||||||
p_object_data = ls_package_data
|
|
||||||
EXCEPTIONS
|
|
||||||
action_cancelled = 1.
|
|
||||||
IF sy-subrc = 1.
|
|
||||||
RETURN.
|
RETURN.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
@ -119,6 +105,38 @@ FORM branch_popup TABLES tt_fields TYPE ty_sval_tt
|
||||||
|
|
||||||
ENDFORM. "branch_popup
|
ENDFORM. "branch_popup
|
||||||
|
|
||||||
|
FORM package_popup TABLES tt_fields TYPE ty_sval_tt
|
||||||
|
USING pv_code TYPE clike
|
||||||
|
CHANGING cs_error TYPE svale
|
||||||
|
cv_show_popup TYPE c
|
||||||
|
RAISING lcx_exception ##called ##needed.
|
||||||
|
* called dynamically from function module POPUP_GET_VALUES_USER_BUTTONS
|
||||||
|
|
||||||
|
DATA: ls_package_data TYPE scompkdtln,
|
||||||
|
lv_create TYPE boolean.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_fbranch> LIKE LINE OF tt_fields.
|
||||||
|
|
||||||
|
CLEAR cs_error.
|
||||||
|
|
||||||
|
IF pv_code = 'COD1'.
|
||||||
|
cv_show_popup = abap_true.
|
||||||
|
|
||||||
|
lcl_popups=>popup_to_create_package( IMPORTING es_package_data = ls_package_data
|
||||||
|
ev_create = lv_create ).
|
||||||
|
IF lv_create = abap_false.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lcl_sap_package=>create( ls_package_data ).
|
||||||
|
COMMIT WORK.
|
||||||
|
|
||||||
|
READ TABLE tt_fields ASSIGNING <ls_fbranch> WITH KEY tabname = 'TDEVC'.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
<ls_fbranch>-value = ls_package_data-devclass.
|
||||||
|
ENDIF.
|
||||||
|
ENDFORM. "package_popup
|
||||||
|
|
||||||
FORM output.
|
FORM output.
|
||||||
DATA: lt_ucomm TYPE TABLE OF sy-ucomm.
|
DATA: lt_ucomm TYPE TABLE OF sy-ucomm.
|
||||||
PERFORM set_pf_status IN PROGRAM rsdbrunt IF FOUND.
|
PERFORM set_pf_status IN PROGRAM rsdbrunt IF FOUND.
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_FORMS</NAME>
|
<NAME>ZABAPGIT_FORMS</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_FORMS</ENTRY>
|
<ENTRY>Include ZABAPGIT_FORMS</ENTRY>
|
||||||
<LENGTH>22</LENGTH>
|
<LENGTH>22</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -261,6 +261,8 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
lcx_exception=>raise( 'unpack not ok' ).
|
lcx_exception=>raise( 'unpack not ok' ).
|
||||||
ELSEIF lv_string CP '*pre-receive hook declined*'.
|
ELSEIF lv_string CP '*pre-receive hook declined*'.
|
||||||
lcx_exception=>raise( 'pre-receive hook declined' ).
|
lcx_exception=>raise( 'pre-receive hook declined' ).
|
||||||
|
ELSEIF lv_string CP '*funny refname*'.
|
||||||
|
lcx_exception=>raise( 'funny refname' ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD. "receive_pack
|
ENDMETHOD. "receive_pack
|
||||||
|
@ -337,7 +339,8 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
|
|
||||||
LOOP AT lt_branches FROM 1 ASSIGNING <ls_branch>.
|
LOOP AT lt_branches FROM 1 ASSIGNING <ls_branch>.
|
||||||
IF sy-tabix = 1.
|
IF sy-tabix = 1.
|
||||||
lv_capa = 'side-band-64k no-progress multi_ack agent=' && lcl_http=>get_agent( ) ##NO_TEXT.
|
lv_capa = 'side-band-64k no-progress multi_ack agent='
|
||||||
|
&& lcl_http=>get_agent( ) ##NO_TEXT.
|
||||||
lv_line = 'want' && ` ` && <ls_branch>-sha1
|
lv_line = 'want' && ` ` && <ls_branch>-sha1
|
||||||
&& ` ` && lv_capa && gc_newline. "#EC NOTEXT
|
&& ` ` && lv_capa && gc_newline. "#EC NOTEXT
|
||||||
ELSE.
|
ELSE.
|
||||||
|
@ -348,14 +351,16 @@ CLASS lcl_git_transport IMPLEMENTATION.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
IF iv_deepen = abap_true.
|
IF iv_deepen = abap_true.
|
||||||
lv_buffer = lv_buffer && lcl_git_utils=>pkt_string( 'deepen 1' && gc_newline ). "#EC NOTEXT
|
lv_buffer = lv_buffer && lcl_git_utils=>pkt_string( 'deepen 1'
|
||||||
|
&& gc_newline ). "#EC NOTEXT
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
lv_buffer = lv_buffer
|
lv_buffer = lv_buffer
|
||||||
&& '0000'
|
&& '0000'
|
||||||
&& '0009done' && gc_newline.
|
&& '0009done' && gc_newline.
|
||||||
|
|
||||||
lv_xstring = lo_client->send_receive_close( lcl_convert=>string_to_xstring_utf8( lv_buffer ) ).
|
lv_xstring = lo_client->send_receive_close(
|
||||||
|
lcl_convert=>string_to_xstring_utf8( lv_buffer ) ).
|
||||||
|
|
||||||
parse( IMPORTING ev_pack = lv_pack
|
parse( IMPORTING ev_pack = lv_pack
|
||||||
CHANGING cv_data = lv_xstring ).
|
CHANGING cv_data = lv_xstring ).
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_GIT</NAME>
|
<NAME>ZABAPGIT_GIT</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_GIT</ENTRY>
|
<ENTRY>Include ZABAPGIT_GIT</ENTRY>
|
||||||
<LENGTH>20</LENGTH>
|
<LENGTH>20</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -111,7 +111,7 @@ CLASS lcl_git_branch_list DEFINITION FINAL.
|
||||||
tag TYPE ty_git_branch_type VALUE 'TG',
|
tag TYPE ty_git_branch_type VALUE 'TG',
|
||||||
other TYPE ty_git_branch_type VALUE 'ZZ',
|
other TYPE ty_git_branch_type VALUE 'ZZ',
|
||||||
END OF c_type.
|
END OF c_type.
|
||||||
CONSTANTS head_name TYPE string VALUE 'HEAD'.
|
CONSTANTS c_head_name TYPE string VALUE 'HEAD'.
|
||||||
|
|
||||||
METHODS constructor
|
METHODS constructor
|
||||||
IMPORTING iv_data TYPE string
|
IMPORTING iv_data TYPE string
|
||||||
|
@ -126,6 +126,9 @@ CLASS lcl_git_branch_list DEFINITION FINAL.
|
||||||
RETURNING VALUE(rs_branch) TYPE ty_git_branch
|
RETURNING VALUE(rs_branch) TYPE ty_git_branch
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS get_head_symref
|
||||||
|
RETURNING VALUE(rv_head_symref) TYPE string.
|
||||||
|
|
||||||
METHODS get_branches_only
|
METHODS get_branches_only
|
||||||
RETURNING VALUE(rt_branches) TYPE ty_git_branch_list_tt
|
RETURNING VALUE(rt_branches) TYPE ty_git_branch_list_tt
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
@ -150,6 +153,10 @@ CLASS lcl_git_branch_list DEFINITION FINAL.
|
||||||
IMPORTING iv_branch_name TYPE clike
|
IMPORTING iv_branch_name TYPE clike
|
||||||
RETURNING VALUE(rv_name) TYPE string.
|
RETURNING VALUE(rv_name) TYPE string.
|
||||||
|
|
||||||
|
CLASS-METHODS normalize_branch_name
|
||||||
|
IMPORTING iv_branch_name TYPE clike
|
||||||
|
RETURNING VALUE(rv_name) TYPE string.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
DATA mt_branches TYPE ty_git_branch_list_tt.
|
DATA mt_branches TYPE ty_git_branch_list_tt.
|
||||||
DATA mv_head_symref TYPE string.
|
DATA mv_head_symref TYPE string.
|
||||||
|
@ -178,6 +185,10 @@ CLASS lcl_git_branch_list IMPLEMENTATION.
|
||||||
ev_head_symref = me->mv_head_symref ).
|
ev_head_symref = me->mv_head_symref ).
|
||||||
ENDMETHOD. "create
|
ENDMETHOD. "create
|
||||||
|
|
||||||
|
METHOD get_head_symref.
|
||||||
|
rv_head_symref = mv_head_symref.
|
||||||
|
ENDMETHOD. " get_head_symref.
|
||||||
|
|
||||||
METHOD find_by_name.
|
METHOD find_by_name.
|
||||||
|
|
||||||
IF iv_branch_name IS INITIAL.
|
IF iv_branch_name IS INITIAL.
|
||||||
|
@ -197,7 +208,7 @@ CLASS lcl_git_branch_list IMPLEMENTATION.
|
||||||
IF mv_head_symref IS NOT INITIAL.
|
IF mv_head_symref IS NOT INITIAL.
|
||||||
rs_branch = find_by_name( mv_head_symref ).
|
rs_branch = find_by_name( mv_head_symref ).
|
||||||
ELSE.
|
ELSE.
|
||||||
rs_branch = find_by_name( head_name ).
|
rs_branch = find_by_name( c_head_name ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD. "get_head
|
ENDMETHOD. "get_head
|
||||||
|
@ -246,7 +257,7 @@ CLASS lcl_git_branch_list IMPLEMENTATION.
|
||||||
<ls_branch>-name = lv_name.
|
<ls_branch>-name = lv_name.
|
||||||
<ls_branch>-display_name = get_display_name( lv_name ).
|
<ls_branch>-display_name = get_display_name( lv_name ).
|
||||||
<ls_branch>-type = get_type( lv_name ).
|
<ls_branch>-type = get_type( lv_name ).
|
||||||
IF <ls_branch>-name = head_name OR <ls_branch>-name = ev_head_symref.
|
IF <ls_branch>-name = c_head_name OR <ls_branch>-name = ev_head_symref.
|
||||||
<ls_branch>-is_head = abap_true.
|
<ls_branch>-is_head = abap_true.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
@ -295,7 +306,7 @@ CLASS lcl_git_branch_list IMPLEMENTATION.
|
||||||
METHOD get_type.
|
METHOD get_type.
|
||||||
rv_type = c_type-other.
|
rv_type = c_type-other.
|
||||||
|
|
||||||
IF iv_branch_name CP 'refs/heads/*' OR iv_branch_name = head_name.
|
IF iv_branch_name CP 'refs/heads/*' OR iv_branch_name = c_head_name.
|
||||||
rv_type = c_type-branch.
|
rv_type = c_type-branch.
|
||||||
RETURN.
|
RETURN.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
@ -334,4 +345,11 @@ CLASS lcl_git_branch_list IMPLEMENTATION.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
ENDMETHOD. "get_tags_only
|
ENDMETHOD. "get_tags_only
|
||||||
|
|
||||||
|
METHOD normalize_branch_name.
|
||||||
|
|
||||||
|
rv_name = iv_branch_name. " Force convert to string
|
||||||
|
REPLACE ALL OCCURRENCES OF ` ` IN rv_name WITH '-'. " Disallow space in branch name
|
||||||
|
|
||||||
|
ENDMETHOD. " normalize_branch_name.
|
||||||
|
|
||||||
ENDCLASS. "lcl_git_branch_list
|
ENDCLASS. "lcl_git_branch_list
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_GIT_HELPERS</NAME>
|
<NAME>ZABAPGIT_GIT_HELPERS</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_GIT_HELPERS</ENTRY>
|
<ENTRY>Include ZABAPGIT_GIT_HELPERS</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -251,9 +251,11 @@ CLASS lcl_gui IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD render.
|
METHOD render.
|
||||||
|
|
||||||
DATA lv_url TYPE w3url.
|
DATA: lv_url TYPE w3url,
|
||||||
|
lo_html TYPE REF TO lcl_html.
|
||||||
|
|
||||||
lv_url = cache_html( mi_cur_page->render( )->mv_html ).
|
lo_html = mi_cur_page->render( ).
|
||||||
|
lv_url = cache_html( lo_html->render( iv_no_indent_jscss = abap_true ) ).
|
||||||
|
|
||||||
mo_html_viewer->show_url( lv_url ).
|
mo_html_viewer->show_url( lv_url ).
|
||||||
|
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_GUI</NAME>
|
<NAME>ZABAPGIT_GUI</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_GUI</ENTRY>
|
<ENTRY>Include ZABAPGIT_GUI</ENTRY>
|
||||||
<LENGTH>20</LENGTH>
|
<LENGTH>20</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -13,6 +13,9 @@ CLASS lcl_gui_asset_manager DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_gui.
|
||||||
METHODS get_images
|
METHODS get_images
|
||||||
RETURNING VALUE(rt_images) TYPE tt_web_assets.
|
RETURNING VALUE(rt_images) TYPE tt_web_assets.
|
||||||
|
|
||||||
|
CLASS-METHODS get_webfont_link
|
||||||
|
RETURNING VALUE(rv_link) TYPE string.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
METHODS get_inline_asset
|
METHODS get_inline_asset
|
||||||
|
@ -108,11 +111,7 @@ CLASS lcl_gui_asset_manager IMPLEMENTATION.
|
||||||
TABLES
|
TABLES
|
||||||
binary_tab = lt_w3mime
|
binary_tab = lt_w3mime
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
failed = 1.
|
failed = 1 ##FM_SUBRC_OK.
|
||||||
|
|
||||||
IF sy-subrc IS NOT INITIAL.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD. " get_mime_asset.
|
ENDMETHOD. " get_mime_asset.
|
||||||
|
|
||||||
|
@ -145,6 +144,7 @@ CLASS lcl_gui_asset_manager IMPLEMENTATION.
|
||||||
DATA: lt_data TYPE ty_string_tt,
|
DATA: lt_data TYPE ty_string_tt,
|
||||||
lv_str TYPE string.
|
lv_str TYPE string.
|
||||||
|
|
||||||
|
|
||||||
CASE iv_asset_name.
|
CASE iv_asset_name.
|
||||||
WHEN 'CSS_COMMON'.
|
WHEN 'CSS_COMMON'.
|
||||||
" @@abapmerge include zabapgit_css_common.w3mi.data.css > _inline '$$'.
|
" @@abapmerge include zabapgit_css_common.w3mi.data.css > _inline '$$'.
|
||||||
|
@ -255,160 +255,15 @@ CLASS lcl_gui_asset_manager IMPLEMENTATION.
|
||||||
&& 'cpUAAAAASUVORK5CYII='.
|
&& 'cpUAAAAASUVORK5CYII='.
|
||||||
APPEND ls_image TO rt_images.
|
APPEND ls_image TO rt_images.
|
||||||
|
|
||||||
* http://fa2png.io/r/octicons/
|
|
||||||
* colour: #808080
|
|
||||||
* size: 16
|
|
||||||
* https://www.base64-image.de/ can be used to convert images to base64
|
|
||||||
|
|
||||||
ls_image-url = 'img/sync' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA6ElEQVQYGY3BIWuUAQAG'
|
|
||||||
&& '4Pc7N72xsbGBYNE8tYpVZKDZX2CcYLEZ9yQxOQSz3D/YmkUsVovRQ2SYNJnlkFfH7VZu'
|
|
||||||
&& 'wefJgrGHXnjrpQeu5B93smCwr6qqqp54433mDI5Ucds1u577o+p35hyoqe2cMThWVatJ'
|
|
||||||
&& '7KiZrZxz18SJqqtJPFXPssRgw0oSH9WNXMCQU76qzSxx2cxxTlk3yhKb6mcSQy7kvjpM'
|
|
||||||
&& 'Ylt98tpjN3POyFTdSuKSqppayxkjE/Uhc36p+m7PhhXr7vmmfhhnzpHPJqqqquqdcRY8'
|
|
||||||
&& 'spq47sAXMyde2c3/+wvX7Y18BexhBwAAAABJRU5ErkJggg=='.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
ls_image-url = 'img/toc' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAACAgICAgICA'
|
|
||||||
&& 'gICAgICAgICAgIAO39T0AAAABnRSTlMABBCRlMXJzV0oAAAAN0lEQVQIW2NgwABuaWlB'
|
|
||||||
&& 'YWlpDgwJDAxiAgxACshgYwAz0tLY2NISSBWBMYAmg4ADyBZhARCJAQBBchGypGCbQgAA'
|
|
||||||
&& 'AABJRU5ErkJggg=='.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
ls_image-url = 'img/repo_online' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAApVBMVEUAAABQbJxQbJxQ'
|
|
||||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
|
||||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
|
||||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
|
||||||
&& 'bJz+TJ01AAAANnRSTlMAAQIDBAcJCgwSFBocHygqMTM1NkRHSU1QUWFiZGlweHuDiImL'
|
|
||||||
&& 'lZiio6a5vsfT3uTo6e3x9fsxY2JuAAAAgUlEQVQYGXXB6RaBUBSA0e+IEuIiMs9zhlDn'
|
|
||||||
&& '/R/NZWmt/LA3f1RcoaB50SydCbn20wjedkPu3sKSpMGH21PhLdZ0BATZ+cCXtxtDHGLV'
|
|
||||||
&& 'pgFW9QqJj2U0wvJvMF+5jiNGI3HK9dMQSouH6sRoFGoWd8l1dEDRWlWPQsFS98KPvvDH'
|
|
||||||
&& 'C3HLClrWc70ZAAAAAElFTkSuQmCC'.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
ls_image-url = 'img/repo_offline' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAVFBMVEUAAACAgICAgICA'
|
|
||||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
|
||||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICuaWnmAAAAG3RSTlMAAgQFBgsQFxweIiMtN3yI'
|
|
||||||
&& 'nqOvt9Hp6/Hz9fktMNR/AAAAXElEQVQYV5WO2xJAMAxES1q3ugfF/v9/0qLyyL4k58xk'
|
|
||||||
&& 'J0p9D7N5oeqZgSwy7fDZnHNdEE1gWK116tksl7hPimGFFPWYl7MU0zksRCl8TStKg1AJ'
|
|
||||||
&& '0XNC8Zm4/c0BUVQHi0llOUYAAAAASUVORK5CYII='.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
ls_image-url = 'img/pkg' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA30lEQVQoU43OIUuDcRSF'
|
|
||||||
&& '8fvqhuB0mFwaKLbVBVdkX0GTFss+wYL2H4rJIIgyQQSzZcUPoGHZ9CKCmAwTMS8Y/ga3'
|
|
||||||
&& 'BWVjT7hwOQ+HEzEbMhU7jrTd69q2KhtFRU2nrvS927dm3pyqPXcuNRVD7sxiRIQlDSc+'
|
|
||||||
&& 'PGjZUFDWkYekLfdoV2XYua4rSZ61pZBkEUq2XPty41XuXJIiZGNhPDVZiFCYIMSor+Db'
|
|
||||||
&& '7RQhYnQnCsNvNmGgPFFYMQh1PU9aqrLxyGUNx/p66r9mUc2hFx3JhU9vDtQU4y9KGjaV'
|
|
||||||
&& '/gXT+AGZVIinhU2EAwAAAABJRU5ErkJggg=='.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
ls_image-url = 'img/branch' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAqFBMVEUAAACAgICAgICA'
|
|
||||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
|
||||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
|
||||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
|
||||||
&& 'gICAgID/OyosAAAAN3RSTlMAAQIDBAYICQ8TFRweJScoKSo3Oj1FRk1dYWJjZmhzdIaJ'
|
|
||||||
&& 'j5GVm6CwsrS5vsHDyszV19ne7/X583teZAAAAIFJREFUGFdVytkagVAYheFvFzJlnqc0'
|
|
||||||
&& 'EEoR+u//zhxI7dbZ9z4LMJ1op9DmjpntdXiBigHbLiAYqukBVr63+YGRSazgCY/iEooP'
|
|
||||||
&& 'xKZxr0EnSbo14B1Rg4msKzj150fJrQpERPLBv7mIfNxlq+zRbZsu0JYpGlcdwjY9Twfr'
|
|
||||||
&& 'nAbNsr6IKQxJI/U5CgAAAABJRU5ErkJggg=='.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
ls_image-url = 'img/link' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAXVBMVEUAAACAgICAgICA'
|
|
||||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
|
||||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVwFMKAAAAHnRSTlMAAwQFBgcK'
|
|
||||||
&& 'FR4gIiMmP0JHSm+RmKDByM/R09rg+/0jN/q+AAAAX0lEQVQYV43Nxw6AIBAE0FGw916Z'
|
|
||||||
&& '//9MRQ0S4sG5bPZlCxqSCyBGXgFUJKUA4A8PUOKONzuQOxOZIjcLkrMvxGQg3skSCFYL'
|
|
||||||
&& 'Kl1Ds5LWz+33yyf4rQOSf6CjnV6rHeAA87gJtKzI8ocAAAAASUVORK5CYII='.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
ls_image-url = 'img/code' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAElBMVEUAAACAgICAgICA'
|
|
||||||
&& 'gICAgICAgIC07w1vAAAABXRSTlMABECUxcOwZQcAAAA1SURBVAhbY2AODQ0NEWBgYGVg'
|
|
||||||
&& 'YGByhNAMKgIMrKyhAQxMDhA+QwCCZgVqIIUP1Q+yJzTUAAAfUAq+Os55uAAAAABJRU5E'
|
|
||||||
&& 'rkJggg=='.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
ls_image-url = 'img/bin' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAElBMVEUAAACAgICAgICA'
|
|
||||||
&& 'gICAgICAgIC07w1vAAAABXRSTlMABECUxcOwZQcAAABBSURBVAhbXcqxDYAwAMRAK8h9'
|
|
||||||
&& 'hmAARoANvuD3X4UCiojqZMlsbe8JAuN6ZZ9ozThRCVmsJe9H0HwdXf19W9v2eAA6Fws2'
|
|
||||||
&& 'RotPsQAAAABJRU5ErkJggg=='.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
ls_image-url = 'img/obj' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAIVBMVEUAAACAgICAgICA'
|
|
||||||
&& 'gICAgICAgICAgICAgICAgICAgICAgIDcWqnoAAAACnRSTlMABD1AZI+RlcPFIaFe1gAA'
|
|
||||||
&& 'AEVJREFUCFtjYF+1atVKAQYGLgYGBuaJEJrBUgBCM0+A0AwLgLQIgyOIZmwCSgNptgAG'
|
|
||||||
&& '1gQQfzKDhgCSPFw9Kg2yZ9WqAgBWJBENLk6V3AAAAABJRU5ErkJggg=='.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
ls_image-url = 'img/lock' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAOVBMVEUAAACIiIiIiIiI'
|
|
||||||
&& 'iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIjNaTNB'
|
|
||||||
&& 'AAAAEnRSTlMABgdBVXt8iYuRsNXZ3uDi6Pmu6tfUAAAASUlEQVQYV63KSxJAQBAE0TQ0'
|
|
||||||
&& 'Znym1f0PayE0QdjJ5asCgGTu1hClqjppvaRXB60swBeA2QNUAIq+ICvKx367nqAn/P8Y'
|
|
||||||
&& 't2jg3Q5rgASaF3KNRwAAAABJRU5ErkJggg=='.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
ls_image-url = 'img/dir' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAASFBMVEUAAABmksxmksxm'
|
|
||||||
&& 'ksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxm'
|
|
||||||
&& 'ksxmksxmksxmksxMwQo8AAAAF3RSTlMABhIYIy1fZmhpe3+IiYuMkZvD7e/x93sipD4A'
|
|
||||||
&& 'AAA+SURBVBhXY2BABzwiokAgzAYXEGdiBAIWIYQAPzcQCApzgwEXM4M4KuBDFxAYKAEx'
|
|
||||||
&& 'VAFeBlYOTiTAzoThewD5hBAcnWM4gwAAAABJRU5ErkJggg=='.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
ls_image-url = 'img/burger' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAHlBMVEUAAABtktltktlt'
|
|
||||||
&& 'ktltktltktltktltktltktltktk7ccVDAAAACXRSTlMAFDBLY2SFoPGv/DFMAAAAJ0lE'
|
|
||||||
&& 'QVQIW2NggIHKmWAwmaETwpjGoBoKBo4MmIAkxXApuGK4dgwAAJa5IzLs+gRBAAAAAElF'
|
|
||||||
&& 'TkSuQmCC'.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
ls_image-url = 'img/star' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAilBMVEUAAABejclejcle'
|
|
||||||
&& 'jclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejcle'
|
|
||||||
&& 'jclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejcle'
|
|
||||||
&& 'jclejclejclejclejclejclejclejclejcn2yvsVAAAALXRSTlMAAQIFBwkKCw0QERUY'
|
|
||||||
&& 'HB4jLzEzNjg7PVdYYmRvd3mDm52eub7R0+Tr8fX3+/16wo8zAAAAcElEQVQYGW3BBxKC'
|
|
||||||
&& 'MABFwYcQETv2hg1UVP79ryeTZBxw3MWL+JGltBgVtGRSSoORVOAE8Xi5zVU7rWfDCOaV'
|
|
||||||
&& 'Gu59mLz0dTPUBg95eYjVK2VdOzjBW9YZL5FT4i2k5+YoKcY5VPsQkoumOLsu1mjFHx8o'
|
|
||||||
&& 'ahA3YV7OfwAAAABJRU5ErkJggg=='.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
ls_image-url = 'img/star-grey' ##NO_TEXT.
|
|
||||||
ls_image-base64 =
|
|
||||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAilBMVEUAAADQ0NDQ0NDQ'
|
|
||||||
&& '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ'
|
|
||||||
&& '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ'
|
|
||||||
&& '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NC2QdifAAAALXRSTlMAAQIFBwkKCw0QERUY'
|
|
||||||
&& 'HB4jLzEzNjg7PVdYYmRvd3mDm52eub7R0+Tr8fX3+/16wo8zAAAAcElEQVQYGW3BBxKC'
|
|
||||||
&& 'MABFwYcQETv2hg1UVP79ryeTZBxw3MWL+JGltBgVtGRSSoORVOAE8Xi5zVU7rWfDCOaV'
|
|
||||||
&& 'Gu59mLz0dTPUBg95eYjVK2VdOzjBW9YZL5FT4i2k5+YoKcY5VPsQkoumOLsu1mjFHx8o'
|
|
||||||
&& 'ahA3YV7OfwAAAABJRU5ErkJggg=='.
|
|
||||||
APPEND ls_image TO rt_images.
|
|
||||||
|
|
||||||
|
|
||||||
ENDMETHOD. " get_inline_images.
|
ENDMETHOD. " get_inline_images.
|
||||||
|
|
||||||
|
METHOD get_webfont_link.
|
||||||
|
|
||||||
|
rv_link = '<link rel="stylesheet"'
|
||||||
|
&& ' type="text/css" href="'
|
||||||
|
&& 'https://cdnjs.cloudflare.com/ajax/libs/octicons/4.4.0/font/octicons.min.css'
|
||||||
|
&& '">'. "#EC NOTEXT
|
||||||
|
|
||||||
|
ENDMETHOD. " get_webfont_link
|
||||||
|
|
||||||
ENDCLASS. "lcl_gui_asset_manager
|
ENDCLASS. "lcl_gui_asset_manager
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_GUI_ASSET_MANAGER</NAME>
|
<NAME>ZABAPGIT_GUI_ASSET_MANAGER</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_GUI_ASSET_MANAGER</ENTRY>
|
<ENTRY>Include ZABAPGIT_GUI_ASSET_MANAGER</ENTRY>
|
||||||
<LENGTH>34</LENGTH>
|
<LENGTH>34</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -4,17 +4,18 @@
|
||||||
|
|
||||||
* All UI pages
|
* All UI pages
|
||||||
|
|
||||||
* Super class
|
* Super class & common html chunks
|
||||||
|
INCLUDE zabapgit_html_chunks.
|
||||||
INCLUDE zabapgit_page.
|
INCLUDE zabapgit_page.
|
||||||
|
|
||||||
* Utils and helpers
|
* Utils and helpers
|
||||||
INCLUDE zabapgit_html_action_utils.
|
INCLUDE zabapgit_html_action_utils.
|
||||||
INCLUDE zabapgit_repo_browser_util.
|
INCLUDE zabapgit_repo_browser_util.
|
||||||
|
INCLUDE zabapgit_syntax_highlighter.
|
||||||
|
|
||||||
* Components and templates
|
* Components and templates
|
||||||
INCLUDE zabapgit_view_repo.
|
INCLUDE zabapgit_view_repo.
|
||||||
INCLUDE zabapgit_view_tutorial.
|
INCLUDE zabapgit_view_tutorial.
|
||||||
INCLUDE zabapgit_syntax_highlighter.
|
|
||||||
|
|
||||||
* Pages
|
* Pages
|
||||||
INCLUDE zabapgit_page_commit.
|
INCLUDE zabapgit_page_commit.
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_GUI_PAGES</NAME>
|
<NAME>ZABAPGIT_GUI_PAGES</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_GUI_PAGES</ENTRY>
|
<ENTRY>Include ZABAPGIT_GUI_PAGES</ENTRY>
|
||||||
<LENGTH>26</LENGTH>
|
<LENGTH>26</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_GUI_ROUTER</NAME>
|
<NAME>ZABAPGIT_GUI_ROUTER</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_GUI_ROUTER</ENTRY>
|
<ENTRY>Include ZABAPGIT_GUI_ROUTER</ENTRY>
|
||||||
<LENGTH>27</LENGTH>
|
<LENGTH>27</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -7,59 +7,126 @@ DEFINE _add.
|
||||||
END-OF-DEFINITION.
|
END-OF-DEFINITION.
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
* CLASS lcl_html_helper DEFINITION
|
* CLASS lcl_html DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
CLASS lcl_html_helper DEFINITION FINAL.
|
|
||||||
|
CLASS lcl_html DEFINITION FINAL.
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
CONSTANTS: c_indent_size TYPE i VALUE 2.
|
CONSTANTS: c_indent_size TYPE i VALUE 2.
|
||||||
|
|
||||||
DATA mv_html TYPE string READ-ONLY.
|
CLASS-METHODS class_constructor.
|
||||||
DATA mv_indent TYPE i READ-ONLY.
|
|
||||||
DATA mv_within_style TYPE i READ-ONLY.
|
|
||||||
DATA mv_within_js TYPE i READ-ONLY.
|
|
||||||
|
|
||||||
METHODS add IMPORTING iv_chunk TYPE any.
|
|
||||||
METHODS reset.
|
METHODS reset.
|
||||||
|
METHODS add
|
||||||
|
IMPORTING iv_chunk TYPE any.
|
||||||
|
METHODS render
|
||||||
|
IMPORTING iv_no_indent_jscss TYPE abap_bool OPTIONAL
|
||||||
|
RETURNING VALUE(rv_html) TYPE string.
|
||||||
|
METHODS is_empty
|
||||||
|
RETURNING VALUE(rv_yes) TYPE abap_bool.
|
||||||
|
|
||||||
METHODS add_anchor IMPORTING iv_txt TYPE string
|
METHODS add_a
|
||||||
|
IMPORTING
|
||||||
|
iv_txt TYPE string
|
||||||
iv_act TYPE string
|
iv_act TYPE string
|
||||||
iv_opt TYPE clike OPTIONAL
|
|
||||||
iv_typ TYPE char1 DEFAULT gc_action_type-sapevent
|
iv_typ TYPE char1 DEFAULT gc_action_type-sapevent
|
||||||
|
iv_opt TYPE clike OPTIONAL
|
||||||
iv_class TYPE string OPTIONAL
|
iv_class TYPE string OPTIONAL
|
||||||
iv_id TYPE string OPTIONAL
|
iv_id TYPE string OPTIONAL
|
||||||
iv_style TYPE string OPTIONAL.
|
iv_style TYPE string OPTIONAL.
|
||||||
|
|
||||||
|
METHODS add_icon
|
||||||
|
IMPORTING
|
||||||
|
iv_name TYPE string
|
||||||
|
iv_hint TYPE string OPTIONAL
|
||||||
|
iv_alt TYPE string OPTIONAL
|
||||||
|
iv_class TYPE string OPTIONAL.
|
||||||
|
|
||||||
|
CLASS-METHODS a
|
||||||
|
IMPORTING
|
||||||
|
iv_txt TYPE string
|
||||||
|
iv_act TYPE string
|
||||||
|
iv_typ TYPE char1 DEFAULT gc_action_type-sapevent
|
||||||
|
iv_opt TYPE clike OPTIONAL
|
||||||
|
iv_class TYPE string OPTIONAL
|
||||||
|
iv_id TYPE string OPTIONAL
|
||||||
|
iv_style TYPE string OPTIONAL
|
||||||
|
RETURNING VALUE(rv_str) TYPE string.
|
||||||
|
|
||||||
|
CLASS-METHODS icon
|
||||||
|
IMPORTING
|
||||||
|
iv_name TYPE string
|
||||||
|
iv_hint TYPE string OPTIONAL
|
||||||
|
iv_alt TYPE string OPTIONAL
|
||||||
|
iv_class TYPE string OPTIONAL
|
||||||
|
RETURNING VALUE(rv_str) TYPE string.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
METHODS _add_str IMPORTING iv_str TYPE csequence.
|
CLASS-DATA go_single_tags_re TYPE REF TO cl_abap_regex.
|
||||||
METHODS _add_htm IMPORTING io_html TYPE REF TO lcl_html_helper.
|
DATA mt_buffer TYPE string_table.
|
||||||
|
|
||||||
ENDCLASS. "lcl_html_helper DEFINITION
|
TYPES:
|
||||||
|
BEGIN OF ty_indent_context,
|
||||||
|
no_indent_jscss TYPE abap_bool,
|
||||||
|
within_style TYPE abap_bool,
|
||||||
|
within_js TYPE abap_bool,
|
||||||
|
indent TYPE i,
|
||||||
|
indent_str TYPE string,
|
||||||
|
END OF ty_indent_context,
|
||||||
|
|
||||||
|
BEGIN OF ty_study_result,
|
||||||
|
style_open TYPE abap_bool,
|
||||||
|
style_close TYPE abap_bool,
|
||||||
|
script_open TYPE abap_bool,
|
||||||
|
script_close TYPE abap_bool,
|
||||||
|
tag_close TYPE abap_bool,
|
||||||
|
curly_close TYPE abap_bool,
|
||||||
|
openings TYPE i,
|
||||||
|
closings TYPE i,
|
||||||
|
singles TYPE i,
|
||||||
|
END OF ty_study_result.
|
||||||
|
|
||||||
|
METHODS indent_line
|
||||||
|
CHANGING
|
||||||
|
cs_context TYPE ty_indent_context
|
||||||
|
cv_line TYPE string.
|
||||||
|
|
||||||
|
METHODS study_line
|
||||||
|
IMPORTING
|
||||||
|
iv_line TYPE string
|
||||||
|
is_context TYPE ty_indent_context
|
||||||
|
RETURNING VALUE(rs_result) TYPE ty_study_result.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_html DEFINITION
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
* CLASS lcl_html_helper IMPLEMENTATION
|
* CLASS lcl_html IMPLEMENTATION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
CLASS lcl_html_helper IMPLEMENTATION.
|
CLASS lcl_html IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD add.
|
METHOD add.
|
||||||
DATA lo_type TYPE REF TO cl_abap_typedescr.
|
|
||||||
DATA lo_html TYPE REF TO lcl_html_helper.
|
|
||||||
|
|
||||||
lo_type = cl_abap_typedescr=>describe_by_data( iv_chunk ).
|
DATA: lv_type TYPE c,
|
||||||
|
lo_html TYPE REF TO lcl_html.
|
||||||
|
|
||||||
CASE lo_type->type_kind.
|
FIELD-SYMBOLS: <tab> TYPE string_table,
|
||||||
WHEN cl_abap_typedescr=>typekind_char
|
<str> LIKE LINE OF <tab>.
|
||||||
OR cl_abap_typedescr=>typekind_string.
|
|
||||||
IF strlen( iv_chunk ) = 0.
|
DESCRIBE FIELD iv_chunk TYPE lv_type. " Describe is faster than RTTI classes
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
CASE lv_type.
|
||||||
_add_str( iv_chunk ).
|
WHEN 'C' OR 'g'. " Char or string
|
||||||
WHEN cl_abap_typedescr=>typekind_oref.
|
APPEND iv_chunk TO mt_buffer.
|
||||||
|
WHEN 'h'. " Table
|
||||||
|
ASSIGN iv_chunk TO <tab>. " Assuming table of strings ! Will dump otherwise
|
||||||
|
APPEND LINES OF <tab> TO mt_buffer.
|
||||||
|
WHEN 'r'. " Object ref
|
||||||
ASSERT iv_chunk IS BOUND. " Dev mistake
|
ASSERT iv_chunk IS BOUND. " Dev mistake
|
||||||
TRY.
|
TRY.
|
||||||
lo_html ?= iv_chunk.
|
lo_html ?= iv_chunk.
|
||||||
CATCH cx_sy_move_cast_error.
|
CATCH cx_sy_move_cast_error.
|
||||||
ASSERT 1 = 0. " Dev mistake
|
ASSERT 1 = 0. " Dev mistake
|
||||||
ENDTRY.
|
ENDTRY.
|
||||||
_add_htm( lo_html ).
|
APPEND LINES OF lo_html->mt_buffer TO mt_buffer.
|
||||||
WHEN OTHERS.
|
WHEN OTHERS.
|
||||||
ASSERT 1 = 0. " Dev mistake
|
ASSERT 1 = 0. " Dev mistake
|
||||||
ENDCASE.
|
ENDCASE.
|
||||||
|
@ -67,85 +134,158 @@ CLASS lcl_html_helper IMPLEMENTATION.
|
||||||
ENDMETHOD. " add
|
ENDMETHOD. " add
|
||||||
|
|
||||||
METHOD reset.
|
METHOD reset.
|
||||||
CLEAR: me->mv_html, me->mv_indent.
|
CLEAR me->mt_buffer.
|
||||||
ENDMETHOD. "reset
|
ENDMETHOD. "reset
|
||||||
|
|
||||||
METHOD _add_str.
|
METHOD is_empty.
|
||||||
CONSTANTS lc_single_tags_re TYPE string " HTML5 singleton tags
|
rv_yes = boolc( lines( mt_buffer ) = 0 ).
|
||||||
VALUE '<(area|base|br|col|command|embed|hr|img|input|link|meta|param|source|!)'.
|
ENDMETHOD. "is_empty
|
||||||
|
|
||||||
DATA lv_tags TYPE i.
|
METHOD class_constructor.
|
||||||
DATA lv_tags_open TYPE i.
|
CREATE OBJECT go_single_tags_re
|
||||||
DATA lv_tags_close TYPE i.
|
EXPORTING
|
||||||
DATA lv_tags_single TYPE i.
|
pattern = '<(AREA|BASE|BR|COL|COMMAND|EMBED|HR|IMG|INPUT|LINK|META|PARAM|SOURCE|!)'
|
||||||
DATA lv_close_offs TYPE i.
|
ignore_case = abap_false.
|
||||||
DATA lv_shift_back TYPE i.
|
ENDMETHOD. "class_constructor
|
||||||
DATA lv_style_tag_open TYPE i.
|
|
||||||
DATA lv_style_tag_close TYPE i.
|
|
||||||
DATA lv_js_tag_open TYPE i.
|
|
||||||
DATA lv_js_tag_close TYPE i.
|
|
||||||
DATA lv_curly TYPE i.
|
|
||||||
|
|
||||||
FIND FIRST OCCURRENCE OF '</' IN iv_str MATCH OFFSET lv_close_offs.
|
METHOD study_line.
|
||||||
IF sy-subrc = 0 AND lv_close_offs = 0 AND mv_indent > 0. " Found close tag @beginning
|
|
||||||
lv_shift_back = 1.
|
DATA: lv_line TYPE string,
|
||||||
|
lv_len TYPE i.
|
||||||
|
|
||||||
|
lv_line = to_upper( shift_left( val = iv_line sub = ` ` ) ).
|
||||||
|
lv_len = strlen( lv_line ).
|
||||||
|
|
||||||
|
" Some assumptions for simplification and speed
|
||||||
|
" - style & scripts tag should be opened/closed in a separate line
|
||||||
|
" - style & scripts opening and closing in one line is possible but only once
|
||||||
|
|
||||||
|
" TODO & Issues
|
||||||
|
" - What if the string IS a well formed html already not just single line ?
|
||||||
|
|
||||||
|
IF is_context-within_js = abap_true OR is_context-within_style = abap_true.
|
||||||
|
|
||||||
|
IF is_context-within_js = abap_true AND lv_len >= 8 AND lv_line(8) = '</SCRIPT'.
|
||||||
|
rs_result-script_close = abap_true.
|
||||||
|
ELSEIF is_context-within_style = abap_true AND lv_len >= 7 AND lv_line(7) = '</STYLE'.
|
||||||
|
rs_result-style_close = abap_true.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
FIND FIRST OCCURRENCE OF '}' IN iv_str MATCH OFFSET lv_close_offs. " Find close } @beginning
|
IF is_context-no_indent_jscss = abap_false.
|
||||||
IF ( mv_within_style > 0 OR mv_within_js > 0 )
|
IF lv_len >= 1 AND lv_line(1) = '}'.
|
||||||
AND sy-subrc = 0 AND lv_close_offs = 0 AND mv_indent > 0.
|
rs_result-curly_close = abap_true.
|
||||||
lv_shift_back = 1.
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
mv_html = mv_html
|
FIND ALL OCCURRENCES OF '{' IN lv_line MATCH COUNT rs_result-openings.
|
||||||
&& repeat( val = ` ` occ = ( mv_indent - lv_shift_back ) * c_indent_size )
|
FIND ALL OCCURRENCES OF '}' IN lv_line MATCH COUNT rs_result-closings.
|
||||||
&& iv_str
|
|
||||||
&& gc_newline.
|
|
||||||
|
|
||||||
FIND ALL OCCURRENCES OF '<' IN iv_str MATCH COUNT lv_tags.
|
|
||||||
FIND ALL OCCURRENCES OF '</' IN iv_str MATCH COUNT lv_tags_close.
|
|
||||||
FIND ALL OCCURRENCES OF REGEX lc_single_tags_re IN iv_str MATCH COUNT lv_tags_single.
|
|
||||||
|
|
||||||
lv_tags_open = lv_tags - lv_tags_close - lv_tags_single.
|
|
||||||
|
|
||||||
FIND ALL OCCURRENCES OF '<style' IN iv_str MATCH COUNT lv_style_tag_open IGNORING CASE.
|
|
||||||
FIND ALL OCCURRENCES OF '</style>' IN iv_str MATCH COUNT lv_style_tag_close IGNORING CASE.
|
|
||||||
mv_within_style = mv_within_style + lv_style_tag_open - lv_style_tag_close.
|
|
||||||
|
|
||||||
FIND ALL OCCURRENCES OF '<script' IN iv_str MATCH COUNT lv_js_tag_open IGNORING CASE.
|
|
||||||
FIND ALL OCCURRENCES OF '</script>' IN iv_str MATCH COUNT lv_js_tag_close IGNORING CASE.
|
|
||||||
mv_within_js = mv_within_js + lv_js_tag_open - lv_js_tag_close.
|
|
||||||
|
|
||||||
IF mv_within_style > 0 OR mv_within_js > 0.
|
|
||||||
FIND ALL OCCURRENCES OF '{' IN iv_str MATCH COUNT lv_curly.
|
|
||||||
lv_tags_open = lv_tags_open + lv_curly.
|
|
||||||
FIND ALL OCCURRENCES OF '}' IN iv_str MATCH COUNT lv_curly.
|
|
||||||
lv_tags_close = lv_tags_close + lv_curly.
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
ELSE.
|
||||||
|
IF lv_len >= 7 AND lv_line(7) = '<SCRIPT'.
|
||||||
|
FIND FIRST OCCURRENCE OF '</SCRIPT' IN lv_line.
|
||||||
|
IF sy-subrc > 0. " Not found
|
||||||
|
rs_result-script_open = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
IF lv_len >= 6 AND lv_line(6) = '<STYLE'.
|
||||||
|
FIND FIRST OCCURRENCE OF '</STYLE' IN lv_line.
|
||||||
|
IF sy-subrc > 0. " Not found
|
||||||
|
rs_result-style_open = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
IF lv_len >= 2 AND lv_line(2) = '</'.
|
||||||
|
rs_result-tag_close = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
FIND ALL OCCURRENCES OF '<' IN lv_line MATCH COUNT rs_result-openings.
|
||||||
|
FIND ALL OCCURRENCES OF '</' IN lv_line MATCH COUNT rs_result-closings.
|
||||||
|
FIND ALL OCCURRENCES OF REGEX go_single_tags_re IN lv_line MATCH COUNT rs_result-singles.
|
||||||
|
rs_result-openings = rs_result-openings - rs_result-closings - rs_result-singles.
|
||||||
|
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "study_line
|
||||||
|
|
||||||
|
METHOD indent_line.
|
||||||
|
|
||||||
|
DATA: ls_study TYPE ty_study_result,
|
||||||
|
lv_x_str TYPE string.
|
||||||
|
|
||||||
|
ls_study = study_line(
|
||||||
|
is_context = cs_context
|
||||||
|
iv_line = cv_line ).
|
||||||
|
|
||||||
|
" First closing tag - shift back exceptionally
|
||||||
|
IF ( ls_study-script_close = abap_true
|
||||||
|
OR ls_study-style_close = abap_true
|
||||||
|
OR ls_study-curly_close = abap_true
|
||||||
|
OR ls_study-tag_close = abap_true )
|
||||||
|
AND cs_context-indent > 0.
|
||||||
|
lv_x_str = repeat( val = ` ` occ = ( cs_context-indent - 1 ) * c_indent_size ).
|
||||||
|
cv_line = lv_x_str && cv_line.
|
||||||
|
ELSE.
|
||||||
|
cv_line = cs_context-indent_str && cv_line.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
" Context status update
|
||||||
|
CASE abap_true.
|
||||||
|
WHEN ls_study-script_open.
|
||||||
|
cs_context-within_js = abap_true.
|
||||||
|
cs_context-within_style = abap_false.
|
||||||
|
WHEN ls_study-style_open.
|
||||||
|
cs_context-within_js = abap_false.
|
||||||
|
cs_context-within_style = abap_true.
|
||||||
|
WHEN ls_study-script_close OR ls_study-style_close.
|
||||||
|
cs_context-within_js = abap_false.
|
||||||
|
cs_context-within_style = abap_false.
|
||||||
|
ls_study-closings = ls_study-closings + 1.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
" More-less logic chosen due to possible double tags in a line '<a><b>'
|
" More-less logic chosen due to possible double tags in a line '<a><b>'
|
||||||
IF lv_tags_open > lv_tags_close.
|
IF ls_study-openings <> ls_study-closings.
|
||||||
mv_indent = mv_indent + 1.
|
IF ls_study-openings > ls_study-closings.
|
||||||
ELSEIF lv_tags_open < lv_tags_close AND mv_indent > 0.
|
cs_context-indent = cs_context-indent + 1.
|
||||||
mv_indent = mv_indent - 1.
|
ELSEIF cs_context-indent > 0. " AND ls_study-openings < ls_study-closings
|
||||||
|
cs_context-indent = cs_context-indent - 1.
|
||||||
|
ENDIF.
|
||||||
|
cs_context-indent_str = repeat( val = ` ` occ = cs_context-indent * c_indent_size ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD. "_add_str
|
ENDMETHOD. "indent_line
|
||||||
|
|
||||||
METHOD _add_htm.
|
METHOD render.
|
||||||
|
|
||||||
DATA lt_strtab TYPE TABLE OF string.
|
DATA: ls_context TYPE ty_indent_context,
|
||||||
DATA lv_str TYPE string.
|
lt_temp TYPE string_table.
|
||||||
|
|
||||||
SPLIT io_html->mv_html AT gc_newline INTO TABLE lt_strtab.
|
FIELD-SYMBOLS: <line> LIKE LINE OF lt_temp,
|
||||||
LOOP AT lt_strtab INTO lv_str.
|
<line_c> LIKE LINE OF lt_temp.
|
||||||
SHIFT lv_str LEFT DELETING LEADING space.
|
|
||||||
_add_str( lv_str ).
|
ls_context-no_indent_jscss = iv_no_indent_jscss.
|
||||||
|
|
||||||
|
LOOP AT mt_buffer ASSIGNING <line>.
|
||||||
|
APPEND <line> TO lt_temp ASSIGNING <line_c>.
|
||||||
|
indent_line( CHANGING cs_context = ls_context cv_line = <line_c> ).
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
ENDMETHOD. "_add_htm
|
CONCATENATE LINES OF lt_temp INTO rv_html SEPARATED BY gc_newline.
|
||||||
|
|
||||||
|
ENDMETHOD. "render
|
||||||
|
|
||||||
|
METHOD add_a.
|
||||||
|
|
||||||
|
add( a( iv_txt = iv_txt
|
||||||
|
iv_act = iv_act
|
||||||
|
iv_typ = iv_typ
|
||||||
|
iv_opt = iv_opt
|
||||||
|
iv_class = iv_class
|
||||||
|
iv_id = iv_id
|
||||||
|
iv_style = iv_style ) ).
|
||||||
|
|
||||||
|
ENDMETHOD. "add_a
|
||||||
|
|
||||||
|
METHOD a.
|
||||||
|
|
||||||
METHOD add_anchor.
|
|
||||||
DATA: lv_class TYPE string,
|
DATA: lv_class TYPE string,
|
||||||
lv_href TYPE string,
|
lv_href TYPE string,
|
||||||
lv_id TYPE string,
|
lv_id TYPE string,
|
||||||
|
@ -153,7 +293,7 @@ CLASS lcl_html_helper IMPLEMENTATION.
|
||||||
|
|
||||||
lv_class = iv_class.
|
lv_class = iv_class.
|
||||||
|
|
||||||
IF iv_opt CA gc_html_opt-emphas.
|
IF iv_opt CA gc_html_opt-strong.
|
||||||
lv_class = lv_class && ' emphasis' ##NO_TEXT.
|
lv_class = lv_class && ' emphasis' ##NO_TEXT.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
IF iv_opt CA gc_html_opt-cancel.
|
IF iv_opt CA gc_html_opt-cancel.
|
||||||
|
@ -186,11 +326,43 @@ CLASS lcl_html_helper IMPLEMENTATION.
|
||||||
lv_style = | style="{ iv_style }"|.
|
lv_style = | style="{ iv_style }"|.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
_add_str( |<a{ lv_id }{ lv_class }{ lv_href }{ lv_style }>{ iv_txt }</a>| ).
|
rv_str = |<a{ lv_id }{ lv_class }{ lv_href }{ lv_style }>{ iv_txt }</a>|.
|
||||||
|
|
||||||
ENDMETHOD. "add_action
|
ENDMETHOD. "a
|
||||||
|
|
||||||
ENDCLASS. "lcl_html_helper IMPLEMENTATION
|
METHOD add_icon.
|
||||||
|
|
||||||
|
add( icon( iv_name = iv_name
|
||||||
|
iv_class = iv_class
|
||||||
|
iv_alt = iv_alt
|
||||||
|
iv_hint = iv_hint ) ).
|
||||||
|
|
||||||
|
ENDMETHOD. "add_icon
|
||||||
|
|
||||||
|
METHOD icon.
|
||||||
|
|
||||||
|
DATA: lv_hint TYPE string,
|
||||||
|
lv_name TYPE string,
|
||||||
|
lv_color TYPE string,
|
||||||
|
lv_class TYPE string.
|
||||||
|
|
||||||
|
SPLIT iv_name AT '/' INTO lv_name lv_color.
|
||||||
|
|
||||||
|
IF iv_hint IS NOT INITIAL.
|
||||||
|
lv_hint = | title="{ iv_hint }"|.
|
||||||
|
ENDIF.
|
||||||
|
IF iv_class IS NOT INITIAL.
|
||||||
|
lv_class = | { iv_class }|.
|
||||||
|
ENDIF.
|
||||||
|
IF lv_color IS NOT INITIAL.
|
||||||
|
lv_color = | { lv_color }|.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
rv_str = |<i class="octicon octicon-{ lv_name }{ lv_color }{ lv_class }"{ lv_hint }></i>|.
|
||||||
|
|
||||||
|
ENDMETHOD. "icon
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_html IMPLEMENTATION
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
* CLASS lcl_html_toolbar DEFINITION
|
* CLASS lcl_html_toolbar DEFINITION
|
||||||
|
@ -219,7 +391,7 @@ CLASS lcl_html_toolbar DEFINITION FINAL.
|
||||||
iv_with_icons TYPE abap_bool OPTIONAL
|
iv_with_icons TYPE abap_bool OPTIONAL
|
||||||
iv_add_minizone TYPE abap_bool OPTIONAL
|
iv_add_minizone TYPE abap_bool OPTIONAL
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
VALUE(ro_html) TYPE REF TO lcl_html.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
TYPES: BEGIN OF ty_item,
|
TYPES: BEGIN OF ty_item,
|
||||||
|
@ -264,8 +436,7 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
|
||||||
METHOD render. "TODO refactor
|
METHOD render. "TODO refactor
|
||||||
|
|
||||||
DATA: lv_class TYPE string,
|
DATA: lv_class TYPE string,
|
||||||
lv_is_drop TYPE abap_bool,
|
lv_is_drop TYPE abap_bool.
|
||||||
lv_last TYPE abap_bool.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_item> LIKE LINE OF mt_items.
|
FIELD-SYMBOLS <ls_item> LIKE LINE OF mt_items.
|
||||||
|
|
||||||
|
@ -291,11 +462,9 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
|
||||||
IF iv_as_angle = abap_true.
|
IF iv_as_angle = abap_true.
|
||||||
ro_html->add( '<div class="dropbtn_angle"></div>' ).
|
ro_html->add( '<div class="dropbtn_angle"></div>' ).
|
||||||
ELSE.
|
ELSE.
|
||||||
lv_class = 'dropbtn'.
|
ro_html->add_a( iv_txt = iv_as_droplist_with_label
|
||||||
IF iv_no_separator = abap_true.
|
iv_class = 'dropbtn'
|
||||||
lv_class = lv_class && ' menu_end' ##NO_TEXT.
|
iv_act = '' ).
|
||||||
ENDIF.
|
|
||||||
ro_html->add( |<a class="{ lv_class }">{ iv_as_droplist_with_label }</a>| ).
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
IF iv_add_minizone = abap_true.
|
IF iv_add_minizone = abap_true.
|
||||||
|
@ -315,27 +484,19 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
LOOP AT mt_items ASSIGNING <ls_item>.
|
LOOP AT mt_items ASSIGNING <ls_item>.
|
||||||
lv_last = boolc( sy-tabix = lines( mt_items ) ).
|
|
||||||
|
|
||||||
IF <ls_item>-sub IS INITIAL.
|
IF <ls_item>-sub IS INITIAL.
|
||||||
CLEAR lv_class.
|
|
||||||
IF iv_no_separator = abap_true
|
|
||||||
OR lv_last = abap_true
|
|
||||||
AND iv_as_droplist_with_label IS INITIAL.
|
|
||||||
lv_class = 'menu_end'.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
IF iv_with_icons = abap_true.
|
IF iv_with_icons = abap_true.
|
||||||
ro_html->add( '<tr>' ).
|
ro_html->add( '<tr>' ).
|
||||||
ro_html->add( |<td class="icon">{ <ls_item>-ico }</td>| ).
|
ro_html->add( |<td class="icon">{ lcl_html=>icon( <ls_item>-ico ) }</td>| ).
|
||||||
ro_html->add( '<td width="100%">' ).
|
ro_html->add( '<td class="text">' ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ro_html->add_anchor( iv_txt = <ls_item>-txt
|
ro_html->add_a( iv_txt = <ls_item>-txt
|
||||||
iv_act = <ls_item>-act
|
iv_act = <ls_item>-act
|
||||||
iv_opt = <ls_item>-opt
|
iv_opt = <ls_item>-opt
|
||||||
iv_typ = <ls_item>-typ
|
iv_typ = <ls_item>-typ ).
|
||||||
iv_class = lv_class ).
|
|
||||||
|
|
||||||
IF iv_with_icons = abap_true.
|
IF iv_with_icons = abap_true.
|
||||||
ro_html->add( '</td>' ).
|
ro_html->add( '</td>' ).
|
||||||
|
@ -343,9 +504,7 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ELSE.
|
ELSE.
|
||||||
ro_html->add( <ls_item>-sub->render(
|
ro_html->add( <ls_item>-sub->render( iv_as_droplist_with_label = <ls_item>-txt ) ).
|
||||||
iv_as_droplist_with_label = <ls_item>-txt
|
|
||||||
iv_no_separator = lv_last ) ).
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
@ -355,7 +514,8 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
IF lv_is_drop = abap_true. " Dropdown
|
IF lv_is_drop = abap_true. " Dropdown
|
||||||
ro_html->add( '</div></div>' ).
|
ro_html->add( '</div>' ).
|
||||||
|
ro_html->add( '</div>' ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ro_html->add( '</div>' ).
|
ro_html->add( '</div>' ).
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_HTML</NAME>
|
<NAME>ZABAPGIT_HTML</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_HTML</ENTRY>
|
<ENTRY>Include ZABAPGIT_HTML</ENTRY>
|
||||||
<LENGTH>21</LENGTH>
|
<LENGTH>21</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -271,8 +271,8 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
||||||
get_field( EXPORTING name = 'XMLDATA' it = lt_fields CHANGING cv = rs_content-data_str ).
|
get_field( EXPORTING name = 'XMLDATA' it = lt_fields CHANGING cv = rs_content-data_str ).
|
||||||
IF rs_content-data_str(1) <> '<' AND rs_content-data_str+1(1) = '<'. " Hmmm ???
|
IF rs_content-data_str(1) <> '<' AND rs_content-data_str+1(1) = '<'. " Hmmm ???
|
||||||
rs_content-data_str = rs_content-data_str+1.
|
rs_content-data_str = rs_content-data_str+1.
|
||||||
ELSE.
|
* ELSE.
|
||||||
CLEAR rs_content-data_str.
|
* CLEAR rs_content-data_str.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD. "dbcontent_decode
|
ENDMETHOD. "dbcontent_decode
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_HTML_ACTION_UTILS</NAME>
|
<NAME>ZABAPGIT_HTML_ACTION_UTILS</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_HTML_ACTION_UTILS</ENTRY>
|
<ENTRY>Include ZABAPGIT_HTML_ACTION_UTILS</ENTRY>
|
||||||
<LENGTH>34</LENGTH>
|
<LENGTH>34</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
205
src/zabapgit_html_chunks.prog.abap
Normal file
205
src/zabapgit_html_chunks.prog.abap
Normal file
|
@ -0,0 +1,205 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_HTML_CHUNKS
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
CLASS lcl_gui_chunk_lib DEFINITION FINAL.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
CLASS-METHODS render_error
|
||||||
|
IMPORTING ix_error TYPE REF TO lcx_exception OPTIONAL
|
||||||
|
iv_error TYPE string OPTIONAL
|
||||||
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
|
||||||
|
|
||||||
|
CLASS-METHODS render_repo_top
|
||||||
|
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||||
|
iv_show_package TYPE abap_bool DEFAULT abap_true
|
||||||
|
iv_show_branch TYPE abap_bool DEFAULT abap_true
|
||||||
|
iv_interactive_branch TYPE abap_bool DEFAULT abap_false
|
||||||
|
iv_branch TYPE string OPTIONAL
|
||||||
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
CLASS-METHODS render_item_state
|
||||||
|
IMPORTING iv1 TYPE char1
|
||||||
|
iv2 TYPE char1
|
||||||
|
RETURNING VALUE(rv_html) TYPE string.
|
||||||
|
|
||||||
|
CLASS-METHODS render_branch_span
|
||||||
|
IMPORTING iv_branch TYPE string
|
||||||
|
io_repo TYPE REF TO lcl_repo_online
|
||||||
|
iv_interactive TYPE abap_bool
|
||||||
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_gui_chunk_lib
|
||||||
|
|
||||||
|
CLASS lcl_gui_chunk_lib IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD render_repo_top.
|
||||||
|
|
||||||
|
DATA: lo_repo_online TYPE REF TO lcl_repo_online,
|
||||||
|
lo_pback TYPE REF TO lcl_persistence_background,
|
||||||
|
lv_hint TYPE string,
|
||||||
|
lv_icon TYPE string.
|
||||||
|
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
CREATE OBJECT lo_pback.
|
||||||
|
|
||||||
|
IF io_repo->is_offline( ) = abap_true.
|
||||||
|
lv_icon = 'plug/darkgrey' ##NO_TEXT.
|
||||||
|
lv_hint = 'Offline repository' ##NO_TEXT.
|
||||||
|
ELSE.
|
||||||
|
lv_icon = 'cloud-upload/blue' ##NO_TEXT.
|
||||||
|
lv_hint = 'On-line repository' ##NO_TEXT.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ro_html->add( '<table class="w100"><tr>' ).
|
||||||
|
|
||||||
|
ro_html->add( '<td class="repo_name">' ).
|
||||||
|
ro_html->add_icon( iv_name = lv_icon iv_hint = lv_hint ).
|
||||||
|
ro_html->add( |<span class="name">{ io_repo->get_name( ) }</span>| ).
|
||||||
|
IF io_repo->is_offline( ) = abap_false.
|
||||||
|
lo_repo_online ?= io_repo.
|
||||||
|
ro_html->add( |<span class="url">{ lo_repo_online->get_url( ) }</span>| ).
|
||||||
|
ENDIF.
|
||||||
|
ro_html->add( '</td>' ).
|
||||||
|
|
||||||
|
ro_html->add( '<td class="repo_attr right">' ).
|
||||||
|
|
||||||
|
IF abap_true = lcl_app=>user( )->is_favorite_repo( io_repo->get_key( ) ).
|
||||||
|
lv_icon = 'star/blue' ##NO_TEXT.
|
||||||
|
ELSE.
|
||||||
|
lv_icon = 'star/grey' ##NO_TEXT.
|
||||||
|
ENDIF.
|
||||||
|
ro_html->add_a( iv_act = |{ gc_action-repo_toggle_fav }?{ io_repo->get_key( ) }|
|
||||||
|
iv_txt = lcl_html=>icon( iv_name = lv_icon
|
||||||
|
iv_class = 'pad-sides'
|
||||||
|
iv_hint = 'Click to toggle favorite' ) ).
|
||||||
|
|
||||||
|
IF lo_pback->exists( io_repo->get_key( ) ) = abap_true.
|
||||||
|
ro_html->add( '<span class="bg_marker" title="background">BG</span>' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF io_repo->is_write_protected( ) = abap_true.
|
||||||
|
ro_html->add_icon( iv_name = 'lock/darkgrey' iv_hint = 'Locked from pulls' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF io_repo->is_offline( ) = abap_false.
|
||||||
|
lo_repo_online ?= io_repo.
|
||||||
|
IF iv_show_branch = abap_true.
|
||||||
|
IF iv_branch IS INITIAL.
|
||||||
|
ro_html->add( render_branch_span( iv_branch = lo_repo_online->get_branch_name( )
|
||||||
|
io_repo = lo_repo_online
|
||||||
|
iv_interactive = iv_interactive_branch ) ).
|
||||||
|
ELSE.
|
||||||
|
ro_html->add( render_branch_span( iv_branch = iv_branch
|
||||||
|
io_repo = lo_repo_online
|
||||||
|
iv_interactive = iv_interactive_branch ) ).
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF iv_show_package = abap_true.
|
||||||
|
ro_html->add_icon( iv_name = 'package/darkgrey' iv_hint = 'SAP package' ).
|
||||||
|
ro_html->add( '<span>' ).
|
||||||
|
ro_html->add_a( iv_txt = io_repo->get_package( )
|
||||||
|
iv_act = |{ gc_action-jump_pkg }?{ io_repo->get_package( ) }| ).
|
||||||
|
ro_html->add( '</span>' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ro_html->add( '</td>' ).
|
||||||
|
ro_html->add( '</tr></table>' ).
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD render_item_state.
|
||||||
|
|
||||||
|
DATA: lv_system TYPE string.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <state> TYPE char1.
|
||||||
|
|
||||||
|
|
||||||
|
rv_html = '<span class="state-block">'.
|
||||||
|
|
||||||
|
DO 2 TIMES.
|
||||||
|
CASE sy-index.
|
||||||
|
WHEN 1.
|
||||||
|
ASSIGN iv1 TO <state>.
|
||||||
|
lv_system = 'Local:'.
|
||||||
|
WHEN 2.
|
||||||
|
ASSIGN iv2 TO <state>.
|
||||||
|
lv_system = 'Remote:'.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
CASE <state>.
|
||||||
|
WHEN gc_state-unchanged. "None or unchanged
|
||||||
|
IF iv1 = gc_state-added OR iv2 = gc_state-added.
|
||||||
|
rv_html = rv_html && |<span class="none" title="{ lv_system } Not exists">X</span>|.
|
||||||
|
ELSE.
|
||||||
|
rv_html = rv_html && |<span class="none" title="{ lv_system } No changes"> </span>|.
|
||||||
|
ENDIF.
|
||||||
|
WHEN gc_state-modified. "Changed
|
||||||
|
rv_html = rv_html && |<span class="changed" title="{ lv_system } Modified">M</span>|.
|
||||||
|
WHEN gc_state-added. "Added new
|
||||||
|
rv_html = rv_html && |<span class="added" title="{ lv_system } Added new">A</span>|.
|
||||||
|
WHEN gc_state-mixed. "Multiple changes (multifile)
|
||||||
|
rv_html = rv_html && |<span class="mixed" title="{ lv_system } Multiple changes">■</span>|.
|
||||||
|
WHEN gc_state-deleted. "Deleted
|
||||||
|
rv_html = rv_html && |<span class="deleted" title="{ lv_system } Deleted">D</span>|.
|
||||||
|
ENDCASE.
|
||||||
|
ENDDO.
|
||||||
|
|
||||||
|
rv_html = rv_html && '</span>'.
|
||||||
|
|
||||||
|
ENDMETHOD. "render_item_state
|
||||||
|
|
||||||
|
METHOD render_branch_span.
|
||||||
|
|
||||||
|
DATA: lv_text TYPE string,
|
||||||
|
lv_class TYPE string.
|
||||||
|
|
||||||
|
lv_text = lcl_git_branch_list=>get_display_name( iv_branch ).
|
||||||
|
|
||||||
|
IF iv_branch = io_repo->get_head_branch_name( )
|
||||||
|
OR iv_branch = lcl_git_branch_list=>c_head_name.
|
||||||
|
lv_class = 'branch branch_head'.
|
||||||
|
ELSEIF lcl_git_branch_list=>get_type( iv_branch ) = lcl_git_branch_list=>c_type-branch.
|
||||||
|
lv_class = 'branch branch_branch'.
|
||||||
|
ELSE.
|
||||||
|
lv_class = 'branch'.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
ro_html->add( |<span class="{ lv_class }">| ).
|
||||||
|
ro_html->add_icon( iv_name = 'git-branch/darkgrey' iv_hint = 'Current branch' ).
|
||||||
|
IF iv_interactive = abap_true.
|
||||||
|
ro_html->add_a( iv_act = |{ gc_action-git_branch_switch }?{ io_repo->get_key( ) }|
|
||||||
|
iv_txt = lv_text ).
|
||||||
|
ELSE.
|
||||||
|
ro_html->add( lv_text ).
|
||||||
|
ENDIF.
|
||||||
|
ro_html->add( '</span>' ).
|
||||||
|
|
||||||
|
ENDMETHOD. "render_branch_span
|
||||||
|
|
||||||
|
METHOD render_error.
|
||||||
|
|
||||||
|
DATA lv_error TYPE string.
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
|
IF ix_error IS BOUND.
|
||||||
|
lv_error = ix_error->mv_text.
|
||||||
|
ELSE.
|
||||||
|
lv_error = iv_error.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ro_html->add( '<div class="dummydiv attention">' ).
|
||||||
|
ro_html->add( |{ lcl_html=>icon( 'alert/red' ) } Error: { lv_error }| ).
|
||||||
|
ro_html->add( '</div>' ).
|
||||||
|
|
||||||
|
ENDMETHOD. "render_error
|
||||||
|
|
||||||
|
ENDCLASS. "lcl_gui_chunk_lib
|
22
src/zabapgit_html_chunks.prog.xml
Normal file
22
src/zabapgit_html_chunks.prog.xml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_HTML_CHUNKS</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<ENTRY>Include ZABAPGIT_HTML_CHUNKS</ENTRY>
|
||||||
|
<LENGTH>28</LENGTH>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -494,6 +494,14 @@ CLASS lcl_http IMPLEMENTATION.
|
||||||
iv_username = lv_user ).
|
iv_username = lv_user ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
" Offer two factor authentication if it is available and required
|
||||||
|
lcl_2fa_authenticator_registry=>use_2fa_if_required(
|
||||||
|
EXPORTING
|
||||||
|
iv_url = iv_url
|
||||||
|
CHANGING
|
||||||
|
cv_username = lv_user
|
||||||
|
cv_password = lv_pass ).
|
||||||
|
|
||||||
rv_scheme = ii_client->response->get_header_field( 'www-authenticate' ).
|
rv_scheme = ii_client->response->get_header_field( 'www-authenticate' ).
|
||||||
FIND REGEX '^(\w+)' IN rv_scheme SUBMATCHES rv_scheme.
|
FIND REGEX '^(\w+)' IN rv_scheme SUBMATCHES rv_scheme.
|
||||||
|
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_HTTP</NAME>
|
<NAME>ZABAPGIT_HTTP</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_HTTP</ENTRY>
|
<ENTRY>Include ZABAPGIT_HTTP</ENTRY>
|
||||||
<LENGTH>21</LENGTH>
|
<LENGTH>21</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_MACROS</NAME>
|
<NAME>ZABAPGIT_MACROS</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_MACROS</ENTRY>
|
<ENTRY>Include ZABAPGIT_MACROS</ENTRY>
|
||||||
<LENGTH>23</LENGTH>
|
<LENGTH>23</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -46,7 +46,7 @@ CLASS lcl_migrations IMPLEMENTATION.
|
||||||
|
|
||||||
" Ignore empty repos or repos with file checksums
|
" Ignore empty repos or repos with file checksums
|
||||||
IF lines( <repo>->get_local_checksums( ) ) = 0
|
IF lines( <repo>->get_local_checksums( ) ) = 0
|
||||||
OR lines( <repo>->get_local_checksums_per_file( ) ) > 0 .
|
OR lines( <repo>->get_local_checksums_per_file( ) ) > 0.
|
||||||
DELETE lt_repos INDEX lv_index.
|
DELETE lt_repos INDEX lv_index.
|
||||||
CONTINUE.
|
CONTINUE.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_MIGRATIONS</NAME>
|
<NAME>ZABAPGIT_MIGRATIONS</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_MIGRATIONS</ENTRY>
|
<ENTRY>Include ZABAPGIT_MIGRATIONS</ENTRY>
|
||||||
<LENGTH>27</LENGTH>
|
<LENGTH>27</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -71,7 +71,9 @@ CLASS lcl_object_acid IMPLEMENTATION.
|
||||||
|
|
||||||
lo_aab = create_object( ).
|
lo_aab = create_object( ).
|
||||||
|
|
||||||
lo_aab->get_descript( IMPORTING ex_descript = lv_description ).
|
lo_aab->get_descript(
|
||||||
|
IMPORTING ex_descript = lv_description
|
||||||
|
EXCEPTIONS no_description_found = 1 ).
|
||||||
|
|
||||||
io_xml->add( iv_name = 'DESCRIPTION'
|
io_xml->add( iv_name = 'DESCRIPTION'
|
||||||
ig_data = lv_description ).
|
ig_data = lv_description ).
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_ACID</NAME>
|
<NAME>ZABAPGIT_OBJECT_ACID</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_ACID</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_ACID</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_AUTH</NAME>
|
<NAME>ZABAPGIT_OBJECT_AUTH</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_AUTH</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_AUTH</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_CLAS</NAME>
|
<NAME>ZABAPGIT_OBJECT_CLAS</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_CLAS</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_CLAS</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_DOCT</NAME>
|
<NAME>ZABAPGIT_OBJECT_DOCT</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_DOCT</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_DOCT</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_DOCV</NAME>
|
<NAME>ZABAPGIT_OBJECT_DOCV</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_DOCT</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_DOCT</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -80,6 +80,7 @@ CLASS lcl_object_doma IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD lif_object~get_metadata.
|
METHOD lif_object~get_metadata.
|
||||||
rs_metadata = get_metadata( ).
|
rs_metadata = get_metadata( ).
|
||||||
|
rs_metadata-ddic = abap_true.
|
||||||
ENDMETHOD. "lif_object~get_metadata
|
ENDMETHOD. "lif_object~get_metadata
|
||||||
|
|
||||||
METHOD lif_object~exists.
|
METHOD lif_object~exists.
|
||||||
|
@ -130,6 +131,7 @@ CLASS lcl_object_doma IMPLEMENTATION.
|
||||||
|
|
||||||
DATA: lv_name TYPE ddobjname,
|
DATA: lv_name TYPE ddobjname,
|
||||||
ls_dd01v TYPE dd01v,
|
ls_dd01v TYPE dd01v,
|
||||||
|
lv_masklen TYPE c LENGTH 4,
|
||||||
lt_dd07v TYPE TABLE OF dd07v.
|
lt_dd07v TYPE TABLE OF dd07v.
|
||||||
|
|
||||||
|
|
||||||
|
@ -154,6 +156,16 @@ CLASS lcl_object_doma IMPLEMENTATION.
|
||||||
ls_dd01v-as4date,
|
ls_dd01v-as4date,
|
||||||
ls_dd01v-as4time.
|
ls_dd01v-as4time.
|
||||||
|
|
||||||
|
* make sure XML serialization does not dump if the field contains invalid data
|
||||||
|
* note that this is a N field, so '' is not valid
|
||||||
|
IF ls_dd01v-authclass = ''.
|
||||||
|
CLEAR ls_dd01v-authclass.
|
||||||
|
ENDIF.
|
||||||
|
lv_masklen = ls_dd01v-masklen.
|
||||||
|
IF lv_masklen = '' OR NOT lv_masklen CO '0123456789'.
|
||||||
|
CLEAR ls_dd01v-masklen.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
io_xml->add( iv_name = 'DD01V'
|
io_xml->add( iv_name = 'DD01V'
|
||||||
ig_data = ls_dd01v ).
|
ig_data = ls_dd01v ).
|
||||||
io_xml->add( iv_name = 'DD07V_TAB'
|
io_xml->add( iv_name = 'DD07V_TAB'
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_DOMA</NAME>
|
<NAME>ZABAPGIT_OBJECT_DOMA</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_DOMA</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_DOMA</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -73,6 +73,7 @@ CLASS lcl_object_dtel IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD lif_object~get_metadata.
|
METHOD lif_object~get_metadata.
|
||||||
rs_metadata = get_metadata( ).
|
rs_metadata = get_metadata( ).
|
||||||
|
rs_metadata-ddic = abap_true.
|
||||||
ENDMETHOD. "lif_object~get_metadata
|
ENDMETHOD. "lif_object~get_metadata
|
||||||
|
|
||||||
METHOD lif_object~exists.
|
METHOD lif_object~exists.
|
||||||
|
@ -158,6 +159,14 @@ CLASS lcl_object_dtel IMPLEMENTATION.
|
||||||
ls_dd04v-entitytab.
|
ls_dd04v-entitytab.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
IF ls_dd04v-routputlen = ''.
|
||||||
|
* numeric field, make sure it is initial or XML serilization will dump
|
||||||
|
CLEAR ls_dd04v-routputlen.
|
||||||
|
ENDIF.
|
||||||
|
IF ls_dd04v-authclass = ''.
|
||||||
|
CLEAR ls_dd04v-authclass.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
io_xml->add( iv_name = 'DD04V'
|
io_xml->add( iv_name = 'DD04V'
|
||||||
ig_data = ls_dd04v ).
|
ig_data = ls_dd04v ).
|
||||||
io_xml->add( iv_name = 'TPARA'
|
io_xml->add( iv_name = 'TPARA'
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_DTEL</NAME>
|
<NAME>ZABAPGIT_OBJECT_DTEL</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_DTEL</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_DTEL</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_ENHO</NAME>
|
<NAME>ZABAPGIT_OBJECT_ENHO</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_ENHO</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_ENHO</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_ENHS</NAME>
|
<NAME>ZABAPGIT_OBJECT_ENHS</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_ENHS</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_ENHS</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -53,6 +53,7 @@ CLASS lcl_object_enqu IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD lif_object~get_metadata.
|
METHOD lif_object~get_metadata.
|
||||||
rs_metadata = get_metadata( ).
|
rs_metadata = get_metadata( ).
|
||||||
|
rs_metadata-ddic = abap_true.
|
||||||
ENDMETHOD. "lif_object~get_metadata
|
ENDMETHOD. "lif_object~get_metadata
|
||||||
|
|
||||||
METHOD lif_object~exists.
|
METHOD lif_object~exists.
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_ENQU</NAME>
|
<NAME>ZABAPGIT_OBJECT_ENQU</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_ENUQ</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_ENUQ</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_ENSC</NAME>
|
<NAME>ZABAPGIT_OBJECT_ENSC</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_ENSC</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_ENSC</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -30,6 +30,7 @@ CLASS lcl_object_fugr DEFINITION INHERITING FROM lcl_objects_program FINAL.
|
||||||
tables TYPE STANDARD TABLE OF rstbl WITH DEFAULT KEY,
|
tables TYPE STANDARD TABLE OF rstbl WITH DEFAULT KEY,
|
||||||
exception TYPE STANDARD TABLE OF rsexc WITH DEFAULT KEY,
|
exception TYPE STANDARD TABLE OF rsexc WITH DEFAULT KEY,
|
||||||
documentation TYPE STANDARD TABLE OF rsfdo WITH DEFAULT KEY,
|
documentation TYPE STANDARD TABLE OF rsfdo WITH DEFAULT KEY,
|
||||||
|
exception_classes TYPE abap_bool,
|
||||||
END OF ty_function.
|
END OF ty_function.
|
||||||
|
|
||||||
TYPES: ty_function_tt TYPE STANDARD TABLE OF ty_function WITH DEFAULT KEY.
|
TYPES: ty_function_tt TYPE STANDARD TABLE OF ty_function WITH DEFAULT KEY.
|
||||||
|
@ -71,6 +72,11 @@ CLASS lcl_object_fugr DEFINITION INHERITING FROM lcl_objects_program FINAL.
|
||||||
iv_package TYPE devclass
|
iv_package TYPE devclass
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS are_exceptions_class_based
|
||||||
|
IMPORTING iv_function_name TYPE rs38l_fnam
|
||||||
|
RETURNING VALUE(rv_return) TYPE abap_bool
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
ENDCLASS. "lcl_object_fugr DEFINITION
|
ENDCLASS. "lcl_object_fugr DEFINITION
|
||||||
|
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
|
@ -247,6 +253,7 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
||||||
remote_call = <ls_func>-remote_call
|
remote_call = <ls_func>-remote_call
|
||||||
short_text = <ls_func>-short_text
|
short_text = <ls_func>-short_text
|
||||||
update_task = <ls_func>-update_task
|
update_task = <ls_func>-update_task
|
||||||
|
exception_class = <ls_func>-exception_classes
|
||||||
* NAMESPACE = ' ' todo
|
* NAMESPACE = ' ' todo
|
||||||
remote_basxml_supported = <ls_func>-remote_basxml
|
remote_basxml_supported = <ls_func>-remote_basxml
|
||||||
IMPORTING
|
IMPORTING
|
||||||
|
@ -276,10 +283,6 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
INSERT REPORT lv_include FROM lt_source.
|
INSERT REPORT lv_include FROM lt_source.
|
||||||
|
|
||||||
* lcl_objects_activation=>add( iv_type = 'FUNC'
|
|
||||||
* iv_name = <ls_func>-funcname ).
|
|
||||||
|
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
ENDMETHOD. "deserialize_functions
|
ENDMETHOD. "deserialize_functions
|
||||||
|
@ -398,10 +401,7 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
||||||
SELECT SINGLE areat INTO lv_areat
|
SELECT SINGLE areat INTO lv_areat
|
||||||
FROM tlibt
|
FROM tlibt
|
||||||
WHERE spras = mv_language
|
WHERE spras = mv_language
|
||||||
AND area = ms_item-obj_name. "#EC CI_GENBUFF
|
AND area = ms_item-obj_name. "#EC CI_GENBUFF "#EC CI_SUBRC
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( 'not found in TLIBT' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lt_functab = functions( ).
|
lt_functab = functions( ).
|
||||||
lt_includes = includes( ).
|
lt_includes = includes( ).
|
||||||
|
@ -493,6 +493,9 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
||||||
lcx_exception=>raise( 'Error from RS_FUNCTION_POOL_CONTENTS' ).
|
lcx_exception=>raise( 'Error from RS_FUNCTION_POOL_CONTENTS' ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
SORT rt_functab BY funcname ASCENDING.
|
||||||
|
DELETE ADJACENT DUPLICATES FROM rt_functab COMPARING funcname.
|
||||||
|
|
||||||
ENDMETHOD. "functions
|
ENDMETHOD. "functions
|
||||||
|
|
||||||
METHOD main_name.
|
METHOD main_name.
|
||||||
|
@ -536,10 +539,10 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
||||||
DATA:
|
DATA:
|
||||||
lt_source TYPE TABLE OF rssource,
|
lt_source TYPE TABLE OF rssource,
|
||||||
lt_functab TYPE ty_rs38l_incl_tt,
|
lt_functab TYPE ty_rs38l_incl_tt,
|
||||||
lt_new_source TYPE rsfb_source.
|
lt_new_source TYPE rsfb_source,
|
||||||
|
ls_function LIKE LINE OF rt_functions.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_func> LIKE LINE OF lt_functab,
|
FIELD-SYMBOLS: <ls_func> LIKE LINE OF lt_functab.
|
||||||
<ls_ret> LIKE LINE OF rt_functions.
|
|
||||||
|
|
||||||
|
|
||||||
lt_functab = functions( ).
|
lt_functab = functions( ).
|
||||||
|
@ -547,8 +550,8 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
||||||
LOOP AT lt_functab ASSIGNING <ls_func>.
|
LOOP AT lt_functab ASSIGNING <ls_func>.
|
||||||
* fm RPY_FUNCTIONMODULE_READ does not support source code
|
* fm RPY_FUNCTIONMODULE_READ does not support source code
|
||||||
* lines longer than 72 characters
|
* lines longer than 72 characters
|
||||||
APPEND INITIAL LINE TO rt_functions ASSIGNING <ls_ret>.
|
CLEAR ls_function.
|
||||||
MOVE-CORRESPONDING <ls_func> TO <ls_ret>.
|
MOVE-CORRESPONDING <ls_func> TO ls_function.
|
||||||
|
|
||||||
CLEAR lt_new_source.
|
CLEAR lt_new_source.
|
||||||
CLEAR lt_source.
|
CLEAR lt_source.
|
||||||
|
@ -557,18 +560,18 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
||||||
EXPORTING
|
EXPORTING
|
||||||
functionname = <ls_func>-funcname
|
functionname = <ls_func>-funcname
|
||||||
IMPORTING
|
IMPORTING
|
||||||
global_flag = <ls_ret>-global_flag
|
global_flag = ls_function-global_flag
|
||||||
remote_call = <ls_ret>-remote_call
|
remote_call = ls_function-remote_call
|
||||||
update_task = <ls_ret>-update_task
|
update_task = ls_function-update_task
|
||||||
short_text = <ls_ret>-short_text
|
short_text = ls_function-short_text
|
||||||
remote_basxml_supported = <ls_ret>-remote_basxml
|
remote_basxml_supported = ls_function-remote_basxml
|
||||||
TABLES
|
TABLES
|
||||||
import_parameter = <ls_ret>-import
|
import_parameter = ls_function-import
|
||||||
changing_parameter = <ls_ret>-changing
|
changing_parameter = ls_function-changing
|
||||||
export_parameter = <ls_ret>-export
|
export_parameter = ls_function-export
|
||||||
tables_parameter = <ls_ret>-tables
|
tables_parameter = ls_function-tables
|
||||||
exception_list = <ls_ret>-exception
|
exception_list = ls_function-exception
|
||||||
documentation = <ls_ret>-documentation
|
documentation = ls_function-documentation
|
||||||
source = lt_source
|
source = lt_source
|
||||||
CHANGING
|
CHANGING
|
||||||
new_source = lt_new_source
|
new_source = lt_new_source
|
||||||
|
@ -577,10 +580,16 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
||||||
function_not_found = 2
|
function_not_found = 2
|
||||||
invalid_name = 3
|
invalid_name = 3
|
||||||
OTHERS = 4.
|
OTHERS = 4.
|
||||||
IF sy-subrc <> 0.
|
IF sy-subrc = 2.
|
||||||
|
CONTINUE.
|
||||||
|
ELSEIF sy-subrc <> 0.
|
||||||
lcx_exception=>raise( 'Error from RPY_FUNCTIONMODULE_READ_NEW' ).
|
lcx_exception=>raise( 'Error from RPY_FUNCTIONMODULE_READ_NEW' ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
ls_function-exception_classes = are_exceptions_class_based( <ls_func>-funcname ).
|
||||||
|
|
||||||
|
APPEND ls_function TO rt_functions.
|
||||||
|
|
||||||
IF NOT lt_new_source IS INITIAL.
|
IF NOT lt_new_source IS INITIAL.
|
||||||
mo_files->add_abap( iv_extra = <ls_func>-funcname
|
mo_files->add_abap( iv_extra = <ls_func>-funcname
|
||||||
it_abap = lt_new_source ).
|
it_abap = lt_new_source ).
|
||||||
|
@ -614,6 +623,35 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "serialize_includes
|
ENDMETHOD. "serialize_includes
|
||||||
|
|
||||||
|
METHOD are_exceptions_class_based.
|
||||||
|
DATA:
|
||||||
|
lt_dokumentation TYPE TABLE OF funct,
|
||||||
|
lt_exception_list TYPE TABLE OF rsexc,
|
||||||
|
lt_export_parameter TYPE TABLE OF rsexp,
|
||||||
|
lt_import_parameter TYPE TABLE OF rsimp,
|
||||||
|
lt_tables_parameter TYPE TABLE OF rstbl.
|
||||||
|
|
||||||
|
CALL FUNCTION 'FUNCTION_IMPORT_DOKU'
|
||||||
|
EXPORTING
|
||||||
|
funcname = iv_function_name
|
||||||
|
IMPORTING
|
||||||
|
exception_class = rv_return
|
||||||
|
TABLES
|
||||||
|
dokumentation = lt_dokumentation
|
||||||
|
exception_list = lt_exception_list
|
||||||
|
export_parameter = lt_export_parameter
|
||||||
|
import_parameter = lt_import_parameter
|
||||||
|
tables_parameter = lt_tables_parameter
|
||||||
|
EXCEPTIONS
|
||||||
|
error_message = 1
|
||||||
|
function_not_found = 2
|
||||||
|
invalid_name = 3
|
||||||
|
OTHERS = 4.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'Error from FUNCTION_IMPORT_DOKU' ).
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD lif_object~serialize.
|
METHOD lif_object~serialize.
|
||||||
|
|
||||||
DATA: lt_functions TYPE ty_function_tt,
|
DATA: lt_functions TYPE ty_function_tt,
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_FUGR</NAME>
|
<NAME>ZABAPGIT_OBJECT_FUGR</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_FUGR</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_FUGR</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_IARP</NAME>
|
<NAME>ZABAPGIT_OBJECT_IARP</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_IARP</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_IARP</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_IASP</NAME>
|
<NAME>ZABAPGIT_OBJECT_IASP</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_IASP</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_IASP</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_IATU</NAME>
|
<NAME>ZABAPGIT_OBJECT_IATU</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_IATU</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_IATU</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
318
src/zabapgit_object_intf.prog.abap
Normal file
318
src/zabapgit_object_intf.prog.abap
Normal file
|
@ -0,0 +1,318 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include ZABAPGIT_OBJECT_INTF
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
* CLASS lcl_object_intf DEFINITION
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
*
|
||||||
|
*----------------------------------------------------------------------*
|
||||||
|
CLASS lcl_object_intf DEFINITION FINAL INHERITING FROM lcl_objects_program.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
INTERFACES lif_object.
|
||||||
|
ALIASES mo_files FOR lif_object~mo_files.
|
||||||
|
METHODS constructor
|
||||||
|
IMPORTING
|
||||||
|
is_item TYPE ty_item
|
||||||
|
iv_language TYPE spras.
|
||||||
|
PROTECTED SECTION.
|
||||||
|
METHODS deserialize_abap
|
||||||
|
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
||||||
|
iv_package TYPE devclass
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS deserialize_docu
|
||||||
|
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
PRIVATE SECTION.
|
||||||
|
DATA mo_object_oriented_object_fct TYPE REF TO lif_object_oriented_object_fnc.
|
||||||
|
|
||||||
|
METHODS serialize_xml
|
||||||
|
IMPORTING io_xml TYPE REF TO lcl_xml_output
|
||||||
|
RAISING lcx_exception.
|
||||||
|
ENDCLASS. "lcl_object_intf DEFINITION
|
||||||
|
CLASS lcl_object_intf IMPLEMENTATION.
|
||||||
|
METHOD constructor.
|
||||||
|
super->constructor(
|
||||||
|
is_item = is_item
|
||||||
|
iv_language = iv_language ).
|
||||||
|
mo_object_oriented_object_fct = lcl_object_oriented_factory=>make( iv_object_type = ms_item-obj_type ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD lif_object~deserialize.
|
||||||
|
deserialize_abap( io_xml = io_xml
|
||||||
|
iv_package = iv_package ).
|
||||||
|
|
||||||
|
deserialize_docu( io_xml ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD deserialize_abap.
|
||||||
|
DATA: ls_vseointerf TYPE vseointerf,
|
||||||
|
lt_source TYPE seop_source_string,
|
||||||
|
lt_descriptions TYPE ty_seocompotx_tt,
|
||||||
|
ls_clskey TYPE seoclskey.
|
||||||
|
ls_clskey-clsname = ms_item-obj_name.
|
||||||
|
|
||||||
|
lt_source = mo_files->read_abap( ).
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'VSEOINTERF'
|
||||||
|
CHANGING cg_data = ls_vseointerf ).
|
||||||
|
|
||||||
|
mo_object_oriented_object_fct->create(
|
||||||
|
EXPORTING
|
||||||
|
iv_package = iv_package
|
||||||
|
CHANGING
|
||||||
|
is_properties = ls_vseointerf ).
|
||||||
|
|
||||||
|
mo_object_oriented_object_fct->deserialize_source(
|
||||||
|
is_key = ls_clskey
|
||||||
|
it_source = lt_source ).
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'DESCRIPTIONS'
|
||||||
|
CHANGING cg_data = lt_descriptions ).
|
||||||
|
|
||||||
|
mo_object_oriented_object_fct->update_descriptions(
|
||||||
|
is_key = ls_clskey
|
||||||
|
it_descriptions = lt_descriptions ).
|
||||||
|
|
||||||
|
mo_object_oriented_object_fct->add_to_activation_list( is_item = ms_item ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD deserialize_docu.
|
||||||
|
|
||||||
|
DATA: lt_lines TYPE tlinetab,
|
||||||
|
lv_object TYPE dokhl-object.
|
||||||
|
|
||||||
|
io_xml->read( EXPORTING iv_name = 'LINES'
|
||||||
|
CHANGING cg_data = lt_lines ).
|
||||||
|
|
||||||
|
IF lt_lines[] IS INITIAL.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lv_object = ms_item-obj_name.
|
||||||
|
|
||||||
|
mo_object_oriented_object_fct->create_documentation(
|
||||||
|
it_lines = lt_lines
|
||||||
|
iv_object_name = lv_object
|
||||||
|
iv_language = mv_language ).
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD lif_object~has_changed_since.
|
||||||
|
DATA:
|
||||||
|
lv_program TYPE program,
|
||||||
|
lt_includes TYPE seoincl_t.
|
||||||
|
|
||||||
|
lt_includes = mo_object_oriented_object_fct->get_includes( ms_item-obj_name ).
|
||||||
|
READ TABLE lt_includes INDEX 1 INTO lv_program.
|
||||||
|
"lv_program = cl_oo_classname_service=>get_interfacepool_name( lv_clsname ).
|
||||||
|
rv_changed = check_prog_changed_since(
|
||||||
|
iv_program = lv_program
|
||||||
|
iv_timestamp = iv_timestamp
|
||||||
|
iv_skip_gui = abap_true ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object~serialize.
|
||||||
|
|
||||||
|
DATA: lt_source TYPE seop_source_string,
|
||||||
|
ls_interface_key TYPE seoclskey.
|
||||||
|
|
||||||
|
ls_interface_key-clsname = ms_item-obj_name.
|
||||||
|
|
||||||
|
IF lif_object~exists( ) = abap_false.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CALL FUNCTION 'SEO_BUFFER_REFRESH'
|
||||||
|
EXPORTING
|
||||||
|
version = seoc_version_active
|
||||||
|
force = seox_true.
|
||||||
|
CALL FUNCTION 'SEO_BUFFER_REFRESH'
|
||||||
|
EXPORTING
|
||||||
|
version = seoc_version_inactive
|
||||||
|
force = seox_true.
|
||||||
|
|
||||||
|
lt_source = mo_object_oriented_object_fct->serialize_abap( ls_interface_key ).
|
||||||
|
|
||||||
|
mo_files->add_abap( lt_source ).
|
||||||
|
|
||||||
|
serialize_xml( io_xml ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD serialize_xml.
|
||||||
|
DATA:
|
||||||
|
lt_tpool TYPE textpool_table,
|
||||||
|
lv_object TYPE dokhl-object,
|
||||||
|
lv_state TYPE dokhl-dokstate,
|
||||||
|
lt_descriptions TYPE ty_seocompotx_tt,
|
||||||
|
ls_vseointerf TYPE vseointerf,
|
||||||
|
ls_clskey TYPE seoclskey,
|
||||||
|
lt_sotr TYPE ty_sotr_tt,
|
||||||
|
lt_lines TYPE tlinetab.
|
||||||
|
|
||||||
|
|
||||||
|
ls_clskey-clsname = ms_item-obj_name.
|
||||||
|
|
||||||
|
ls_vseointerf = mo_object_oriented_object_fct->get_interface_properties( is_interface_key = ls_clskey ).
|
||||||
|
|
||||||
|
CLEAR: ls_vseointerf-uuid,
|
||||||
|
ls_vseointerf-author,
|
||||||
|
ls_vseointerf-createdon,
|
||||||
|
ls_vseointerf-changedby,
|
||||||
|
ls_vseointerf-changedon,
|
||||||
|
ls_vseointerf-r3release.
|
||||||
|
|
||||||
|
io_xml->add( iv_name = 'VSEOINTERF'
|
||||||
|
ig_data = ls_vseointerf ).
|
||||||
|
|
||||||
|
lt_lines = mo_object_oriented_object_fct->read_documentation(
|
||||||
|
iv_class_name = ls_clskey-clsname
|
||||||
|
iv_language = mv_language ).
|
||||||
|
IF lines( lt_lines ) > 0.
|
||||||
|
io_xml->add( iv_name = 'LINES'
|
||||||
|
ig_data = lt_lines ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lt_descriptions = mo_object_oriented_object_fct->read_descriptions( ls_clskey-clsname ).
|
||||||
|
IF lines( lt_descriptions ) > 0.
|
||||||
|
io_xml->add( iv_name = 'DESCRIPTIONS'
|
||||||
|
ig_data = lt_descriptions ).
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object~changed_by.
|
||||||
|
TYPES: BEGIN OF ty_includes,
|
||||||
|
programm TYPE programm,
|
||||||
|
END OF ty_includes.
|
||||||
|
|
||||||
|
TYPES: BEGIN OF ty_reposrc,
|
||||||
|
unam TYPE reposrc-unam,
|
||||||
|
udat TYPE reposrc-udat,
|
||||||
|
utime TYPE reposrc-utime,
|
||||||
|
END OF ty_reposrc.
|
||||||
|
|
||||||
|
DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc,
|
||||||
|
ls_reposrc LIKE LINE OF lt_reposrc,
|
||||||
|
lt_includes TYPE STANDARD TABLE OF ty_includes.
|
||||||
|
|
||||||
|
lt_includes = mo_object_oriented_object_fct->get_includes( ms_item-obj_name ).
|
||||||
|
ASSERT lines( lt_includes ) > 0.
|
||||||
|
|
||||||
|
SELECT unam udat utime FROM reposrc
|
||||||
|
INTO TABLE lt_reposrc
|
||||||
|
FOR ALL ENTRIES IN lt_includes
|
||||||
|
WHERE progname = lt_includes-programm
|
||||||
|
AND r3state = 'A'.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
rv_user = c_user_unknown.
|
||||||
|
ELSE.
|
||||||
|
SORT lt_reposrc BY udat DESCENDING utime DESCENDING.
|
||||||
|
READ TABLE lt_reposrc INDEX 1 INTO ls_reposrc.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
rv_user = ls_reposrc-unam.
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object~compare_to_remote_version.
|
||||||
|
CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object~delete.
|
||||||
|
DATA: ls_clskey TYPE seoclskey.
|
||||||
|
ls_clskey-clsname = ms_item-obj_name.
|
||||||
|
|
||||||
|
mo_object_oriented_object_fct->delete( ls_clskey ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object~exists.
|
||||||
|
DATA: ls_class_key TYPE seoclskey.
|
||||||
|
ls_class_key-clsname = ms_item-obj_name.
|
||||||
|
|
||||||
|
rv_bool = mo_object_oriented_object_fct->exists( iv_object_name = ls_class_key ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object~get_metadata.
|
||||||
|
rs_metadata = get_metadata( ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object~jump.
|
||||||
|
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||||
|
EXPORTING
|
||||||
|
operation = 'SHOW'
|
||||||
|
object_name = ms_item-obj_name
|
||||||
|
object_type = 'INTF'
|
||||||
|
in_new_window = abap_true.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CLASS lcl_object_oriented_interface DEFINITION
|
||||||
|
INHERITING FROM lcl_object_oriented_base.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
METHODS:
|
||||||
|
lif_object_oriented_object_fnc~create REDEFINITION,
|
||||||
|
lif_object_oriented_object_fnc~get_includes REDEFINITION,
|
||||||
|
lif_object_oriented_object_fnc~get_interface_properties REDEFINITION,
|
||||||
|
lif_object_oriented_object_fnc~delete REDEFINITION.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_object_oriented_interface IMPLEMENTATION.
|
||||||
|
METHOD lif_object_oriented_object_fnc~create.
|
||||||
|
CALL FUNCTION 'SEO_INTERFACE_CREATE_COMPLETE'
|
||||||
|
EXPORTING
|
||||||
|
devclass = iv_package
|
||||||
|
overwrite = iv_overwrite
|
||||||
|
CHANGING
|
||||||
|
interface = is_properties
|
||||||
|
EXCEPTIONS
|
||||||
|
existing = 1
|
||||||
|
is_class = 2
|
||||||
|
db_error = 3
|
||||||
|
component_error = 4
|
||||||
|
no_access = 5
|
||||||
|
other = 6
|
||||||
|
OTHERS = 7.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'Error from SEO_INTERFACE_CREATE_COMPLETE' ).
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD lif_object_oriented_object_fnc~get_includes.
|
||||||
|
DATA lv_interface_name TYPE seoclsname.
|
||||||
|
lv_interface_name = iv_object_name.
|
||||||
|
APPEND cl_oo_classname_service=>get_interfacepool_name( lv_interface_name ) TO rt_includes.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~get_interface_properties.
|
||||||
|
CALL FUNCTION 'SEO_CLIF_GET'
|
||||||
|
EXPORTING
|
||||||
|
cifkey = is_interface_key
|
||||||
|
version = seoc_version_active
|
||||||
|
IMPORTING
|
||||||
|
interface = rs_interface_properties
|
||||||
|
EXCEPTIONS
|
||||||
|
not_existing = 1
|
||||||
|
deleted = 2
|
||||||
|
model_only = 3
|
||||||
|
OTHERS = 4.
|
||||||
|
IF sy-subrc = 1.
|
||||||
|
RETURN. " in case only inactive version exists
|
||||||
|
ELSEIF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from seo_clif_get' ).
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~delete.
|
||||||
|
CALL FUNCTION 'SEO_INTERFACE_DELETE_COMPLETE'
|
||||||
|
EXPORTING
|
||||||
|
intkey = is_deletion_key
|
||||||
|
EXCEPTIONS
|
||||||
|
not_existing = 1
|
||||||
|
is_class = 2
|
||||||
|
db_error = 3
|
||||||
|
no_access = 4
|
||||||
|
other = 5
|
||||||
|
OTHERS = 6.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'Error from SEO_INTERFACE_DELETE_COMPLETE' ).
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
22
src/zabapgit_object_intf.prog.xml
Normal file
22
src/zabapgit_object_intf.prog.xml
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_OBJECT_INTF</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<RLOAD>E</RLOAD>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<ENTRY>Include ZABAPGIT_OBJECT_INTF</ENTRY>
|
||||||
|
<LENGTH>28</LENGTH>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_MSAG</NAME>
|
<NAME>ZABAPGIT_OBJECT_MSAG</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_MSAG</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_MSAG</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_NROB</NAME>
|
<NAME>ZABAPGIT_OBJECT_NROB</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_NROB</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_NROB</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
29
src/zabapgit_object_oo_factory.prog.abap
Normal file
29
src/zabapgit_object_oo_factory.prog.abap
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
*& Include zabapgit_object_oo_factory
|
||||||
|
*&---------------------------------------------------------------------*
|
||||||
|
CLASS lcl_object_oriented_factory IMPLEMENTATION.
|
||||||
|
METHOD make.
|
||||||
|
IF go_object_oriented_object IS BOUND.
|
||||||
|
ro_object_oriented_object = go_object_oriented_object.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
IF iv_object_type = 'CLAS'.
|
||||||
|
CREATE OBJECT ro_object_oriented_object TYPE lcl_object_oriented_class.
|
||||||
|
ELSEIF iv_object_type = 'INTF'.
|
||||||
|
CREATE OBJECT ro_object_oriented_object TYPE lcl_object_oriented_interface.
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lth_oo_factory_injector DEFINITION FOR TESTING.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
CLASS-METHODS:
|
||||||
|
inject
|
||||||
|
IMPORTING
|
||||||
|
io_object_oriented_object TYPE REF TO lif_object_oriented_object_fnc.
|
||||||
|
ENDCLASS.
|
||||||
|
CLASS lth_oo_factory_injector IMPLEMENTATION.
|
||||||
|
METHOD inject.
|
||||||
|
lcl_object_oriented_factory=>go_object_oriented_object = io_object_oriented_object.
|
||||||
|
ENDMETHOD.
|
||||||
|
ENDCLASS.
|
25
src/zabapgit_object_oo_factory.prog.xml
Normal file
25
src/zabapgit_object_oo_factory.prog.xml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_OBJECT_OO_FACTORY</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL>S</DBAPL>
|
||||||
|
<DBNA>D$</DBNA>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<LDBNAME>D$S</LDBNAME>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<ENTRY>Include ZABAPGIT_OBJECT_OO_FACTORY</ENTRY>
|
||||||
|
<LENGTH>34</LENGTH>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
630
src/zabapgit_object_oo_functions.prog.abap
Normal file
630
src/zabapgit_object_oo_functions.prog.abap
Normal file
|
@ -0,0 +1,630 @@
|
||||||
|
"This interface contains SAP object oriented functions that can't be put under test
|
||||||
|
"(i.e. creating a Class in the system)
|
||||||
|
INTERFACE lif_object_oriented_object_fnc.
|
||||||
|
TYPES: BEGIN OF ty_includes,
|
||||||
|
programm TYPE programm,
|
||||||
|
END OF ty_includes,
|
||||||
|
ty_includes_tt TYPE STANDARD TABLE OF ty_includes WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
METHODS:
|
||||||
|
create
|
||||||
|
IMPORTING
|
||||||
|
iv_package TYPE devclass
|
||||||
|
iv_overwrite TYPE seox_boolean DEFAULT seox_true
|
||||||
|
CHANGING
|
||||||
|
is_properties TYPE any
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
generate_locals
|
||||||
|
IMPORTING
|
||||||
|
is_key TYPE seoclskey
|
||||||
|
iv_force TYPE seox_boolean DEFAULT seox_true
|
||||||
|
it_local_definitions TYPE seop_source_string OPTIONAL
|
||||||
|
it_local_implementations TYPE seop_source_string OPTIONAL
|
||||||
|
it_local_macros TYPE seop_source_string OPTIONAL
|
||||||
|
it_local_test_classes TYPE seop_source_string OPTIONAL
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
deserialize_source
|
||||||
|
IMPORTING
|
||||||
|
is_key TYPE seoclskey
|
||||||
|
it_source TYPE ty_string_tt
|
||||||
|
RAISING
|
||||||
|
lcx_exception
|
||||||
|
cx_sy_dyn_call_error,
|
||||||
|
insert_text_pool
|
||||||
|
IMPORTING
|
||||||
|
iv_class_name TYPE seoclsname
|
||||||
|
it_text_pool TYPE textpool_table
|
||||||
|
iv_language TYPE spras
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
update_descriptions
|
||||||
|
IMPORTING
|
||||||
|
is_key TYPE seoclskey
|
||||||
|
it_descriptions TYPE ty_seocompotx_tt,
|
||||||
|
add_to_activation_list
|
||||||
|
IMPORTING
|
||||||
|
is_item TYPE ty_item
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
create_sotr
|
||||||
|
IMPORTING
|
||||||
|
iv_package TYPE devclass
|
||||||
|
it_sotr TYPE ty_sotr_tt
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
create_documentation
|
||||||
|
IMPORTING
|
||||||
|
it_lines TYPE tlinetab
|
||||||
|
iv_object_name TYPE dokhl-object
|
||||||
|
iv_language TYPE spras
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
get_includes
|
||||||
|
IMPORTING
|
||||||
|
iv_object_name TYPE sobj_name
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_includes) TYPE ty_includes_tt,
|
||||||
|
exists
|
||||||
|
IMPORTING
|
||||||
|
iv_object_name TYPE seoclskey
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_exists) TYPE abap_bool,
|
||||||
|
serialize_abap
|
||||||
|
IMPORTING
|
||||||
|
is_class_key TYPE seoclskey
|
||||||
|
iv_type TYPE seop_include_ext_app OPTIONAL
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_source) TYPE ty_string_tt
|
||||||
|
RAISING
|
||||||
|
lcx_exception
|
||||||
|
cx_sy_dyn_call_error,
|
||||||
|
get_skip_test_classes
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_skip) TYPE abap_bool,
|
||||||
|
get_class_properties
|
||||||
|
IMPORTING
|
||||||
|
is_class_key TYPE seoclskey
|
||||||
|
RETURNING
|
||||||
|
VALUE(rs_class_properties) TYPE vseoclass
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
get_interface_properties
|
||||||
|
IMPORTING
|
||||||
|
is_interface_key TYPE seoclskey
|
||||||
|
RETURNING
|
||||||
|
VALUE(rs_interface_properties) TYPE vseointerf
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
read_text_pool
|
||||||
|
IMPORTING
|
||||||
|
iv_class_name TYPE seoclsname
|
||||||
|
iv_language TYPE spras
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_text_pool) TYPE textpool_table,
|
||||||
|
read_documentation
|
||||||
|
IMPORTING
|
||||||
|
iv_class_name TYPE seoclsname
|
||||||
|
iv_language TYPE spras
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_lines) TYPE tlinetab,
|
||||||
|
read_sotr
|
||||||
|
IMPORTING
|
||||||
|
iv_object_name TYPE sobj_name
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_sotr) TYPE ty_sotr_tt
|
||||||
|
RAISING
|
||||||
|
lcx_exception,
|
||||||
|
read_descriptions
|
||||||
|
IMPORTING
|
||||||
|
iv_obejct_name TYPE seoclsname
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_descriptions) TYPE ty_seocompotx_tt,
|
||||||
|
delete
|
||||||
|
IMPORTING
|
||||||
|
is_deletion_key TYPE seoclskey
|
||||||
|
RAISING
|
||||||
|
lcx_exception.
|
||||||
|
ENDINTERFACE.
|
||||||
|
|
||||||
|
CLASS lcl_oo_object_serializer DEFINITION.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
METHODS:
|
||||||
|
serialize_abap_clif_source
|
||||||
|
IMPORTING
|
||||||
|
is_class_key TYPE seoclskey
|
||||||
|
iv_type TYPE seop_include_ext_app OPTIONAL
|
||||||
|
RETURNING
|
||||||
|
VALUE(rt_source) TYPE ty_string_tt
|
||||||
|
RAISING
|
||||||
|
lcx_exception
|
||||||
|
cx_sy_dyn_call_error,
|
||||||
|
are_test_classes_skipped
|
||||||
|
RETURNING
|
||||||
|
VALUE(rv_return) TYPE abap_bool.
|
||||||
|
METHODS serialize_locals_imp
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
RETURNING VALUE(rt_source) TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS serialize_locals_def
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
RETURNING VALUE(rt_source) TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
METHODS serialize_testclasses
|
||||||
|
IMPORTING
|
||||||
|
is_clskey TYPE seoclskey
|
||||||
|
RETURNING VALUE(rt_source) TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS serialize_macros
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
RETURNING VALUE(rt_source) TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
DATA mv_skip_testclass TYPE abap_bool.
|
||||||
|
METHODS serialize_abap_old
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
RETURNING VALUE(rt_source) TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS serialize_abap_new
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
RETURNING VALUE(rt_source) TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception
|
||||||
|
cx_sy_dyn_call_error.
|
||||||
|
METHODS remove_signatures
|
||||||
|
CHANGING ct_source TYPE ty_string_tt.
|
||||||
|
|
||||||
|
METHODS read_include
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
iv_type TYPE seop_include_ext_app
|
||||||
|
RETURNING VALUE(rt_source) TYPE seop_source_string.
|
||||||
|
|
||||||
|
|
||||||
|
METHODS reduce
|
||||||
|
CHANGING ct_source TYPE ty_string_tt.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_oo_object_serializer IMPLEMENTATION.
|
||||||
|
METHOD serialize_abap_clif_source.
|
||||||
|
TRY.
|
||||||
|
rt_source = serialize_abap_new( is_class_key ).
|
||||||
|
CATCH cx_sy_dyn_call_error.
|
||||||
|
rt_source = serialize_abap_old( is_class_key ).
|
||||||
|
ENDTRY.
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD serialize_abap_old.
|
||||||
|
* for old ABAP AS versions
|
||||||
|
DATA: lo_source TYPE REF TO cl_oo_source.
|
||||||
|
|
||||||
|
CREATE OBJECT lo_source
|
||||||
|
EXPORTING
|
||||||
|
clskey = is_clskey
|
||||||
|
EXCEPTIONS
|
||||||
|
class_not_existing = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from CL_OO_SOURCE' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lo_source->read( 'A' ).
|
||||||
|
rt_source = lo_source->get_old_source( ).
|
||||||
|
remove_signatures( CHANGING ct_source = rt_source ).
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_abap
|
||||||
|
|
||||||
|
METHOD serialize_abap_new.
|
||||||
|
|
||||||
|
DATA: lo_source TYPE REF TO object,
|
||||||
|
lo_instance TYPE REF TO object.
|
||||||
|
|
||||||
|
* do not call the class/methods statically, as it will
|
||||||
|
* give syntax errors on old versions
|
||||||
|
CALL METHOD ('CL_OO_FACTORY')=>('CREATE_INSTANCE')
|
||||||
|
RECEIVING
|
||||||
|
result = lo_instance.
|
||||||
|
|
||||||
|
CALL METHOD lo_instance->('CREATE_CLIF_SOURCE')
|
||||||
|
EXPORTING
|
||||||
|
clif_name = is_clskey-clsname
|
||||||
|
version = 'A'
|
||||||
|
RECEIVING
|
||||||
|
result = lo_source.
|
||||||
|
|
||||||
|
CALL METHOD lo_source->('GET_SOURCE')
|
||||||
|
IMPORTING
|
||||||
|
source = rt_source.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD remove_signatures.
|
||||||
|
|
||||||
|
* signatures messes up in CL_OO_SOURCE when deserializing and serializing
|
||||||
|
* within same session
|
||||||
|
|
||||||
|
DATA: lv_begin TYPE string,
|
||||||
|
lv_end TYPE string,
|
||||||
|
lv_remove TYPE sap_bool,
|
||||||
|
lv_source LIKE LINE OF ct_source.
|
||||||
|
|
||||||
|
"@TODO: Put under test
|
||||||
|
CONCATENATE '* <SIGNATURE>------------------------------------'
|
||||||
|
'---------------------------------------------------+'
|
||||||
|
INTO lv_begin.
|
||||||
|
|
||||||
|
CONCATENATE '* +------------------------------------------------'
|
||||||
|
'--------------------------------------</SIGNATURE>'
|
||||||
|
INTO lv_end.
|
||||||
|
|
||||||
|
lv_remove = abap_false.
|
||||||
|
LOOP AT ct_source INTO lv_source.
|
||||||
|
IF lv_source = lv_begin.
|
||||||
|
lv_remove = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
IF lv_remove = abap_true.
|
||||||
|
DELETE ct_source INDEX sy-tabix.
|
||||||
|
ENDIF.
|
||||||
|
IF lv_source = lv_end.
|
||||||
|
lv_remove = abap_false.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD. "remove_signatures
|
||||||
|
METHOD reduce.
|
||||||
|
|
||||||
|
DATA: lv_source LIKE LINE OF ct_source,
|
||||||
|
lv_found TYPE sap_bool.
|
||||||
|
|
||||||
|
|
||||||
|
* skip files that only contain the standard comments
|
||||||
|
lv_found = abap_false.
|
||||||
|
LOOP AT ct_source INTO lv_source.
|
||||||
|
IF strlen( lv_source ) >= 3 AND lv_source(3) <> '*"*'.
|
||||||
|
lv_found = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ENDLOOP.
|
||||||
|
IF lv_found = abap_false.
|
||||||
|
CLEAR ct_source[].
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "reduce
|
||||||
|
|
||||||
|
METHOD serialize_locals_imp.
|
||||||
|
|
||||||
|
rt_source = read_include( is_clskey = is_clskey
|
||||||
|
iv_type = seop_ext_class_locals_imp ).
|
||||||
|
|
||||||
|
reduce( CHANGING ct_source = rt_source ).
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_local
|
||||||
|
|
||||||
|
METHOD serialize_locals_def.
|
||||||
|
|
||||||
|
rt_source = read_include( is_clskey = is_clskey
|
||||||
|
iv_type = seop_ext_class_locals_def ).
|
||||||
|
|
||||||
|
reduce( CHANGING ct_source = rt_source ).
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_locals_def
|
||||||
|
|
||||||
|
METHOD read_include.
|
||||||
|
|
||||||
|
DATA: ls_include TYPE progstruc.
|
||||||
|
|
||||||
|
|
||||||
|
ASSERT iv_type = seop_ext_class_locals_def
|
||||||
|
OR iv_type = seop_ext_class_locals_imp
|
||||||
|
OR iv_type = seop_ext_class_macros
|
||||||
|
OR iv_type = seop_ext_class_testclasses.
|
||||||
|
|
||||||
|
ls_include-rootname = is_clskey-clsname.
|
||||||
|
TRANSLATE ls_include-rootname USING ' ='.
|
||||||
|
ls_include-categorya = iv_type(1).
|
||||||
|
ls_include-codea = iv_type+1(4).
|
||||||
|
|
||||||
|
* it looks like there is an issue in function module SEO_CLASS_GET_INCLUDE_SOURCE
|
||||||
|
* on 750 kernels, where the READ REPORT without STATE addition does not
|
||||||
|
* return the active version, this method is a workaround for this issue
|
||||||
|
READ REPORT ls_include INTO rt_source STATE 'A'.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD serialize_testclasses.
|
||||||
|
|
||||||
|
DATA: lv_line1 LIKE LINE OF rt_source,
|
||||||
|
lv_line2 LIKE LINE OF rt_source.
|
||||||
|
|
||||||
|
|
||||||
|
rt_source = read_include( is_clskey = is_clskey
|
||||||
|
iv_type = seop_ext_class_testclasses ).
|
||||||
|
|
||||||
|
* when creating classes in Eclipse it automatically generates the
|
||||||
|
* testclass include, but it is not needed, so skip to avoid
|
||||||
|
* creating an extra file in the repository.
|
||||||
|
* Also remove it if the content is manually removed, but
|
||||||
|
* the class still thinks it contains tests
|
||||||
|
"@TODO: Put under test
|
||||||
|
mv_skip_testclass = abap_false.
|
||||||
|
IF lines( rt_source ) = 2.
|
||||||
|
READ TABLE rt_source INDEX 1 INTO lv_line1.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
READ TABLE rt_source INDEX 2 INTO lv_line2.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
IF lv_line1(3) = '*"*' AND lv_line2 IS INITIAL.
|
||||||
|
mv_skip_testclass = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ELSEIF lines( rt_source ) = 1.
|
||||||
|
READ TABLE rt_source INDEX 1 INTO lv_line1.
|
||||||
|
ASSERT sy-subrc = 0.
|
||||||
|
IF lv_line1 IS INITIAL
|
||||||
|
OR ( strlen( lv_line1 ) >= 3 AND lv_line1(3) = '*"*' )
|
||||||
|
OR ( strlen( lv_line1 ) = 1 AND lv_line1(1) = '*' ).
|
||||||
|
mv_skip_testclass = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
ELSEIF lines( rt_source ) = 0.
|
||||||
|
mv_skip_testclass = abap_true.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_test
|
||||||
|
|
||||||
|
METHOD serialize_macros.
|
||||||
|
|
||||||
|
rt_source = read_include( is_clskey = is_clskey
|
||||||
|
iv_type = seop_ext_class_macros ).
|
||||||
|
|
||||||
|
reduce( CHANGING ct_source = rt_source ).
|
||||||
|
|
||||||
|
ENDMETHOD. "serialize_macro
|
||||||
|
METHOD are_test_classes_skipped.
|
||||||
|
rv_return = mv_skip_testclass.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_object_oriented_base DEFINITION ABSTRACT.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
INTERFACES: lif_object_oriented_object_fnc.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
DATA mv_skip_test_classes TYPE abap_bool.
|
||||||
|
METHODS deserialize_abap_source_old
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
it_source TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS deserialize_abap_source_new
|
||||||
|
IMPORTING is_clskey TYPE seoclskey
|
||||||
|
it_source TYPE ty_string_tt
|
||||||
|
RAISING lcx_exception
|
||||||
|
cx_sy_dyn_call_error.
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS lcl_object_oriented_base IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~create.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~deserialize_source.
|
||||||
|
TRY.
|
||||||
|
deserialize_abap_source_new(
|
||||||
|
is_clskey = is_key
|
||||||
|
it_source = it_source ).
|
||||||
|
CATCH cx_sy_dyn_call_error.
|
||||||
|
deserialize_abap_source_old(
|
||||||
|
is_clskey = is_key
|
||||||
|
it_source = it_source ).
|
||||||
|
ENDTRY.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~generate_locals.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD deserialize_abap_source_old.
|
||||||
|
"for backwards compatability down to 702
|
||||||
|
|
||||||
|
DATA: lo_source TYPE REF TO cl_oo_source.
|
||||||
|
|
||||||
|
CREATE OBJECT lo_source
|
||||||
|
EXPORTING
|
||||||
|
clskey = is_clskey
|
||||||
|
EXCEPTIONS
|
||||||
|
class_not_existing = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from CL_OO_SOURCE' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
lo_source->access_permission( seok_access_modify ).
|
||||||
|
lo_source->set_source( it_source ).
|
||||||
|
lo_source->save( ).
|
||||||
|
lo_source->access_permission( seok_access_free ).
|
||||||
|
CATCH cx_oo_access_permission.
|
||||||
|
lcx_exception=>raise( 'permission error' ).
|
||||||
|
CATCH cx_oo_source_save_failure.
|
||||||
|
lcx_exception=>raise( 'save failure' ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD deserialize_abap_source_new.
|
||||||
|
DATA: lo_factory TYPE REF TO object,
|
||||||
|
lo_source TYPE REF TO object.
|
||||||
|
|
||||||
|
CALL METHOD ('CL_OO_FACTORY')=>('CREATE_INSTANCE')
|
||||||
|
RECEIVING
|
||||||
|
result = lo_factory.
|
||||||
|
|
||||||
|
CALL METHOD lo_factory->('CREATE_CLIF_SOURCE')
|
||||||
|
EXPORTING
|
||||||
|
clif_name = is_clskey-clsname
|
||||||
|
RECEIVING
|
||||||
|
result = lo_source.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~LOCK').
|
||||||
|
CATCH cx_oo_access_permission.
|
||||||
|
lcx_exception=>raise( 'source_new, access permission exception' ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~SET_SOURCE')
|
||||||
|
EXPORTING
|
||||||
|
source = it_source.
|
||||||
|
|
||||||
|
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~SAVE').
|
||||||
|
|
||||||
|
CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~UNLOCK').
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD lif_object_oriented_object_fnc~add_to_activation_list.
|
||||||
|
lcl_objects_activation=>add_item( is_item ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~update_descriptions.
|
||||||
|
DELETE FROM seocompotx WHERE clsname = is_key-clsname.
|
||||||
|
INSERT seocompotx FROM TABLE it_descriptions.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~insert_text_pool.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~create_sotr.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~create_documentation.
|
||||||
|
CALL FUNCTION 'DOCU_UPD'
|
||||||
|
EXPORTING
|
||||||
|
id = 'CL'
|
||||||
|
langu = iv_language
|
||||||
|
object = iv_object_name
|
||||||
|
TABLES
|
||||||
|
line = it_lines
|
||||||
|
EXCEPTIONS
|
||||||
|
ret_code = 1
|
||||||
|
OTHERS = 2.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
lcx_exception=>raise( 'error from DOCU_UPD' ).
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~get_includes.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~exists.
|
||||||
|
CALL FUNCTION 'SEO_CLASS_EXISTENCE_CHECK'
|
||||||
|
EXPORTING
|
||||||
|
clskey = iv_object_name
|
||||||
|
EXCEPTIONS
|
||||||
|
not_specified = 1
|
||||||
|
not_existing = 2
|
||||||
|
is_interface = 3
|
||||||
|
no_text = 4
|
||||||
|
inconsistent = 5
|
||||||
|
OTHERS = 6.
|
||||||
|
rv_exists = boolc( sy-subrc <> 2 ).
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~serialize_abap.
|
||||||
|
DATA lo_oo_serializer TYPE REF TO lcl_oo_object_serializer.
|
||||||
|
CREATE OBJECT lo_oo_serializer.
|
||||||
|
CASE iv_type.
|
||||||
|
WHEN seop_ext_class_locals_def.
|
||||||
|
rt_source = lo_oo_serializer->serialize_locals_def( is_class_key ).
|
||||||
|
WHEN seop_ext_class_locals_imp.
|
||||||
|
rt_source = lo_oo_serializer->serialize_locals_imp( is_class_key ).
|
||||||
|
WHEN seop_ext_class_macros.
|
||||||
|
rt_source = lo_oo_serializer->serialize_macros( is_class_key ).
|
||||||
|
WHEN seop_ext_class_testclasses.
|
||||||
|
rt_source = lo_oo_serializer->serialize_testclasses( is_class_key ).
|
||||||
|
mv_skip_test_classes = lo_oo_serializer->are_test_classes_skipped( ).
|
||||||
|
WHEN OTHERS.
|
||||||
|
rt_source = lo_oo_serializer->serialize_abap_clif_source( is_class_key ).
|
||||||
|
ENDCASE.
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD lif_object_oriented_object_fnc~get_skip_test_classes.
|
||||||
|
rv_skip = mv_skip_test_classes.
|
||||||
|
ENDMETHOD.
|
||||||
|
METHOD lif_object_oriented_object_fnc~get_class_properties.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~get_interface_properties.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~read_text_pool.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~read_sotr.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~read_documentation.
|
||||||
|
DATA:
|
||||||
|
lv_state TYPE dokstate,
|
||||||
|
lv_object TYPE dokhl-object,
|
||||||
|
lt_lines TYPE tlinetab.
|
||||||
|
|
||||||
|
lv_object = iv_class_name.
|
||||||
|
|
||||||
|
CALL FUNCTION 'DOCU_GET'
|
||||||
|
EXPORTING
|
||||||
|
id = 'CL'
|
||||||
|
langu = iv_language
|
||||||
|
object = lv_object
|
||||||
|
IMPORTING
|
||||||
|
dokstate = lv_state
|
||||||
|
TABLES
|
||||||
|
line = lt_lines
|
||||||
|
EXCEPTIONS
|
||||||
|
no_docu_on_screen = 1
|
||||||
|
no_docu_self_def = 2
|
||||||
|
no_docu_temp = 3
|
||||||
|
ret_code = 4
|
||||||
|
OTHERS = 5.
|
||||||
|
IF sy-subrc = 0 AND lv_state = 'R'.
|
||||||
|
rt_lines = lt_lines.
|
||||||
|
ELSE.
|
||||||
|
CLEAR rt_lines.
|
||||||
|
ENDIF.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~read_descriptions.
|
||||||
|
SELECT * FROM seocompotx INTO TABLE rt_descriptions
|
||||||
|
WHERE clsname = iv_obejct_name.
|
||||||
|
DELETE rt_descriptions WHERE descript IS INITIAL.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD lif_object_oriented_object_fnc~delete.
|
||||||
|
ASSERT 0 = 1. "Subclass responsibility
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
ENDCLASS.
|
||||||
|
|
||||||
|
"Backdoor injection for test purposes
|
||||||
|
CLASS lth_oo_factory_injector DEFINITION DEFERRED.
|
||||||
|
|
||||||
|
CLASS lcl_object_oriented_factory DEFINITION
|
||||||
|
FRIENDS lth_oo_factory_injector.
|
||||||
|
PUBLIC SECTION.
|
||||||
|
CLASS-METHODS:
|
||||||
|
make
|
||||||
|
IMPORTING
|
||||||
|
iv_object_type TYPE tadir-object
|
||||||
|
RETURNING
|
||||||
|
VALUE(ro_object_oriented_object) TYPE REF TO lif_object_oriented_object_fnc.
|
||||||
|
PRIVATE SECTION.
|
||||||
|
CLASS-DATA:
|
||||||
|
go_object_oriented_object TYPE REF TO lif_object_oriented_object_fnc.
|
||||||
|
ENDCLASS.
|
||||||
|
"lcl_object_oriented_factory implementation is in include ZABAPGIT_OBJECT_OO_FACTORY.
|
||||||
|
"Reason: In this way, clas and intf specific OO functions implementations can be done
|
||||||
|
"at the own includes.
|
25
src/zabapgit_object_oo_functions.prog.xml
Normal file
25
src/zabapgit_object_oo_functions.prog.xml
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||||
|
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||||
|
<asx:values>
|
||||||
|
<PROGDIR>
|
||||||
|
<NAME>ZABAPGIT_OBJECT_OO_FUNCTIONS</NAME>
|
||||||
|
<STATE>A</STATE>
|
||||||
|
<VARCL>X</VARCL>
|
||||||
|
<DBAPL>S</DBAPL>
|
||||||
|
<DBNA>D$</DBNA>
|
||||||
|
<SUBC>I</SUBC>
|
||||||
|
<FIXPT>X</FIXPT>
|
||||||
|
<LDBNAME>D$S</LDBNAME>
|
||||||
|
<UCCHECK>X</UCCHECK>
|
||||||
|
</PROGDIR>
|
||||||
|
<TPOOL>
|
||||||
|
<item>
|
||||||
|
<ID>R</ID>
|
||||||
|
<ENTRY>Include ZABAPGIT_OBJECT_OO_FUNCTIONS</ENTRY>
|
||||||
|
<LENGTH>36</LENGTH>
|
||||||
|
</item>
|
||||||
|
</TPOOL>
|
||||||
|
</asx:values>
|
||||||
|
</asx:abap>
|
||||||
|
</abapGit>
|
|
@ -60,10 +60,7 @@ CLASS lcl_object_para IMPLEMENTATION.
|
||||||
|
|
||||||
SELECT SINGLE * FROM tparat INTO ls_tparat
|
SELECT SINGLE * FROM tparat INTO ls_tparat
|
||||||
WHERE paramid = ms_item-obj_name
|
WHERE paramid = ms_item-obj_name
|
||||||
AND sprache = mv_language. "#EC CI_GENBUFF
|
AND sprache = mv_language. "#EC CI_GENBUFF "#EC CI_SUBRC
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( 'PARA no english description' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
io_xml->add( iv_name = 'TPARA'
|
io_xml->add( iv_name = 'TPARA'
|
||||||
ig_data = ls_tpara ).
|
ig_data = ls_tpara ).
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_PARA</NAME>
|
<NAME>ZABAPGIT_OBJECT_PARA</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_PARA</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_PARA</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -67,13 +67,20 @@ CLASS lcl_object_pinf IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD lif_object~exists.
|
METHOD lif_object~exists.
|
||||||
|
|
||||||
DATA: lv_intf_name TYPE intf-intf_name.
|
DATA: lv_pack_name TYPE intf-pack_name,
|
||||||
|
lv_main_pack TYPE tdevc-mainpack.
|
||||||
|
|
||||||
|
|
||||||
SELECT SINGLE intf_name FROM intf INTO lv_intf_name
|
SELECT SINGLE pack_name FROM intf INTO lv_pack_name
|
||||||
WHERE intf_name = ms_item-obj_name.
|
WHERE intf_name = ms_item-obj_name.
|
||||||
rv_bool = boolc( sy-subrc = 0 ).
|
rv_bool = boolc( sy-subrc = 0 ).
|
||||||
|
|
||||||
|
IF rv_bool = abap_true.
|
||||||
|
SELECT SINGLE mainpack FROM tdevc INTO lv_main_pack
|
||||||
|
WHERE devclass = lv_pack_name.
|
||||||
|
rv_bool = boolc( sy-subrc = 0 ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD. "lif_object~exists
|
ENDMETHOD. "lif_object~exists
|
||||||
|
|
||||||
METHOD lif_object~serialize.
|
METHOD lif_object~serialize.
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_PINF</NAME>
|
<NAME>ZABAPGIT_OBJECT_PINF</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_PINF</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_PINF</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_PROG</NAME>
|
<NAME>ZABAPGIT_OBJECT_PROG</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_PROG</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_PROG</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
INCLUDE zabapgit_object_acid.
|
INCLUDE zabapgit_object_acid.
|
||||||
INCLUDE zabapgit_object_auth.
|
INCLUDE zabapgit_object_auth.
|
||||||
|
INCLUDE zabapgit_object_oo_functions.
|
||||||
INCLUDE zabapgit_object_clas.
|
INCLUDE zabapgit_object_clas.
|
||||||
INCLUDE zabapgit_object_doct.
|
INCLUDE zabapgit_object_doct.
|
||||||
INCLUDE zabapgit_object_docv.
|
INCLUDE zabapgit_object_docv.
|
||||||
|
@ -19,6 +20,7 @@ INCLUDE zabapgit_object_fugr.
|
||||||
INCLUDE zabapgit_object_iarp.
|
INCLUDE zabapgit_object_iarp.
|
||||||
INCLUDE zabapgit_object_iasp.
|
INCLUDE zabapgit_object_iasp.
|
||||||
INCLUDE zabapgit_object_iatu.
|
INCLUDE zabapgit_object_iatu.
|
||||||
|
INCLUDE zabapgit_object_intf.
|
||||||
INCLUDE zabapgit_object_msag.
|
INCLUDE zabapgit_object_msag.
|
||||||
INCLUDE zabapgit_object_nrob.
|
INCLUDE zabapgit_object_nrob.
|
||||||
INCLUDE zabapgit_object_para.
|
INCLUDE zabapgit_object_para.
|
||||||
|
@ -49,3 +51,4 @@ INCLUDE zabapgit_object_wdya.
|
||||||
INCLUDE zabapgit_object_wdyn.
|
INCLUDE zabapgit_object_wdyn.
|
||||||
INCLUDE zabapgit_object_webi.
|
INCLUDE zabapgit_object_webi.
|
||||||
INCLUDE zabapgit_object_xslt.
|
INCLUDE zabapgit_object_xslt.
|
||||||
|
INCLUDE zabapgit_object_oo_factory.
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_SERIALIZING</NAME>
|
<NAME>ZABAPGIT_OBJECT_SERIALIZING</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_SERIALIZATION</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_SERIALIZATION</ENTRY>
|
||||||
<LENGTH>37</LENGTH>
|
<LENGTH>37</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -39,6 +39,7 @@ CLASS lcl_object_sfbf IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD lif_object~get_metadata.
|
METHOD lif_object~get_metadata.
|
||||||
rs_metadata = get_metadata( ).
|
rs_metadata = get_metadata( ).
|
||||||
|
rs_metadata-ddic = abap_true.
|
||||||
ENDMETHOD. "lif_object~get_metadata
|
ENDMETHOD. "lif_object~get_metadata
|
||||||
|
|
||||||
METHOD lif_object~exists.
|
METHOD lif_object~exists.
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_SFBF</NAME>
|
<NAME>ZABAPGIT_OBJECT_SFBF</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_SFBF</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_SFBF</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -56,6 +56,7 @@ CLASS lcl_object_sfbs IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD lif_object~get_metadata.
|
METHOD lif_object~get_metadata.
|
||||||
rs_metadata = get_metadata( ).
|
rs_metadata = get_metadata( ).
|
||||||
|
rs_metadata-ddic = abap_true.
|
||||||
ENDMETHOD. "lif_object~get_metadata
|
ENDMETHOD. "lif_object~get_metadata
|
||||||
|
|
||||||
METHOD lif_object~exists.
|
METHOD lif_object~exists.
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_SFBS</NAME>
|
<NAME>ZABAPGIT_OBJECT_SFBS</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_SFBS</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_SFBS</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -39,6 +39,7 @@ CLASS lcl_object_sfsw IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD lif_object~get_metadata.
|
METHOD lif_object~get_metadata.
|
||||||
rs_metadata = get_metadata( ).
|
rs_metadata = get_metadata( ).
|
||||||
|
rs_metadata-ddic = abap_true.
|
||||||
ENDMETHOD. "lif_object~get_metadata
|
ENDMETHOD. "lif_object~get_metadata
|
||||||
|
|
||||||
METHOD lif_object~exists.
|
METHOD lif_object~exists.
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_SFSW</NAME>
|
<NAME>ZABAPGIT_OBJECT_SFSW</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_SFSW</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_SFSW</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -158,6 +158,7 @@ CLASS lcl_object_shi3 IMPLEMENTATION.
|
||||||
lt_texts TYPE TABLE OF hier_texts,
|
lt_texts TYPE TABLE OF hier_texts,
|
||||||
lt_refs TYPE TABLE OF hier_ref.
|
lt_refs TYPE TABLE OF hier_ref.
|
||||||
|
|
||||||
|
|
||||||
CALL FUNCTION 'STREE_STRUCTURE_READ'
|
CALL FUNCTION 'STREE_STRUCTURE_READ'
|
||||||
EXPORTING
|
EXPORTING
|
||||||
structure_id = mv_tree_id
|
structure_id = mv_tree_id
|
||||||
|
@ -167,10 +168,6 @@ CLASS lcl_object_shi3 IMPLEMENTATION.
|
||||||
TABLES
|
TABLES
|
||||||
description = lt_titles.
|
description = lt_titles.
|
||||||
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( 'Error from STREE_STRUCTURE_READ, SHI3' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CALL FUNCTION 'STREE_HIERARCHY_READ'
|
CALL FUNCTION 'STREE_HIERARCHY_READ'
|
||||||
EXPORTING
|
EXPORTING
|
||||||
structure_id = mv_tree_id
|
structure_id = mv_tree_id
|
||||||
|
@ -182,9 +179,6 @@ CLASS lcl_object_shi3 IMPLEMENTATION.
|
||||||
list_of_nodes = lt_nodes
|
list_of_nodes = lt_nodes
|
||||||
list_of_references = lt_refs
|
list_of_references = lt_refs
|
||||||
list_of_texts = lt_texts.
|
list_of_texts = lt_texts.
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( 'Error from STREE_HIERARCHY_READ, SHI3' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
strip_stamps( CHANGING cs_head = ls_head
|
strip_stamps( CHANGING cs_head = ls_head
|
||||||
ct_nodes = lt_nodes ).
|
ct_nodes = lt_nodes ).
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_SHI3</NAME>
|
<NAME>ZABAPGIT_OBJECT_SHI3</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_SHI3</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_SHI3</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -50,6 +50,7 @@ CLASS lcl_object_shlp IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD lif_object~get_metadata.
|
METHOD lif_object~get_metadata.
|
||||||
rs_metadata = get_metadata( ).
|
rs_metadata = get_metadata( ).
|
||||||
|
rs_metadata-ddic = abap_true.
|
||||||
ENDMETHOD. "lif_object~get_metadata
|
ENDMETHOD. "lif_object~get_metadata
|
||||||
|
|
||||||
METHOD lif_object~exists.
|
METHOD lif_object~exists.
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_SHLP</NAME>
|
<NAME>ZABAPGIT_OBJECT_SHLP</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_SHLP</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_SHLP</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -22,6 +22,7 @@ CLASS lcl_object_sicf DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
||||||
END OF ty_sicf_key.
|
END OF ty_sicf_key.
|
||||||
|
|
||||||
METHODS read
|
METHODS read
|
||||||
|
IMPORTING iv_clear TYPE abap_bool DEFAULT abap_true
|
||||||
EXPORTING es_icfservice TYPE icfservice
|
EXPORTING es_icfservice TYPE icfservice
|
||||||
es_icfdocu TYPE icfdocu
|
es_icfdocu TYPE icfdocu
|
||||||
et_icfhandler TYPE ty_icfhandler_tt
|
et_icfhandler TYPE ty_icfhandler_tt
|
||||||
|
@ -71,7 +72,8 @@ CLASS lcl_object_sicf IMPLEMENTATION.
|
||||||
DATA: ls_icfservice TYPE icfservice.
|
DATA: ls_icfservice TYPE icfservice.
|
||||||
|
|
||||||
|
|
||||||
read( IMPORTING es_icfservice = ls_icfservice ).
|
read( EXPORTING iv_clear = abap_false
|
||||||
|
IMPORTING es_icfservice = ls_icfservice ).
|
||||||
|
|
||||||
rv_user = ls_icfservice-icf_muser.
|
rv_user = ls_icfservice-icf_muser.
|
||||||
|
|
||||||
|
@ -174,10 +176,12 @@ CLASS lcl_object_sicf IMPLEMENTATION.
|
||||||
ASSERT sy-subrc = 0.
|
ASSERT sy-subrc = 0.
|
||||||
|
|
||||||
MOVE-CORRESPONDING ls_serv_info-service TO es_icfservice.
|
MOVE-CORRESPONDING ls_serv_info-service TO es_icfservice.
|
||||||
|
IF iv_clear = abap_true.
|
||||||
CLEAR es_icfservice-icf_cuser.
|
CLEAR es_icfservice-icf_cuser.
|
||||||
CLEAR es_icfservice-icf_cdate.
|
CLEAR es_icfservice-icf_cdate.
|
||||||
CLEAR es_icfservice-icf_muser.
|
CLEAR es_icfservice-icf_muser.
|
||||||
CLEAR es_icfservice-icf_mdate.
|
CLEAR es_icfservice-icf_mdate.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
CLEAR es_icfdocu-icfparguid.
|
CLEAR es_icfdocu-icfparguid.
|
||||||
|
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_SICF</NAME>
|
<NAME>ZABAPGIT_OBJECT_SICF</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_SICF</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_SICF</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -191,7 +191,7 @@ CLASS lcl_object_smim IMPLEMENTATION.
|
||||||
not_found = 3
|
not_found = 3
|
||||||
permission_failure = 4
|
permission_failure = 4
|
||||||
OTHERS = 5 ).
|
OTHERS = 5 ).
|
||||||
IF sy-subrc <> 0.
|
IF sy-subrc <> 0 AND sy-subrc <> 2 AND sy-subrc <> 3.
|
||||||
lcx_exception=>raise( 'error from mime api->get:' && sy-msgv1 ).
|
lcx_exception=>raise( 'error from mime api->get:' && sy-msgv1 ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_SMIM</NAME>
|
<NAME>ZABAPGIT_OBJECT_SMIM</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_SMIM</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_SMIM</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_SPLO</NAME>
|
<NAME>ZABAPGIT_OBJECT_SPLO</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_SPLO</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_SPLO</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_SSFO</NAME>
|
<NAME>ZABAPGIT_OBJECT_SSFO</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_SSFO</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_SSFO</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_SSST</NAME>
|
<NAME>ZABAPGIT_OBJECT_SSST</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_SSST</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_SSST</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -61,9 +61,9 @@ CLASS lcl_object_susc IMPLEMENTATION.
|
||||||
SELECT SINGLE * FROM tobct INTO ls_tobct
|
SELECT SINGLE * FROM tobct INTO ls_tobct
|
||||||
WHERE oclss = ms_item-obj_name
|
WHERE oclss = ms_item-obj_name
|
||||||
AND langu = mv_language.
|
AND langu = mv_language.
|
||||||
IF sy-subrc <> 0.
|
* IF sy-subrc <> 0.
|
||||||
lcx_exception=>raise( 'TOBCT no english description' ).
|
* lcx_exception=>raise( 'TOBCT no english description' ).
|
||||||
ENDIF.
|
* ENDIF.
|
||||||
|
|
||||||
io_xml->add( iv_name = 'TOBC'
|
io_xml->add( iv_name = 'TOBC'
|
||||||
ig_data = ls_tobc ).
|
ig_data = ls_tobc ).
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_SUSC</NAME>
|
<NAME>ZABAPGIT_OBJECT_SUSC</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_SUSC</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_SUSC</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -5,42 +5,16 @@
|
||||||
<PROGDIR>
|
<PROGDIR>
|
||||||
<NAME>ZABAPGIT_OBJECT_SUSO</NAME>
|
<NAME>ZABAPGIT_OBJECT_SUSO</NAME>
|
||||||
<STATE>A</STATE>
|
<STATE>A</STATE>
|
||||||
<SQLX/>
|
|
||||||
<EDTX/>
|
|
||||||
<VARCL>X</VARCL>
|
<VARCL>X</VARCL>
|
||||||
<DBAPL/>
|
|
||||||
<DBNA/>
|
|
||||||
<CLAS/>
|
|
||||||
<TYPE/>
|
|
||||||
<OCCURS/>
|
|
||||||
<SUBC>I</SUBC>
|
<SUBC>I</SUBC>
|
||||||
<APPL/>
|
|
||||||
<SECU/>
|
|
||||||
<CNAM/>
|
|
||||||
<CDAT>0000-00-00</CDAT>
|
|
||||||
<UNAM/>
|
|
||||||
<UDAT>0000-00-00</UDAT>
|
|
||||||
<VERN/>
|
|
||||||
<LEVL/>
|
|
||||||
<RSTAT/>
|
|
||||||
<RMAND/>
|
|
||||||
<RLOAD>E</RLOAD>
|
<RLOAD>E</RLOAD>
|
||||||
<FIXPT/>
|
|
||||||
<SSET/>
|
|
||||||
<SDATE>0000-00-00</SDATE>
|
|
||||||
<STIME/>
|
|
||||||
<IDATE>0000-00-00</IDATE>
|
|
||||||
<ITIME/>
|
|
||||||
<LDBNAME/>
|
|
||||||
<UCCHECK>X</UCCHECK>
|
<UCCHECK>X</UCCHECK>
|
||||||
</PROGDIR>
|
</PROGDIR>
|
||||||
<TPOOL>
|
<TPOOL>
|
||||||
<item>
|
<item>
|
||||||
<ID>R</ID>
|
<ID>R</ID>
|
||||||
<KEY/>
|
|
||||||
<ENTRY>Include ZABAPGIT_OBJECT_SUSO</ENTRY>
|
<ENTRY>Include ZABAPGIT_OBJECT_SUSO</ENTRY>
|
||||||
<LENGTH>28</LENGTH>
|
<LENGTH>28</LENGTH>
|
||||||
<SPLIT/>
|
|
||||||
</item>
|
</item>
|
||||||
</TPOOL>
|
</TPOOL>
|
||||||
</asx:values>
|
</asx:values>
|
||||||
|
|
|
@ -74,6 +74,7 @@ CLASS lcl_object_tabl IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD lif_object~get_metadata.
|
METHOD lif_object~get_metadata.
|
||||||
rs_metadata = get_metadata( ).
|
rs_metadata = get_metadata( ).
|
||||||
|
rs_metadata-ddic = abap_true.
|
||||||
ENDMETHOD. "lif_object~get_metadata
|
ENDMETHOD. "lif_object~get_metadata
|
||||||
|
|
||||||
METHOD lif_object~exists.
|
METHOD lif_object~exists.
|
||||||
|
@ -105,7 +106,7 @@ CLASS lcl_object_tabl IMPLEMENTATION.
|
||||||
|
|
||||||
CALL FUNCTION 'RS_DD_DELETE_OBJ'
|
CALL FUNCTION 'RS_DD_DELETE_OBJ'
|
||||||
EXPORTING
|
EXPORTING
|
||||||
no_ask = abap_false
|
no_ask = abap_true
|
||||||
objname = lv_objname
|
objname = lv_objname
|
||||||
objtype = 'T'
|
objtype = 'T'
|
||||||
EXCEPTIONS
|
EXCEPTIONS
|
||||||
|
@ -131,6 +132,7 @@ CLASS lcl_object_tabl IMPLEMENTATION.
|
||||||
lt_dd17v TYPE dd17vtab,
|
lt_dd17v TYPE dd17vtab,
|
||||||
lt_dd35v TYPE TABLE OF dd35v,
|
lt_dd35v TYPE TABLE OF dd35v,
|
||||||
lv_index LIKE sy-index,
|
lv_index LIKE sy-index,
|
||||||
|
lv_masklen TYPE c LENGTH 4,
|
||||||
lt_dd36m TYPE dd36mttyp.
|
lt_dd36m TYPE dd36mttyp.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_dd12v> LIKE LINE OF lt_dd12v,
|
FIELD-SYMBOLS: <ls_dd12v> LIKE LINE OF lt_dd12v,
|
||||||
|
@ -180,6 +182,9 @@ CLASS lcl_object_tabl IMPLEMENTATION.
|
||||||
IF ls_dd02v-datmax = ''.
|
IF ls_dd02v-datmax = ''.
|
||||||
CLEAR ls_dd02v-datmax.
|
CLEAR ls_dd02v-datmax.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
IF ls_dd02v-datavg = ''.
|
||||||
|
CLEAR ls_dd02v-datavg.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
CLEAR: ls_dd09l-as4user,
|
CLEAR: ls_dd09l-as4user,
|
||||||
ls_dd09l-as4date,
|
ls_dd09l-as4date,
|
||||||
|
@ -206,7 +211,8 @@ CLASS lcl_object_tabl IMPLEMENTATION.
|
||||||
<ls_dd03p>-scrtext_m,
|
<ls_dd03p>-scrtext_m,
|
||||||
<ls_dd03p>-scrtext_l.
|
<ls_dd03p>-scrtext_l.
|
||||||
|
|
||||||
IF <ls_dd03p>-masklen = '' OR NOT <ls_dd03p>-masklen CO '0123456789'.
|
lv_masklen = <ls_dd03p>-masklen.
|
||||||
|
IF lv_masklen = '' OR NOT lv_masklen CO '0123456789'.
|
||||||
* make sure the field contains valid data, or the XML will dump
|
* make sure the field contains valid data, or the XML will dump
|
||||||
CLEAR <ls_dd03p>-masklen.
|
CLEAR <ls_dd03p>-masklen.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
@ -229,7 +235,10 @@ CLASS lcl_object_tabl IMPLEMENTATION.
|
||||||
<ls_dd03p>-convexit,
|
<ls_dd03p>-convexit,
|
||||||
<ls_dd03p>-entitytab,
|
<ls_dd03p>-entitytab,
|
||||||
<ls_dd03p>-dommaster,
|
<ls_dd03p>-dommaster,
|
||||||
<ls_dd03p>-domname3l.
|
<ls_dd03p>-domname3l,
|
||||||
|
<ls_dd03p>-decimals,
|
||||||
|
<ls_dd03p>-lowercase,
|
||||||
|
<ls_dd03p>-signflag.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
IF <ls_dd03p>-shlporigin = 'D'.
|
IF <ls_dd03p>-shlporigin = 'D'.
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user