mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
Merge branch 'master' of https://github.com/larshp/abapGit
This commit is contained in:
commit
2adb787bc0
|
@ -1,3 +1,19 @@
|
|||
## Bug Reports
|
||||
|
||||
A bug is a _demonstrable problem_ that is caused by the code in the repository. Good bug reports are extremely helpful - thank you!
|
||||
|
||||
Guidelines for bug reports:
|
||||
|
||||
1. **Use the GitHub issue search** — check if the issue has already been
|
||||
reported.
|
||||
|
||||
2. **Check if the issue has been fixed** — try to reproduce it using the
|
||||
latest `master` or development branch in the repository.
|
||||
|
||||
3. **Demonstrate the problem** — provide clear steps that can be reproduced.
|
||||
|
||||
A good bug report should not leave others needing to chase you up for more information. Please try to be as detailed as possible in your report. What is your environment? What steps will reproduce the issue? What would you expect to be the outcome? All these details will help to fix any potential bugs.
|
||||
|
||||
## Development Guidelines
|
||||
|
||||
a. Make sure there is an open issue for the stuff that you want to work on. When starting the development add a comment in the issue. This will allow for discussing possible solutions, and avoid having multiple people look into the same issue.
|
||||
|
|
|
@ -8,6 +8,80 @@ Legend
|
|||
+ : added
|
||||
- : removed
|
||||
|
||||
2017-09-11 v1.41.2
|
||||
------------------
|
||||
* FUGR table maintenance, namespaces
|
||||
* SICF show error message when deleting root node
|
||||
* DDLS better error messages
|
||||
* ENHS allow transport popup
|
||||
+ experimental, optional opt-in: CLAS deserialization performance
|
||||
|
||||
2017-09-03 v1.41.1
|
||||
------------------
|
||||
* DDLS changed_by
|
||||
* Deletion of objects when performing "reset local"
|
||||
* Moved first class to global in the abapGit development version
|
||||
|
||||
2017-08-23 v1.41.0
|
||||
------------------
|
||||
+ SHMA supported
|
||||
+ ENHO for function groups + web dynpro supported
|
||||
|
||||
2017-08-11 v1.40.0
|
||||
------------------
|
||||
+ JOBD supported
|
||||
+ CMPT supported
|
||||
* downport fix
|
||||
|
||||
2017-08-07 v1.39.0
|
||||
------------------
|
||||
+ DIAL supported
|
||||
* fix XML dump
|
||||
|
||||
2017-08-05 v1.38.0
|
||||
------------------
|
||||
! SICF serialization changed
|
||||
* TOBJ serialization added TDDAT, TVDIR, and TVIMF tables
|
||||
* TYPE fix overwriting/pull
|
||||
|
||||
2017-08-03 v1.37.8
|
||||
------------------
|
||||
* Fix TABL changed_by
|
||||
* Downport to 702
|
||||
|
||||
2017-07-28 v1.37.7
|
||||
------------------
|
||||
* Fix dump when parsing commit author, regex
|
||||
* Fix decoding of commit body, newlines
|
||||
* SAMC SAPC refactoring
|
||||
* DOMA diff fix, sorting
|
||||
|
||||
2017-07-23 v1.37.6
|
||||
------------------
|
||||
* SMIM exists() performance
|
||||
* Background mode performance improvements
|
||||
* DOCT fix changed_by() dump
|
||||
|
||||
2017-07-17 v1.37.5
|
||||
------------------
|
||||
* fix FUGR namespaces
|
||||
* few ASSERTs removed
|
||||
* decoding of non-7bit values from html gui
|
||||
|
||||
2017-07-09 v1.37.4
|
||||
------------------
|
||||
* SSFO serialization fix
|
||||
* Adler32 optimization
|
||||
! progress indicator when encoding object pack
|
||||
* CLAS diff fix, texts sorted
|
||||
* SSST bug, only inactive exists
|
||||
! Global settings persistence changed to XML
|
||||
|
||||
2017-06-29 v1.37.3
|
||||
------------------
|
||||
* fixed 702 compatibility
|
||||
* fixed dump when calling branch overview page
|
||||
|
||||
2017-06-10 v1.37.2
|
||||
------------------
|
||||
* fixed unit tests
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
<div class="page-head">
|
||||
<div class="wrap">
|
||||
<a href="./index.html"><img class="head-logo" src="img/logo.svg" height="40" alt="abapGit"></a><span class="head-title">abapGit documentation</span>
|
||||
<a href="./"><img class="head-logo" src="img/logo.svg" height="40" alt="abapGit"></a><span class="head-title">abapGit documentation</span>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -6,7 +6,7 @@ order: 10
|
|||
|
||||
1: Run report ZABAPGIT via SE38 or SA38
|
||||
|
||||
2: Click "New Offline Repo"
|
||||
2: Click "+ Offline"
|
||||

|
||||
|
||||
3: Enter project name eg. "abapOpenChecks", and an empty package eg. "$AOC"
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 6.3 KiB |
Binary file not shown.
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 6.7 KiB |
Binary file not shown.
Before Width: | Height: | Size: 6.5 KiB After Width: | Height: | Size: 4.3 KiB |
|
@ -20,6 +20,9 @@ order: 30
|
|||
[SAP Inside Track Hamburg](https://larshp.github.io/sithh2016/)
|
||||
-Lars Hvam
|
||||
|
||||
[SAP Inside Track Munich](https://www.slideshare.net/h_neumann/what-the-git-sap-inside-track-munich-2016)
|
||||
-Hendrik Neumann
|
||||
|
||||
[SAP Teched Barcelona](https://larshp.github.io/teched-2016-emea/)
|
||||
-Lars Hvam
|
||||
|
||||
|
@ -40,5 +43,14 @@ order: 30
|
|||
Mastering SAP Technologies, Melbourne, May 23rd
|
||||
-Graham Robinson
|
||||
|
||||
[abapGit – so easy](https://blogs.sap.com/2017/06/21/abapgit-so-easy/)
|
||||
-Graham Robinson
|
||||
|
||||
SAUG National Summit 2017, September 5th
|
||||
-Graham Robinson
|
||||
|
||||
SAP Teched Las Vegas
|
||||
-Graham Robinson
|
||||
|
||||
abapGit, [IT Conference on SAP Technologies](http://www.itconferencesap.com/), Cluj
|
||||
-Lars Hvam
|
||||
|
|
|
@ -31,9 +31,12 @@ Example: abapGit own .abapgit.xml
|
|||
|
||||
# Description
|
||||
|
||||
## Location
|
||||
The `.abapgit.xml` file must be located in the root folder of the git repository.
|
||||
|
||||
## Master Language
|
||||
|
||||
The language in which all documentation and dictionary elements texts will be created. Follows SAP `sy-langu` values.
|
||||
The language in which all documentation and dictionary elements texts will be created. Follows SAP `sy-langu` values. Note that this implies that all objects in a repository will/should have the same master language.
|
||||
|
||||
## Starting Folder
|
||||
|
||||
|
|
|
@ -8,12 +8,16 @@ order: 20
|
|||
Type | Description | Supported
|
||||
:------------ | :------------ | ------------:
|
||||
ACID | Checkpoint Group | Yes
|
||||
AOBJ | Archiving Object | [#804](https://github.com/larshp/abapGit/issues/804)
|
||||
AUTH | Authorization Check Fields | Yes
|
||||
BOBF | BOPF: Business Object Model | [Plugin](https://github.com/larshp/abapGit-Plugins)
|
||||
CHDO | Change Document Object | [#802](https://github.com/larshp/abapGit/issues/802)
|
||||
CLAS | Class (ABAP Objects) | Yes
|
||||
CMOD | Customer enhancement projects | [#151](https://github.com/larshp/abapGit/issues/151)
|
||||
CMPT | Code Composer Template | Yes
|
||||
DCLS | ABAP Data Control Language Sources | Yes
|
||||
DDLS | Data Definition Language Source | Yes
|
||||
DIAL | Dialog Module | Yes
|
||||
DOCT | General Text | Yes
|
||||
DOCV | Documentation (Independent) | Yes
|
||||
DOMA | Domain | Yes
|
||||
|
@ -21,7 +25,7 @@ DTEL | Data Element | Yes
|
|||
ECAT | eCATT Test Script | [#163](https://github.com/larshp/abapGit/issues/163)
|
||||
ECTD | eCATT Test Data Container | [#105](https://github.com/larshp/abapGit/issues/105)
|
||||
ENHC | Composite Enhancement Implementation | Yes
|
||||
ENHO | Enhancement Implementation | Partial [#113](https://github.com/larshp/abapGit/issues/113)
|
||||
ENHO | Enhancement Implementation | Yes
|
||||
ENHS | Enhancement Spot | Yes
|
||||
ENQU | Lock Object | Yes
|
||||
FORM | SAPscript form | Yes
|
||||
|
@ -31,6 +35,7 @@ IARP | Parameters of IAC Language Resource | Yes
|
|||
IASP | Parameters of an IAC service | Yes
|
||||
IATU | Language-Independent IAC Templates | Yes
|
||||
IWPR | Gateway Business Suite Enablement - Service Builder Project | [#75](https://github.com/larshp/abapGit/issues/75)
|
||||
JOBD | Technical Job Definition | Yes
|
||||
LPDC | Launchpad short texts | [#107](https://github.com/larshp/abapGit/issues/107)
|
||||
MSAG | Message Class | Yes
|
||||
NROB | Number Range Objects | Yes
|
||||
|
@ -38,24 +43,26 @@ PARA | SPA/GPA Parameters | Yes
|
|||
PDTS | Standard Task | [#153](https://github.com/larshp/abapGit/issues/153)
|
||||
PDWS | Workflow templates | [#154](https://github.com/larshp/abapGit/issues/154)
|
||||
PINF | Package interface | Yes
|
||||
PRAG | Pragma in ABAP Source Code | Yes
|
||||
PROG | Program | Yes
|
||||
SAMC | ABAP Messaging Channels | Yes
|
||||
SAPC | ABAP Push Channels | Yes
|
||||
SFBF | Business Function + Assignment | Yes
|
||||
SFBS | Business Function Set + Assignment | Yes
|
||||
SFPF | Form Object: Form | Yes
|
||||
SFPI | Form Object: Interface | Yes
|
||||
SFSW | Switch + Assignment of Objects to the Switch | Yes
|
||||
SHI3 | General structure storage: Definition of a structure | Yes
|
||||
SHLP | Search Help | Yes
|
||||
SHMA | Shared Objects: Defined Area Attributes | Yes
|
||||
SICF | ICF Service | Yes
|
||||
SMIM | Info Object from the MIME Repository | Yes
|
||||
SOTS | All Concepts (OTR) of a Package - Long Texts | [#792](https://github.com/larshp/abapGit/issues/792)
|
||||
SPLO | Format Types | Yes
|
||||
SPRX | Proxy Object | [#87](https://github.com/larshp/abapGit/issues/87)
|
||||
SRFC | RFC Service | [#155](https://github.com/larshp/abapGit/issues/155)
|
||||
SSFO | SAP Smart Form | Yes
|
||||
SSST | SAP Smart Style | Yes
|
||||
SFPI | Form Object: Interface | Yes
|
||||
SFPF | Form Object: Form | Yes
|
||||
SHMA | Shared Objects: Defined Area Attributes | [#85](https://github.com/larshp/abapGit/issues/85)
|
||||
SMIM | Info Object from the MIME Repository | Yes
|
||||
SPRX | Proxy Object | [#87](https://github.com/larshp/abapGit/issues/87)
|
||||
STYL | SAPscript style | Yes
|
||||
SUSC | Authorization object class | Yes
|
||||
SUSO | Authorization object | Yes
|
||||
|
@ -77,4 +84,4 @@ WDYN | Web Dynpro Component | Yes
|
|||
WEBI | Virtual End Point | Yes
|
||||
XSLT | Transformation | Yes
|
||||
|
||||
Also see https://github.com/larshp/abapGit-Plugins
|
||||
Also see [https://github.com/larshp/abapGit-Plugins](https://github.com/larshp/abapGit-Plugins)
|
||||
|
|
|
@ -14,6 +14,11 @@
|
|||
"title": "abap-log",
|
||||
"description": "Logging library for ABAP"
|
||||
},
|
||||
"https://github.com/epeterson320/ABAP-Logger.git":
|
||||
{
|
||||
"title": "ABAP-Logger",
|
||||
"description": "ABAP Logging as painless as any other language"
|
||||
},
|
||||
"https://github.com/sbcgua/mockup_loader.git":
|
||||
{
|
||||
"title": "mockup_loader",
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
"url": "git+https://github.com/larshp/abapGit.git"
|
||||
},
|
||||
"devDependencies": {
|
||||
"abapmerge": "^0.6.2",
|
||||
"abapmerge": "^0.7.0",
|
||||
"abaplint": ">=0.26.7"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -48,6 +48,7 @@ INCLUDE zabapgit_sap_package.
|
|||
INCLUDE zabapgit_folder_logic.
|
||||
INCLUDE zabapgit_requirements.
|
||||
INCLUDE zabapgit_authorizations.
|
||||
INCLUDE zabapgit_exit.
|
||||
|
||||
INCLUDE zabapgit_stage.
|
||||
INCLUDE zabapgit_git_helpers.
|
||||
|
|
|
@ -113,25 +113,41 @@ CLASS lcl_background IMPLEMENTATION.
|
|||
|
||||
METHOD push_auto.
|
||||
|
||||
TYPES: BEGIN OF ty_changed,
|
||||
filename TYPE string,
|
||||
path TYPE string,
|
||||
changed_by TYPE xubname,
|
||||
END OF ty_changed.
|
||||
|
||||
DATA: ls_comment TYPE lif_defs=>ty_comment,
|
||||
ls_files TYPE lif_defs=>ty_stage_files,
|
||||
lt_changed TYPE STANDARD TABLE OF ty_changed WITH DEFAULT KEY,
|
||||
lt_users TYPE STANDARD TABLE OF xubname WITH DEFAULT KEY,
|
||||
ls_user_files LIKE ls_files,
|
||||
lv_changed_by TYPE xubname,
|
||||
lo_stage TYPE REF TO lcl_stage.
|
||||
|
||||
FIELD-SYMBOLS: <ls_local> LIKE LINE OF ls_files-local.
|
||||
|
||||
FIELD-SYMBOLS: <ls_changed> LIKE LINE OF lt_changed,
|
||||
<ls_local> LIKE LINE OF ls_files-local.
|
||||
|
||||
|
||||
ls_files = lcl_stage_logic=>get( io_repo ).
|
||||
|
||||
DO.
|
||||
READ TABLE ls_files-local INDEX 1 ASSIGNING <ls_local>.
|
||||
IF sy-subrc <> 0.
|
||||
EXIT.
|
||||
ENDIF.
|
||||
LOOP AT ls_files-local ASSIGNING <ls_local>.
|
||||
lv_changed_by = lcl_objects=>changed_by( <ls_local>-item ).
|
||||
APPEND lv_changed_by TO lt_users.
|
||||
APPEND INITIAL LINE TO lt_changed ASSIGNING <ls_changed>.
|
||||
<ls_changed>-changed_by = lv_changed_by.
|
||||
<ls_changed>-filename = <ls_local>-file-filename.
|
||||
<ls_changed>-path = <ls_local>-file-path.
|
||||
ENDLOOP.
|
||||
|
||||
SORT lt_users ASCENDING.
|
||||
DELETE ADJACENT DUPLICATES FROM lt_users.
|
||||
|
||||
LOOP AT lt_users INTO lv_changed_by.
|
||||
CLEAR ls_comment.
|
||||
ls_comment-committer-name = lcl_objects=>changed_by( <ls_local>-item ).
|
||||
ls_comment-committer-name = lv_changed_by.
|
||||
ls_comment-committer-email = |{ ls_comment-committer-name }@localhost|.
|
||||
|
||||
CREATE OBJECT lo_stage
|
||||
|
@ -142,7 +158,12 @@ CLASS lcl_background IMPLEMENTATION.
|
|||
CLEAR ls_user_files.
|
||||
|
||||
LOOP AT ls_files-local ASSIGNING <ls_local>.
|
||||
IF lcl_objects=>changed_by( <ls_local>-item ) = ls_comment-committer-name.
|
||||
READ TABLE lt_changed WITH KEY
|
||||
path = <ls_local>-file-path
|
||||
filename = <ls_local>-file-filename
|
||||
changed_by = lv_changed_by
|
||||
TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc = 0.
|
||||
WRITE: / 'stage' ##NO_TEXT,
|
||||
ls_comment-committer-name,
|
||||
<ls_local>-file-path,
|
||||
|
@ -160,10 +181,7 @@ CLASS lcl_background IMPLEMENTATION.
|
|||
|
||||
io_repo->push( is_comment = ls_comment
|
||||
io_stage = lo_stage ).
|
||||
|
||||
ls_files = lcl_stage_logic=>get( io_repo ).
|
||||
|
||||
ENDDO.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ TYPE-POOLS seop.
|
|||
INTERFACE lif_defs.
|
||||
|
||||
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
|
||||
gc_abap_version TYPE string VALUE 'v1.37.2'. "#EC NOTEXT
|
||||
gc_abap_version TYPE string VALUE 'v1.41.2'. "#EC NOTEXT
|
||||
|
||||
TYPES: ty_type TYPE c LENGTH 6,
|
||||
ty_bitbyte TYPE c LENGTH 8,
|
||||
|
@ -33,6 +33,8 @@ INTERFACE lif_defs.
|
|||
|
||||
TYPES: ty_string_tt TYPE STANDARD TABLE OF string WITH DEFAULT KEY.
|
||||
|
||||
TYPES: ty_icm_sinfo2_tt TYPE STANDARD TABLE OF icm_sinfo2 WITH DEFAULT KEY.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_git_user,
|
||||
name TYPE string,
|
||||
|
@ -197,7 +199,7 @@ INTERFACE lif_defs.
|
|||
|
||||
CONSTANTS: gc_root_dir TYPE string VALUE '/',
|
||||
gc_dot_abapgit TYPE string VALUE '.abapgit.xml' ##NO_TEXT,
|
||||
gc_author_regex TYPE string VALUE '^([\w\s\.@\-_1-9]+) <(.*)> (\d{10})\s?.\d{4}$' ##NO_TEXT.
|
||||
gc_author_regex TYPE string VALUE '^([\\\w\s\.@\-_1-9\(\) ]+) <(.*)> (\d{10})\s?.\d{4}$' ##NO_TEXT.
|
||||
|
||||
CONSTANTS: BEGIN OF gc_action,
|
||||
repo_clone TYPE string VALUE 'repo_clone',
|
||||
|
|
51
src/zabapgit_exit.prog.abap
Normal file
51
src/zabapgit_exit.prog.abap
Normal file
|
@ -0,0 +1,51 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include ZABAPGIT_USER_EXITS
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
INTERFACE lif_exit.
|
||||
|
||||
METHODS:
|
||||
change_local_host
|
||||
CHANGING ct_hosts TYPE lif_defs=>ty_icm_sinfo2_tt,
|
||||
allow_sap_objects
|
||||
RETURNING VALUE(rv_allowed) TYPE abap_bool.
|
||||
|
||||
ENDINTERFACE.
|
||||
|
||||
* add class LCL_USER_EXIT implementing LIF_EXIT in following include,
|
||||
* place the include in a different package than ZABAPGIT
|
||||
INCLUDE zabapgit_user_exit IF FOUND.
|
||||
|
||||
*******************
|
||||
|
||||
CLASS lcl_exit DEFINITION FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS: get_instance RETURNING VALUE(ri_exit) TYPE REF TO lif_exit.
|
||||
|
||||
INTERFACES: lif_exit.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_exit IMPLEMENTATION.
|
||||
|
||||
METHOD get_instance.
|
||||
|
||||
TRY.
|
||||
CREATE OBJECT ri_exit TYPE ('LCL_USER_EXIT').
|
||||
CATCH cx_sy_create_object_error.
|
||||
CREATE OBJECT ri_exit TYPE lcl_exit.
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_exit~change_local_host.
|
||||
* default behavior
|
||||
RETURN.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_exit~allow_sap_objects.
|
||||
rv_allowed = abap_false.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
22
src/zabapgit_exit.prog.xml
Normal file
22
src/zabapgit_exit.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_EXIT</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_USER_EXITS</ENTRY>
|
||||
<LENGTH>27</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -27,7 +27,8 @@ CLASS lcl_file_status DEFINITION FINAL
|
|||
it_local TYPE lif_defs=>ty_files_item_tt
|
||||
it_remote TYPE lif_defs=>ty_files_tt
|
||||
it_cur_state TYPE lif_defs=>ty_file_signatures_tt
|
||||
RETURNING VALUE(rt_results) TYPE lif_defs=>ty_results_tt,
|
||||
RETURNING VALUE(rt_results) TYPE lif_defs=>ty_results_tt
|
||||
RAISING lcx_exception,
|
||||
run_checks
|
||||
IMPORTING io_log TYPE REF TO lcl_log
|
||||
it_results TYPE lif_defs=>ty_results_tt
|
||||
|
|
|
@ -114,6 +114,12 @@ CLASS lcl_git_pack DEFINITION FINAL FRIENDS ltcl_git_pack.
|
|||
IMPORTING is_commit TYPE ty_commit
|
||||
RETURNING VALUE(rv_data) TYPE xstring.
|
||||
|
||||
CLASS-METHODS type_and_length
|
||||
IMPORTING iv_type TYPE lif_defs=>ty_type
|
||||
iv_length TYPE i
|
||||
RETURNING VALUE(rv_xstring) TYPE xstring
|
||||
RAISING lcx_exception.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS: c_pack_start TYPE x LENGTH 4 VALUE '5041434B', " PACK
|
||||
c_zlib TYPE x LENGTH 2 VALUE '789C',
|
||||
|
@ -124,11 +130,6 @@ CLASS lcl_git_pack DEFINITION FINAL FRIENDS ltcl_git_pack.
|
|||
CHANGING ct_objects TYPE lif_defs=>ty_objects_tt
|
||||
RAISING lcx_exception.
|
||||
|
||||
CLASS-METHODS type_and_length
|
||||
IMPORTING is_object TYPE lif_defs=>ty_object
|
||||
RETURNING VALUE(rv_xstring) TYPE xstring
|
||||
RAISING lcx_exception.
|
||||
|
||||
CLASS-METHODS delta
|
||||
IMPORTING is_object TYPE lif_defs=>ty_object
|
||||
CHANGING ct_objects TYPE lif_defs=>ty_objects_tt
|
||||
|
@ -430,7 +431,7 @@ CLASS lcl_git_pack IMPLEMENTATION.
|
|||
lv_x TYPE x LENGTH 1.
|
||||
|
||||
|
||||
CASE is_object-type.
|
||||
CASE iv_type.
|
||||
WHEN lif_defs=>gc_type-commit.
|
||||
lv_type = '001'.
|
||||
WHEN lif_defs=>gc_type-tree.
|
||||
|
@ -443,7 +444,7 @@ CLASS lcl_git_pack IMPLEMENTATION.
|
|||
lcx_exception=>raise( 'Unexpected object type while encoding pack' ).
|
||||
ENDCASE.
|
||||
|
||||
lv_x4 = xstrlen( is_object-data ).
|
||||
lv_x4 = iv_length.
|
||||
DO 32 TIMES.
|
||||
GET BIT sy-index OF lv_x4 INTO lv_c.
|
||||
CONCATENATE lv_bits lv_c INTO lv_bits.
|
||||
|
@ -611,6 +612,7 @@ CLASS lcl_git_pack IMPLEMENTATION.
|
|||
|
||||
DATA: lv_string TYPE string,
|
||||
lv_word TYPE string,
|
||||
lv_length TYPE i,
|
||||
lv_trash TYPE string ##NEEDED,
|
||||
lt_string TYPE TABLE OF string.
|
||||
|
||||
|
@ -622,10 +624,13 @@ CLASS lcl_git_pack IMPLEMENTATION.
|
|||
SPLIT lv_string AT lif_defs=>gc_newline INTO TABLE lt_string.
|
||||
|
||||
LOOP AT lt_string ASSIGNING <lv_string>.
|
||||
IF NOT rs_commit-committer IS INITIAL.
|
||||
CONCATENATE rs_commit-body <lv_string> INTO rs_commit-body
|
||||
SEPARATED BY lif_defs=>gc_newline.
|
||||
ELSE.
|
||||
* IF NOT rs_commit-committer IS INITIAL.
|
||||
* CONCATENATE rs_commit-body <lv_string> INTO rs_commit-body
|
||||
* SEPARATED BY lif_defs=>gc_newline.
|
||||
* ELSE.
|
||||
lv_length = strlen( <lv_string> ) + 1.
|
||||
lv_string = lv_string+lv_length.
|
||||
|
||||
SPLIT <lv_string> AT space INTO lv_word lv_trash.
|
||||
CASE lv_word.
|
||||
WHEN 'tree'.
|
||||
|
@ -640,16 +645,20 @@ CLASS lcl_git_pack IMPLEMENTATION.
|
|||
rs_commit-author = <lv_string>+7.
|
||||
WHEN 'committer'.
|
||||
rs_commit-committer = <lv_string>+10.
|
||||
EXIT. " current loop
|
||||
WHEN OTHERS.
|
||||
ASSERT 0 = 1.
|
||||
ENDCASE.
|
||||
ENDIF.
|
||||
|
||||
* ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
rs_commit-body = lv_string+1.
|
||||
|
||||
* strip first newline
|
||||
IF strlen( rs_commit-body ) >= 2.
|
||||
rs_commit-body = rs_commit-body+2.
|
||||
ENDIF.
|
||||
* IF strlen( rs_commit-body ) >= 2.
|
||||
* rs_commit-body = rs_commit-body+2.
|
||||
* ENDIF.
|
||||
|
||||
IF rs_commit-author IS INITIAL
|
||||
OR rs_commit-committer IS INITIAL
|
||||
|
@ -682,24 +691,23 @@ CLASS lcl_git_pack IMPLEMENTATION.
|
|||
|
||||
METHOD delta.
|
||||
|
||||
DEFINE _eat_byte.
|
||||
lv_x = lv_delta(1).
|
||||
lv_delta = lv_delta+1.
|
||||
END-OF-DEFINITION.
|
||||
|
||||
DATA: lv_delta TYPE xstring,
|
||||
lv_base TYPE xstring,
|
||||
lv_result TYPE xstring,
|
||||
* lv_bitbyte TYPE ty_bitbyte,
|
||||
lv_offset TYPE i,
|
||||
lv_sha1 TYPE lif_defs=>ty_sha1,
|
||||
ls_object LIKE LINE OF ct_objects,
|
||||
lv_len TYPE i,
|
||||
lv_org TYPE x,
|
||||
* lv_i TYPE i,
|
||||
lv_x TYPE x.
|
||||
|
||||
FIELD-SYMBOLS: <ls_object> LIKE LINE OF ct_objects.
|
||||
|
||||
DEFINE _eat_byte.
|
||||
lv_x = lv_delta(1).
|
||||
lv_delta = lv_delta+1.
|
||||
END-OF-DEFINITION.
|
||||
|
||||
lv_delta = is_object-data.
|
||||
|
||||
|
@ -1027,24 +1035,33 @@ CLASS lcl_git_pack IMPLEMENTATION.
|
|||
|
||||
DATA: lv_sha1 TYPE x LENGTH 20,
|
||||
lv_adler32 TYPE lcl_hash=>ty_adler32,
|
||||
lv_len TYPE i,
|
||||
lv_compressed TYPE xstring,
|
||||
lv_xstring TYPE xstring.
|
||||
lv_xstring TYPE xstring,
|
||||
lv_objects_total TYPE i,
|
||||
lv_objects_processed TYPE i.
|
||||
|
||||
FIELD-SYMBOLS: <ls_object> LIKE LINE OF it_objects.
|
||||
|
||||
|
||||
rv_data = c_pack_start.
|
||||
|
||||
CONCATENATE rv_data c_version INTO rv_data IN BYTE MODE.
|
||||
|
||||
lv_len = lines( it_objects ).
|
||||
lv_xstring = lcl_convert=>int_to_xstring( iv_i = lv_len
|
||||
iv_length = 4 ).
|
||||
lv_xstring = lcl_convert=>int_to_xstring4( lines( it_objects ) ).
|
||||
CONCATENATE rv_data lv_xstring INTO rv_data IN BYTE MODE.
|
||||
|
||||
lv_objects_total = lines( it_objects ).
|
||||
|
||||
LOOP AT it_objects ASSIGNING <ls_object>.
|
||||
lv_xstring = type_and_length( <ls_object> ).
|
||||
|
||||
lv_objects_processed = sy-tabix.
|
||||
|
||||
cl_progress_indicator=>progress_indicate( i_text = |encoding objects &1% ( &2 of &3 )|
|
||||
i_processed = lv_objects_processed
|
||||
i_total = lv_objects_total ).
|
||||
|
||||
lv_xstring = type_and_length(
|
||||
iv_type = <ls_object>-type
|
||||
iv_length = xstrlen( <ls_object>-data ) ).
|
||||
CONCATENATE rv_data lv_xstring INTO rv_data IN BYTE MODE.
|
||||
|
||||
cl_abap_gzip=>compress_binary(
|
||||
|
|
|
@ -15,6 +15,10 @@ CLASS lcl_html_action_utils DEFINITION FINAL.
|
|||
IMPORTING iv_string TYPE clike
|
||||
RETURNING VALUE(rt_fields) TYPE tihttpnvp.
|
||||
|
||||
CLASS-METHODS parse_fields_upper_case_name
|
||||
IMPORTING iv_string TYPE clike
|
||||
RETURNING VALUE(rt_fields) TYPE tihttpnvp.
|
||||
|
||||
CLASS-METHODS add_field
|
||||
IMPORTING name TYPE string
|
||||
iv TYPE any
|
||||
|
@ -88,6 +92,11 @@ CLASS lcl_html_action_utils DEFINITION FINAL.
|
|||
ev_seed TYPE string
|
||||
RAISING lcx_exception.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CLASS-METHODS unescape
|
||||
IMPORTING iv_string TYPE string
|
||||
RETURNING VALUE(rv_string) TYPE string.
|
||||
|
||||
ENDCLASS. "lcl_html_action_utils DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -107,7 +116,43 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
|||
|
||||
METHOD parse_fields.
|
||||
|
||||
rt_fields = cl_http_utility=>if_http_utility~string_to_fields( |{ iv_string }| ).
|
||||
DATA: substrings TYPE stringtab,
|
||||
field LIKE LINE OF rt_fields.
|
||||
|
||||
FIELD-SYMBOLS: <substring> LIKE LINE OF substrings.
|
||||
|
||||
SPLIT iv_string AT '&' INTO TABLE substrings.
|
||||
|
||||
LOOP AT substrings ASSIGNING <substring>.
|
||||
|
||||
CLEAR: field.
|
||||
|
||||
field-name = substring_before( val = <substring>
|
||||
sub = '=' ).
|
||||
field-name = unescape( field-name ).
|
||||
|
||||
field-value = substring_after( val = <substring>
|
||||
sub = '=' ).
|
||||
field-value = unescape( field-value ).
|
||||
|
||||
INSERT field INTO TABLE rt_fields.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unescape.
|
||||
* do not use cl_http_utility as it does strange things with the encoding
|
||||
rv_string = iv_string.
|
||||
|
||||
* todo, more to be added here
|
||||
REPLACE ALL OCCURRENCES OF '%3F' IN rv_string WITH '?'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD parse_fields_upper_case_name.
|
||||
|
||||
rt_fields = parse_fields( iv_string ).
|
||||
field_keys_to_upper( CHANGING ct_fields = rt_fields ).
|
||||
|
||||
ENDMETHOD. " parse_fields.
|
||||
|
@ -175,8 +220,7 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
|||
|
||||
DATA: lt_fields TYPE tihttpnvp.
|
||||
|
||||
|
||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( |{ iv_string }| ).
|
||||
lt_fields = lcl_html_action_utils=>parse_fields( iv_string ).
|
||||
|
||||
get_field( EXPORTING name = 'TYPE' it = lt_fields CHANGING cv = ev_obj_type ).
|
||||
get_field( EXPORTING name = 'NAME' it = lt_fields CHANGING cv = ev_obj_name ).
|
||||
|
@ -194,7 +238,8 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
|||
METHOD dir_decode.
|
||||
|
||||
DATA: lt_fields TYPE tihttpnvp.
|
||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( |{ iv_string }| ).
|
||||
|
||||
lt_fields = lcl_html_action_utils=>parse_fields( iv_string ).
|
||||
get_field( EXPORTING name = 'PATH' it = lt_fields CHANGING cv = rv_path ).
|
||||
|
||||
ENDMETHOD. "dir_decode
|
||||
|
@ -232,7 +277,7 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
|||
ASSERT eg_file IS SUPPLIED OR eg_object IS SUPPLIED.
|
||||
|
||||
CLEAR: ev_key, eg_file, eg_object.
|
||||
lt_fields = parse_fields( iv_string ).
|
||||
lt_fields = parse_fields_upper_case_name( iv_string ).
|
||||
|
||||
get_field( EXPORTING name = 'KEY' it = lt_fields CHANGING cv = ev_key ).
|
||||
|
||||
|
@ -263,7 +308,7 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
|||
|
||||
DATA: lt_fields TYPE tihttpnvp.
|
||||
|
||||
lt_fields = parse_fields( iv_string ).
|
||||
lt_fields = parse_fields_upper_case_name( cl_http_utility=>unescape_url( |{ iv_string }| ) ).
|
||||
|
||||
get_field( EXPORTING name = 'TYPE' it = lt_fields CHANGING cv = rs_key-type ).
|
||||
get_field( EXPORTING name = 'VALUE' it = lt_fields CHANGING cv = rs_key-value ).
|
||||
|
@ -277,9 +322,12 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
|||
|
||||
|
||||
CONCATENATE LINES OF it_postdata INTO lv_string.
|
||||
|
||||
lv_string = cl_http_utility=>unescape_url( lv_string ).
|
||||
|
||||
rs_content = dbkey_decode( lv_string ).
|
||||
|
||||
lt_fields = parse_fields( lv_string ).
|
||||
lt_fields = parse_fields_upper_case_name( lv_string ).
|
||||
|
||||
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 ???
|
||||
|
@ -304,7 +352,7 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
|||
CONCATENATE LINES OF it_postdata INTO lv_string.
|
||||
REPLACE ALL OCCURRENCES OF lif_defs=>gc_crlf IN lv_string WITH lc_replace.
|
||||
REPLACE ALL OCCURRENCES OF lif_defs=>gc_newline IN lv_string WITH lc_replace.
|
||||
lt_fields = parse_fields( lv_string ).
|
||||
lt_fields = parse_fields_upper_case_name( lv_string ).
|
||||
|
||||
get_field( EXPORTING name = 'COMMITTER_NAME' it = lt_fields CHANGING cv = es_fields ).
|
||||
get_field( EXPORTING name = 'COMMITTER_EMAIL' it = lt_fields CHANGING cv = es_fields ).
|
||||
|
@ -317,15 +365,13 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
|||
ASSERT <body> IS ASSIGNED.
|
||||
REPLACE ALL OCCURRENCES OF lc_replace IN <body> WITH lif_defs=>gc_newline.
|
||||
|
||||
ASSERT es_fields IS NOT INITIAL.
|
||||
|
||||
ENDMETHOD. "parse_commit_request
|
||||
|
||||
METHOD decode_bg_update.
|
||||
|
||||
DATA: lt_fields TYPE tihttpnvp.
|
||||
|
||||
lt_fields = parse_fields( iv_getdata ).
|
||||
lt_fields = parse_fields_upper_case_name( iv_getdata ).
|
||||
|
||||
get_field( EXPORTING name = 'METHOD' it = lt_fields CHANGING cv = rs_fields ).
|
||||
get_field( EXPORTING name = 'USERNAME' it = lt_fields CHANGING cv = rs_fields ).
|
||||
|
@ -342,7 +388,7 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
|||
|
||||
DATA: lt_fields TYPE tihttpnvp.
|
||||
|
||||
lt_fields = parse_fields( iv_getdata ).
|
||||
lt_fields = parse_fields_upper_case_name( iv_getdata ).
|
||||
|
||||
get_field( EXPORTING name = 'KEY' it = lt_fields CHANGING cv = ev_key ).
|
||||
get_field( EXPORTING name = 'SEED' it = lt_fields CHANGING cv = ev_seed ).
|
||||
|
|
|
@ -501,8 +501,8 @@ CLASS lcl_http IMPLEMENTATION.
|
|||
METHOD is_local_system.
|
||||
|
||||
DATA: lv_host TYPE string,
|
||||
lt_list TYPE STANDARD TABLE OF icm_sinfo2 WITH DEFAULT KEY.
|
||||
|
||||
lt_list TYPE lif_defs=>ty_icm_sinfo2_tt,
|
||||
li_exit TYPE ref to lif_exit.
|
||||
|
||||
CALL FUNCTION 'ICM_GET_INFO2'
|
||||
TABLES
|
||||
|
@ -516,6 +516,9 @@ CLASS lcl_http IMPLEMENTATION.
|
|||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
li_exit = lcl_exit=>get_instance( ).
|
||||
li_exit->change_local_host( CHANGING ct_hosts = lt_list ).
|
||||
|
||||
FIND REGEX 'https?://([^/^:]*)' IN iv_url
|
||||
SUBMATCHES lv_host.
|
||||
|
||||
|
|
|
@ -112,8 +112,13 @@ CLASS lcl_news IMPLEMENTATION.
|
|||
|
||||
lv_last_seen = lcl_app=>user( )->get_repo_last_change_seen( lv_url ).
|
||||
|
||||
TRY.
|
||||
" Find changelog
|
||||
lt_remote = io_repo->get_files_remote( ).
|
||||
CATCH lcx_exception.
|
||||
RETURN.
|
||||
ENDTRY.
|
||||
|
||||
READ TABLE lt_remote ASSIGNING <file>
|
||||
WITH KEY path = lc_log_path filename = lc_log_filename.
|
||||
|
||||
|
|
|
@ -18,33 +18,28 @@ CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program.
|
|||
iv_language TYPE spras.
|
||||
|
||||
PROTECTED SECTION.
|
||||
METHODS deserialize_abap
|
||||
DATA: mo_object_oriented_object_fct TYPE REF TO lif_oo_object_fnc,
|
||||
mv_skip_testclass TYPE abap_bool.
|
||||
|
||||
METHODS:
|
||||
deserialize_abap
|
||||
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
||||
iv_package TYPE devclass
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS deserialize_docu
|
||||
RAISING lcx_exception,
|
||||
deserialize_docu
|
||||
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
||||
RAISING lcx_exception.
|
||||
DATA mo_object_oriented_object_fct TYPE REF TO lif_oo_object_fnc.
|
||||
PRIVATE SECTION.
|
||||
DATA mv_skip_testclass TYPE abap_bool.
|
||||
|
||||
METHODS deserialize_tpool
|
||||
RAISING lcx_exception,
|
||||
deserialize_tpool
|
||||
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS deserialize_sotr
|
||||
RAISING lcx_exception,
|
||||
deserialize_sotr
|
||||
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
||||
iv_package TYPE devclass
|
||||
RAISING lcx_exception.
|
||||
|
||||
|
||||
METHODS serialize_xml
|
||||
RAISING lcx_exception,
|
||||
serialize_xml
|
||||
IMPORTING io_xml TYPE REF TO lcl_xml_output
|
||||
RAISING lcx_exception.
|
||||
|
||||
|
||||
ENDCLASS. "lcl_object_dtel DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -366,6 +361,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
|
|||
iv_package = iv_package
|
||||
CHANGING
|
||||
is_properties = ls_vseoclass ).
|
||||
|
||||
mo_object_oriented_object_fct->generate_locals(
|
||||
is_key = ls_class_key
|
||||
iv_force = seox_true
|
||||
|
@ -385,7 +381,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
|
|||
is_key = ls_class_key
|
||||
it_descriptions = lt_descriptions ).
|
||||
|
||||
mo_object_oriented_object_fct->add_to_activation_list( is_item = ms_item ).
|
||||
mo_object_oriented_object_fct->add_to_activation_list( ms_item ).
|
||||
ENDMETHOD. "deserialize
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
|
@ -396,7 +392,7 @@ CLASS lcl_object_clas IMPLEMENTATION.
|
|||
super->constructor(
|
||||
is_item = is_item
|
||||
iv_language = iv_language ).
|
||||
mo_object_oriented_object_fct = lcl_oo_factory=>make( iv_object_type = ms_item-obj_type ).
|
||||
mo_object_oriented_object_fct = lcl_oo_factory=>make( ms_item-obj_type ).
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS. "lcl_object_CLAS IMPLEMENTATION
|
||||
|
@ -457,6 +453,7 @@ CLASS lcl_oo_class IMPLEMENTATION.
|
|||
lcx_exception=>raise( 'error from generate_locals' ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_oo_object_fnc~insert_text_pool.
|
||||
DATA: lv_cp TYPE program.
|
||||
|
||||
|
|
412
src/zabapgit_object_clas_new.prog.abap
Normal file
412
src/zabapgit_object_clas_new.prog.abap
Normal file
|
@ -0,0 +1,412 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include ZABAPGIT_OBJECT_CLAS_NEW
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
* todo: refactoring
|
||||
* todo: testing, possible from master branch via experimental switch
|
||||
|
||||
CLASS lcl_oo_class_new DEFINITION INHERITING FROM lcl_oo_class.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS:
|
||||
lif_oo_object_fnc~create REDEFINITION,
|
||||
lif_oo_object_fnc~generate_locals REDEFINITION,
|
||||
lif_oo_object_fnc~deserialize_source REDEFINITION.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CLASS-METHODS:
|
||||
update_report
|
||||
IMPORTING
|
||||
iv_program TYPE programm
|
||||
it_source TYPE string_table
|
||||
RETURNING
|
||||
VALUE(rv_updated) TYPE abap_bool,
|
||||
generate_classpool
|
||||
IMPORTING
|
||||
iv_name TYPE seoclsname
|
||||
RAISING
|
||||
lcx_exception,
|
||||
update_meta
|
||||
IMPORTING
|
||||
iv_name TYPE seoclsname
|
||||
iv_exposure TYPE seoexpose
|
||||
it_source TYPE rswsourcet
|
||||
RAISING
|
||||
lcx_exception,
|
||||
determine_method_include
|
||||
IMPORTING
|
||||
iv_name TYPE seoclsname
|
||||
iv_method TYPE seocpdname
|
||||
RETURNING
|
||||
VALUE(rv_program) TYPE programm
|
||||
RAISING
|
||||
lcx_exception,
|
||||
init_scanner
|
||||
IMPORTING
|
||||
it_source TYPE lif_defs=>ty_string_tt
|
||||
iv_name TYPE seoclsname
|
||||
RETURNING
|
||||
VALUE(ro_scanner) TYPE REF TO cl_oo_source_scanner_class.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_oo_class_new IMPLEMENTATION.
|
||||
|
||||
METHOD determine_method_include.
|
||||
|
||||
DATA: ls_mtdkey TYPE seocpdkey.
|
||||
|
||||
|
||||
ls_mtdkey-clsname = iv_name.
|
||||
ls_mtdkey-cpdname = iv_method.
|
||||
|
||||
cl_oo_classname_service=>get_method_include(
|
||||
EXPORTING
|
||||
mtdkey = ls_mtdkey
|
||||
RECEIVING
|
||||
result = rv_program
|
||||
EXCEPTIONS
|
||||
method_not_existing = 1 ).
|
||||
IF sy-subrc = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
CALL FUNCTION 'SEO_METHOD_GENERATE_INCLUDE'
|
||||
EXPORTING
|
||||
suppress_mtdkey_check = seox_true
|
||||
mtdkey = ls_mtdkey
|
||||
EXCEPTIONS
|
||||
not_existing = 1
|
||||
model_only = 2
|
||||
include_existing = 3
|
||||
method_imp_not_generated = 4
|
||||
method_imp_not_initialised = 5
|
||||
_internal_class_not_existing = 6
|
||||
_internal_method_overflow = 7
|
||||
cancelled = 8
|
||||
method_is_abstract_implemented = 9
|
||||
method_is_final_implemented = 10
|
||||
internal_error_insert_report = 11
|
||||
OTHERS = 12.
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from SEO_METHOD_GENERATE_INCLUDE' ).
|
||||
ENDIF.
|
||||
|
||||
rv_program = cl_oo_classname_service=>get_method_include( ls_mtdkey ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_oo_object_fnc~create.
|
||||
* same as in super class, but with "version = seoc_version_active"
|
||||
|
||||
CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE'
|
||||
EXPORTING
|
||||
devclass = iv_package
|
||||
overwrite = iv_overwrite
|
||||
version = seoc_version_active
|
||||
CHANGING
|
||||
class = is_properties
|
||||
EXCEPTIONS
|
||||
existing = 1
|
||||
is_interface = 2
|
||||
db_error = 3
|
||||
component_error = 4
|
||||
no_access = 5
|
||||
other = 6
|
||||
OTHERS = 7.
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from SEO_CLASS_CREATE_COMPLETE' ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD init_scanner.
|
||||
|
||||
ro_scanner = cl_oo_source_scanner_class=>create_class_scanner(
|
||||
clif_name = iv_name
|
||||
source = it_source ).
|
||||
ro_scanner->scan( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD update_report.
|
||||
|
||||
DATA: lt_old TYPE string_table.
|
||||
|
||||
READ REPORT iv_program INTO lt_old.
|
||||
ASSERT sy-subrc = 0. " include should have been created previously
|
||||
IF lt_old <> it_source.
|
||||
INSERT REPORT iv_program FROM it_source.
|
||||
ASSERT sy-subrc = 0.
|
||||
rv_updated = abap_true.
|
||||
ELSE.
|
||||
rv_updated = abap_false.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_oo_object_fnc~generate_locals.
|
||||
|
||||
DATA: lv_program TYPE programm.
|
||||
|
||||
|
||||
lv_program = cl_oo_classname_service=>get_ccdef_name( is_key-clsname ).
|
||||
update_report( iv_program = lv_program
|
||||
it_source = it_local_definitions ).
|
||||
|
||||
lv_program = cl_oo_classname_service=>get_ccimp_name( is_key-clsname ).
|
||||
update_report( iv_program = lv_program
|
||||
it_source = it_local_implementations ).
|
||||
|
||||
lv_program = cl_oo_classname_service=>get_ccmac_name( is_key-clsname ).
|
||||
update_report( iv_program = lv_program
|
||||
it_source = it_local_macros ).
|
||||
|
||||
IF lines( it_local_test_classes ) > 0.
|
||||
lv_program = cl_oo_classname_service=>get_ccau_name( is_key-clsname ).
|
||||
update_report( iv_program = lv_program
|
||||
it_source = it_local_test_classes ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD update_meta.
|
||||
|
||||
DATA: lo_update TYPE REF TO cl_oo_class_section_source,
|
||||
ls_clskey TYPE seoclskey,
|
||||
lv_scan_error TYPE seox_boolean.
|
||||
|
||||
|
||||
ls_clskey-clsname = iv_name.
|
||||
|
||||
CREATE OBJECT lo_update
|
||||
EXPORTING
|
||||
clskey = ls_clskey
|
||||
exposure = iv_exposure
|
||||
state = 'A'
|
||||
source = it_source
|
||||
suppress_constrctr_generation = seox_true
|
||||
EXCEPTIONS
|
||||
class_not_existing = 1
|
||||
read_source_error = 2
|
||||
OTHERS = 3.
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error instantiating CL_OO_CLASS_SECTION_SOURCE' ).
|
||||
ENDIF.
|
||||
|
||||
lo_update->set_dark_mode( seox_true ).
|
||||
TRY.
|
||||
CALL METHOD lo_update->('SET_AMDP_SUPPORT')
|
||||
EXPORTING
|
||||
enabled = abap_true.
|
||||
CATCH cx_sy_dyn_call_illegal_method.
|
||||
* AMDP not supported in this system, ignore error
|
||||
ENDTRY.
|
||||
lo_update->scan_section_source(
|
||||
RECEIVING
|
||||
scan_error = lv_scan_error
|
||||
EXCEPTIONS
|
||||
scan_abap_source_error = 1
|
||||
OTHERS = 2 ).
|
||||
IF sy-subrc <> 0 OR lv_scan_error = abap_true.
|
||||
lcx_exception=>raise( 'CLAS, error while scanning source' ).
|
||||
ENDIF.
|
||||
|
||||
* this will update the SEO* database tables
|
||||
lo_update->revert_scan_result( ).
|
||||
|
||||
IF iv_exposure = seoc_exposure_public.
|
||||
generate_classpool( iv_name ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD generate_classpool.
|
||||
|
||||
DATA: ls_clskey TYPE seoclskey.
|
||||
|
||||
ls_clskey-clsname = iv_name.
|
||||
|
||||
CALL FUNCTION 'SEO_CLASS_GENERATE_CLASSPOOL'
|
||||
EXPORTING
|
||||
clskey = ls_clskey
|
||||
suppress_corr = seox_true
|
||||
EXCEPTIONS
|
||||
not_existing = 1
|
||||
model_only = 2
|
||||
class_pool_not_generated = 3
|
||||
class_stment_not_generated = 4
|
||||
locals_not_generated = 5
|
||||
macros_not_generated = 6
|
||||
public_sec_not_generated = 7
|
||||
protected_sec_not_generated = 8
|
||||
private_sec_not_generated = 9
|
||||
typeref_not_generated = 10
|
||||
class_pool_not_initialised = 11
|
||||
class_stment_not_initialised = 12
|
||||
locals_not_initialised = 13
|
||||
macros_not_initialised = 14
|
||||
public_sec_not_initialised = 15
|
||||
protected_sec_not_initialised = 16
|
||||
private_sec_not_initialised = 17
|
||||
typeref_not_initialised = 18
|
||||
_internal_class_overflow = 19
|
||||
OTHERS = 20.
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from SEO_CLASS_GENERATE_CLASSPOOL' ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_oo_object_fnc~deserialize_source.
|
||||
|
||||
DATA: lv_updated TYPE abap_bool,
|
||||
lv_program TYPE program,
|
||||
lo_scanner TYPE REF TO cl_oo_source_scanner_class,
|
||||
lt_methods TYPE cl_oo_source_scanner_class=>type_method_implementations,
|
||||
lv_method LIKE LINE OF lt_methods,
|
||||
lt_source TYPE seop_source_string.
|
||||
|
||||
|
||||
lo_scanner = init_scanner(
|
||||
it_source = it_source
|
||||
iv_name = is_key-clsname ).
|
||||
|
||||
* public
|
||||
lt_source = lo_scanner->get_public_section_source( ).
|
||||
lv_program = cl_oo_classname_service=>get_pubsec_name( is_key-clsname ).
|
||||
lv_updated = update_report( iv_program = lv_program
|
||||
it_source = lt_source ).
|
||||
IF lv_updated = abap_true.
|
||||
update_meta( iv_name = is_key-clsname
|
||||
iv_exposure = seoc_exposure_public
|
||||
it_source = lt_source ).
|
||||
ENDIF.
|
||||
|
||||
* protected
|
||||
lt_source = lo_scanner->get_protected_section_source( ).
|
||||
lv_program = cl_oo_classname_service=>get_prosec_name( is_key-clsname ).
|
||||
lv_updated = update_report( iv_program = lv_program
|
||||
it_source = lt_source ).
|
||||
IF lv_updated = abap_true.
|
||||
update_meta( iv_name = is_key-clsname
|
||||
iv_exposure = seoc_exposure_protected
|
||||
it_source = lt_source ).
|
||||
ENDIF.
|
||||
|
||||
* private
|
||||
lt_source = lo_scanner->get_private_section_source( ).
|
||||
lv_program = cl_oo_classname_service=>get_prisec_name( is_key-clsname ).
|
||||
lv_updated = update_report( iv_program = lv_program
|
||||
it_source = lt_source ).
|
||||
IF lv_updated = abap_true.
|
||||
update_meta( iv_name = is_key-clsname
|
||||
iv_exposure = seoc_exposure_private
|
||||
it_source = lt_source ).
|
||||
ENDIF.
|
||||
|
||||
* methods
|
||||
lt_methods = lo_scanner->get_method_implementations( ).
|
||||
|
||||
LOOP AT lt_methods INTO lv_method.
|
||||
TRY.
|
||||
lt_source = lo_scanner->get_method_impl_source( lv_method ).
|
||||
CATCH cx_oo_clif_component.
|
||||
lcx_exception=>raise( 'error from GET_METHOD_IMPL_SOURCE' ).
|
||||
ENDTRY.
|
||||
lv_program = determine_method_include(
|
||||
iv_name = is_key-clsname
|
||||
iv_method = lv_method ).
|
||||
|
||||
update_report(
|
||||
iv_program = lv_program
|
||||
it_source = lt_source ).
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_object_clas_new DEFINITION INHERITING FROM lcl_object_clas.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS: constructor
|
||||
IMPORTING
|
||||
is_item TYPE lif_defs=>ty_item
|
||||
iv_language TYPE spras.
|
||||
|
||||
PROTECTED SECTION.
|
||||
METHODS:
|
||||
deserialize_abap REDEFINITION.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_object_clas_new IMPLEMENTATION.
|
||||
|
||||
METHOD constructor.
|
||||
super->constructor( is_item = is_item
|
||||
iv_language = iv_language ).
|
||||
|
||||
CREATE OBJECT mo_object_oriented_object_fct TYPE lcl_oo_class_new.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD deserialize_abap.
|
||||
* same as in lcl_object_clas, but without "mo_object_oriented_object_fct->add_to_activation_list"
|
||||
|
||||
DATA: ls_vseoclass TYPE vseoclass,
|
||||
lt_source TYPE seop_source_string,
|
||||
lt_local_definitions TYPE seop_source_string,
|
||||
lt_local_implementations TYPE seop_source_string,
|
||||
lt_local_macros TYPE seop_source_string,
|
||||
lt_test_classes TYPE seop_source_string,
|
||||
lt_descriptions TYPE lif_defs=>ty_seocompotx_tt,
|
||||
ls_class_key TYPE seoclskey.
|
||||
|
||||
|
||||
lt_source = mo_files->read_abap( ).
|
||||
|
||||
lt_local_definitions = mo_files->read_abap( iv_extra = 'locals_def'
|
||||
iv_error = abap_false ). "#EC NOTEXT
|
||||
|
||||
lt_local_implementations = mo_files->read_abap( iv_extra = 'locals_imp'
|
||||
iv_error = abap_false ). "#EC NOTEXT
|
||||
|
||||
lt_local_macros = mo_files->read_abap( iv_extra = 'macros'
|
||||
iv_error = abap_false ). "#EC NOTEXT
|
||||
|
||||
lt_test_classes = mo_files->read_abap( iv_extra = 'testclasses'
|
||||
iv_error = abap_false ). "#EC NOTEXT
|
||||
|
||||
ls_class_key-clsname = ms_item-obj_name.
|
||||
|
||||
io_xml->read( EXPORTING iv_name = 'VSEOCLASS'
|
||||
CHANGING cg_data = ls_vseoclass ).
|
||||
|
||||
mo_object_oriented_object_fct->create(
|
||||
EXPORTING
|
||||
iv_package = iv_package
|
||||
CHANGING
|
||||
is_properties = ls_vseoclass ).
|
||||
|
||||
mo_object_oriented_object_fct->generate_locals(
|
||||
is_key = ls_class_key
|
||||
iv_force = seox_true
|
||||
it_local_definitions = lt_local_definitions
|
||||
it_local_implementations = lt_local_implementations
|
||||
it_local_macros = lt_local_macros
|
||||
it_local_test_classes = lt_test_classes ).
|
||||
|
||||
mo_object_oriented_object_fct->deserialize_source(
|
||||
is_key = ls_class_key
|
||||
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_class_key
|
||||
it_descriptions = lt_descriptions ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
22
src/zabapgit_object_clas_new.prog.xml
Normal file
22
src/zabapgit_object_clas_new.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_CLAS_NEW</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_CLAS_NEW</ENTRY>
|
||||
<LENGTH>32</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
213
src/zabapgit_object_cmpt.prog.abap
Normal file
213
src/zabapgit_object_cmpt.prog.abap
Normal file
|
@ -0,0 +1,213 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include ZABAPGIT_OBJECT_CMPT
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_object_cmpt DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS:
|
||||
constructor
|
||||
IMPORTING
|
||||
is_item TYPE lif_defs=>ty_item
|
||||
iv_language TYPE spras.
|
||||
|
||||
INTERFACES lif_object.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA: mo_cmp_db TYPE REF TO object.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_object_cmpt IMPLEMENTATION.
|
||||
|
||||
METHOD constructor.
|
||||
|
||||
super->constructor( is_item = is_item
|
||||
iv_language = iv_language ).
|
||||
|
||||
TRY.
|
||||
CALL METHOD ('CL_CMP_TEMPLATE')=>('S_GET_DB_ACCESS')
|
||||
RECEIVING
|
||||
r_ref_db_access = mo_cmp_db.
|
||||
|
||||
CATCH cx_root.
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~has_changed_since.
|
||||
|
||||
rv_changed = abap_true.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~changed_by.
|
||||
|
||||
DATA: mi_cmp_template TYPE REF TO object.
|
||||
|
||||
TRY.
|
||||
CALL METHOD ('CL_CMP_TEMPLATE')=>('S_CREATE_FROM_DB')
|
||||
EXPORTING
|
||||
i_name = |{ ms_item-obj_name }|
|
||||
i_version = 'A'
|
||||
RECEIVING
|
||||
r_ref_template = mi_cmp_template.
|
||||
|
||||
CALL METHOD mi_cmp_template->('IF_CMP_TEMPLATE_EDIT~GET_CHANGE_USER')
|
||||
RECEIVING
|
||||
r_user = rv_user.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'CMPT not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~get_metadata.
|
||||
|
||||
rs_metadata = get_metadata( ).
|
||||
rs_metadata-delete_tadir = abap_true.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~exists.
|
||||
|
||||
DATA: name TYPE c LENGTH 30.
|
||||
|
||||
name = ms_item-obj_name.
|
||||
|
||||
TRY.
|
||||
CALL METHOD ('CL_CMP_TEMPLATE')=>('S_TEMPLATE_EXISTS')
|
||||
EXPORTING
|
||||
i_name = name
|
||||
i_version = 'A'
|
||||
RECEIVING
|
||||
r_flg_exists = rv_bool.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'CMPT not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~serialize.
|
||||
|
||||
DATA: lr_template TYPE REF TO data.
|
||||
FIELD-SYMBOLS: <template> TYPE any.
|
||||
|
||||
TRY.
|
||||
CREATE DATA lr_template TYPE ('IF_CMP_TEMPLATE_DB=>TYP_TEMPLATE').
|
||||
ASSIGN lr_template->* TO <template>.
|
||||
|
||||
CALL METHOD mo_cmp_db->('IF_CMP_TEMPLATE_DB~READ_TEMPLATE')
|
||||
EXPORTING
|
||||
i_name = |{ ms_item-obj_name }|
|
||||
i_version = 'A'
|
||||
RECEIVING
|
||||
r_template = <template>.
|
||||
|
||||
io_xml->add( iv_name = 'CMPT'
|
||||
ig_data = <template> ).
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'CMPT not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~deserialize.
|
||||
|
||||
DATA: lr_template TYPE REF TO data.
|
||||
FIELD-SYMBOLS: <template> TYPE any.
|
||||
|
||||
TRY.
|
||||
CREATE DATA lr_template TYPE ('IF_CMP_TEMPLATE_DB=>TYP_TEMPLATE').
|
||||
ASSIGN lr_template->* TO <template>.
|
||||
|
||||
io_xml->read(
|
||||
EXPORTING
|
||||
iv_name = 'CMPT'
|
||||
CHANGING
|
||||
cg_data = <template> ).
|
||||
|
||||
CALL METHOD mo_cmp_db->('IF_CMP_TEMPLATE_DB~SAVE_TEMPLATE')
|
||||
EXPORTING
|
||||
i_template_db = <template>
|
||||
i_flg_header = abap_true
|
||||
i_flg_lines = abap_true.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'CMPT not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
CALL FUNCTION 'RS_CORR_INSERT'
|
||||
EXPORTING
|
||||
object = ms_item-obj_name
|
||||
object_class = ms_item-obj_type
|
||||
mode = 'I'
|
||||
global_lock = abap_true
|
||||
devclass = iv_package
|
||||
master_language = mv_language
|
||||
EXCEPTIONS
|
||||
cancelled = 1
|
||||
permission_failure = 2
|
||||
unknown_objectclass = 3
|
||||
OTHERS = 4.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from RS_CORR_INSERT, CMPT' ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~delete.
|
||||
|
||||
DATA: deleted TYPE abap_bool.
|
||||
|
||||
TRY.
|
||||
CALL METHOD mo_cmp_db->('IF_CMP_TEMPLATE_DB~DELETE_TEMPLATE')
|
||||
EXPORTING
|
||||
i_name = |{ ms_item-obj_name }|
|
||||
i_version = 'A'
|
||||
i_flg_header = abap_true
|
||||
i_flg_lines = abap_true
|
||||
RECEIVING
|
||||
r_flg_deleted = deleted.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'CMPT not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
IF deleted = abap_false.
|
||||
lcx_exception=>raise( |Error deleting CMPT { ms_item-obj_name }| ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD lif_object~jump.
|
||||
|
||||
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||
EXPORTING
|
||||
operation = 'SHOW'
|
||||
object_name = ms_item-obj_name
|
||||
object_type = ms_item-obj_type
|
||||
EXCEPTIONS
|
||||
not_executed = 1
|
||||
invalid_object_type = 2
|
||||
OTHERS = 3.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( |Error from RS_TOOL_ACCESS, CMPT| ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
|
||||
CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
22
src/zabapgit_object_cmpt.prog.xml
Normal file
22
src/zabapgit_object_cmpt.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_CMPT</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_CMPT</ENTRY>
|
||||
<LENGTH>28</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -32,8 +32,42 @@ CLASS lcl_object_ddls IMPLEMENTATION.
|
|||
ENDMETHOD. "lif_object~has_changed_since
|
||||
|
||||
METHOD lif_object~changed_by.
|
||||
* todo
|
||||
|
||||
DATA: lv_state TYPE objstate,
|
||||
li_ddl TYPE REF TO object,
|
||||
lr_data TYPE REF TO data.
|
||||
|
||||
FIELD-SYMBOLS: <ls_data> TYPE any,
|
||||
<lv_field> TYPE any.
|
||||
|
||||
|
||||
CREATE DATA lr_data TYPE ('DDDDLSRCV').
|
||||
ASSIGN lr_data->* TO <ls_data>.
|
||||
|
||||
|
||||
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
|
||||
RECEIVING
|
||||
handler = li_ddl.
|
||||
|
||||
TRY.
|
||||
CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~READ')
|
||||
EXPORTING
|
||||
name = ms_item-obj_name
|
||||
get_state = 'A'
|
||||
IMPORTING
|
||||
ddddlsrcv_wa = <ls_data>.
|
||||
|
||||
ASSIGN COMPONENT 'AS4USER' OF STRUCTURE <ls_data> TO <lv_field>.
|
||||
IF sy-subrc = 0.
|
||||
rv_user = <lv_field>.
|
||||
ENDIF.
|
||||
CATCH cx_root.
|
||||
ENDTRY.
|
||||
|
||||
IF rv_user IS INITIAL.
|
||||
rv_user = c_user_unknown.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "lif_object~changed_by
|
||||
|
||||
METHOD lif_object~get_metadata.
|
||||
|
@ -108,7 +142,7 @@ CLASS lcl_object_ddls IMPLEMENTATION.
|
|||
EXPORTING
|
||||
name = ms_item-obj_name.
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'DDLS error' ).
|
||||
lcx_exception=>raise( 'DDLS error deleting' ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD. "delete
|
||||
|
@ -137,7 +171,7 @@ CLASS lcl_object_ddls IMPLEMENTATION.
|
|||
IMPORTING
|
||||
ddddlsrcv_wa = <ls_data>.
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'DDLS error' ).
|
||||
lcx_exception=>raise( 'DDLS error reading' ).
|
||||
ENDTRY.
|
||||
|
||||
ASSIGN COMPONENT 'AS4USER' OF STRUCTURE <ls_data> TO <lv_field>.
|
||||
|
@ -199,7 +233,7 @@ CLASS lcl_object_ddls IMPLEMENTATION.
|
|||
devclass = iv_package
|
||||
prid = 0.
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'DDLS error' ).
|
||||
lcx_exception=>raise( 'DDLS error writing TADIR' ).
|
||||
ENDTRY.
|
||||
|
||||
lcl_objects_activation=>add_item( ms_item ).
|
||||
|
|
205
src/zabapgit_object_dial.prog.abap
Normal file
205
src/zabapgit_object_dial.prog.abap
Normal file
|
@ -0,0 +1,205 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include zabapgit_object_dial
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
|
||||
CLASS lcl_object_dial DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
INTERFACES lif_object.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES: BEGIN OF ty_dialog_module,
|
||||
tdct TYPE tdct,
|
||||
dia_pars TYPE STANDARD TABLE OF diapar
|
||||
WITH NON-UNIQUE DEFAULT KEY,
|
||||
END OF ty_dialog_module.
|
||||
|
||||
METHODS:
|
||||
_read_tdct
|
||||
RETURNING
|
||||
VALUE(rs_tdct) TYPE tdct.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_object_dial IMPLEMENTATION.
|
||||
|
||||
METHOD lif_object~has_changed_since.
|
||||
|
||||
rv_changed = abap_true.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~changed_by.
|
||||
|
||||
rv_user = c_user_unknown.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~get_metadata.
|
||||
|
||||
rs_metadata = get_metadata( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~exists.
|
||||
|
||||
DATA: ls_tdct TYPE tdct.
|
||||
|
||||
ls_tdct = _read_tdct( ).
|
||||
|
||||
rv_bool = boolc( ls_tdct IS NOT INITIAL ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~serialize.
|
||||
|
||||
DATA: ls_dialog_module TYPE ty_dialog_module.
|
||||
|
||||
ls_dialog_module-tdct = _read_tdct( ).
|
||||
|
||||
SELECT * FROM diapar
|
||||
INTO TABLE ls_dialog_module-dia_pars
|
||||
WHERE dnam = ls_dialog_module-tdct-dnam.
|
||||
|
||||
io_xml->add( iv_name = 'DIAL'
|
||||
ig_data = ls_dialog_module ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~deserialize.
|
||||
|
||||
DATA: ls_dialog_module TYPE ty_dialog_module.
|
||||
|
||||
io_xml->read(
|
||||
EXPORTING
|
||||
iv_name = 'DIAL'
|
||||
CHANGING
|
||||
cg_data = ls_dialog_module ).
|
||||
|
||||
CALL FUNCTION 'RS_DIALOG_CREATE'
|
||||
EXPORTING
|
||||
dialogname = ls_dialog_module-tdct-dnam
|
||||
dynpronumber = ls_dialog_module-tdct-dynr
|
||||
programname = ls_dialog_module-tdct-prog
|
||||
suppress_corr_check = abap_false
|
||||
* It seems that dia_par parameter doesn't do anything, but we can't omit it
|
||||
* Parameters are inserted below
|
||||
TABLES
|
||||
dia_par = ls_dialog_module-dia_pars
|
||||
EXCEPTIONS
|
||||
dialog_already_exists = 1
|
||||
invalid_name = 2
|
||||
OTHERS = 3.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( |Error deserializing dialogmodule { ms_item-obj_name }| ).
|
||||
ENDIF.
|
||||
|
||||
" It seems that there's no API for diapar, therefore we manipulate it directly
|
||||
INSERT diapar FROM TABLE ls_dialog_module-dia_pars.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~delete.
|
||||
|
||||
DATA: ls_bcdata TYPE bdcdata,
|
||||
lt_bcdata TYPE STANDARD TABLE OF bdcdata.
|
||||
|
||||
ls_bcdata-program = 'SAPMSDIA'.
|
||||
ls_bcdata-dynpro = '1010'.
|
||||
ls_bcdata-dynbegin = 'X'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'DIAPAR-DNAM'.
|
||||
ls_bcdata-fval = ms_item-obj_name.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'RS38L-PARM'.
|
||||
ls_bcdata-fval = abap_true.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'BDC_OKCODE'.
|
||||
ls_bcdata-fval = '=DELF'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-program = 'SAPLSPO1'.
|
||||
ls_bcdata-dynpro = '0100'.
|
||||
ls_bcdata-dynbegin = 'X'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'BDC_OKCODE'.
|
||||
ls_bcdata-fval = '=YES'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
ls_bcdata-program = 'SAPMSDIA'.
|
||||
ls_bcdata-dynpro = '1010'.
|
||||
ls_bcdata-dynbegin = 'X'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'BDC_OKCODE'.
|
||||
ls_bcdata-fval = '=BACK'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
|
||||
EXPORTING
|
||||
tcode = 'SE35'
|
||||
mode_val = 'E'
|
||||
TABLES
|
||||
using_tab = lt_bcdata
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from ABAP4_CALL_TRANSACTION, SE35' ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD lif_object~jump.
|
||||
|
||||
DATA: objectname TYPE tdct-dnam.
|
||||
|
||||
objectname = ms_item-obj_name.
|
||||
|
||||
CALL FUNCTION 'RS_DIALOG_SHOW'
|
||||
EXPORTING
|
||||
objectname = objectname
|
||||
type = 'VW'
|
||||
EXCEPTIONS
|
||||
object_not_found = 1
|
||||
OTHERS = 2.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( |Error from RS_DIALOG_SHOW, DIAL| ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
|
||||
CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD _read_tdct.
|
||||
|
||||
DATA: dnam TYPE tdct-dnam.
|
||||
|
||||
dnam = ms_item-obj_name.
|
||||
|
||||
SELECT SINGLE * FROM tdct
|
||||
INTO rs_tdct
|
||||
WHERE dnam = dnam.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
25
src/zabapgit_object_dial.prog.xml
Normal file
25
src/zabapgit_object_dial.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_DIAL</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_object_dial</ENTRY>
|
||||
<LENGTH>20</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -21,7 +21,7 @@ CLASS lcl_object_doct DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
|||
END OF ty_data.
|
||||
|
||||
METHODS: read
|
||||
RETURNING value(rs_data) TYPE ty_data.
|
||||
RETURNING VALUE(rs_data) TYPE ty_data.
|
||||
|
||||
ENDCLASS. "lcl_object_msag DEFINITION
|
||||
|
||||
|
@ -65,6 +65,9 @@ CLASS lcl_object_doct IMPLEMENTATION.
|
|||
|
||||
METHOD lif_object~changed_by.
|
||||
rv_user = read( )-head-tdluser.
|
||||
IF rv_user IS INITIAL.
|
||||
rv_user = c_user_unknown.
|
||||
ENDIF.
|
||||
ENDMETHOD. "lif_object~changed_by
|
||||
|
||||
METHOD lif_object~exists.
|
||||
|
@ -85,7 +88,48 @@ CLASS lcl_object_doct IMPLEMENTATION.
|
|||
|
||||
METHOD lif_object~jump.
|
||||
|
||||
lcx_exception=>raise( 'todo, jump DOCT' ).
|
||||
DATA: ls_dokentry TYPE dokentry,
|
||||
ls_bcdata TYPE bdcdata,
|
||||
lt_bcdata TYPE STANDARD TABLE OF bdcdata.
|
||||
|
||||
" We need to modify dokentry directly, otherwise
|
||||
" Batch Input on SE61 wouldn't work because it stores
|
||||
" the last seen Document Class in this table. There's
|
||||
" no standard function to do this. SE61 does this
|
||||
" directly in its dialog modules
|
||||
ls_dokentry-username = sy-uname.
|
||||
ls_dokentry-langu = sy-langu.
|
||||
ls_dokentry-class = c_id.
|
||||
MODIFY dokentry FROM ls_dokentry.
|
||||
|
||||
ls_bcdata-program = 'SAPMSDCU'.
|
||||
ls_bcdata-dynpro = '0100'.
|
||||
ls_bcdata-dynbegin = 'X'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'RSDCU-OBJECT7'.
|
||||
ls_bcdata-fval = ms_item-obj_name.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'BDC_OKCODE'.
|
||||
ls_bcdata-fval = '=SHOW'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
|
||||
STARTING NEW TASK 'GIT'
|
||||
EXPORTING
|
||||
tcode = 'SE61'
|
||||
mode_val = 'E'
|
||||
TABLES
|
||||
using_tab = lt_bcdata
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from ABAP4_CALL_TRANSACTION, DOCT' ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "jump
|
||||
|
||||
|
|
|
@ -87,7 +87,7 @@ CLASS lcl_object_docv IMPLEMENTATION.
|
|||
|
||||
METHOD lif_object~jump.
|
||||
|
||||
lcx_exception=>raise( 'todo, jump DOCT' ).
|
||||
lcx_exception=>raise( 'todo, jump DOCV' ).
|
||||
|
||||
ENDMETHOD. "jump
|
||||
|
||||
|
|
|
@ -168,6 +168,10 @@ CLASS lcl_object_doma IMPLEMENTATION.
|
|||
CLEAR ls_dd01v-masklen.
|
||||
ENDIF.
|
||||
|
||||
SORT lt_dd07v BY
|
||||
valpos ASCENDING
|
||||
ddlanguage ASCENDING.
|
||||
|
||||
io_xml->add( iv_name = 'DD01V'
|
||||
ig_data = ls_dd01v ).
|
||||
io_xml->add( iv_name = 'DD07V_TAB'
|
||||
|
@ -278,7 +282,7 @@ CLASS lcl_object_doma IMPLEMENTATION.
|
|||
|
||||
SORT lt_i18n_langs ASCENDING.
|
||||
SORT lt_dd01_texts BY ddlanguage ASCENDING.
|
||||
SORT lt_dd07_texts BY ddlanguage ASCENDING.
|
||||
SORT lt_dd07_texts BY valpos ASCENDING ddlanguage ASCENDING.
|
||||
|
||||
IF lines( lt_i18n_langs ) > 0.
|
||||
io_xml->add( iv_name = 'I18N_LANGS'
|
||||
|
|
|
@ -154,7 +154,7 @@ CLASS lcl_object_dtel IMPLEMENTATION.
|
|||
ON tparat~paramid = tpara~paramid AND
|
||||
tparat~sprache = mv_language
|
||||
INTO ls_tpara
|
||||
WHERE tpara~paramid = ls_dd04v-memoryid.
|
||||
WHERE tpara~paramid = ls_dd04v-memoryid. "#EC CI_BUFFJOIN
|
||||
ENDIF.
|
||||
|
||||
CLEAR: ls_dd04v-as4user,
|
||||
|
|
|
@ -131,6 +131,133 @@ CLASS lcl_object_enho_wdyc IMPLEMENTATION.
|
|||
|
||||
ENDCLASS. "lcl_object_enho_wdyconf IMPLEMENTATION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_object_enho_wdyconf DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
*
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_object_enho_wdyn DEFINITION.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS: constructor
|
||||
IMPORTING
|
||||
is_item TYPE lif_defs=>ty_item
|
||||
io_files TYPE REF TO lcl_objects_files.
|
||||
INTERFACES: lif_object_enho.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA: ms_item TYPE lif_defs=>ty_item,
|
||||
mo_files TYPE REF TO lcl_objects_files.
|
||||
|
||||
ENDCLASS. "lcl_object_enho_wdyconf DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_object_enho_wdyconf IMPLEMENTATION
|
||||
*----------------------------------------------------------------------*
|
||||
*
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_object_enho_wdyn IMPLEMENTATION.
|
||||
|
||||
METHOD constructor.
|
||||
ms_item = is_item.
|
||||
mo_files = io_files.
|
||||
ENDMETHOD. "constructor
|
||||
|
||||
METHOD lif_object_enho~deserialize.
|
||||
|
||||
DATA: ls_enh_data TYPE enhwdyn,
|
||||
li_tool TYPE REF TO if_enh_tool,
|
||||
lo_wdyn TYPE REF TO cl_enh_tool_wdy,
|
||||
tool_type TYPE enhtooltype,
|
||||
package TYPE devclass.
|
||||
|
||||
FIELD-SYMBOLS: <controller_data> TYPE enhwdyc,
|
||||
<view_data> TYPE enhwdyv.
|
||||
|
||||
io_xml->read(
|
||||
EXPORTING
|
||||
iv_name = 'TOOL'
|
||||
CHANGING
|
||||
cg_data = tool_type ).
|
||||
|
||||
io_xml->read(
|
||||
EXPORTING
|
||||
iv_name = 'COMPONENT_DATA'
|
||||
CHANGING
|
||||
cg_data = ls_enh_data ).
|
||||
|
||||
package = iv_package.
|
||||
|
||||
TRY.
|
||||
cl_enh_factory=>create_enhancement(
|
||||
EXPORTING
|
||||
enhname = |{ ms_item-obj_name }|
|
||||
enhtype = ''
|
||||
enhtooltype = tool_type
|
||||
IMPORTING
|
||||
enhancement = li_tool
|
||||
CHANGING
|
||||
devclass = package ).
|
||||
|
||||
lo_wdyn ?= li_tool.
|
||||
|
||||
lo_wdyn->initialize( ls_enh_data-component_name ).
|
||||
|
||||
lo_wdyn->set_component_data( ls_enh_data-component_data ).
|
||||
|
||||
LOOP AT ls_enh_data-controller_data ASSIGNING <controller_data>.
|
||||
|
||||
lo_wdyn->set_controller_data( p_controller_name = <controller_data>-controller_name
|
||||
p_enh_data = <controller_data> ).
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
LOOP AT ls_enh_data-view_data ASSIGNING <view_data>.
|
||||
|
||||
lo_wdyn->set_view_data( p_view_name = <view_data>-view_name
|
||||
p_enh_data = <view_data> ).
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
lo_wdyn->if_enh_object~save( ).
|
||||
lo_wdyn->if_enh_object~unlock( ).
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( |error deserializing ENHO wdyn { ms_item-obj_name }| ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD. "lif_object_enho~deserialize
|
||||
|
||||
METHOD lif_object_enho~serialize.
|
||||
|
||||
DATA: lo_wdyn TYPE REF TO cl_enh_tool_wdy,
|
||||
component_name TYPE wdy_component_name,
|
||||
ls_enh_data TYPE enhwdyn.
|
||||
|
||||
lo_wdyn ?= ii_enh_tool.
|
||||
|
||||
component_name = lo_wdyn->get_component_name( ).
|
||||
|
||||
TRY.
|
||||
lo_wdyn->get_all_data_for_comp(
|
||||
EXPORTING
|
||||
p_component_name = component_name
|
||||
IMPORTING
|
||||
p_enh_data = ls_enh_data ).
|
||||
|
||||
io_xml->add( iv_name = 'TOOL'
|
||||
ig_data = ii_enh_tool->get_tool( ) ).
|
||||
|
||||
io_xml->add( iv_name = 'COMPONENT_DATA'
|
||||
ig_data = ls_enh_data ).
|
||||
|
||||
CATCH cx_enh_not_found.
|
||||
lcx_exception=>raise( |error serializing ENHO wdyn { ms_item-obj_name }| ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD. "lif_object_enho~serialize
|
||||
|
||||
ENDCLASS. "lcl_object_enho_wdyconf IMPLEMENTATION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_object_enho_clif DEFINITION
|
||||
|
@ -159,7 +286,6 @@ CLASS lcl_object_enho_clif DEFINITION.
|
|||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS. "lcl_object_enho_clif DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_object_enho_clif IMPLEMENTATION
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -873,6 +999,136 @@ CLASS lcl_object_enho_class IMPLEMENTATION.
|
|||
|
||||
ENDCLASS. "lcl_object_enho_class IMPLEMENTATION
|
||||
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_object_enho_wdyconf DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
*
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_object_enho_fugr DEFINITION.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS: constructor
|
||||
IMPORTING
|
||||
is_item TYPE lif_defs=>ty_item
|
||||
io_files TYPE REF TO lcl_objects_files.
|
||||
INTERFACES: lif_object_enho.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA: ms_item TYPE lif_defs=>ty_item,
|
||||
mo_files TYPE REF TO lcl_objects_files.
|
||||
|
||||
ENDCLASS. "lcl_object_enho_wdyconf DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_object_enho_wdyconf IMPLEMENTATION
|
||||
*----------------------------------------------------------------------*
|
||||
*
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_object_enho_fugr IMPLEMENTATION.
|
||||
|
||||
METHOD constructor.
|
||||
ms_item = is_item.
|
||||
mo_files = io_files.
|
||||
ENDMETHOD. "constructor
|
||||
|
||||
METHOD lif_object_enho~deserialize.
|
||||
|
||||
DATA: lo_fugrdata TYPE REF TO cl_enh_tool_fugr,
|
||||
ls_enha_data TYPE enhfugrdata,
|
||||
li_tool TYPE REF TO if_enh_tool,
|
||||
tool TYPE enhtooltype,
|
||||
lv_package TYPE devclass.
|
||||
|
||||
FIELD-SYMBOLS: <fuba> TYPE enhfugrfuncdata.
|
||||
|
||||
io_xml->read(
|
||||
EXPORTING
|
||||
iv_name = 'TOOL'
|
||||
CHANGING
|
||||
cg_data = tool ).
|
||||
|
||||
io_xml->read(
|
||||
EXPORTING
|
||||
iv_name = 'FUGRDATA'
|
||||
CHANGING
|
||||
cg_data = ls_enha_data ).
|
||||
|
||||
lv_package = iv_package.
|
||||
|
||||
TRY.
|
||||
cl_enh_factory=>create_enhancement(
|
||||
EXPORTING
|
||||
enhname = |{ ms_item-obj_name }|
|
||||
enhtype = ''
|
||||
enhtooltype = tool
|
||||
IMPORTING
|
||||
enhancement = li_tool
|
||||
CHANGING
|
||||
devclass = lv_package ).
|
||||
|
||||
lo_fugrdata ?= li_tool.
|
||||
|
||||
lo_fugrdata->set_fugr( ls_enha_data-fugr ).
|
||||
|
||||
LOOP AT ls_enha_data-enh_fubas ASSIGNING <fuba>.
|
||||
|
||||
lo_fugrdata->set_func_data( func_name = <fuba>-fuba
|
||||
func_enhadata = <fuba> ).
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
lo_fugrdata->if_enh_object~save( ).
|
||||
lo_fugrdata->if_enh_object~unlock( ).
|
||||
|
||||
CATCH cx_enh_root.
|
||||
lcx_exception=>raise( |error deserializing ENHO fugrdata { ms_item-obj_name }| ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD. "lif_object_enho~deserialize
|
||||
|
||||
METHOD lif_object_enho~serialize.
|
||||
|
||||
DATA: lo_fugrdata TYPE REF TO cl_enh_tool_fugr,
|
||||
fugr_name TYPE rs38l-area,
|
||||
ls_enha_data TYPE enhfugrdata.
|
||||
|
||||
FIELD-SYMBOLS: <docuobj> TYPE enhfugrparamdocu.
|
||||
|
||||
lo_fugrdata ?= ii_enh_tool.
|
||||
|
||||
lo_fugrdata->get_fugr(
|
||||
IMPORTING
|
||||
fugr_name = fugr_name ).
|
||||
|
||||
TRY.
|
||||
lo_fugrdata->get_all_data_for_fugr(
|
||||
EXPORTING
|
||||
fugr_name = fugr_name
|
||||
IMPORTING
|
||||
enha_data = ls_enha_data ).
|
||||
|
||||
LOOP AT ls_enha_data-docuobjs ASSIGNING <docuobj>.
|
||||
|
||||
CLEAR: <docuobj>-shorttext,
|
||||
<docuobj>-longtext.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
CATCH cx_enh_not_found.
|
||||
lcx_exception=>raise( |error deserializing ENHO fugrdata { ms_item-obj_name }| ).
|
||||
ENDTRY.
|
||||
|
||||
io_xml->add( iv_name = 'TOOL'
|
||||
ig_data = lo_fugrdata->if_enh_tool~get_tool( ) ).
|
||||
|
||||
io_xml->add( iv_name = 'FUGRDATA'
|
||||
ig_data = ls_enha_data ).
|
||||
|
||||
ENDMETHOD. "lif_object_enho~serialize
|
||||
|
||||
ENDCLASS. "lcl_object_enho_wdyconf IMPLEMENTATION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_object_enho DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -891,7 +1147,7 @@ CLASS lcl_object_enho DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
|||
IMPORTING
|
||||
iv_tool TYPE enhtooltype
|
||||
RETURNING
|
||||
value(ri_enho) TYPE REF TO lif_object_enho
|
||||
VALUE(ri_enho) TYPE REF TO lif_object_enho
|
||||
RAISING
|
||||
lcx_exception.
|
||||
|
||||
|
@ -988,9 +1244,16 @@ CLASS lcl_object_enho IMPLEMENTATION.
|
|||
EXPORTING
|
||||
is_item = ms_item
|
||||
io_files = mo_files.
|
||||
* ToDo:
|
||||
* WHEN 'ENHFUGRDATA'. "cl_enh_tool_fugr
|
||||
* WHEN 'ENHWDYN'. "cl_enh_tool_wdy
|
||||
WHEN 'FUGRENH'.
|
||||
CREATE OBJECT ri_enho TYPE lcl_object_enho_fugr
|
||||
EXPORTING
|
||||
is_item = ms_item
|
||||
io_files = mo_files.
|
||||
WHEN 'WDYENH'.
|
||||
CREATE OBJECT ri_enho TYPE lcl_object_enho_wdyn
|
||||
EXPORTING
|
||||
is_item = ms_item
|
||||
io_files = mo_files.
|
||||
WHEN OTHERS.
|
||||
lcx_exception=>raise( |Unsupported ENHO type { iv_tool }| ).
|
||||
ENDCASE.
|
||||
|
|
|
@ -73,7 +73,7 @@ CLASS lcl_object_enhs IMPLEMENTATION.
|
|||
EXPORTING
|
||||
spot_name = lv_spot_name
|
||||
tooltype = cl_enh_tool_badi_def=>tooltype
|
||||
dark = abap_true
|
||||
dark = abap_false
|
||||
compositename = lv_parent
|
||||
IMPORTING
|
||||
spot = li_spot_ref
|
||||
|
|
|
@ -208,17 +208,32 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
|||
|
||||
DATA: lv_include TYPE rs38l-include,
|
||||
lv_area TYPE rs38l-area,
|
||||
lt_source TYPE TABLE OF abaptxt255.
|
||||
lv_group TYPE rs38l-area,
|
||||
lv_namespace TYPE rs38l-namespace,
|
||||
lt_source TYPE TABLE OF abaptxt255,
|
||||
lv_dummy TYPE string.
|
||||
|
||||
FIELD-SYMBOLS: <ls_func> LIKE LINE OF it_functions.
|
||||
|
||||
|
||||
LOOP AT it_functions ASSIGNING <ls_func>.
|
||||
|
||||
lt_source = mo_files->read_abap( iv_extra = <ls_func>-funcname ).
|
||||
|
||||
lv_area = ms_item-obj_name.
|
||||
|
||||
CALL FUNCTION 'FUNCTION_INCLUDE_SPLIT'
|
||||
EXPORTING
|
||||
complete_area = lv_area
|
||||
IMPORTING
|
||||
namespace = lv_namespace
|
||||
group = lv_group
|
||||
EXCEPTIONS
|
||||
OTHERS = 12.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from FUNCTION_INCLUDE_SPLIT' ).
|
||||
ENDIF.
|
||||
|
||||
CALL FUNCTION 'FUNCTION_EXISTS'
|
||||
EXPORTING
|
||||
funcname = <ls_func>-funcname
|
||||
|
@ -244,13 +259,13 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
|||
CALL FUNCTION 'RS_FUNCTIONMODULE_INSERT'
|
||||
EXPORTING
|
||||
funcname = <ls_func>-funcname
|
||||
function_pool = lv_area
|
||||
function_pool = lv_group
|
||||
interface_global = <ls_func>-global_flag
|
||||
remote_call = <ls_func>-remote_call
|
||||
short_text = <ls_func>-short_text
|
||||
update_task = <ls_func>-update_task
|
||||
exception_class = <ls_func>-exception_classes
|
||||
* NAMESPACE = ' ' todo
|
||||
namespace = lv_namespace
|
||||
remote_basxml_supported = <ls_func>-remote_basxml
|
||||
IMPORTING
|
||||
function_include = lv_include
|
||||
|
@ -419,6 +434,7 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
|||
DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc WITH DEFAULT KEY,
|
||||
ls_reposrc LIKE LINE OF lt_reposrc,
|
||||
lv_program TYPE program,
|
||||
lv_offset_ns TYPE i,
|
||||
lv_tabix LIKE sy-tabix,
|
||||
lt_functab TYPE ty_rs38l_incl_tt.
|
||||
|
||||
|
@ -450,7 +466,15 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
|||
|
||||
* handle generated maintenance views
|
||||
APPEND INITIAL LINE TO rt_includes ASSIGNING <lv_include>.
|
||||
IF ms_item-obj_name(1) <> '/'.
|
||||
"FGroup name does not contain a namespace
|
||||
<lv_include> = |L{ ms_item-obj_name }T00|.
|
||||
ELSE.
|
||||
"FGroup name contains a namespace
|
||||
lv_offset_ns = find( val = ms_item-obj_name+1 sub = '/' ).
|
||||
lv_offset_ns = lv_offset_ns + 2.
|
||||
<lv_include> = |{ ms_item-obj_name(lv_offset_ns) }L{ ms_item-obj_name+lv_offset_ns }T00|.
|
||||
ENDIF.
|
||||
|
||||
IF lines( rt_includes ) > 0.
|
||||
SELECT progname cnam FROM reposrc
|
||||
|
|
|
@ -185,7 +185,13 @@ CLASS lcl_object_iarp IMPLEMENTATION.
|
|||
ENDMETHOD. "lif_object~exists
|
||||
|
||||
METHOD lif_object~jump.
|
||||
lcx_exception=>raise( 'todo, IARP, jump' ).
|
||||
|
||||
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||
EXPORTING
|
||||
operation = 'SHOW'
|
||||
object_name = ms_item-obj_name
|
||||
object_type = ms_item-obj_type.
|
||||
|
||||
ENDMETHOD. "lif_object~jump
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
|
|
|
@ -185,7 +185,13 @@ CLASS lcl_object_iasp IMPLEMENTATION.
|
|||
ENDMETHOD. "lif_object~exists
|
||||
|
||||
METHOD lif_object~jump.
|
||||
lcx_exception=>raise( 'todo, IASP, jump' ).
|
||||
|
||||
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||
EXPORTING
|
||||
operation = 'SHOW'
|
||||
object_name = ms_item-obj_name
|
||||
object_type = ms_item-obj_type.
|
||||
|
||||
ENDMETHOD. "lif_object~jump
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
|
|
|
@ -202,7 +202,13 @@ CLASS lcl_object_iatu IMPLEMENTATION.
|
|||
ENDMETHOD. "lif_object~exists
|
||||
|
||||
METHOD lif_object~jump.
|
||||
lcx_exception=>raise( 'todo, IATU, jump' ).
|
||||
|
||||
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||
EXPORTING
|
||||
operation = 'SHOW'
|
||||
object_name = ms_item-obj_name
|
||||
object_type = ms_item-obj_type.
|
||||
|
||||
ENDMETHOD. "lif_object~jump
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
|
|
200
src/zabapgit_object_jobd.prog.abap
Normal file
200
src/zabapgit_object_jobd.prog.abap
Normal file
|
@ -0,0 +1,200 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include zabapgit_object_jobd
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_object_jobd DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
INTERFACES lif_object.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES: ty_jd_name TYPE c LENGTH 32.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_object_jobd IMPLEMENTATION.
|
||||
|
||||
METHOD lif_object~has_changed_since.
|
||||
|
||||
rv_changed = abap_true.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~changed_by.
|
||||
|
||||
rv_user = c_user_unknown.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~get_metadata.
|
||||
|
||||
rs_metadata = get_metadata( ).
|
||||
rs_metadata-delete_tadir = abap_true.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~exists.
|
||||
|
||||
DATA: jd_name TYPE ty_jd_name.
|
||||
|
||||
jd_name = ms_item-obj_name.
|
||||
|
||||
TRY.
|
||||
CALL METHOD ('CL_JR_JD_MANAGER')=>('CHECK_JD_EXISTENCE')
|
||||
EXPORTING
|
||||
im_jd_name = jd_name
|
||||
IMPORTING
|
||||
ex_is_existing = rv_bool.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( |JOBD not supported| ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~serialize.
|
||||
|
||||
DATA: lr_job_definition TYPE REF TO data,
|
||||
lo_job_definition TYPE REF TO object,
|
||||
jd_name TYPE ty_jd_name.
|
||||
|
||||
FIELD-SYMBOLS: <ls_job_definition> TYPE any,
|
||||
<field> TYPE any.
|
||||
|
||||
jd_name = ms_item-obj_name.
|
||||
|
||||
TRY.
|
||||
CREATE DATA lr_job_definition TYPE ('CL_JR_JOB_DEFINITION=>TY_JOB_DEFINITION').
|
||||
ASSIGN lr_job_definition->* TO <ls_job_definition>.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
CREATE OBJECT lo_job_definition TYPE ('CL_JR_JOB_DEFINITION')
|
||||
EXPORTING
|
||||
im_jd_name = jd_name.
|
||||
|
||||
CALL METHOD lo_job_definition->('GET_JD_ATTRIBUTES')
|
||||
IMPORTING
|
||||
ex_jd_attributes = <ls_job_definition>.
|
||||
|
||||
ASSIGN COMPONENT 'JDPACKAGE' OF STRUCTURE <ls_job_definition> TO <field>.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'BTCJOB_USER' OF STRUCTURE <ls_job_definition> TO <field>.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'OWNER' OF STRUCTURE <ls_job_definition> TO <field>.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CREATED_DATE' OF STRUCTURE <ls_job_definition> TO <field>.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CREATED_TIME' OF STRUCTURE <ls_job_definition> TO <field>.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CHANGED_DATE' OF STRUCTURE <ls_job_definition> TO <field>.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CHANGED_TIME' OF STRUCTURE <ls_job_definition> TO <field>.
|
||||
CLEAR <field>.
|
||||
|
||||
io_xml->add( iv_name = 'JOBD'
|
||||
ig_data = <ls_job_definition> ).
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( |Error serializing JOBD| ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~deserialize.
|
||||
|
||||
DATA: lr_job_definition TYPE REF TO data,
|
||||
lo_job_definition TYPE REF TO object,
|
||||
jd_name TYPE ty_jd_name.
|
||||
|
||||
FIELD-SYMBOLS: <ls_job_definition> TYPE any,
|
||||
<field> TYPE any.
|
||||
|
||||
jd_name = ms_item-obj_name.
|
||||
|
||||
TRY.
|
||||
CREATE DATA lr_job_definition TYPE ('CL_JR_JOB_DEFINITION=>TY_JOB_DEFINITION').
|
||||
ASSIGN lr_job_definition->* TO <ls_job_definition>.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
io_xml->read(
|
||||
EXPORTING
|
||||
iv_name = 'JOBD'
|
||||
CHANGING
|
||||
cg_data = <ls_job_definition> ).
|
||||
|
||||
CREATE OBJECT lo_job_definition TYPE ('CL_JR_JOB_DEFINITION')
|
||||
EXPORTING
|
||||
im_jd_name = jd_name.
|
||||
|
||||
|
||||
ASSIGN COMPONENT 'JDPACKAGE' OF STRUCTURE <ls_job_definition> TO <field>.
|
||||
|
||||
<field> = iv_package.
|
||||
|
||||
CALL METHOD lo_job_definition->('CREATE_JD')
|
||||
EXPORTING
|
||||
im_jd_attributes = <ls_job_definition>.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( |Error deserializing JOBD| ).
|
||||
ENDTRY.
|
||||
|
||||
lcl_objects_activation=>add_item( ms_item ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~delete.
|
||||
|
||||
DATA: lo_job_definition TYPE REF TO object,
|
||||
jd_name TYPE c LENGTH 32.
|
||||
|
||||
jd_name = ms_item-obj_name.
|
||||
|
||||
TRY.
|
||||
CREATE OBJECT lo_job_definition TYPE ('CL_JR_JOB_DEFINITION')
|
||||
EXPORTING
|
||||
im_jd_name = jd_name.
|
||||
|
||||
CALL METHOD lo_job_definition->('DELETE_JD').
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( |Error deleting JOBD| ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~jump.
|
||||
|
||||
DATA: obj_name TYPE e071-obj_name.
|
||||
|
||||
obj_name = ms_item-obj_name.
|
||||
|
||||
CALL FUNCTION 'TR_OBJECT_JUMP_TO_TOOL'
|
||||
EXPORTING
|
||||
iv_pgmid = 'R3TR'
|
||||
iv_object = ms_item-obj_type
|
||||
iv_obj_name = obj_name
|
||||
iv_action = 'SHOW'
|
||||
EXCEPTIONS
|
||||
jump_not_possible = 1
|
||||
OTHERS = 2.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( |Error from TR_OBJECT_JUMP_TO_TOOL, JOBD| ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
|
||||
CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
25
src/zabapgit_object_jobd.prog.xml
Normal file
25
src/zabapgit_object_jobd.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_JOBD</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_OBJECT_JOBD</ENTRY>
|
||||
<LENGTH>20</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -250,7 +250,37 @@ CLASS lcl_object_nrob IMPLEMENTATION.
|
|||
|
||||
METHOD lif_object~jump.
|
||||
|
||||
lcx_exception=>raise( 'todo' ).
|
||||
DATA: ls_bcdata TYPE bdcdata,
|
||||
lt_bcdata TYPE STANDARD TABLE OF bdcdata.
|
||||
|
||||
ls_bcdata-program = 'SAPMSNRO'.
|
||||
ls_bcdata-dynpro = '0150'.
|
||||
ls_bcdata-dynbegin = 'X'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'NRIV-OBJECT'.
|
||||
ls_bcdata-fval = ms_item-obj_name.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'BDC_OKCODE'.
|
||||
ls_bcdata-fval = '=DISP'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
|
||||
STARTING NEW TASK 'GIT'
|
||||
EXPORTING
|
||||
tcode = 'SNRO'
|
||||
mode_val = 'E'
|
||||
TABLES
|
||||
using_tab = lt_bcdata
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from ABAP4_CALL_TRANSACTION, NROB' ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "jump
|
||||
|
||||
|
|
|
@ -603,8 +603,9 @@ CLASS lcl_oo_base IMPLEMENTATION.
|
|||
|
||||
METHOD lif_oo_object_fnc~read_descriptions.
|
||||
SELECT * FROM seocompotx INTO TABLE rt_descriptions
|
||||
WHERE clsname = iv_obejct_name. "#EC CI_SUBRC
|
||||
DELETE rt_descriptions WHERE descript IS INITIAL.
|
||||
WHERE clsname = iv_obejct_name
|
||||
AND descript <> ''
|
||||
ORDER BY PRIMARY KEY. "#EC CI_SUBRC
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_oo_object_fnc~delete.
|
||||
|
|
|
@ -77,7 +77,7 @@ CLASS lcl_object_pinf IMPLEMENTATION.
|
|||
|
||||
IF rv_bool = abap_true.
|
||||
SELECT SINGLE mainpack FROM tdevc INTO lv_main_pack
|
||||
WHERE devclass = lv_pack_name.
|
||||
WHERE devclass = lv_pack_name. "#EC CI_GENBUFF
|
||||
rv_bool = boolc( sy-subrc = 0 ).
|
||||
ENDIF.
|
||||
|
||||
|
|
176
src/zabapgit_object_prag.prog.abap
Normal file
176
src/zabapgit_object_prag.prog.abap
Normal file
|
@ -0,0 +1,176 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include zabapgit_object_prag
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_object_prag DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
INTERFACES lif_object.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES: BEGIN OF ty_pragma,
|
||||
pragma TYPE c LENGTH 40,
|
||||
extension TYPE c LENGTH 1,
|
||||
signature TYPE c LENGTH 10,
|
||||
description TYPE c LENGTH 255,
|
||||
END OF ty_pragma.
|
||||
|
||||
METHODS:
|
||||
_raise_pragma_not_exists
|
||||
RAISING
|
||||
lcx_exception,
|
||||
|
||||
_raise_pragma_exists
|
||||
RAISING
|
||||
lcx_exception,
|
||||
|
||||
_raise_pragma_enqueue
|
||||
RAISING
|
||||
lcx_exception.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_object_prag IMPLEMENTATION.
|
||||
|
||||
METHOD lif_object~has_changed_since.
|
||||
|
||||
rv_changed = abap_true.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~changed_by.
|
||||
|
||||
rv_user = c_user_unknown.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~get_metadata.
|
||||
|
||||
rs_metadata = get_metadata( ).
|
||||
rs_metadata-delete_tadir = abap_true.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~exists.
|
||||
|
||||
TRY.
|
||||
cl_abap_pragma=>get_ref( ms_item-obj_name ).
|
||||
|
||||
CATCH cx_abap_pragma_not_exists.
|
||||
rv_bool = abap_false.
|
||||
RETURN.
|
||||
ENDTRY.
|
||||
|
||||
rv_bool = abap_true.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~serialize.
|
||||
|
||||
DATA: lo_pragma TYPE REF TO cl_abap_pragma,
|
||||
pragma TYPE lcl_object_prag=>ty_pragma.
|
||||
|
||||
TRY.
|
||||
lo_pragma = cl_abap_pragma=>get_ref( ms_item-obj_name ).
|
||||
|
||||
pragma-pragma = lo_pragma->pragma.
|
||||
pragma-extension = lo_pragma->extension.
|
||||
pragma-signature = lo_pragma->signature.
|
||||
pragma-description = lo_pragma->description.
|
||||
|
||||
io_xml->add( iv_name = 'PRAG'
|
||||
ig_data = pragma ).
|
||||
|
||||
CATCH cx_abap_pragma_not_exists.
|
||||
_raise_pragma_not_exists( ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~deserialize.
|
||||
|
||||
DATA: pragma TYPE ty_pragma,
|
||||
lo_pragma TYPE REF TO cl_abap_pragma.
|
||||
|
||||
TRY.
|
||||
io_xml->read(
|
||||
EXPORTING
|
||||
iv_name = 'PRAG'
|
||||
CHANGING
|
||||
cg_data = pragma ).
|
||||
|
||||
lo_pragma = cl_abap_pragma=>create( p_pragma = ms_item-obj_name
|
||||
p_package = iv_package ).
|
||||
|
||||
lo_pragma->set_info( p_description = pragma-description
|
||||
p_signature = pragma-signature
|
||||
p_extension = pragma-extension ).
|
||||
|
||||
lo_pragma->save( ).
|
||||
|
||||
CATCH cx_abap_pragma_not_exists.
|
||||
_raise_pragma_not_exists( ).
|
||||
CATCH cx_abap_pragma_exists.
|
||||
_raise_pragma_exists( ).
|
||||
CATCH cx_abap_pragma_enqueue.
|
||||
_raise_pragma_enqueue( ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~delete.
|
||||
|
||||
DATA: lo_pragma TYPE REF TO cl_abap_pragma.
|
||||
|
||||
TRY.
|
||||
lo_pragma = cl_abap_pragma=>get_ref( ms_item-obj_name ).
|
||||
|
||||
lo_pragma->delete( ).
|
||||
|
||||
CATCH cx_abap_pragma_not_exists.
|
||||
_raise_pragma_not_exists( ).
|
||||
CATCH cx_abap_pragma_enqueue.
|
||||
_raise_pragma_enqueue( ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~jump.
|
||||
|
||||
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||
EXPORTING
|
||||
operation = 'SHOW'
|
||||
object_name = ms_item-obj_name
|
||||
object_type = ms_item-obj_type
|
||||
EXCEPTIONS
|
||||
not_executed = 1
|
||||
invalid_object_type = 2
|
||||
OTHERS = 3.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
|
||||
CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD _raise_pragma_enqueue.
|
||||
|
||||
lcx_exception=>raise( |Pragma { ms_item-obj_name } enqueue error| ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD _raise_pragma_exists.
|
||||
|
||||
lcx_exception=>raise( |Pragma { ms_item-obj_name } exists| ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD _raise_pragma_not_exists.
|
||||
|
||||
lcx_exception=>raise( |Pragma { ms_item-obj_name } doesn't exist| ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
25
src/zabapgit_object_prag.prog.xml
Normal file
25
src/zabapgit_object_prag.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_PRAG</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_OBJECT_PRAG</ENTRY>
|
||||
<LENGTH>20</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -2,41 +2,13 @@
|
|||
*& Include ZABAPGIT_OBJECT_SAMC
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_object_samc DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
INTERFACES lif_object.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA: mo_persistence TYPE REF TO if_wb_object_persist,
|
||||
mo_amc_appl_obj_data TYPE REF TO if_wb_object_data_model.
|
||||
CLASS lcl_object_samc DEFINITION INHERITING FROM lcl_objects_saxx_super FINAL.
|
||||
|
||||
PROTECTED SECTION.
|
||||
METHODS:
|
||||
get_data_object
|
||||
RETURNING
|
||||
VALUE(ro_amc_appl_obj_data) TYPE REF TO if_wb_object_data_model
|
||||
RAISING
|
||||
lcx_exception,
|
||||
|
||||
get_persistence
|
||||
RETURNING
|
||||
VALUE(ro_persistence) TYPE REF TO if_wb_object_persist
|
||||
RAISING
|
||||
lcx_exception,
|
||||
|
||||
get_data
|
||||
EXPORTING
|
||||
p_data TYPE any
|
||||
RAISING
|
||||
lcx_exception,
|
||||
|
||||
lock
|
||||
RAISING
|
||||
lcx_exception,
|
||||
|
||||
unlock
|
||||
RAISING
|
||||
lcx_exception.
|
||||
get_persistence_class_name REDEFINITION,
|
||||
get_data_class_name REDEFINITION,
|
||||
get_data_structure_name REDEFINITION.
|
||||
|
||||
ENDCLASS. "lcl_object_samc DEFINITION
|
||||
|
||||
|
@ -47,319 +19,22 @@ ENDCLASS. "lcl_object_samc DEFINITION
|
|||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_object_samc IMPLEMENTATION.
|
||||
|
||||
METHOD lif_object~has_changed_since.
|
||||
rv_changed = abap_true.
|
||||
ENDMETHOD. "lif_object~has_changed_since
|
||||
METHOD get_data_class_name.
|
||||
|
||||
METHOD lif_object~changed_by.
|
||||
|
||||
DATA: lr_data TYPE REF TO data.
|
||||
FIELD-SYMBOLS: <ls_data> TYPE any,
|
||||
<ls_header> TYPE any,
|
||||
<changed_by> TYPE any.
|
||||
|
||||
TRY.
|
||||
CREATE DATA lr_data TYPE ('AMC_APPLICATION_COMPLETE').
|
||||
ASSIGN lr_data->* TO <ls_data>.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'SAMC not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
get_data(
|
||||
IMPORTING
|
||||
p_data = <ls_data> ).
|
||||
|
||||
ASSIGN COMPONENT 'HEADER' OF STRUCTURE <ls_data> TO <ls_header>.
|
||||
ASSERT sy-subrc = 0.
|
||||
ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE <ls_header> TO <changed_by>.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
rv_user = <changed_by>.
|
||||
r_data_class_name = 'CL_AMC_APPLICATION_OBJ_DATA'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~get_metadata.
|
||||
rs_metadata = get_metadata( ).
|
||||
rs_metadata-delete_tadir = abap_true.
|
||||
ENDMETHOD. "lif_object~get_metadata.
|
||||
METHOD get_data_structure_name.
|
||||
|
||||
METHOD lif_object~exists.
|
||||
|
||||
DATA: ls_tadir TYPE tadir.
|
||||
|
||||
ls_tadir = lcl_tadir=>read_single(
|
||||
iv_object = ms_item-obj_type
|
||||
iv_obj_name = ms_item-obj_name ).
|
||||
IF ls_tadir IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
TRY.
|
||||
get_data_object( ).
|
||||
|
||||
CATCH lcx_exception.
|
||||
RETURN.
|
||||
ENDTRY.
|
||||
|
||||
rv_bool = abap_true.
|
||||
|
||||
ENDMETHOD. "lif_object~exists
|
||||
|
||||
METHOD lif_object~serialize.
|
||||
|
||||
DATA: lr_data TYPE REF TO data.
|
||||
|
||||
FIELD-SYMBOLS: <ls_data> TYPE any,
|
||||
<ls_header> TYPE any,
|
||||
<field> TYPE any.
|
||||
|
||||
TRY.
|
||||
CREATE DATA lr_data TYPE ('AMC_APPLICATION_COMPLETE').
|
||||
ASSIGN lr_data->* TO <ls_data>.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'SAMC not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
get_data(
|
||||
IMPORTING
|
||||
p_data = <ls_data> ).
|
||||
|
||||
ASSIGN COMPONENT 'HEADER' OF STRUCTURE <ls_data> TO <ls_header>.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ASSIGN COMPONENT 'CHANGED_ON' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CHANGED_AT' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CHANGED_CLNT' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CREATED_ON' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CREATED_AT' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CREATED_CLNT' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
io_xml->add( iv_name = 'SAMC'
|
||||
ig_data = <ls_data> ).
|
||||
|
||||
ENDMETHOD. "serialize
|
||||
|
||||
METHOD lif_object~deserialize.
|
||||
|
||||
DATA: li_appl_obj_data TYPE REF TO if_wb_object_data_model,
|
||||
lr_data TYPE REF TO data.
|
||||
|
||||
FIELD-SYMBOLS: <ls_data> TYPE any.
|
||||
|
||||
TRY.
|
||||
CREATE DATA lr_data TYPE ('AMC_APPLICATION_COMPLETE').
|
||||
ASSIGN lr_data->* TO <ls_data>.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'SAMC not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
io_xml->read(
|
||||
EXPORTING
|
||||
iv_name = 'SAMC'
|
||||
CHANGING
|
||||
cg_data = <ls_data> ).
|
||||
|
||||
IF lif_object~exists( ) = abap_true.
|
||||
lif_object~delete( ).
|
||||
ENDIF.
|
||||
|
||||
li_appl_obj_data = get_data_object( ).
|
||||
|
||||
TRY.
|
||||
lock( ).
|
||||
|
||||
CALL FUNCTION 'RS_CORR_INSERT'
|
||||
EXPORTING
|
||||
object = ms_item-obj_name
|
||||
object_class = 'SAMC'
|
||||
mode = 'I'
|
||||
global_lock = abap_true
|
||||
devclass = iv_package
|
||||
master_language = mv_language
|
||||
EXCEPTIONS
|
||||
cancelled = 1
|
||||
permission_failure = 2
|
||||
unknown_objectclass = 3
|
||||
OTHERS = 4.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'Error occured while creating SAMC' ).
|
||||
ENDIF.
|
||||
|
||||
li_appl_obj_data->set_data( <ls_data> ).
|
||||
|
||||
get_persistence( )->save( p_object_data = li_appl_obj_data ).
|
||||
|
||||
unlock( ).
|
||||
|
||||
CATCH cx_swb_exception.
|
||||
lcx_exception=>raise( 'Error occured while creating SAMC' ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD. "deserialize
|
||||
|
||||
METHOD lif_object~delete.
|
||||
|
||||
DATA: object_key TYPE seu_objkey.
|
||||
|
||||
object_key = ms_item-obj_name.
|
||||
|
||||
TRY.
|
||||
lock( ).
|
||||
|
||||
get_persistence( )->delete( p_object_key = object_key ).
|
||||
|
||||
unlock( ).
|
||||
|
||||
CATCH cx_swb_exception.
|
||||
lcx_exception=>raise( 'Error occured while deleting SAMC' ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD. "delete
|
||||
|
||||
METHOD lif_object~jump.
|
||||
|
||||
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||
EXPORTING
|
||||
operation = 'SHOW'
|
||||
object_name = ms_item-obj_name
|
||||
object_type = ms_item-obj_type.
|
||||
|
||||
ENDMETHOD. "jump
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_data_object.
|
||||
|
||||
IF mo_amc_appl_obj_data IS NOT BOUND.
|
||||
|
||||
TRY.
|
||||
CREATE OBJECT mo_amc_appl_obj_data TYPE ('CL_AMC_APPLICATION_OBJ_DATA').
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'SAMC not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ro_amc_appl_obj_data = mo_amc_appl_obj_data.
|
||||
r_data_structure_name = 'AMC_APPLICATION_COMPLETE'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_persistence_class_name.
|
||||
|
||||
METHOD get_persistence.
|
||||
|
||||
IF mo_persistence IS NOT BOUND.
|
||||
|
||||
TRY.
|
||||
CREATE OBJECT mo_persistence TYPE ('CL_AMC_APPLICATION_OBJ_PERS').
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'SAMC not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ro_persistence = mo_persistence.
|
||||
r_persistence_class_name = 'CL_AMC_APPLICATION_OBJ_PERS'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD lock.
|
||||
|
||||
DATA: objname TYPE trobj_name,
|
||||
object_key TYPE seu_objkey,
|
||||
objtype TYPE trobjtype.
|
||||
|
||||
objname = ms_item-obj_name.
|
||||
object_key = ms_item-obj_name.
|
||||
objtype = ms_item-obj_type.
|
||||
|
||||
get_persistence( )->lock(
|
||||
EXPORTING
|
||||
p_objname_tr = objname
|
||||
p_object_key = object_key
|
||||
p_objtype_tr = objtype
|
||||
EXCEPTIONS
|
||||
foreign_lock = 1
|
||||
error_occurred = 2
|
||||
OTHERS = 3 ).
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( `Error occured while locking SAMC ` && objname ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unlock.
|
||||
|
||||
DATA: objname TYPE trobj_name,
|
||||
object_key TYPE seu_objkey,
|
||||
objtype TYPE trobjtype.
|
||||
|
||||
objname = ms_item-obj_name.
|
||||
object_key = ms_item-obj_name.
|
||||
objtype = ms_item-obj_type.
|
||||
|
||||
get_persistence( )->unlock( p_objname_tr = objname
|
||||
p_object_key = object_key
|
||||
p_objtype_tr = objtype ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_data.
|
||||
|
||||
DATA: object_key TYPE seu_objkey.
|
||||
|
||||
object_key = ms_item-obj_name.
|
||||
|
||||
TRY.
|
||||
get_persistence( )->get(
|
||||
EXPORTING
|
||||
p_object_key = object_key
|
||||
p_version = 'A'
|
||||
CHANGING
|
||||
p_object_data = mo_amc_appl_obj_data ).
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'SAMC error' ).
|
||||
ENDTRY.
|
||||
|
||||
mo_amc_appl_obj_data->get_data(
|
||||
IMPORTING
|
||||
p_data = p_data ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
ENDCLASS. "lcl_object_samc IMPLEMENTATION
|
||||
|
|
|
@ -2,41 +2,13 @@
|
|||
*& Include ZABAPGIT_OBJECT_SAPC
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_object_sapc DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
INTERFACES lif_object.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA: mo_persistence TYPE REF TO if_wb_object_persist,
|
||||
mo_apc_appl_obj_data TYPE REF TO if_wb_object_data_model.
|
||||
CLASS lcl_object_sapc DEFINITION INHERITING FROM lcl_objects_saxx_super FINAL.
|
||||
|
||||
PROTECTED SECTION.
|
||||
METHODS:
|
||||
get_data_object
|
||||
RETURNING
|
||||
VALUE(ro_apc_appl_obj_data) TYPE REF TO if_wb_object_data_model
|
||||
RAISING
|
||||
lcx_exception,
|
||||
|
||||
get_persistence
|
||||
RETURNING
|
||||
VALUE(ro_persistence) TYPE REF TO if_wb_object_persist
|
||||
RAISING
|
||||
lcx_exception,
|
||||
|
||||
get_data
|
||||
EXPORTING
|
||||
p_data TYPE any
|
||||
RAISING
|
||||
lcx_exception,
|
||||
|
||||
lock
|
||||
RAISING
|
||||
lcx_exception,
|
||||
|
||||
unlock
|
||||
RAISING
|
||||
lcx_exception.
|
||||
get_persistence_class_name REDEFINITION,
|
||||
get_data_class_name REDEFINITION,
|
||||
get_data_structure_name REDEFINITION.
|
||||
|
||||
ENDCLASS. "lcl_object_sAPC DEFINITION
|
||||
|
||||
|
@ -47,319 +19,22 @@ ENDCLASS. "lcl_object_sAPC DEFINITION
|
|||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_object_sapc IMPLEMENTATION.
|
||||
|
||||
METHOD lif_object~has_changed_since.
|
||||
rv_changed = abap_true.
|
||||
ENDMETHOD. "lif_object~has_changed_since
|
||||
METHOD get_data_class_name.
|
||||
|
||||
METHOD lif_object~changed_by.
|
||||
|
||||
DATA: lr_data TYPE REF TO data.
|
||||
FIELD-SYMBOLS: <ls_data> TYPE any,
|
||||
<ls_header> TYPE any,
|
||||
<changed_by> TYPE any.
|
||||
|
||||
TRY.
|
||||
CREATE DATA lr_data TYPE ('APC_APPLICATION_COMPLETE').
|
||||
ASSIGN lr_data->* TO <ls_data>.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'SAPC not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
get_data(
|
||||
IMPORTING
|
||||
p_data = <ls_data> ).
|
||||
|
||||
ASSIGN COMPONENT 'HEADER' OF STRUCTURE <ls_data> TO <ls_header>.
|
||||
ASSERT sy-subrc = 0.
|
||||
ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE <ls_header> TO <changed_by>.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
rv_user = <changed_by>.
|
||||
r_data_class_name = 'CL_APC_APPLICATION_OBJ_DATA'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~get_metadata.
|
||||
rs_metadata = get_metadata( ).
|
||||
rs_metadata-delete_tadir = abap_true.
|
||||
ENDMETHOD. "lif_object~get_metadata.
|
||||
METHOD get_data_structure_name.
|
||||
|
||||
METHOD lif_object~exists.
|
||||
|
||||
DATA: ls_tadir TYPE tadir.
|
||||
|
||||
ls_tadir = lcl_tadir=>read_single(
|
||||
iv_object = ms_item-obj_type
|
||||
iv_obj_name = ms_item-obj_name ).
|
||||
IF ls_tadir IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
TRY.
|
||||
get_data_object( ).
|
||||
|
||||
CATCH lcx_exception.
|
||||
RETURN.
|
||||
ENDTRY.
|
||||
|
||||
rv_bool = abap_true.
|
||||
|
||||
ENDMETHOD. "lif_object~exists
|
||||
|
||||
METHOD lif_object~serialize.
|
||||
|
||||
DATA: lr_data TYPE REF TO data.
|
||||
|
||||
FIELD-SYMBOLS: <ls_data> TYPE any,
|
||||
<ls_header> TYPE any,
|
||||
<field> TYPE any.
|
||||
|
||||
TRY.
|
||||
CREATE DATA lr_data TYPE ('APC_APPLICATION_COMPLETE').
|
||||
ASSIGN lr_data->* TO <ls_data>.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'SAPC not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
get_data(
|
||||
IMPORTING
|
||||
p_data = <ls_data> ).
|
||||
|
||||
ASSIGN COMPONENT 'HEADER' OF STRUCTURE <ls_data> TO <ls_header>.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ASSIGN COMPONENT 'CHANGED_ON' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CHANGED_AT' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CHANGED_CLNT' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CREATED_ON' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CREATED_AT' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CREATED_CLNT' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
io_xml->add( iv_name = 'SAPC'
|
||||
ig_data = <ls_data> ).
|
||||
|
||||
ENDMETHOD. "serialize
|
||||
|
||||
METHOD lif_object~deserialize.
|
||||
|
||||
DATA: appl_obj_data TYPE REF TO if_wb_object_data_model,
|
||||
lr_data TYPE REF TO data.
|
||||
|
||||
FIELD-SYMBOLS: <ls_data> TYPE any.
|
||||
|
||||
TRY.
|
||||
CREATE DATA lr_data TYPE ('APC_APPLICATION_COMPLETE').
|
||||
ASSIGN lr_data->* TO <ls_data>.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'SAPC not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
io_xml->read(
|
||||
EXPORTING
|
||||
iv_name = 'SAPC'
|
||||
CHANGING
|
||||
cg_data = <ls_data> ).
|
||||
|
||||
IF lif_object~exists( ) = abap_true.
|
||||
lif_object~delete( ).
|
||||
ENDIF.
|
||||
|
||||
appl_obj_data = get_data_object( ).
|
||||
|
||||
TRY.
|
||||
lock( ).
|
||||
|
||||
CALL FUNCTION 'RS_CORR_INSERT'
|
||||
EXPORTING
|
||||
object = ms_item-obj_name
|
||||
object_class = 'SAPC'
|
||||
mode = 'I'
|
||||
global_lock = abap_true
|
||||
devclass = iv_package
|
||||
master_language = mv_language
|
||||
EXCEPTIONS
|
||||
cancelled = 1
|
||||
permission_failure = 2
|
||||
unknown_objectclass = 3
|
||||
OTHERS = 4.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'Error occured while creating SAPC' ).
|
||||
ENDIF.
|
||||
|
||||
appl_obj_data->set_data( <ls_data> ).
|
||||
|
||||
get_persistence( )->save( p_object_data = appl_obj_data ).
|
||||
|
||||
unlock( ).
|
||||
|
||||
CATCH cx_swb_exception.
|
||||
lcx_exception=>raise( 'Error occured while creating SAPC' ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD. "deserialize
|
||||
|
||||
METHOD lif_object~delete.
|
||||
|
||||
DATA: object_key TYPE seu_objkey.
|
||||
|
||||
object_key = ms_item-obj_name.
|
||||
|
||||
TRY.
|
||||
lock( ).
|
||||
|
||||
get_persistence( )->delete( p_object_key = object_key ).
|
||||
|
||||
unlock( ).
|
||||
|
||||
CATCH cx_swb_exception.
|
||||
lcx_exception=>raise( 'Error occured while deleting SAPC' ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD. "delete
|
||||
|
||||
METHOD lif_object~jump.
|
||||
|
||||
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||
EXPORTING
|
||||
operation = 'SHOW'
|
||||
object_name = ms_item-obj_name
|
||||
object_type = ms_item-obj_type.
|
||||
|
||||
ENDMETHOD. "jump
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_data_object.
|
||||
|
||||
IF mo_apc_appl_obj_data IS NOT BOUND.
|
||||
|
||||
TRY.
|
||||
CREATE OBJECT mo_apc_appl_obj_data TYPE ('CL_APC_APPLICATION_OBJ_DATA').
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'SAPC not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ro_apc_appl_obj_data = mo_apc_appl_obj_data.
|
||||
r_data_structure_name = 'APC_APPLICATION_COMPLETE'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_persistence_class_name.
|
||||
|
||||
METHOD get_persistence.
|
||||
|
||||
IF mo_persistence IS NOT BOUND.
|
||||
|
||||
TRY.
|
||||
CREATE OBJECT mo_persistence TYPE ('CL_APC_APPLICATION_OBJ_PERS').
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'SAPC not supported' ).
|
||||
ENDTRY.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ro_persistence = mo_persistence.
|
||||
r_persistence_class_name = 'CL_APC_APPLICATION_OBJ_PERS'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD lock.
|
||||
|
||||
DATA: objname TYPE trobj_name,
|
||||
object_key TYPE seu_objkey,
|
||||
objtype TYPE trobjtype.
|
||||
|
||||
objname = ms_item-obj_name.
|
||||
object_key = ms_item-obj_name.
|
||||
objtype = ms_item-obj_type.
|
||||
|
||||
get_persistence( )->lock(
|
||||
EXPORTING
|
||||
p_objname_tr = objname
|
||||
p_object_key = object_key
|
||||
p_objtype_tr = objtype
|
||||
EXCEPTIONS
|
||||
foreign_lock = 1
|
||||
error_occurred = 2
|
||||
OTHERS = 3 ).
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( `Error occured while locking SAPC ` && objname ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unlock.
|
||||
|
||||
DATA: objname TYPE trobj_name,
|
||||
object_key TYPE seu_objkey,
|
||||
objtype TYPE trobjtype.
|
||||
|
||||
objname = ms_item-obj_name.
|
||||
object_key = ms_item-obj_name.
|
||||
objtype = ms_item-obj_type.
|
||||
|
||||
get_persistence( )->unlock( p_objname_tr = objname
|
||||
p_object_key = object_key
|
||||
p_objtype_tr = objtype ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_data.
|
||||
|
||||
DATA: object_key TYPE seu_objkey.
|
||||
|
||||
object_key = ms_item-obj_name.
|
||||
|
||||
TRY.
|
||||
get_persistence( )->get(
|
||||
EXPORTING
|
||||
p_object_key = object_key
|
||||
p_version = 'A'
|
||||
CHANGING
|
||||
p_object_data = mo_apc_appl_obj_data ).
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( 'SAPC error' ).
|
||||
ENDTRY.
|
||||
|
||||
mo_apc_appl_obj_data->get_data(
|
||||
IMPORTING
|
||||
p_data = p_data ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
ENDCLASS. "lcl_object_sAPC IMPLEMENTATION
|
||||
|
|
|
@ -8,8 +8,11 @@ INCLUDE zabapgit_object_acid.
|
|||
INCLUDE zabapgit_object_auth.
|
||||
INCLUDE zabapgit_object_oo_functions.
|
||||
INCLUDE zabapgit_object_clas.
|
||||
INCLUDE zabapgit_object_clas_new.
|
||||
INCLUDE zabapgit_object_cmpt.
|
||||
INCLUDE zabapgit_object_dcls.
|
||||
INCLUDE zabapgit_object_ddls.
|
||||
INCLUDE zabapgit_object_dial.
|
||||
INCLUDE zabapgit_object_doct.
|
||||
INCLUDE zabapgit_object_docv.
|
||||
INCLUDE zabapgit_object_doma.
|
||||
|
@ -23,11 +26,13 @@ INCLUDE zabapgit_object_fugr.
|
|||
INCLUDE zabapgit_object_iarp.
|
||||
INCLUDE zabapgit_object_iasp.
|
||||
INCLUDE zabapgit_object_iatu.
|
||||
INCLUDE zabapgit_object_jobd.
|
||||
INCLUDE zabapgit_object_intf.
|
||||
INCLUDE zabapgit_object_msag.
|
||||
INCLUDE zabapgit_object_nrob.
|
||||
INCLUDE zabapgit_object_para.
|
||||
INCLUDE zabapgit_object_pinf.
|
||||
INCLUDE zabapgit_object_prag.
|
||||
INCLUDE zabapgit_object_prog.
|
||||
INCLUDE zabapgit_object_samc.
|
||||
INCLUDE zabapgit_object_sapc.
|
||||
|
@ -38,6 +43,7 @@ INCLUDE zabapgit_object_sfpi.
|
|||
INCLUDE zabapgit_object_sfsw.
|
||||
INCLUDE zabapgit_object_shi3.
|
||||
INCLUDE zabapgit_object_shlp.
|
||||
INCLUDE zabapgit_object_shma.
|
||||
INCLUDE zabapgit_object_sicf.
|
||||
INCLUDE zabapgit_object_smim.
|
||||
INCLUDE zabapgit_object_splo.
|
||||
|
|
|
@ -74,7 +74,13 @@ CLASS lcl_object_sfpf IMPLEMENTATION.
|
|||
ENDMETHOD. "lif_object~exists
|
||||
|
||||
METHOD lif_object~jump.
|
||||
lcx_exception=>raise( 'todo, SFPF jump' ).
|
||||
|
||||
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||
EXPORTING
|
||||
operation = 'SHOW'
|
||||
object_name = ms_item-obj_name
|
||||
object_type = ms_item-obj_type.
|
||||
|
||||
ENDMETHOD. "jump
|
||||
|
||||
METHOD lif_object~delete.
|
||||
|
|
|
@ -70,7 +70,13 @@ CLASS lcl_object_sfpi IMPLEMENTATION.
|
|||
ENDMETHOD. "lif_object~exists
|
||||
|
||||
METHOD lif_object~jump.
|
||||
lcx_exception=>raise( 'todo, SFPI jump' ).
|
||||
|
||||
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||
EXPORTING
|
||||
operation = 'SHOW'
|
||||
object_name = ms_item-obj_name
|
||||
object_type = ms_item-obj_type.
|
||||
|
||||
ENDMETHOD. "jump
|
||||
|
||||
METHOD lif_object~delete.
|
||||
|
|
|
@ -30,7 +30,7 @@ CLASS lcl_object_shlp IMPLEMENTATION.
|
|||
SELECT SINGLE as4date as4time FROM dd30l
|
||||
INTO (lv_date, lv_time)
|
||||
WHERE shlpname = ms_item-obj_name
|
||||
AND as4local = 'A'.
|
||||
AND as4local = 'A'. "#EC CI_GENBUFF
|
||||
|
||||
rv_changed = check_timestamp(
|
||||
iv_timestamp = iv_timestamp
|
||||
|
|
273
src/zabapgit_object_shma.prog.abap
Normal file
273
src/zabapgit_object_shma.prog.abap
Normal file
|
@ -0,0 +1,273 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include zabapgit_object_shma
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_object_shma DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
INTERFACES lif_object.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_object_shma IMPLEMENTATION.
|
||||
|
||||
METHOD lif_object~has_changed_since.
|
||||
|
||||
rv_changed = abap_true.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~changed_by.
|
||||
|
||||
rv_user = c_user_unknown.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~get_metadata.
|
||||
|
||||
rs_metadata = get_metadata( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~exists.
|
||||
|
||||
DATA: lv_area_name TYPE shm_area_name.
|
||||
|
||||
SELECT SINGLE area_name
|
||||
FROM shma_attributes
|
||||
INTO lv_area_name
|
||||
WHERE area_name = ms_item-obj_name.
|
||||
|
||||
rv_bool = boolc( sy-subrc = 0 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~serialize.
|
||||
|
||||
DATA: lv_area_name TYPE shm_area_name,
|
||||
ls_area_attributes TYPE shma_attributes.
|
||||
|
||||
lv_area_name = ms_item-obj_name.
|
||||
|
||||
TRY.
|
||||
CALL METHOD ('\PROGRAM=SAPLSHMA\CLASS=LCL_SHMA_HELPER')=>('READ_AREA_ATTRIBUTES_ALL')
|
||||
EXPORTING
|
||||
area_name = lv_area_name
|
||||
IMPORTING
|
||||
area_attributes = ls_area_attributes.
|
||||
|
||||
CLEAR: ls_area_attributes-chg_user,
|
||||
ls_area_attributes-chg_date,
|
||||
ls_area_attributes-chg_time,
|
||||
ls_area_attributes-cls_gen_user ,
|
||||
ls_area_attributes-cls_gen_date ,
|
||||
ls_area_attributes-cls_gen_time.
|
||||
|
||||
io_xml->add( iv_name = 'AREA_ATTRIBUTES'
|
||||
ig_data = ls_area_attributes ).
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( |Error serializing SHMA { ms_item-obj_name }| ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~deserialize.
|
||||
|
||||
DATA: lv_area_name TYPE shm_area_name,
|
||||
ls_area_attributes TYPE shma_attributes.
|
||||
|
||||
lv_area_name = ms_item-obj_name.
|
||||
|
||||
io_xml->read(
|
||||
EXPORTING
|
||||
iv_name = 'AREA_ATTRIBUTES'
|
||||
CHANGING
|
||||
cg_data = ls_area_attributes ).
|
||||
|
||||
TRY.
|
||||
CALL METHOD ('\PROGRAM=SAPLSHMA\CLASS=LCL_SHMA_HELPER')=>('INSERT_AREA')
|
||||
EXPORTING
|
||||
area_name = lv_area_name
|
||||
attributes = ls_area_attributes
|
||||
force_overwrite = abap_true
|
||||
no_class_generation = abap_true
|
||||
silent_mode = abap_true.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( |Error serializing SHMA { ms_item-obj_name }| ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~delete.
|
||||
|
||||
" We can't use FM SHMA_DELETE_AREA because it depends
|
||||
" on the corresponding class, but in abapGit it has its own
|
||||
" lifecycle. Therefore we have to reimplement most of the
|
||||
" FMs logic
|
||||
|
||||
CONSTANTS: lc_request_delete TYPE i VALUE '4'.
|
||||
|
||||
DATA: lv_request TYPE i,
|
||||
lv_area_name TYPE shm_area_name,
|
||||
lv_order TYPE e070-trkorr,
|
||||
lv_korrnum TYPE tadir-korrnum,
|
||||
lv_objname TYPE tadir-obj_name,
|
||||
lv_task TYPE e070-trkorr,
|
||||
lv_append TYPE abap_bool,
|
||||
ls_tadir TYPE tadir,
|
||||
ls_tdevc TYPE tdevc,
|
||||
lo_cts_if TYPE REF TO object.
|
||||
|
||||
lv_area_name = ms_item-obj_name.
|
||||
|
||||
TRY.
|
||||
CALL FUNCTION 'ENQUEUE_E_SHM_AREA'
|
||||
EXPORTING
|
||||
mode_shma_attributes = 'E'
|
||||
area_name = lv_area_name
|
||||
x_area_name = ' '
|
||||
_scope = '2'
|
||||
_wait = ' '
|
||||
_collect = ' '
|
||||
EXCEPTIONS
|
||||
foreign_lock = 1
|
||||
system_failure = 2
|
||||
OTHERS = 3.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( |Error deleting SHMA { ms_item-obj_name }| ).
|
||||
ENDIF.
|
||||
|
||||
CALL METHOD ('\PROGRAM=SAPMSHM_MONITOR\CLASS=LCL_SHMM')=>('FREE_AREA_BY_NAME')
|
||||
EXPORTING
|
||||
area_name = lv_area_name
|
||||
affect_server = cl_shm_area=>affect_all_servers.
|
||||
|
||||
CREATE OBJECT lo_cts_if TYPE ('\FUNCTION-POOL=SHMA\CLASS=LCL_CTS_INTERFACE')
|
||||
EXPORTING
|
||||
area = lv_area_name.
|
||||
|
||||
CALL METHOD lo_cts_if->('CHECK_AREA')
|
||||
EXPORTING
|
||||
request = lc_request_delete
|
||||
IMPORTING
|
||||
access_mode = lv_request
|
||||
appendable = lv_append.
|
||||
|
||||
IF lv_request <> lc_request_delete.
|
||||
lcx_exception=>raise( |Error deleting SHMA { ms_item-obj_name }| ).
|
||||
ENDIF.
|
||||
|
||||
CALL METHOD lo_cts_if->('INSERT_AREA')
|
||||
EXPORTING
|
||||
request = lc_request_delete
|
||||
IMPORTING
|
||||
order = lv_order
|
||||
task = lv_task.
|
||||
|
||||
DELETE FROM shma_attributes WHERE area_name = lv_area_name.
|
||||
DELETE FROM shma_start WHERE area_name = lv_area_name.
|
||||
|
||||
lv_korrnum = lv_order.
|
||||
lv_objname = lv_area_name.
|
||||
|
||||
CALL FUNCTION 'TR_TADIR_INTERFACE'
|
||||
EXPORTING
|
||||
wi_read_only = abap_true
|
||||
wi_tadir_pgmid = 'R3TR'
|
||||
wi_tadir_object = 'SHMA'
|
||||
wi_tadir_obj_name = lv_objname
|
||||
IMPORTING
|
||||
new_tadir_entry = ls_tadir
|
||||
EXCEPTIONS
|
||||
OTHERS = 0.
|
||||
|
||||
CALL FUNCTION 'TR_DEVCLASS_GET'
|
||||
EXPORTING
|
||||
iv_devclass = ls_tadir-devclass
|
||||
IMPORTING
|
||||
es_tdevc = ls_tdevc
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
|
||||
IF sy-subrc = 0 AND ls_tdevc-korrflag IS INITIAL.
|
||||
|
||||
" TADIR entries for local objects must be deleted 'by hand'
|
||||
|
||||
CALL FUNCTION 'TR_TADIR_INTERFACE'
|
||||
EXPORTING
|
||||
wi_test_modus = abap_false
|
||||
wi_delete_tadir_entry = abap_true
|
||||
wi_tadir_pgmid = 'R3TR'
|
||||
wi_tadir_object = 'SHMA'
|
||||
wi_tadir_obj_name = lv_objname
|
||||
wi_tadir_korrnum = lv_korrnum
|
||||
EXCEPTIONS
|
||||
OTHERS = 0.
|
||||
|
||||
ENDIF.
|
||||
|
||||
CALL METHOD ('\PROGRAM=SAPLSHMA\CLASS=LCL_SHMA_HELPER')=>('DELETE_RUNTIME_SETTINGS')
|
||||
EXPORTING
|
||||
area_name = lv_area_name.
|
||||
|
||||
CALL FUNCTION 'DEQUEUE_E_SHM_AREA'
|
||||
EXPORTING
|
||||
mode_shma_attributes = 'E'
|
||||
area_name = lv_area_name
|
||||
x_area_name = ' '
|
||||
_scope = '3'
|
||||
_synchron = ' '
|
||||
_collect = ' '.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( |Error deleting SHMA { ms_item-obj_name }| ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~jump.
|
||||
|
||||
DATA: ls_bcdata TYPE bdcdata,
|
||||
lt_bcdata TYPE STANDARD TABLE OF bdcdata.
|
||||
|
||||
ls_bcdata-program = 'SAPLSHMA'.
|
||||
ls_bcdata-dynpro = '0100'.
|
||||
ls_bcdata-dynbegin = 'X'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'SHMA_ATTRIBUTES-AREA_NAME'.
|
||||
ls_bcdata-fval = ms_item-obj_name.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'BDC_OKCODE'.
|
||||
ls_bcdata-fval = '=SHOW'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
|
||||
STARTING NEW TASK 'GIT'
|
||||
EXPORTING
|
||||
tcode = 'SHMA'
|
||||
mode_val = 'E'
|
||||
TABLES
|
||||
using_tab = lt_bcdata
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from ABAP4_CALL_TRANSACTION, SHMA' ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
|
||||
CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
25
src/zabapgit_object_shma.prog.xml
Normal file
25
src/zabapgit_object_shma.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_SHMA</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_OBJECT_SHMA</ENTRY>
|
||||
<LENGTH>20</LENGTH>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -77,6 +77,10 @@ CLASS lcl_object_sicf IMPLEMENTATION.
|
|||
|
||||
rv_user = ls_icfservice-icf_muser.
|
||||
|
||||
IF rv_user IS INITIAL.
|
||||
rv_user = c_user_unknown.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~get_metadata.
|
||||
|
@ -85,11 +89,20 @@ CLASS lcl_object_sicf IMPLEMENTATION.
|
|||
|
||||
METHOD lif_object~exists.
|
||||
|
||||
DATA: ls_icfservice TYPE icfservice.
|
||||
DATA: ls_tadir TYPE tadir,
|
||||
ls_key TYPE ty_sicf_key.
|
||||
|
||||
ls_tadir = lcl_tadir=>read_single_sicf( ms_item-obj_name ).
|
||||
|
||||
read( IMPORTING es_icfservice = ls_icfservice ).
|
||||
rv_bool = boolc( NOT ls_icfservice IS INITIAL ).
|
||||
rv_bool = boolc( NOT ls_tadir IS INITIAL ).
|
||||
|
||||
IF rv_bool = abap_true.
|
||||
ls_key = ls_tadir-obj_name.
|
||||
SELECT SINGLE icfaltnme FROM icfservice INTO ls_key-icf_name
|
||||
WHERE icf_name = ls_key-icf_name
|
||||
AND icfparguid = ls_key-icfparguid.
|
||||
rv_bool = boolc( sy-subrc = 0 ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "lif_object~exists
|
||||
|
||||
|
@ -140,17 +153,7 @@ CLASS lcl_object_sicf IMPLEMENTATION.
|
|||
CLEAR et_icfhandler.
|
||||
CLEAR ev_url.
|
||||
|
||||
ls_key = ms_item-obj_name.
|
||||
IF ls_key-icfparguid IS INITIAL.
|
||||
* limitation: name must be unique
|
||||
SELECT SINGLE icfparguid FROM icfservice
|
||||
INTO ls_key-icfparguid
|
||||
WHERE icf_name = ls_key-icf_name
|
||||
AND icf_cuser <> 'SAP' ##warn_ok.
|
||||
IF sy-subrc <> 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ls_key = lcl_tadir=>read_single_sicf( ms_item-obj_name )-obj_name.
|
||||
|
||||
cl_icf_tree=>if_icf_tree~get_info_from_serv(
|
||||
EXPORTING
|
||||
|
@ -198,6 +201,7 @@ CLASS lcl_object_sicf IMPLEMENTATION.
|
|||
ls_read TYPE icfservice,
|
||||
ls_icfdocu TYPE icfdocu,
|
||||
lv_url TYPE string,
|
||||
lv_exists TYPE abap_bool,
|
||||
lt_icfhandler TYPE TABLE OF icfhandler.
|
||||
|
||||
|
||||
|
@ -210,14 +214,16 @@ CLASS lcl_object_sicf IMPLEMENTATION.
|
|||
io_xml->read( EXPORTING iv_name = 'ICFHANDLER_TABLE'
|
||||
CHANGING cg_data = lt_icfhandler ).
|
||||
|
||||
read( IMPORTING es_icfservice = ls_read ).
|
||||
IF ls_read IS INITIAL.
|
||||
|
||||
lv_exists = lif_object~exists( ).
|
||||
IF lv_exists = abap_false.
|
||||
insert_sicf( is_icfservice = ls_icfservice
|
||||
is_icfdocu = ls_icfdocu
|
||||
it_icfhandler = lt_icfhandler
|
||||
iv_package = iv_package
|
||||
iv_url = lv_url ).
|
||||
ELSE.
|
||||
read( IMPORTING es_icfservice = ls_read ).
|
||||
change_sicf( is_icfservice = ls_icfservice
|
||||
is_icfdocu = ls_icfdocu
|
||||
it_icfhandler = lt_icfhandler
|
||||
|
@ -391,9 +397,21 @@ CLASS lcl_object_sicf IMPLEMENTATION.
|
|||
|
||||
DATA: ls_icfservice TYPE icfservice.
|
||||
|
||||
|
||||
read( IMPORTING es_icfservice = ls_icfservice ).
|
||||
|
||||
IF ls_icfservice IS INITIAL.
|
||||
" It seems that the ICF service doesn't exist anymore.
|
||||
" But that's ok, because some objects like SAPC manage
|
||||
" the lifecycle of its ICF service by itself and already
|
||||
" deleted the service.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
IF ls_icfservice-icfparguid CO '0'.
|
||||
* not supported by the SAP standard API
|
||||
lcx_exception=>raise( 'SICF - cannot delete root node, delete node manually' ).
|
||||
ENDIF.
|
||||
|
||||
cl_icf_tree=>if_icf_tree~delete_node(
|
||||
EXPORTING
|
||||
icfparguid = ls_icfservice-icfparguid
|
||||
|
@ -419,7 +437,39 @@ CLASS lcl_object_sicf IMPLEMENTATION.
|
|||
ENDMETHOD. "delete
|
||||
|
||||
METHOD lif_object~jump.
|
||||
lcx_exception=>raise( 'todo, SICF, jump' ).
|
||||
|
||||
DATA: ls_bcdata TYPE bdcdata,
|
||||
lt_bcdata TYPE STANDARD TABLE OF bdcdata.
|
||||
|
||||
ls_bcdata-program = 'RSICFTREE'.
|
||||
ls_bcdata-dynpro = '1000'.
|
||||
ls_bcdata-dynbegin = 'X'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
ls_bcdata-dynpro = space.
|
||||
ls_bcdata-dynbegin = space.
|
||||
ls_bcdata-fnam = 'ICF_SERV'.
|
||||
ls_bcdata-fval = ms_item-obj_name.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
ls_bcdata-fnam = 'BDC_OKCODE'.
|
||||
ls_bcdata-fval = '=ONLI'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
|
||||
STARTING NEW TASK 'GIT'
|
||||
EXPORTING
|
||||
tcode = 'SICF'
|
||||
mode_val = 'E'
|
||||
TABLES
|
||||
using_tab = lt_bcdata
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from ABAP4_CALL_TRANSACTION, SICF' ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "jump
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
|
|
|
@ -67,14 +67,16 @@ CLASS lcl_object_smim IMPLEMENTATION.
|
|||
|
||||
METHOD lif_object~exists.
|
||||
|
||||
TRY.
|
||||
get_url_for_io( ).
|
||||
rv_bool = abap_true.
|
||||
CATCH lcx_not_found.
|
||||
rv_bool = abap_false.
|
||||
ENDTRY.
|
||||
DATA: lv_loio TYPE sdok_docid.
|
||||
|
||||
ENDMETHOD. "lif_object~exists
|
||||
|
||||
lv_loio = ms_item-obj_name.
|
||||
|
||||
SELECT SINGLE loio_id FROM smimloio INTO lv_loio
|
||||
WHERE loio_id = lv_loio. "#EC CI_GENBUFF
|
||||
rv_bool = boolc( sy-subrc = 0 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_url_for_io.
|
||||
|
||||
|
@ -206,7 +208,8 @@ CLASS lcl_object_smim IMPLEMENTATION.
|
|||
ls_file-data = lv_content.
|
||||
mo_files->add( ls_file ).
|
||||
|
||||
SELECT SINGLE lo_class FROM smimloio INTO lv_class WHERE loio_id = lv_loio.
|
||||
SELECT SINGLE lo_class FROM smimloio INTO lv_class
|
||||
WHERE loio_id = lv_loio. "#EC CI_GENBUFF
|
||||
ENDIF.
|
||||
|
||||
io_xml->add( iv_name = 'URL'
|
||||
|
@ -328,7 +331,13 @@ CLASS lcl_object_smim IMPLEMENTATION.
|
|||
ENDMETHOD. "delete
|
||||
|
||||
METHOD lif_object~jump.
|
||||
lcx_exception=>raise( 'todo, SMIM, jump' ).
|
||||
|
||||
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||
EXPORTING
|
||||
operation = 'SHOW'
|
||||
object_name = ms_item-obj_name
|
||||
object_type = ms_item-obj_type.
|
||||
|
||||
ENDMETHOD. "jump
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
|
|
|
@ -13,6 +13,9 @@ CLASS lcl_object_ssfo DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
|||
INTERFACES lif_object.
|
||||
ALIASES mo_files FOR lif_object~mo_files.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS: fix_ids IMPORTING ii_xml_doc TYPE REF TO if_ixml_document.
|
||||
|
||||
ENDCLASS. "lcl_object_dtel DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -163,16 +166,11 @@ CLASS lcl_object_ssfo IMPLEMENTATION.
|
|||
li_node->set_value( 'DUMMY' ).
|
||||
ENDIF.
|
||||
|
||||
* remove IDs it seems that they are not used for anything
|
||||
* the IDs are "random" so it caused diff files
|
||||
IF lv_name = 'NODE' OR lv_name = 'WINDOW'.
|
||||
li_attr = li_node->get_attributes( ).
|
||||
li_attr->remove_named_item( 'ID' ).
|
||||
ENDIF.
|
||||
|
||||
li_node = li_iterator->get_next( ).
|
||||
ENDWHILE.
|
||||
|
||||
fix_ids( li_xml_doc ).
|
||||
|
||||
li_element = li_xml_doc->get_root_element( ).
|
||||
li_element->set_attribute(
|
||||
name = 'sf'
|
||||
|
@ -186,6 +184,54 @@ CLASS lcl_object_ssfo IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "serialize
|
||||
|
||||
METHOD fix_ids.
|
||||
* makes sure ID and IDREF values are the same values for each serialization run
|
||||
* the standard code has a counter that keeps increasing values
|
||||
|
||||
DATA: lv_name TYPE string,
|
||||
li_idref TYPE REF TO if_ixml_node,
|
||||
li_node TYPE REF TO if_ixml_node,
|
||||
li_attr TYPE REF TO if_ixml_named_node_map,
|
||||
li_iterator TYPE REF TO if_ixml_node_iterator,
|
||||
lt_idref TYPE STANDARD TABLE OF string WITH DEFAULT KEY.
|
||||
|
||||
|
||||
li_iterator = ii_xml_doc->create_iterator( ).
|
||||
li_node = li_iterator->get_next( ).
|
||||
WHILE NOT li_node IS INITIAL.
|
||||
lv_name = li_node->get_name( ).
|
||||
IF lv_name = 'NODE' OR lv_name = 'WINDOW'.
|
||||
li_idref = li_node->get_attributes( )->get_named_item( 'IDREF' ).
|
||||
IF li_idref IS BOUND.
|
||||
APPEND li_idref->get_value( ) TO lt_idref.
|
||||
li_idref->set_value( |{ sy-tabix }| ).
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
li_node = li_iterator->get_next( ).
|
||||
ENDWHILE.
|
||||
|
||||
li_iterator = ii_xml_doc->create_iterator( ).
|
||||
li_node = li_iterator->get_next( ).
|
||||
WHILE NOT li_node IS INITIAL.
|
||||
lv_name = li_node->get_name( ).
|
||||
IF lv_name = 'NODE' OR lv_name = 'WINDOW'.
|
||||
li_idref = li_node->get_attributes( )->get_named_item( 'ID' ).
|
||||
IF li_idref IS BOUND.
|
||||
lv_name = li_idref->get_value( ).
|
||||
READ TABLE lt_idref WITH KEY table_line = lv_name TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc = 0.
|
||||
li_idref->set_value( |{ sy-tabix }| ).
|
||||
ELSE.
|
||||
li_attr = li_node->get_attributes( ).
|
||||
li_attr->remove_named_item( 'ID' ).
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
li_node = li_iterator->get_next( ).
|
||||
ENDWHILE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~deserialize.
|
||||
* see function module FB_UPLOAD_FORM
|
||||
|
||||
|
|
|
@ -12,6 +12,7 @@ CLASS lcl_object_ssst DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
|||
PUBLIC SECTION.
|
||||
INTERFACES lif_object.
|
||||
ALIASES mo_files FOR lif_object~mo_files.
|
||||
CONSTANTS: c_style_active TYPE tdactivate VALUE 'A'.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS validate_font
|
||||
|
@ -50,9 +51,11 @@ CLASS lcl_object_ssst IMPLEMENTATION.
|
|||
|
||||
DATA: lv_stylename TYPE stxsadm-stylename.
|
||||
|
||||
|
||||
SELECT SINGLE stylename FROM stxsadm INTO lv_stylename
|
||||
WHERE stylename = ms_item-obj_name.
|
||||
SELECT SINGLE stylename
|
||||
FROM stxshead INTO lv_stylename
|
||||
WHERE active = c_style_active
|
||||
AND stylename = ms_item-obj_name
|
||||
AND vari = ''.
|
||||
rv_bool = boolc( sy-subrc = 0 ).
|
||||
|
||||
ENDMETHOD. "lif_object~exists
|
||||
|
@ -85,7 +88,7 @@ CLASS lcl_object_ssst IMPLEMENTATION.
|
|||
CALL FUNCTION 'SSF_READ_STYLE'
|
||||
EXPORTING
|
||||
i_style_name = lv_style_name
|
||||
i_style_active_flag = 'A'
|
||||
i_style_active_flag = c_style_active
|
||||
i_style_variant = '%MAIN'
|
||||
i_style_language = mv_language
|
||||
IMPORTING
|
||||
|
@ -133,10 +136,11 @@ CLASS lcl_object_ssst IMPLEMENTATION.
|
|||
* see fm SSF_UPLOAD_STYLE
|
||||
|
||||
DATA: ls_header TYPE ssfcats,
|
||||
ls_new_header TYPE ssfcats,
|
||||
lt_paragraphs TYPE TABLE OF ssfparas,
|
||||
lt_strings TYPE TABLE OF ssfstrings,
|
||||
lt_tabstops TYPE TABLE OF stxstab.
|
||||
|
||||
FIELD-SYMBOLS: <spras> TYPE spras.
|
||||
|
||||
io_xml->read( EXPORTING iv_name = 'HEADER'
|
||||
CHANGING cg_data = ls_header ).
|
||||
|
@ -149,14 +153,33 @@ CLASS lcl_object_ssst IMPLEMENTATION.
|
|||
|
||||
validate_font( ls_header-tdfamily ).
|
||||
|
||||
CALL FUNCTION 'SSF_READ_STYLE' "Just load FG
|
||||
EXPORTING
|
||||
i_style_name = ls_header-stylename
|
||||
i_style_active_flag = 'A'
|
||||
EXCEPTIONS
|
||||
OTHERS = 0.
|
||||
IF sy-subrc <> 0.
|
||||
ENDIF.
|
||||
|
||||
SET PARAMETER ID 'EUK' FIELD iv_package.
|
||||
ASSIGN ('(SAPLSTXBS)MASTER_LANGUAGE') TO <spras>.
|
||||
IF sy-subrc = 0.
|
||||
<spras> = ls_header-masterlang.
|
||||
ENDIF.
|
||||
|
||||
CALL FUNCTION 'SSF_SAVE_STYLE'
|
||||
EXPORTING
|
||||
i_header = ls_header
|
||||
IMPORTING
|
||||
e_header = ls_new_header
|
||||
TABLES
|
||||
i_paragraphs = lt_paragraphs
|
||||
i_strings = lt_strings
|
||||
i_tabstops = lt_tabstops.
|
||||
|
||||
IF ls_new_header IS NOT INITIAL.
|
||||
|
||||
CALL FUNCTION 'SSF_ACTIVATE_STYLE'
|
||||
EXPORTING
|
||||
i_stylename = ls_header-stylename
|
||||
|
@ -171,6 +194,8 @@ CLASS lcl_object_ssst IMPLEMENTATION.
|
|||
lcx_exception=>raise( 'error from SSF_ACTIVATE_STYLE' ).
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "deserialize
|
||||
|
||||
METHOD lif_object~delete.
|
||||
|
@ -200,7 +225,39 @@ CLASS lcl_object_ssst IMPLEMENTATION.
|
|||
ENDMETHOD. "delete
|
||||
|
||||
METHOD lif_object~jump.
|
||||
lcx_exception=>raise( 'todo' ).
|
||||
|
||||
DATA: ls_bcdata TYPE bdcdata,
|
||||
lt_bcdata TYPE STANDARD TABLE OF bdcdata.
|
||||
|
||||
ls_bcdata-program = 'SAPMSSFS'.
|
||||
ls_bcdata-dynpro = '0100'.
|
||||
ls_bcdata-dynbegin = 'X'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'SSFSCREENS-SNAME'.
|
||||
ls_bcdata-fval = ms_item-obj_name.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'BDC_OKCODE'.
|
||||
ls_bcdata-fval = '=DISPLAY'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
|
||||
STARTING NEW TASK 'GIT'
|
||||
EXPORTING
|
||||
tcode = 'SMARTSTYLES'
|
||||
mode_val = 'E'
|
||||
TABLES
|
||||
using_tab = lt_bcdata
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from ABAP4_CALL_TRANSACTION, SSST' ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "jump
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
|
|
|
@ -86,7 +86,47 @@ CLASS lcl_object_styl IMPLEMENTATION.
|
|||
|
||||
METHOD lif_object~jump.
|
||||
|
||||
lcx_exception=>raise( 'todo, STYL jump' ).
|
||||
DATA: ls_bcdata TYPE bdcdata,
|
||||
lt_bcdata TYPE STANDARD TABLE OF bdcdata.
|
||||
|
||||
ls_bcdata-program = 'SAPMSSCS'.
|
||||
ls_bcdata-dynpro = '1100'.
|
||||
ls_bcdata-dynbegin = 'X'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'RSSCS-TDSTYLE'.
|
||||
ls_bcdata-fval = ms_item-obj_name.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'RSSCS-TDSPRAS'.
|
||||
ls_bcdata-fval = sy-langu.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'RSSCS-TDHEADEROB'.
|
||||
ls_bcdata-fval = 'X'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'BDC_OKCODE'.
|
||||
ls_bcdata-fval = '=SHOW'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
|
||||
STARTING NEW TASK 'GIT'
|
||||
EXPORTING
|
||||
tcode = 'SE72'
|
||||
mode_val = 'E'
|
||||
TABLES
|
||||
using_tab = lt_bcdata
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from ABAP4_CALL_TRANSACTION, STYL' ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "jump
|
||||
|
||||
|
|
|
@ -79,14 +79,27 @@ CLASS lcl_object_tabl IMPLEMENTATION.
|
|||
|
||||
METHOD lif_object~changed_by.
|
||||
|
||||
SELECT SINGLE as4user FROM dd02l INTO rv_user
|
||||
DATA: lv_as4date TYPE dd02l-as4date,
|
||||
lv_as4time TYPE dd02l-as4time.
|
||||
|
||||
|
||||
SELECT SINGLE as4user as4date as4time
|
||||
FROM dd02l INTO (rv_user, lv_as4date, lv_as4time)
|
||||
WHERE tabname = ms_item-obj_name
|
||||
AND as4local = 'A'
|
||||
AND as4vers = '0000'.
|
||||
IF sy-subrc <> 0.
|
||||
rv_user = c_user_unknown.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
SELECT SINGLE as4user INTO rv_user
|
||||
FROM dd09l
|
||||
WHERE tabname = ms_item-obj_name
|
||||
AND as4local = 'A'
|
||||
AND as4vers = '0000'
|
||||
AND ( as4date > lv_as4date OR ( as4date = lv_as4date AND as4time > lv_as4time ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~get_metadata.
|
||||
|
|
|
@ -13,6 +13,19 @@ CLASS lcl_object_tobj DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
|||
INTERFACES lif_object.
|
||||
ALIASES mo_files FOR lif_object~mo_files.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES: BEGIN OF ty_tobj,
|
||||
tddat TYPE tddat,
|
||||
tvdir TYPE tvdir,
|
||||
tvimf TYPE STANDARD TABLE OF tvimf WITH DEFAULT KEY,
|
||||
END OF ty_tobj.
|
||||
|
||||
METHODS:
|
||||
read_extra IMPORTING iv_tabname TYPE vim_name
|
||||
RETURNING VALUE(rs_tobj) TYPE ty_tobj,
|
||||
update_extra IMPORTING is_tobj TYPE ty_tobj,
|
||||
delete_extra IMPORTING iv_tabname TYPE vim_name.
|
||||
|
||||
ENDCLASS. "lcl_object_tobj DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -22,6 +35,32 @@ ENDCLASS. "lcl_object_tobj DEFINITION
|
|||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_object_tobj IMPLEMENTATION.
|
||||
|
||||
METHOD read_extra.
|
||||
|
||||
SELECT SINGLE * FROM tddat INTO rs_tobj-tddat WHERE tabname = iv_tabname.
|
||||
|
||||
SELECT SINGLE * FROM tvdir INTO rs_tobj-tvdir WHERE tabname = iv_tabname.
|
||||
|
||||
SELECT * FROM tvimf INTO TABLE rs_tobj-tvimf WHERE tabname = iv_tabname.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD update_extra.
|
||||
|
||||
MODIFY tddat FROM is_tobj-tddat.
|
||||
MODIFY tvdir FROM is_tobj-tvdir.
|
||||
MODIFY tvimf FROM TABLE is_tobj-tvimf.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD delete_extra.
|
||||
|
||||
DELETE FROM tddat WHERE tabname = iv_tabname.
|
||||
DELETE FROM tvdir WHERE tabname = iv_tabname.
|
||||
DELETE FROM tvimf WHERE tabname = iv_tabname.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~has_changed_since.
|
||||
rv_changed = abap_true.
|
||||
ENDMETHOD. "lif_object~has_changed_since
|
||||
|
@ -67,6 +106,7 @@ CLASS lcl_object_tobj IMPLEMENTATION.
|
|||
lt_objs TYPE tt_objs,
|
||||
lt_objsl TYPE tt_objsl,
|
||||
lt_objm TYPE tt_objm,
|
||||
ls_tobj TYPE ty_tobj,
|
||||
lv_type_pos TYPE i.
|
||||
|
||||
lv_type_pos = strlen( ms_item-obj_name ) - 1.
|
||||
|
@ -113,6 +153,11 @@ CLASS lcl_object_tobj IMPLEMENTATION.
|
|||
io_xml->add( iv_name = 'OBJM'
|
||||
ig_data = lt_objm ).
|
||||
|
||||
ls_tobj = read_extra( ls_objh-objectname ).
|
||||
|
||||
io_xml->add( iv_name = 'TOBJ'
|
||||
ig_data = ls_tobj ).
|
||||
|
||||
ENDMETHOD. "serialize
|
||||
|
||||
METHOD lif_object~deserialize.
|
||||
|
@ -121,7 +166,8 @@ CLASS lcl_object_tobj IMPLEMENTATION.
|
|||
ls_objt TYPE objt,
|
||||
lt_objs TYPE tt_objs,
|
||||
lt_objsl TYPE tt_objsl,
|
||||
lt_objm TYPE tt_objm.
|
||||
lt_objm TYPE tt_objm,
|
||||
ls_tobj TYPE ty_tobj.
|
||||
|
||||
|
||||
io_xml->read( EXPORTING iv_name = 'OBJH'
|
||||
|
@ -160,6 +206,11 @@ CLASS lcl_object_tobj IMPLEMENTATION.
|
|||
lcx_exception=>raise( 'error from OBJ_GENERATE' ).
|
||||
ENDIF.
|
||||
|
||||
io_xml->read( EXPORTING iv_name = 'TOBJ'
|
||||
CHANGING cg_data = ls_tobj ).
|
||||
|
||||
update_extra( ls_tobj ).
|
||||
|
||||
ENDMETHOD. "deserialize
|
||||
|
||||
METHOD lif_object~delete.
|
||||
|
@ -188,10 +239,50 @@ CLASS lcl_object_tobj IMPLEMENTATION.
|
|||
lcx_exception=>raise( 'error from OBJ_GENERATE' ).
|
||||
ENDIF.
|
||||
|
||||
delete_extra( ls_objh-objectname ).
|
||||
|
||||
ENDMETHOD. "delete
|
||||
|
||||
METHOD lif_object~jump.
|
||||
lcx_exception=>raise( 'todo, TOBJ jump' ).
|
||||
|
||||
DATA: ls_bcdata TYPE bdcdata,
|
||||
lt_bcdata TYPE STANDARD TABLE OF bdcdata.
|
||||
|
||||
ls_bcdata-program = 'SAPMSVIM'.
|
||||
ls_bcdata-dynpro = '0050'.
|
||||
ls_bcdata-dynbegin = 'X'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'VIMDYNFLDS-VIEWNAME'.
|
||||
ls_bcdata-fval = substring( val = ms_item-obj_name
|
||||
len = strlen( ms_item-obj_name ) - 1 ).
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'VIMDYNFLDS-ELEM_GEN'.
|
||||
ls_bcdata-fval = abap_true.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CLEAR ls_bcdata.
|
||||
ls_bcdata-fnam = 'BDC_OKCODE'.
|
||||
ls_bcdata-fval = '=SHOW'.
|
||||
APPEND ls_bcdata TO lt_bcdata.
|
||||
|
||||
CALL FUNCTION 'ABAP4_CALL_TRANSACTION'
|
||||
STARTING NEW TASK 'GIT'
|
||||
EXPORTING
|
||||
tcode = 'SE54'
|
||||
mode_val = 'E'
|
||||
TABLES
|
||||
using_tab = lt_bcdata
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from ABAP4_CALL_TRANSACTION, TOBJ' ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "jump
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
|
|
|
@ -443,7 +443,7 @@ CLASS lcl_object_tran IMPLEMENTATION.
|
|||
INTO CORRESPONDING FIELDS OF TABLE lt_tpool_i18n
|
||||
FROM tstct
|
||||
WHERE sprsl <> mv_language
|
||||
AND tcode = ms_item-obj_name.
|
||||
AND tcode = ms_item-obj_name. "#EC CI_GENBUFF
|
||||
|
||||
IF lines( lt_tpool_i18n ) > 0.
|
||||
SORT lt_tpool_i18n BY sprsl ASCENDING.
|
||||
|
|
|
@ -14,6 +14,8 @@ CLASS lcl_object_type DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
|||
ALIASES mo_files FOR lif_object~mo_files.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS: c_prefix TYPE c LENGTH 3 VALUE '%_C'.
|
||||
|
||||
METHODS read
|
||||
EXPORTING ev_ddtext TYPE ddtypet-ddtext
|
||||
et_source TYPE abaptxt255_tab
|
||||
|
@ -122,10 +124,6 @@ CLASS lcl_object_type IMPLEMENTATION.
|
|||
|
||||
lv_typegroup = ms_item-obj_name.
|
||||
|
||||
IF lif_object~exists( ) = abap_true.
|
||||
lif_object~delete( ).
|
||||
ENDIF.
|
||||
|
||||
CALL FUNCTION 'RS_DD_TYGR_INSERT_SOURCES'
|
||||
EXPORTING
|
||||
typegroupname = lv_typegroup
|
||||
|
@ -145,7 +143,7 @@ CLASS lcl_object_type IMPLEMENTATION.
|
|||
lcx_exception=>raise( 'error from RS_DD_TYGR_INSERT_SOURCES' ).
|
||||
ENDIF.
|
||||
|
||||
CONCATENATE '%_C' lv_typegroup INTO lv_progname.
|
||||
CONCATENATE c_prefix lv_typegroup INTO lv_progname.
|
||||
UPDATE progdir SET uccheck = abap_true
|
||||
WHERE name = lv_progname.
|
||||
IF sy-subrc <> 0.
|
||||
|
@ -157,7 +155,12 @@ CLASS lcl_object_type IMPLEMENTATION.
|
|||
METHOD lif_object~deserialize.
|
||||
|
||||
DATA: lv_ddtext TYPE ddtypet-ddtext,
|
||||
lt_source TYPE abaptxt255_tab.
|
||||
lt_source TYPE abaptxt255_tab,
|
||||
lv_progname TYPE reposrc-progname,
|
||||
lv_typegroup TYPE rsedd0-typegroup.
|
||||
|
||||
|
||||
lv_typegroup = ms_item-obj_name.
|
||||
|
||||
|
||||
io_xml->read( EXPORTING iv_name = 'DDTEXT'
|
||||
|
@ -165,9 +168,14 @@ CLASS lcl_object_type IMPLEMENTATION.
|
|||
|
||||
lt_source = mo_files->read_abap( ).
|
||||
|
||||
IF lif_object~exists( ) = abap_false.
|
||||
create( iv_ddtext = lv_ddtext
|
||||
it_source = lt_source
|
||||
iv_devclass = iv_package ).
|
||||
ELSE.
|
||||
CONCATENATE c_prefix lv_typegroup INTO lv_progname.
|
||||
INSERT REPORT lv_progname FROM lt_source STATE 'I'.
|
||||
ENDIF.
|
||||
|
||||
lcl_objects_activation=>add_item( ms_item ).
|
||||
|
||||
|
|
|
@ -449,13 +449,7 @@ CLASS lcl_objects_files IMPLEMENTATION.
|
|||
DATA: lv_obj_name TYPE string.
|
||||
|
||||
|
||||
IF ms_item-obj_type = 'SICF'.
|
||||
* multiple SICF nodes with same name cannot be added to repository
|
||||
lv_obj_name = ms_item-obj_name(15).
|
||||
ELSE.
|
||||
lv_obj_name = ms_item-obj_name.
|
||||
ENDIF.
|
||||
|
||||
|
||||
IF iv_extra IS INITIAL.
|
||||
CONCATENATE lv_obj_name '.' ms_item-obj_type '.' iv_ext
|
||||
|
@ -1668,7 +1662,7 @@ CLASS lcl_objects_super IMPLEMENTATION.
|
|||
li_object TYPE REF TO cl_wb_object,
|
||||
li_adt TYPE REF TO object,
|
||||
li_adt_uri_mapper TYPE REF TO object,
|
||||
li_adt_objref TYPE REF TO object.
|
||||
li_adt_objref TYPE REF TO object ##needed.
|
||||
|
||||
FIELD-SYMBOLS: <uri> TYPE string.
|
||||
|
||||
|
@ -1797,22 +1791,10 @@ CLASS lcl_objects_super IMPLEMENTATION.
|
|||
|
||||
METHOD is_adt_jump_possible.
|
||||
|
||||
DATA: li_wb_manager TYPE REF TO if_wb_manager,
|
||||
li_wb_request TYPE REF TO cl_wb_request,
|
||||
DATA: li_wb_request TYPE REF TO cl_wb_request,
|
||||
li_adt_uri_mapper_vit TYPE REF TO object,
|
||||
is_vit_wb_request TYPE abap_bool.
|
||||
|
||||
cl_wb_manager=>get_instance(
|
||||
IMPORTING
|
||||
p_instance = li_wb_manager
|
||||
EXCEPTIONS
|
||||
no_instance = 1
|
||||
OTHERS = 2 ).
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'ADT Jump Error' ).
|
||||
ENDIF.
|
||||
|
||||
cl_wb_request=>create_from_object_ref(
|
||||
EXPORTING
|
||||
p_wb_object = io_object
|
||||
|
@ -1852,6 +1834,381 @@ CLASS lcl_objects_super IMPLEMENTATION.
|
|||
|
||||
ENDCLASS. "lcl_objects_super IMPLEMENTATION
|
||||
|
||||
CLASS lcl_objects_saxx_super DEFINITION ABSTRACT
|
||||
INHERITING FROM lcl_objects_super.
|
||||
* common class for SAPC and SAMC objects
|
||||
|
||||
PUBLIC SECTION.
|
||||
INTERFACES:
|
||||
lif_object.
|
||||
|
||||
PROTECTED SECTION.
|
||||
METHODS:
|
||||
get_persistence_class_name ABSTRACT
|
||||
RETURNING
|
||||
VALUE(r_persistence_class_name) TYPE seoclsname,
|
||||
|
||||
get_data_class_name ABSTRACT
|
||||
RETURNING
|
||||
VALUE(r_data_class_name) TYPE seoclsname,
|
||||
|
||||
get_data_structure_name ABSTRACT
|
||||
RETURNING
|
||||
VALUE(r_data_structure_name) TYPE string.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA: mo_persistence TYPE REF TO if_wb_object_persist,
|
||||
mo_appl_obj_data TYPE REF TO if_wb_object_data_model,
|
||||
mv_data_structure_name TYPE string,
|
||||
mv_appl_obj_cls_name TYPE seoclsname,
|
||||
mv_persistence_cls_name TYPE seoclsname.
|
||||
|
||||
METHODS:
|
||||
create_channel_objects
|
||||
RAISING
|
||||
lcx_exception,
|
||||
|
||||
get_data
|
||||
EXPORTING
|
||||
p_data TYPE any
|
||||
RAISING
|
||||
lcx_exception,
|
||||
|
||||
lock
|
||||
RAISING
|
||||
lcx_exception,
|
||||
|
||||
unlock
|
||||
RAISING
|
||||
lcx_exception,
|
||||
|
||||
get_names.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_objects_saxx_super IMPLEMENTATION.
|
||||
|
||||
METHOD lif_object~has_changed_since.
|
||||
rv_changed = abap_true.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~changed_by.
|
||||
|
||||
DATA: lr_data TYPE REF TO data.
|
||||
|
||||
FIELD-SYMBOLS: <ls_data> TYPE any,
|
||||
<ls_header> TYPE any,
|
||||
<changed_by> TYPE any.
|
||||
|
||||
create_channel_objects( ).
|
||||
|
||||
TRY.
|
||||
CREATE DATA lr_data TYPE (mv_data_structure_name).
|
||||
ASSIGN lr_data->* TO <ls_data>.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( |{ ms_item-obj_name } not supported| ).
|
||||
ENDTRY.
|
||||
|
||||
get_data(
|
||||
IMPORTING
|
||||
p_data = <ls_data> ).
|
||||
|
||||
ASSIGN COMPONENT 'HEADER' OF STRUCTURE <ls_data> TO <ls_header>.
|
||||
ASSERT sy-subrc = 0.
|
||||
ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE <ls_header> TO <changed_by>.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
rv_user = <changed_by>.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~get_metadata.
|
||||
rs_metadata = get_metadata( ).
|
||||
rs_metadata-delete_tadir = abap_true.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~exists.
|
||||
|
||||
DATA: object_key TYPE seu_objkey.
|
||||
|
||||
create_channel_objects( ).
|
||||
|
||||
object_key = ms_item-obj_name.
|
||||
|
||||
TRY.
|
||||
mo_persistence->get( p_object_key = object_key
|
||||
p_version = 'A'
|
||||
p_existence_check_only = abap_true ).
|
||||
|
||||
CATCH cx_swb_object_does_not_exist cx_swb_exception.
|
||||
rv_bool = abap_false.
|
||||
RETURN.
|
||||
ENDTRY.
|
||||
|
||||
rv_bool = abap_true.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~serialize.
|
||||
|
||||
DATA: lr_data TYPE REF TO data.
|
||||
|
||||
FIELD-SYMBOLS: <ls_data> TYPE any,
|
||||
<ls_header> TYPE any,
|
||||
<field> TYPE any.
|
||||
|
||||
create_channel_objects( ).
|
||||
|
||||
TRY.
|
||||
CREATE DATA lr_data TYPE (mv_data_structure_name).
|
||||
ASSIGN lr_data->* TO <ls_data>.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( |{ ms_item-obj_type } not supported| ).
|
||||
ENDTRY.
|
||||
|
||||
get_data(
|
||||
IMPORTING
|
||||
p_data = <ls_data> ).
|
||||
|
||||
ASSIGN COMPONENT 'HEADER' OF STRUCTURE <ls_data> TO <ls_header>.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ASSIGN COMPONENT 'CHANGED_ON' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CHANGED_BY' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CHANGED_AT' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CHANGED_CLNT' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CREATED_ON' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CREATED_BY' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CREATED_AT' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
ASSIGN COMPONENT 'CREATED_CLNT' OF STRUCTURE <ls_header> TO <field>.
|
||||
ASSERT sy-subrc = 0.
|
||||
CLEAR <field>.
|
||||
|
||||
io_xml->add( iv_name = ms_item-obj_type
|
||||
ig_data = <ls_data> ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~deserialize.
|
||||
|
||||
DATA: lr_data TYPE REF TO data.
|
||||
|
||||
FIELD-SYMBOLS: <ls_data> TYPE any.
|
||||
|
||||
create_channel_objects( ).
|
||||
|
||||
TRY.
|
||||
CREATE DATA lr_data TYPE (mv_data_structure_name).
|
||||
ASSIGN lr_data->* TO <ls_data>.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( |{ ms_item-obj_type } not supported| ).
|
||||
ENDTRY.
|
||||
|
||||
io_xml->read(
|
||||
EXPORTING
|
||||
iv_name = ms_item-obj_type
|
||||
CHANGING
|
||||
cg_data = <ls_data> ).
|
||||
|
||||
IF lif_object~exists( ) = abap_true.
|
||||
lif_object~delete( ).
|
||||
ENDIF.
|
||||
|
||||
TRY.
|
||||
lock( ).
|
||||
|
||||
CALL FUNCTION 'RS_CORR_INSERT'
|
||||
EXPORTING
|
||||
object = ms_item-obj_name
|
||||
object_class = ms_item-obj_type
|
||||
mode = 'I'
|
||||
global_lock = abap_true
|
||||
devclass = iv_package
|
||||
master_language = mv_language
|
||||
EXCEPTIONS
|
||||
cancelled = 1
|
||||
permission_failure = 2
|
||||
unknown_objectclass = 3
|
||||
OTHERS = 4.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( |Error occured while creating { ms_item-obj_type }| ).
|
||||
ENDIF.
|
||||
|
||||
mo_appl_obj_data->set_data( <ls_data> ).
|
||||
|
||||
mo_persistence->save( mo_appl_obj_data ).
|
||||
|
||||
unlock( ).
|
||||
|
||||
CATCH cx_swb_exception.
|
||||
lcx_exception=>raise( |Error occured while creating { ms_item-obj_type }| ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~delete.
|
||||
|
||||
DATA: object_key TYPE seu_objkey.
|
||||
|
||||
create_channel_objects( ).
|
||||
|
||||
object_key = ms_item-obj_name.
|
||||
|
||||
TRY.
|
||||
lock( ).
|
||||
|
||||
mo_persistence->delete( object_key ).
|
||||
|
||||
unlock( ).
|
||||
|
||||
CATCH cx_swb_exception.
|
||||
lcx_exception=>raise( |Error occured while deleting { ms_item-obj_type }| ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~jump.
|
||||
|
||||
CALL FUNCTION 'RS_TOOL_ACCESS'
|
||||
EXPORTING
|
||||
operation = 'SHOW'
|
||||
object_name = ms_item-obj_name
|
||||
object_type = ms_item-obj_type.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD create_channel_objects.
|
||||
|
||||
get_names( ).
|
||||
|
||||
TRY.
|
||||
IF mo_appl_obj_data IS NOT BOUND.
|
||||
CREATE OBJECT mo_appl_obj_data TYPE (mv_appl_obj_cls_name).
|
||||
ENDIF.
|
||||
|
||||
IF mo_persistence IS NOT BOUND.
|
||||
CREATE OBJECT mo_persistence TYPE (mv_persistence_cls_name).
|
||||
ENDIF.
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( |{ ms_item-obj_type } not supported| ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_data.
|
||||
|
||||
DATA: object_key TYPE seu_objkey.
|
||||
|
||||
object_key = ms_item-obj_name.
|
||||
|
||||
TRY.
|
||||
mo_persistence->get(
|
||||
EXPORTING
|
||||
p_object_key = object_key
|
||||
p_version = 'A'
|
||||
CHANGING
|
||||
p_object_data = mo_appl_obj_data ).
|
||||
|
||||
CATCH cx_root.
|
||||
lcx_exception=>raise( |{ ms_item-obj_type } not supported| ).
|
||||
ENDTRY.
|
||||
|
||||
mo_appl_obj_data->get_data(
|
||||
IMPORTING
|
||||
p_data = p_data ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lock.
|
||||
|
||||
DATA: objname TYPE trobj_name,
|
||||
object_key TYPE seu_objkey,
|
||||
objtype TYPE trobjtype.
|
||||
|
||||
objname = ms_item-obj_name.
|
||||
object_key = ms_item-obj_name.
|
||||
objtype = ms_item-obj_type.
|
||||
|
||||
mo_persistence->lock(
|
||||
EXPORTING
|
||||
p_objname_tr = objname
|
||||
p_object_key = object_key
|
||||
p_objtype_tr = objtype
|
||||
EXCEPTIONS
|
||||
foreign_lock = 1
|
||||
error_occurred = 2
|
||||
OTHERS = 3 ).
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( |Error occured while locking { ms_item-obj_type } | && objname ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "lock
|
||||
|
||||
METHOD unlock.
|
||||
|
||||
DATA: objname TYPE trobj_name,
|
||||
object_key TYPE seu_objkey,
|
||||
objtype TYPE trobjtype.
|
||||
|
||||
objname = ms_item-obj_name.
|
||||
object_key = ms_item-obj_name.
|
||||
objtype = ms_item-obj_type.
|
||||
|
||||
mo_persistence->unlock( p_objname_tr = objname
|
||||
p_object_key = object_key
|
||||
p_objtype_tr = objtype ).
|
||||
|
||||
ENDMETHOD. "unlock
|
||||
|
||||
METHOD get_names.
|
||||
|
||||
IF mv_data_structure_name IS INITIAL.
|
||||
mv_data_structure_name = get_data_structure_name( ).
|
||||
ENDIF.
|
||||
|
||||
IF mv_appl_obj_cls_name IS INITIAL.
|
||||
mv_appl_obj_cls_name = get_data_class_name( ).
|
||||
ENDIF.
|
||||
|
||||
IF mv_persistence_cls_name IS INITIAL.
|
||||
mv_persistence_cls_name = get_persistence_class_name( ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_object DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
|
|
|
@ -133,6 +133,11 @@ CLASS lcl_objects IMPLEMENTATION.
|
|||
lv_class_name = class_name( is_item ).
|
||||
ENDIF.
|
||||
|
||||
IF lcl_app=>settings( )->read( )->get_experimental_features( ) = abap_true
|
||||
AND is_item-obj_type = 'CLAS'.
|
||||
lv_class_name = 'LCL_OBJECT_CLAS_NEW'.
|
||||
ENDIF.
|
||||
|
||||
TRY.
|
||||
CREATE OBJECT ri_obj TYPE (lv_class_name)
|
||||
EXPORTING
|
||||
|
@ -232,29 +237,22 @@ CLASS lcl_objects IMPLEMENTATION.
|
|||
METHOD jump.
|
||||
|
||||
DATA: li_obj TYPE REF TO lif_object,
|
||||
adt_jump_enabled TYPE abap_bool.
|
||||
lv_adt_jump_enabled TYPE abap_bool.
|
||||
|
||||
li_obj = create_object( is_item = is_item
|
||||
iv_language = lif_defs=>gc_english ).
|
||||
|
||||
adt_jump_enabled = lcl_app=>settings( )->read( )->get_adt_jump_enabled( ).
|
||||
|
||||
IF adt_jump_enabled = abap_true.
|
||||
lv_adt_jump_enabled = lcl_app=>settings( )->read( )->get_adt_jump_enabled( ).
|
||||
|
||||
IF lv_adt_jump_enabled = abap_true.
|
||||
TRY.
|
||||
lcl_objects_super=>jump_adt( i_obj_name = is_item-obj_name
|
||||
i_obj_type = is_item-obj_type ).
|
||||
|
||||
CATCH lcx_exception.
|
||||
|
||||
li_obj->jump( ).
|
||||
|
||||
ENDTRY.
|
||||
|
||||
ELSE.
|
||||
|
||||
li_obj->jump( ).
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "jump
|
||||
|
@ -589,9 +587,7 @@ CLASS lcl_objects IMPLEMENTATION.
|
|||
lt_remote = io_repo->get_files_remote( ).
|
||||
|
||||
lt_results = lcl_file_status=>status( io_repo ).
|
||||
DELETE lt_results WHERE
|
||||
match = abap_true. " Full match
|
||||
* OR rstate IS INITIAL. " no remote changes, only local
|
||||
DELETE lt_results WHERE match = abap_true. " Full match
|
||||
SORT lt_results BY obj_type ASCENDING obj_name ASCENDING.
|
||||
DELETE ADJACENT DUPLICATES FROM lt_results COMPARING obj_type obj_name.
|
||||
|
||||
|
@ -699,13 +695,19 @@ CLASS lcl_objects IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
METHOD compare_remote_to_local.
|
||||
* this method is used for comparing local with remote objects
|
||||
* before pull, this is useful eg. when overwriting a TABL object.
|
||||
* only the main XML file is used for comparison
|
||||
|
||||
DATA: ls_remote_file TYPE lif_defs=>ty_file,
|
||||
lo_remote_version TYPE REF TO lcl_xml_input,
|
||||
lv_count TYPE i,
|
||||
lo_comparison_result TYPE REF TO lif_comparison_result.
|
||||
|
||||
|
||||
IF is_result-filename CS '.XML'.
|
||||
FIND ALL OCCURRENCES OF '.' IN is_result-filename MATCH COUNT lv_count.
|
||||
|
||||
IF is_result-filename CS '.XML' AND lv_count = 2.
|
||||
IF io_object->exists( ) = abap_false.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
|
|
@ -540,7 +540,7 @@ CLASS lcl_gui_page_boverview IMPLEMENTATION.
|
|||
|
||||
CONCATENATE LINES OF it_postdata INTO lv_string.
|
||||
|
||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||
lt_fields = lcl_html_action_utils=>parse_fields( lv_string ).
|
||||
|
||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'source' ##NO_TEXT.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
|
|
@ -40,7 +40,7 @@ CLASS lcl_gui_page_repo_sett IMPLEMENTATION.
|
|||
DATA lv_serialized_post_data TYPE string.
|
||||
|
||||
CONCATENATE LINES OF it_postdata INTO lv_serialized_post_data.
|
||||
rt_post_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_serialized_post_data ).
|
||||
rt_post_fields = lcl_html_action_utils=>parse_fields( lv_serialized_post_data ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
|
|
@ -164,6 +164,13 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
|
|||
mo_settings->set_run_critical_tests( abap_false ).
|
||||
ENDIF.
|
||||
|
||||
READ TABLE it_post_fields ASSIGNING <ls_post_field> WITH KEY name = 'experimental_features'.
|
||||
IF sy-subrc = 0.
|
||||
mo_settings->set_experimental_features( abap_true ).
|
||||
ELSE.
|
||||
mo_settings->set_experimental_features( abap_false ).
|
||||
ENDIF.
|
||||
|
||||
READ TABLE it_post_fields ASSIGNING <ls_post_field> WITH KEY name = 'max_lines'.
|
||||
IF sy-subrc = 0.
|
||||
lv_i_param_value = <ls_post_field>-value.
|
||||
|
@ -219,7 +226,7 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
|
|||
DATA lv_serialized_post_data TYPE string.
|
||||
|
||||
CONCATENATE LINES OF it_postdata INTO lv_serialized_post_data.
|
||||
rt_post_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_serialized_post_data ).
|
||||
rt_post_fields = lcl_html_action_utils=>parse_fields( lv_serialized_post_data ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -263,16 +270,24 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
|
|||
|
||||
METHOD render_development_internals.
|
||||
|
||||
DATA lv_checked TYPE string.
|
||||
DATA: lv_critical_tests TYPE string,
|
||||
lv_experimental TYPE string.
|
||||
|
||||
IF mo_settings->get_run_critical_tests( ) = abap_true.
|
||||
lv_checked = 'checked'.
|
||||
lv_critical_tests = 'checked'.
|
||||
ENDIF.
|
||||
|
||||
IF mo_settings->get_experimental_features( ) = abap_true.
|
||||
lv_experimental = 'checked'.
|
||||
ENDIF.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
ro_html->add( |<h2>abapGit Development Internals settings</h2>| ).
|
||||
ro_html->add( `<input type="checkbox" name="critical_tests" value="X" `
|
||||
&& lv_checked && ` > Enable critical unit tests (see LTCL_DANGEROUS)` ).
|
||||
ro_html->add( `<input type="checkbox" name="critical_tests" `
|
||||
&& lv_critical_tests && ` > Enable critical unit tests (see LTCL_DANGEROUS)` ).
|
||||
ro_html->add( |<br>| ).
|
||||
ro_html->add( `<input type="checkbox" name="experimental_features" `
|
||||
&& lv_experimental && ` > Enable experimental features` ).
|
||||
ro_html->add( |<br>| ).
|
||||
ro_html->add( |<br>| ).
|
||||
|
||||
|
|
|
@ -131,7 +131,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
|
|||
<ls_item> LIKE LINE OF lt_fields.
|
||||
|
||||
CONCATENATE LINES OF it_postdata INTO lv_string.
|
||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( |{ lv_string }| ).
|
||||
lt_fields = lcl_html_action_utils=>parse_fields( lv_string ).
|
||||
|
||||
IF lines( lt_fields ) = 0.
|
||||
lcx_exception=>raise( 'process_stage_list: empty list' ).
|
||||
|
@ -235,6 +235,8 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
|
|||
CREATE OBJECT ro_html.
|
||||
|
||||
lv_filename = is_file-path && is_file-filename.
|
||||
* make sure whitespace is preserved in the DOM
|
||||
REPLACE ALL OCCURRENCES OF ` ` IN lv_filename WITH ' '.
|
||||
|
||||
ro_html->add( |<tr class="{ iv_context }">| ).
|
||||
|
||||
|
|
|
@ -2,6 +2,8 @@
|
|||
*& Include ZABAPGIT_PERSISTENCE
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_settings DEFINITION DEFERRED.
|
||||
|
||||
CLASS lcl_persist_migrate DEFINITION FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
@ -12,6 +14,8 @@ CLASS lcl_persist_migrate DEFINITION FINAL.
|
|||
c_text TYPE string VALUE 'Generated by abapGit' ##NO_TEXT.
|
||||
|
||||
CLASS-METHODS:
|
||||
migrate_settings
|
||||
RAISING lcx_exception,
|
||||
migrate_repo
|
||||
RAISING lcx_exception,
|
||||
migrate_user
|
||||
|
@ -23,6 +27,8 @@ CLASS lcl_persist_migrate DEFINITION FINAL.
|
|||
lock_create
|
||||
RAISING lcx_exception,
|
||||
lock_exists
|
||||
RETURNING VALUE(rv_exists) TYPE abap_bool,
|
||||
settings_exists
|
||||
RETURNING VALUE(rv_exists) TYPE abap_bool.
|
||||
|
||||
ENDCLASS.
|
||||
|
@ -270,6 +276,111 @@ CLASS lcl_persist_background DEFINITION FINAL.
|
|||
|
||||
ENDCLASS. "lcl_persistence_background DEFINITION
|
||||
|
||||
|
||||
CLASS lcl_settings DEFINITION FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
CONSTANTS: c_commitmsg_comment_length_dft TYPE i VALUE 50.
|
||||
CONSTANTS: c_commitmsg_body_size_dft TYPE i VALUE 72.
|
||||
CONSTANTS: c_dbtype_settings TYPE lcl_persistence_db=>ty_type VALUE 'SETTINGS' ##NO_TEXT.
|
||||
|
||||
METHODS: set_proxy_url
|
||||
IMPORTING
|
||||
iv_url TYPE string,
|
||||
set_proxy_port
|
||||
IMPORTING
|
||||
iv_port TYPE string,
|
||||
set_proxy_authentication
|
||||
IMPORTING
|
||||
iv_auth TYPE abap_bool,
|
||||
get_proxy_url
|
||||
RETURNING
|
||||
VALUE(rv_proxy_url) TYPE string,
|
||||
get_proxy_port
|
||||
RETURNING
|
||||
VALUE(rv_port) TYPE string,
|
||||
get_proxy_authentication
|
||||
RETURNING
|
||||
VALUE(rv_auth) TYPE abap_bool,
|
||||
set_run_critical_tests
|
||||
IMPORTING
|
||||
iv_run TYPE abap_bool,
|
||||
get_run_critical_tests
|
||||
RETURNING
|
||||
VALUE(rv_run) TYPE abap_bool,
|
||||
set_experimental_features
|
||||
IMPORTING
|
||||
iv_run TYPE abap_bool,
|
||||
get_experimental_features
|
||||
RETURNING
|
||||
VALUE(rv_run) TYPE abap_bool,
|
||||
set_max_lines
|
||||
IMPORTING iv_lines TYPE i,
|
||||
get_max_lines
|
||||
RETURNING
|
||||
VALUE(rv_lines) TYPE i,
|
||||
set_adt_jump_enanbled
|
||||
IMPORTING
|
||||
iv_adt_jump_enabled TYPE abap_bool,
|
||||
get_adt_jump_enabled
|
||||
RETURNING
|
||||
VALUE(rv_adt_jump_enabled) TYPE abap_bool,
|
||||
set_commitmsg_comment_length
|
||||
IMPORTING
|
||||
iv_length TYPE i,
|
||||
get_commitmsg_comment_length
|
||||
RETURNING
|
||||
VALUE(rv_length) TYPE i,
|
||||
set_commitmsg_body_size
|
||||
IMPORTING
|
||||
iv_length TYPE i,
|
||||
get_commitmsg_body_size
|
||||
RETURNING
|
||||
VALUE(rv_length) TYPE i,
|
||||
get_settings_xml
|
||||
RETURNING
|
||||
VALUE(ev_settings_xml) TYPE string
|
||||
RAISING
|
||||
lcx_exception,
|
||||
set_xml_settings
|
||||
IMPORTING
|
||||
iv_settings_xml TYPE string
|
||||
RAISING
|
||||
lcx_exception,
|
||||
set_defaults.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES: BEGIN OF ty_s_settings,
|
||||
proxy_url TYPE string,
|
||||
proxy_port TYPE string,
|
||||
proxy_auth TYPE string,
|
||||
run_critical_tests TYPE abap_bool,
|
||||
experimental_features TYPE abap_bool,
|
||||
max_lines TYPE i,
|
||||
adt_jump_enabled TYPE abap_bool,
|
||||
commitmsg_comment_length TYPE i,
|
||||
commitmsg_body_size TYPE i,
|
||||
END OF ty_s_settings.
|
||||
DATA: ms_settings TYPE ty_s_settings.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_persist_settings DEFINITION FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS modify
|
||||
IMPORTING
|
||||
io_settings TYPE REF TO lcl_settings
|
||||
RAISING
|
||||
lcx_exception.
|
||||
METHODS read
|
||||
RETURNING
|
||||
VALUE(ro_settings) TYPE REF TO lcl_settings.
|
||||
PRIVATE SECTION.
|
||||
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_persist_background IMPLEMENTATION.
|
||||
|
||||
METHOD constructor.
|
||||
|
@ -1286,6 +1397,170 @@ CLASS lcl_persist_migrate IMPLEMENTATION.
|
|||
migrate_user( ).
|
||||
ENDIF.
|
||||
|
||||
IF settings_exists( ) = abap_false.
|
||||
migrate_settings( ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD settings_exists.
|
||||
|
||||
TRY.
|
||||
lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = '' ).
|
||||
rv_exists = abap_true.
|
||||
CATCH lcx_not_found.
|
||||
rv_exists = abap_false.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD migrate_settings.
|
||||
|
||||
DATA: lr_settings TYPE REF TO lcl_settings.
|
||||
DATA: lr_persist_settings TYPE REF TO lcl_persist_settings.
|
||||
DATA: lv_critical_tests_as_string TYPE string.
|
||||
DATA: lv_critical_tests_as_boolean TYPE abap_bool.
|
||||
DATA: lv_max_lines_as_string TYPE string.
|
||||
DATA: lv_flag TYPE abap_bool.
|
||||
DATA: lv_max_lines_as_integer TYPE i.
|
||||
DATA: lv_s_param_value TYPE string.
|
||||
DATA: lv_i_param_value TYPE i.
|
||||
DATA: lv_adt_jump_enabled_as_string TYPE string.
|
||||
DATA: lv_adt_jump_enabled_as_boolean TYPE abap_bool.
|
||||
|
||||
|
||||
CREATE OBJECT lr_persist_settings.
|
||||
CREATE OBJECT lr_settings.
|
||||
lr_settings->set_defaults( ).
|
||||
|
||||
TRY.
|
||||
lr_settings->set_proxy_url(
|
||||
lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'PROXY_URL' ) ).
|
||||
CATCH lcx_not_found.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lr_settings->set_proxy_port(
|
||||
lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'PROXY_PORT' ) ).
|
||||
CATCH lcx_not_found.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lv_flag = lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'PROXY_AUTH' ).
|
||||
lr_settings->set_proxy_authentication( lv_flag ).
|
||||
CATCH lcx_not_found.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lv_critical_tests_as_string = lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'CRIT_TESTS' ).
|
||||
lv_critical_tests_as_boolean = lv_critical_tests_as_string.
|
||||
lr_settings->set_run_critical_tests( lv_critical_tests_as_boolean ).
|
||||
CATCH lcx_not_found.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lv_max_lines_as_string = lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'MAX_LINES' ).
|
||||
lv_max_lines_as_integer = lv_max_lines_as_string.
|
||||
lr_settings->set_max_lines( lv_max_lines_as_integer ).
|
||||
CATCH lcx_not_found cx_sy_conversion_no_number.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lv_adt_jump_enabled_as_string = lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'ADT_JUMP' ).
|
||||
lv_adt_jump_enabled_as_boolean = lv_adt_jump_enabled_as_string.
|
||||
lr_settings->set_adt_jump_enanbled( lv_adt_jump_enabled_as_boolean ).
|
||||
CATCH lcx_not_found.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lv_s_param_value = lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'COMMENT_LEN' ).
|
||||
lv_i_param_value = lv_s_param_value.
|
||||
lr_settings->set_commitmsg_comment_length( lv_i_param_value ).
|
||||
CATCH lcx_not_found cx_sy_conversion_no_number.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lv_s_param_value = lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'BODY_SIZE' ).
|
||||
lv_i_param_value = lv_s_param_value.
|
||||
lr_settings->set_commitmsg_body_size( lv_i_param_value ).
|
||||
CATCH lcx_not_found cx_sy_conversion_no_number.
|
||||
ENDTRY.
|
||||
|
||||
lr_persist_settings->modify( io_settings = lr_settings ).
|
||||
|
||||
TRY.
|
||||
lcl_app=>db( )->delete(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'PROXY_URL' ).
|
||||
CATCH lcx_exception.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lcl_app=>db( )->delete(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'PROXY_PORT' ).
|
||||
CATCH lcx_exception.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lcl_app=>db( )->delete(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'PROXY_AUTH' ).
|
||||
CATCH lcx_exception.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lcl_app=>db( )->delete(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'CRIT_TESTS' ).
|
||||
CATCH lcx_exception.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lcl_app=>db( )->delete(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'MAX_LINES' ).
|
||||
CATCH lcx_exception.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lcl_app=>db( )->delete(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'ADT_JUMP' ).
|
||||
CATCH lcx_exception.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lcl_app=>db( )->delete(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'COMMENT_LEN' ).
|
||||
CATCH lcx_exception.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lcl_app=>db( )->delete(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'BODY_SIZE' ).
|
||||
CATCH lcx_exception.
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD migrate_repo.
|
||||
|
@ -1531,148 +1806,119 @@ CLASS lcl_persist_migrate IMPLEMENTATION.
|
|||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_settings DEFINITION FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
CONSTANTS: c_commitmsg_comment_length_dft TYPE i VALUE 50.
|
||||
CONSTANTS: c_commitmsg_body_size_dft TYPE i VALUE 72.
|
||||
|
||||
METHODS set_proxy_url
|
||||
IMPORTING
|
||||
iv_url TYPE string.
|
||||
METHODS set_proxy_port
|
||||
IMPORTING
|
||||
iv_port TYPE string.
|
||||
METHODS set_proxy_authentication
|
||||
IMPORTING
|
||||
iv_auth TYPE abap_bool.
|
||||
METHODS get_proxy_url
|
||||
RETURNING
|
||||
VALUE(rv_proxy_url) TYPE string.
|
||||
METHODS get_proxy_port
|
||||
RETURNING
|
||||
VALUE(rv_port) TYPE string.
|
||||
METHODS get_proxy_authentication
|
||||
RETURNING
|
||||
VALUE(rv_auth) TYPE abap_bool.
|
||||
METHODS set_run_critical_tests
|
||||
IMPORTING
|
||||
iv_run TYPE abap_bool.
|
||||
METHODS
|
||||
get_run_critical_tests
|
||||
RETURNING VALUE(rv_run) TYPE abap_bool.
|
||||
METHODS set_max_lines
|
||||
IMPORTING iv_lines TYPE i.
|
||||
METHODS get_max_lines
|
||||
RETURNING
|
||||
VALUE(rv_lines) TYPE i.
|
||||
METHODS set_adt_jump_enanbled
|
||||
IMPORTING iv_adt_jump_enabled TYPE abap_bool.
|
||||
METHODS get_adt_jump_enabled
|
||||
RETURNING
|
||||
VALUE(rv_adt_jump_enabled) TYPE abap_bool.
|
||||
METHODS set_commitmsg_comment_length
|
||||
IMPORTING iv_length TYPE i.
|
||||
METHODS get_commitmsg_comment_length
|
||||
RETURNING
|
||||
VALUE(rv_length) TYPE i.
|
||||
METHODS set_commitmsg_body_size
|
||||
IMPORTING iv_length TYPE i.
|
||||
METHODS get_commitmsg_body_size
|
||||
RETURNING
|
||||
VALUE(rv_length) TYPE i.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA: mv_proxy_url TYPE string,
|
||||
mv_proxy_port TYPE string,
|
||||
mv_proxy_auth TYPE string,
|
||||
mv_run_critical_tests TYPE abap_bool,
|
||||
mv_lines TYPE i,
|
||||
mv_adt_jump_enabled TYPE abap_bool,
|
||||
mv_commitmsg_comment_length TYPE i,
|
||||
mv_commitmsg_body_size TYPE i.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_settings IMPLEMENTATION.
|
||||
|
||||
METHOD set_proxy_authentication.
|
||||
mv_proxy_auth = iv_auth.
|
||||
ms_settings-proxy_auth = iv_auth.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_proxy_authentication.
|
||||
rv_auth = mv_proxy_auth.
|
||||
rv_auth = ms_settings-proxy_auth.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_proxy_url.
|
||||
mv_proxy_url = iv_url.
|
||||
ms_settings-proxy_url = iv_url.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_proxy_url.
|
||||
rv_proxy_url = mv_proxy_url.
|
||||
rv_proxy_url = ms_settings-proxy_url.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_proxy_port.
|
||||
mv_proxy_port = iv_port.
|
||||
ms_settings-proxy_port = iv_port.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_proxy_port.
|
||||
rv_port = mv_proxy_port.
|
||||
rv_port = ms_settings-proxy_port.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_run_critical_tests.
|
||||
mv_run_critical_tests = iv_run.
|
||||
ms_settings-run_critical_tests = iv_run.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_run_critical_tests.
|
||||
rv_run = mv_run_critical_tests.
|
||||
rv_run = ms_settings-run_critical_tests.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_experimental_features.
|
||||
ms_settings-experimental_features = iv_run.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_experimental_features.
|
||||
rv_run = ms_settings-experimental_features.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_max_lines.
|
||||
rv_lines = mv_lines.
|
||||
rv_lines = ms_settings-max_lines.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_max_lines.
|
||||
mv_lines = iv_lines.
|
||||
ms_settings-max_lines = iv_lines.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_adt_jump_enabled.
|
||||
rv_adt_jump_enabled = mv_adt_jump_enabled.
|
||||
rv_adt_jump_enabled = ms_settings-adt_jump_enabled.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_adt_jump_enanbled.
|
||||
mv_adt_jump_enabled = iv_adt_jump_enabled.
|
||||
ms_settings-adt_jump_enabled = iv_adt_jump_enabled.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_commitmsg_comment_length.
|
||||
rv_length = mv_commitmsg_comment_length.
|
||||
rv_length = ms_settings-commitmsg_comment_length.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_commitmsg_comment_length.
|
||||
mv_commitmsg_comment_length = iv_length.
|
||||
ms_settings-commitmsg_comment_length = iv_length.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_commitmsg_body_size.
|
||||
rv_length = mv_commitmsg_body_size.
|
||||
rv_length = ms_settings-commitmsg_body_size.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_commitmsg_body_size.
|
||||
mv_commitmsg_body_size = iv_length.
|
||||
ms_settings-commitmsg_body_size = iv_length.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
METHOD get_settings_xml.
|
||||
|
||||
CLASS lcl_persist_settings DEFINITION FINAL.
|
||||
DATA: lr_output TYPE REF TO lcl_xml_output.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS modify
|
||||
IMPORTING
|
||||
io_settings TYPE REF TO lcl_settings
|
||||
RAISING
|
||||
lcx_exception.
|
||||
METHODS read
|
||||
RETURNING
|
||||
VALUE(ro_settings) TYPE REF TO lcl_settings.
|
||||
CREATE OBJECT lr_output.
|
||||
|
||||
lr_output->add( iv_name = lcl_settings=>c_dbtype_settings
|
||||
ig_data = ms_settings ).
|
||||
|
||||
ev_settings_xml = lr_output->render( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_xml_settings.
|
||||
|
||||
DATA: lr_input TYPE REF TO lcl_xml_input.
|
||||
|
||||
CREATE OBJECT lr_input EXPORTING iv_xml = iv_settings_xml.
|
||||
|
||||
CLEAR ms_settings.
|
||||
|
||||
lr_input->read( EXPORTING iv_name = lcl_settings=>c_dbtype_settings
|
||||
CHANGING cg_data = ms_settings ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_defaults.
|
||||
|
||||
CLEAR ms_settings.
|
||||
|
||||
set_proxy_authentication( abap_false ).
|
||||
set_run_critical_tests( abap_false ).
|
||||
set_experimental_features( abap_false ).
|
||||
set_max_lines( 500 ).
|
||||
set_adt_jump_enanbled( abap_false ).
|
||||
set_commitmsg_comment_length( lcl_settings=>c_commitmsg_comment_length_dft ).
|
||||
set_commitmsg_body_size( lcl_settings=>c_commitmsg_body_size_dft ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
@ -1680,140 +1926,27 @@ CLASS lcl_persist_settings IMPLEMENTATION.
|
|||
|
||||
METHOD modify.
|
||||
|
||||
* todo, refactor this class to use XML and only 1 row in the database?
|
||||
|
||||
lcl_app=>db( )->modify(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'PROXY_URL'
|
||||
iv_data = io_settings->get_proxy_url( ) ).
|
||||
|
||||
lcl_app=>db( )->modify(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'PROXY_PORT'
|
||||
iv_data = io_settings->get_proxy_port( ) ).
|
||||
|
||||
lcl_app=>db( )->modify(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'PROXY_AUTH'
|
||||
iv_data = io_settings->get_proxy_authentication( ) ).
|
||||
|
||||
lcl_app=>db( )->modify(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'CRIT_TESTS'
|
||||
iv_data = io_settings->get_run_critical_tests( ) ).
|
||||
|
||||
lcl_app=>db( )->modify(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'MAX_LINES'
|
||||
iv_data = |{ io_settings->get_max_lines( ) }| ).
|
||||
|
||||
lcl_app=>db( )->modify(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'ADT_JUMP'
|
||||
iv_data = io_settings->get_adt_jump_enabled( ) ).
|
||||
|
||||
lcl_app=>db( )->modify(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'COMMENT_LEN'
|
||||
iv_data = |{ io_settings->get_commitmsg_comment_length( ) }| ).
|
||||
|
||||
lcl_app=>db( )->modify(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'BODY_SIZE'
|
||||
iv_data = |{ io_settings->get_commitmsg_body_size( ) }| ).
|
||||
iv_type = lcl_settings=>c_dbtype_settings
|
||||
iv_value = ''
|
||||
iv_data = io_settings->get_settings_xml( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD read.
|
||||
|
||||
DATA: lv_critical_tests_as_string TYPE string,
|
||||
lv_critical_tests_as_boolean TYPE abap_bool,
|
||||
lv_max_lines_as_string TYPE string,
|
||||
lv_flag TYPE abap_bool,
|
||||
lv_max_lines_as_integer TYPE i,
|
||||
lv_s_param_value TYPE string,
|
||||
lv_i_param_value TYPE i,
|
||||
lv_adt_jump_enabled_as_string TYPE string,
|
||||
lv_adt_jump_enabled_as_boolean TYPE abap_bool.
|
||||
|
||||
|
||||
CREATE OBJECT ro_settings.
|
||||
|
||||
TRY.
|
||||
ro_settings->set_proxy_url(
|
||||
lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'PROXY_URL' ) ).
|
||||
CATCH lcx_not_found.
|
||||
ro_settings->set_proxy_url( '' ).
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
ro_settings->set_proxy_port(
|
||||
lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'PROXY_PORT' ) ).
|
||||
CATCH lcx_not_found.
|
||||
ro_settings->set_proxy_port( '' ).
|
||||
ENDTRY.
|
||||
ro_settings->set_xml_settings(
|
||||
lcl_app=>db( )->read( iv_type = lcl_settings=>c_dbtype_settings
|
||||
iv_value = '' ) ).
|
||||
|
||||
TRY.
|
||||
lv_flag = lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'PROXY_AUTH' ).
|
||||
ro_settings->set_proxy_authentication( lv_flag ).
|
||||
CATCH lcx_not_found.
|
||||
ro_settings->set_proxy_authentication( abap_false ).
|
||||
ENDTRY.
|
||||
CATCH lcx_not_found lcx_exception.
|
||||
|
||||
TRY.
|
||||
lv_critical_tests_as_string = lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'CRIT_TESTS' ).
|
||||
lv_critical_tests_as_boolean = lv_critical_tests_as_string.
|
||||
ro_settings->set_run_critical_tests( lv_critical_tests_as_boolean ).
|
||||
CATCH lcx_not_found.
|
||||
ro_settings->set_run_critical_tests( abap_false ).
|
||||
ENDTRY.
|
||||
ro_settings->set_defaults( ).
|
||||
|
||||
TRY.
|
||||
lv_max_lines_as_string = lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'MAX_LINES' ).
|
||||
lv_max_lines_as_integer = lv_max_lines_as_string.
|
||||
ro_settings->set_max_lines( lv_max_lines_as_integer ).
|
||||
CATCH lcx_not_found cx_sy_conversion_no_number.
|
||||
ro_settings->set_max_lines( 500 ). " default
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lv_adt_jump_enabled_as_string = lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'ADT_JUMP' ).
|
||||
lv_adt_jump_enabled_as_boolean = lv_adt_jump_enabled_as_string.
|
||||
ro_settings->set_adt_jump_enanbled( lv_adt_jump_enabled_as_boolean ).
|
||||
CATCH lcx_not_found.
|
||||
ro_settings->set_adt_jump_enanbled( abap_false ).
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lv_s_param_value = lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'COMMENT_LEN' ).
|
||||
lv_i_param_value = lv_s_param_value.
|
||||
ro_settings->set_commitmsg_comment_length( lv_i_param_value ).
|
||||
CATCH lcx_not_found cx_sy_conversion_no_number.
|
||||
ro_settings->set_commitmsg_comment_length( lcl_settings=>c_commitmsg_comment_length_dft ). " default
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lv_s_param_value = lcl_app=>db( )->read(
|
||||
iv_type = 'SETTINGS'
|
||||
iv_value = 'BODY_SIZE' ).
|
||||
lv_i_param_value = lv_s_param_value.
|
||||
ro_settings->set_commitmsg_body_size( lv_i_param_value ).
|
||||
CATCH lcx_not_found cx_sy_conversion_no_number.
|
||||
ro_settings->set_commitmsg_body_size( lcl_settings=>c_commitmsg_body_size_dft ). " default
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
|
|
@ -130,7 +130,12 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL.
|
|||
push
|
||||
IMPORTING is_comment TYPE lif_defs=>ty_comment
|
||||
io_stage TYPE REF TO lcl_stage
|
||||
RAISING lcx_exception.
|
||||
RAISING lcx_exception,
|
||||
get_unnecessary_local_objs
|
||||
RETURNING VALUE(rt_unnecessary_local_objects) TYPE LIF_DEFS=>TY_TADIR_TT
|
||||
RAISING lcx_exception,
|
||||
delete_unnecessary_local_objs
|
||||
RAISING lcx_exception lcx_cancel.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA:
|
||||
|
@ -149,7 +154,7 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL.
|
|||
actualize_head_branch
|
||||
RAISING lcx_exception,
|
||||
delete_initial_online_repo
|
||||
importing iv_commit type flag
|
||||
IMPORTING iv_commit TYPE flag
|
||||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS. "lcl_repo_online DEFINITION
|
||||
|
|
|
@ -321,6 +321,61 @@ CLASS lcl_repo_online IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. " delete_initial_online_repo
|
||||
|
||||
METHOD delete_unnecessary_local_objs.
|
||||
|
||||
DATA: lt_tadir TYPE lif_defs=>ty_tadir_tt.
|
||||
|
||||
lt_tadir = get_unnecessary_local_objs( ).
|
||||
|
||||
IF lines( lt_tadir ) > 0.
|
||||
|
||||
lcl_objects=>delete( lt_tadir ).
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. " delete_unneccessary_local_objs.
|
||||
|
||||
|
||||
METHOD get_unnecessary_local_objs.
|
||||
|
||||
DATA: lt_tadir TYPE lif_defs=>ty_tadir_tt,
|
||||
lt_tadir_unique TYPE HASHED TABLE OF lif_defs=>ty_tadir
|
||||
WITH UNIQUE KEY pgmid object obj_name,
|
||||
lt_local TYPE lif_defs=>ty_files_item_tt,
|
||||
lt_remote TYPE lif_defs=>ty_files_tt,
|
||||
lt_status TYPE lif_defs=>ty_results_tt,
|
||||
lt_package TYPE lcl_persistence_repo=>ty_repo-package.
|
||||
|
||||
FIELD-SYMBOLS: <status> TYPE lif_defs=>ty_result,
|
||||
<tadir> TYPE lif_defs=>ty_tadir.
|
||||
|
||||
" delete objects which are added locally but are not in remote repo
|
||||
lt_local = me->get_files_local( ).
|
||||
lt_remote = me->get_files_remote( ).
|
||||
lt_status = me->status( ).
|
||||
|
||||
lt_package = me->get_package( ).
|
||||
lt_tadir = lcl_tadir=>read( lt_package ).
|
||||
|
||||
LOOP AT lt_status ASSIGNING <status>
|
||||
WHERE lstate = lif_defs=>gc_state-added.
|
||||
|
||||
READ TABLE lt_tadir ASSIGNING <tadir>
|
||||
WITH KEY pgmid = 'R3TR'
|
||||
object = <status>-obj_type
|
||||
obj_name = <status>-obj_name
|
||||
devclass = <status>-package
|
||||
BINARY SEARCH.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
INSERT <tadir> INTO TABLE lt_tadir_unique.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
rt_unnecessary_local_objects = lt_tadir_unique.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS. "lcl_repo_online IMPLEMENTATION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -908,9 +963,14 @@ CLASS lcl_repo_srv IMPLEMENTATION.
|
|||
lcx_exception=>raise( 'not possible to use $TMP, create new (local) package' ).
|
||||
ENDIF.
|
||||
|
||||
IF lcl_exit=>get_instance( )->allow_sap_objects( ) = abap_true.
|
||||
SELECT SINGLE devclass FROM tdevc INTO lv_devclass
|
||||
WHERE devclass = iv_package. "#EC CI_GENBUFF
|
||||
ELSE.
|
||||
SELECT SINGLE devclass FROM tdevc INTO lv_devclass
|
||||
WHERE devclass = iv_package
|
||||
AND as4user <> 'SAP'. "#EC CI_GENBUFF
|
||||
ENDIF.
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'package not found or not allowed' ).
|
||||
ENDIF.
|
||||
|
|
|
@ -49,7 +49,6 @@ CLASS lcl_services_db IMPLEMENTATION.
|
|||
METHOD update.
|
||||
|
||||
ASSERT is_content-type IS NOT INITIAL.
|
||||
ASSERT is_content-value IS NOT INITIAL.
|
||||
|
||||
lcl_app=>db( )->update(
|
||||
iv_type = is_content-type
|
||||
|
|
|
@ -48,8 +48,8 @@ CLASS lcl_services_git IMPLEMENTATION.
|
|||
METHOD reset.
|
||||
|
||||
DATA: lo_repo TYPE REF TO lcl_repo_online,
|
||||
lv_answer TYPE c LENGTH 1.
|
||||
|
||||
lv_answer TYPE c LENGTH 1,
|
||||
lt_unnecessary_local_objs TYPE lif_defs=>ty_tadir_tt.
|
||||
|
||||
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
|
||||
|
||||
|
@ -71,6 +71,26 @@ CLASS lcl_services_git IMPLEMENTATION.
|
|||
RAISE EXCEPTION TYPE lcx_cancel.
|
||||
ENDIF.
|
||||
|
||||
lt_unnecessary_local_objs = lo_repo->get_unnecessary_local_objs( ).
|
||||
|
||||
IF lines( lt_unnecessary_local_objs ) > 0.
|
||||
|
||||
lv_answer = lcl_popups=>popup_to_confirm(
|
||||
titlebar = 'Question'
|
||||
text_question = |Delete { lines( lt_unnecessary_local_objs ) } unnecessary local objects?|
|
||||
text_button_1 = 'Yes'
|
||||
icon_button_1 = 'ICON_OKAY'
|
||||
text_button_2 = 'No'
|
||||
icon_button_2 = 'ICON_CANCEL'
|
||||
default_button = '2'
|
||||
display_cancel_button = abap_false ). "#EC NOTEXT
|
||||
|
||||
IF lv_answer = '1'.
|
||||
lo_repo->delete_unnecessary_local_objs( ).
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
lo_repo->deserialize( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
|
|
@ -21,15 +21,26 @@ CLASS lcl_tadir DEFINITION FINAL.
|
|||
IMPORTING iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
|
||||
iv_object TYPE tadir-object
|
||||
iv_obj_name TYPE tadir-obj_name
|
||||
RETURNING VALUE(rs_tadir) TYPE tadir,
|
||||
RETURNING VALUE(rs_tadir) TYPE tadir
|
||||
RAISING lcx_exception,
|
||||
read_single_sicf
|
||||
IMPORTING iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
|
||||
iv_obj_name TYPE tadir-obj_name
|
||||
RETURNING VALUE(rs_tadir) TYPE tadir
|
||||
RAISING lcx_exception,
|
||||
get_object_package
|
||||
IMPORTING iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
|
||||
iv_object TYPE tadir-object
|
||||
iv_obj_name TYPE tadir-obj_name
|
||||
RETURNING VALUE(rv_devclass) TYPE tadir-devclass.
|
||||
RETURNING VALUE(rv_devclass) TYPE tadir-devclass
|
||||
RAISING lcx_exception.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CLASS-METHODS:
|
||||
read_sicf_url
|
||||
IMPORTING iv_obj_name TYPE tadir-obj_name
|
||||
RETURNING VALUE(rv_hash) TYPE text25
|
||||
RAISING lcx_exception,
|
||||
check_exists
|
||||
IMPORTING it_tadir TYPE lif_defs=>ty_tadir_tt
|
||||
RETURNING VALUE(rt_tadir) TYPE lif_defs=>ty_tadir_tt
|
||||
|
@ -57,18 +68,49 @@ CLASS lcl_tadir IMPLEMENTATION.
|
|||
|
||||
|
||||
IF iv_object = 'SICF'.
|
||||
CONCATENATE iv_obj_name '%' INTO lv_obj_name.
|
||||
rs_tadir = read_single_sicf( iv_pgmid = iv_pgmid
|
||||
iv_obj_name = iv_obj_name ).
|
||||
ELSE.
|
||||
lv_obj_name = iv_obj_name.
|
||||
ENDIF.
|
||||
|
||||
SELECT SINGLE * FROM tadir INTO rs_tadir
|
||||
WHERE pgmid = iv_pgmid
|
||||
AND object = iv_object
|
||||
AND obj_name LIKE lv_obj_name. "#EC CI_SUBRC "#EC CI_GENBUFF
|
||||
AND obj_name = iv_obj_name. "#EC CI_SUBRC
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "read_single
|
||||
|
||||
METHOD read_single_sicf.
|
||||
|
||||
DATA: lt_tadir TYPE STANDARD TABLE OF tadir WITH DEFAULT KEY,
|
||||
lv_hash TYPE text25,
|
||||
lv_obj_name TYPE tadir-obj_name.
|
||||
|
||||
FIELD-SYMBOLS: <ls_tadir> LIKE LINE OF lt_tadir.
|
||||
|
||||
|
||||
lv_hash = iv_obj_name+15.
|
||||
CONCATENATE iv_obj_name(15) '%' INTO lv_obj_name.
|
||||
|
||||
SELECT * FROM tadir INTO TABLE lt_tadir
|
||||
WHERE pgmid = iv_pgmid
|
||||
AND object = 'SICF'
|
||||
AND obj_name LIKE lv_obj_name.
|
||||
|
||||
LOOP AT lt_tadir ASSIGNING <ls_tadir>.
|
||||
IF read_sicf_url( <ls_tadir>-obj_name ) = lv_hash.
|
||||
rs_tadir = <ls_tadir>.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
IF lines( lt_tadir ) = 1.
|
||||
READ TABLE lt_tadir INDEX 1 ASSIGNING <ls_tadir>.
|
||||
ASSERT sy-subrc = 0.
|
||||
rs_tadir = <ls_tadir>.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_object_package.
|
||||
|
||||
DATA ls_tadir TYPE tadir.
|
||||
|
@ -85,6 +127,34 @@ CLASS lcl_tadir IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "get_object_package.
|
||||
|
||||
METHOD read_sicf_url.
|
||||
|
||||
DATA: lv_name TYPE icfname,
|
||||
lv_url TYPE string,
|
||||
lv_parguid TYPE icfparguid.
|
||||
|
||||
|
||||
lv_name = iv_obj_name.
|
||||
lv_parguid = iv_obj_name+15.
|
||||
|
||||
cl_icf_tree=>if_icf_tree~get_info_from_serv(
|
||||
EXPORTING
|
||||
icf_name = lv_name
|
||||
icfparguid = lv_parguid
|
||||
IMPORTING
|
||||
url = lv_url
|
||||
EXCEPTIONS
|
||||
wrong_name = 1
|
||||
wrong_parguid = 2
|
||||
incorrect_service = 3
|
||||
no_authority = 4
|
||||
OTHERS = 5 ).
|
||||
IF sy-subrc = 0.
|
||||
rv_hash = lcl_hash=>sha1_raw( lcl_convert=>string_to_xstring_utf8( lv_url ) ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_exists.
|
||||
|
||||
DATA: lv_exists TYPE abap_bool,
|
||||
|
@ -137,6 +207,7 @@ CLASS lcl_tadir IMPLEMENTATION.
|
|||
SELECT * FROM tadir
|
||||
INTO CORRESPONDING FIELDS OF TABLE rt_tadir
|
||||
WHERE devclass = iv_package
|
||||
AND pgmid = 'R3TR'
|
||||
AND object <> 'DEVC'
|
||||
AND object <> 'SOTR'
|
||||
AND object <> 'SFB1'
|
||||
|
@ -157,7 +228,8 @@ CLASS lcl_tadir IMPLEMENTATION.
|
|||
|
||||
CASE <ls_tadir>-object.
|
||||
WHEN 'SICF'.
|
||||
<ls_tadir>-obj_name = <ls_tadir>-obj_name(15).
|
||||
* replace the internal GUID with a hash of the path
|
||||
<ls_tadir>-obj_name+15 = read_sicf_url( <ls_tadir>-obj_name ).
|
||||
ENDCASE.
|
||||
ENDLOOP.
|
||||
|
||||
|
|
|
@ -62,6 +62,7 @@ ENDCLASS. "ltcl_convert DEFINITION
|
|||
CLASS ltcl_convert IMPLEMENTATION.
|
||||
|
||||
METHOD convert_int.
|
||||
|
||||
DATA: lv_xstring TYPE xstring,
|
||||
lv_input TYPE i,
|
||||
lv_result TYPE i.
|
||||
|
@ -69,8 +70,7 @@ CLASS ltcl_convert IMPLEMENTATION.
|
|||
|
||||
DO 1000 TIMES.
|
||||
lv_input = sy-index.
|
||||
lv_xstring = lcl_convert=>int_to_xstring( iv_i = lv_input
|
||||
iv_length = 4 ).
|
||||
lv_xstring = lcl_convert=>int_to_xstring4( lv_input ).
|
||||
lv_result = lcl_convert=>xstring_to_int( lv_xstring ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
|
@ -1004,9 +1004,6 @@ CLASS ltcl_git_pack_decode_commit IMPLEMENTATION.
|
|||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ms_raw-committer
|
||||
exp = 'committer' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ms_raw-body
|
||||
exp = 'comment' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ms_raw-parent
|
||||
exp = 'parent1' ).
|
||||
|
@ -1014,6 +1011,10 @@ CLASS ltcl_git_pack_decode_commit IMPLEMENTATION.
|
|||
act = ms_raw-parent2
|
||||
exp = 'parent2' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = ms_raw-body
|
||||
exp = 'comment+' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD decode2.
|
||||
|
@ -1035,13 +1036,14 @@ CLASS ltcl_git_pack_decode_commit IMPLEMENTATION.
|
|||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ms_raw-committer
|
||||
exp = 'committer' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ms_raw-body
|
||||
exp = 'comment' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ms_raw-parent
|
||||
exp = '' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = ms_raw-body
|
||||
exp = 'comment+' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD decode3.
|
||||
|
@ -1064,13 +1066,14 @@ CLASS ltcl_git_pack_decode_commit IMPLEMENTATION.
|
|||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ms_raw-committer
|
||||
exp = 'committer' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ms_raw-body
|
||||
exp = 'comment' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ms_raw-parent
|
||||
exp = 'parent1' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_char_cp(
|
||||
act = ms_raw-body
|
||||
exp = 'comment+' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
@ -1084,11 +1087,15 @@ CLASS ltcl_git_pack DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FI
|
|||
|
||||
PRIVATE SECTION.
|
||||
|
||||
CONSTANTS: c_sha TYPE lif_defs=>ty_sha1 VALUE '5f46cb3c4b7f0b3600b64f744cde614a283a88dc'.
|
||||
|
||||
METHODS:
|
||||
tree FOR TESTING
|
||||
RAISING lcx_exception,
|
||||
commit FOR TESTING
|
||||
RAISING lcx_exception,
|
||||
commit_newline FOR TESTING
|
||||
RAISING lcx_exception,
|
||||
pack_short FOR TESTING
|
||||
RAISING lcx_exception,
|
||||
pack_long FOR TESTING
|
||||
|
@ -1096,7 +1103,11 @@ CLASS ltcl_git_pack DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FI
|
|||
pack_multiple FOR TESTING
|
||||
RAISING lcx_exception,
|
||||
sort_tree1 FOR TESTING,
|
||||
sort_tree2 FOR TESTING.
|
||||
sort_tree2 FOR TESTING,
|
||||
type_and_length01 FOR TESTING
|
||||
RAISING lcx_exception,
|
||||
type_and_length02 FOR TESTING
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS:
|
||||
object_blob
|
||||
|
@ -1113,6 +1124,34 @@ ENDCLASS. "test DEFINITION
|
|||
*----------------------------------------------------------------------*
|
||||
CLASS ltcl_git_pack IMPLEMENTATION.
|
||||
|
||||
METHOD type_and_length01.
|
||||
|
||||
DATA: lv_result TYPE xstring.
|
||||
|
||||
lv_result = lcl_git_pack=>type_and_length(
|
||||
iv_type = lif_defs=>gc_type-commit
|
||||
iv_length = 100 ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lv_result
|
||||
exp = '9406' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD type_and_length02.
|
||||
|
||||
DATA: lv_result TYPE xstring.
|
||||
|
||||
lv_result = lcl_git_pack=>type_and_length(
|
||||
iv_type = lif_defs=>gc_type-blob
|
||||
iv_length = 90000 ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lv_result
|
||||
exp = 'B0F92B' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sort_tree1.
|
||||
|
||||
DATA: lt_tree TYPE lcl_git_pack=>ty_nodes_tt.
|
||||
|
@ -1294,8 +1333,6 @@ CLASS ltcl_git_pack IMPLEMENTATION.
|
|||
|
||||
METHOD tree.
|
||||
|
||||
CONSTANTS: lc_sha TYPE lif_defs=>ty_sha1 VALUE '5f46cb3c4b7f0b3600b64f744cde614a283a88dc'.
|
||||
|
||||
DATA: lt_nodes TYPE lcl_git_pack=>ty_nodes_tt,
|
||||
ls_node LIKE LINE OF lt_nodes,
|
||||
lv_data TYPE xstring,
|
||||
|
@ -1304,7 +1341,7 @@ CLASS ltcl_git_pack IMPLEMENTATION.
|
|||
CLEAR ls_node.
|
||||
ls_node-chmod = lif_defs=>gc_chmod-file.
|
||||
ls_node-name = 'foobar.txt'.
|
||||
ls_node-sha1 = lc_sha.
|
||||
ls_node-sha1 = c_sha.
|
||||
APPEND ls_node TO lt_nodes.
|
||||
|
||||
lv_data = lcl_git_pack=>encode_tree( lt_nodes ).
|
||||
|
@ -1318,16 +1355,13 @@ CLASS ltcl_git_pack IMPLEMENTATION.
|
|||
|
||||
METHOD commit.
|
||||
|
||||
CONSTANTS: lc_tree TYPE lif_defs=>ty_sha1 VALUE '5f46cb3c4b7f0b3600b64f744cde614a283a88dc',
|
||||
lc_parent TYPE lif_defs=>ty_sha1 VALUE '1236cb3c4b7f0b3600b64f744cde614a283a88dc'.
|
||||
|
||||
DATA: ls_commit TYPE lcl_git_pack=>ty_commit,
|
||||
ls_result TYPE lcl_git_pack=>ty_commit,
|
||||
lv_data TYPE xstring.
|
||||
|
||||
|
||||
ls_commit-tree = lc_tree.
|
||||
ls_commit-parent = lc_parent.
|
||||
ls_commit-tree = c_sha.
|
||||
ls_commit-parent = c_sha.
|
||||
ls_commit-author = 'larshp <larshp@hotmail.com> 1387823471 +0100'.
|
||||
ls_commit-committer = 'larshp <larshp@hotmail.com> 1387823471 +0100'.
|
||||
ls_commit-body = 'very informative'.
|
||||
|
@ -1341,6 +1375,28 @@ CLASS ltcl_git_pack IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "commit
|
||||
|
||||
METHOD commit_newline.
|
||||
|
||||
DATA: ls_commit TYPE lcl_git_pack=>ty_commit,
|
||||
ls_result TYPE lcl_git_pack=>ty_commit,
|
||||
lv_data TYPE xstring.
|
||||
|
||||
|
||||
ls_commit-tree = c_sha.
|
||||
ls_commit-parent = c_sha.
|
||||
ls_commit-author = 'larshp <larshp@hotmail.com> 1387823471 +0100'.
|
||||
ls_commit-committer = 'larshp <larshp@hotmail.com> 1387823471 +0100'.
|
||||
ls_commit-body = 'very informative' && lif_defs=>gc_newline && lif_defs=>gc_newline.
|
||||
|
||||
lv_data = lcl_git_pack=>encode_commit( ls_commit ).
|
||||
ls_result = lcl_git_pack=>decode_commit( lv_data ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = ls_commit
|
||||
act = ls_result ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS. "lcl_abap_unit IMPLEMENTATION
|
||||
|
||||
CLASS ltcl_html DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
|
||||
|
@ -1742,13 +1798,59 @@ CLASS ltcl_html_action_utils DEFINITION FOR TESTING RISK LEVEL HARMLESS
|
|||
|
||||
PUBLIC SECTION.
|
||||
|
||||
CLASS-METHODS class_constructor.
|
||||
METHODS add_field FOR TESTING.
|
||||
METHODS get_field FOR TESTING.
|
||||
METHODS parse_fields_simple_case FOR TESTING.
|
||||
METHODS parse_fields_advanced_case FOR TESTING.
|
||||
METHODS parse_fields_unescape FOR TESTING.
|
||||
METHODS parse_fields_german_umlauts FOR TESTING.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
CONSTANTS: BEGIN OF co_german_umlaut_as_hex,
|
||||
lower_case_ae TYPE xstring VALUE 'C3A4',
|
||||
lower_case_oe TYPE xstring VALUE 'C3B6',
|
||||
lower_case_ue TYPE xstring VALUE 'C3BC',
|
||||
END OF co_german_umlaut_as_hex.
|
||||
|
||||
CLASS-DATA: BEGIN OF ms_german_umlaut_as_char,
|
||||
lower_case_ae TYPE string,
|
||||
lower_case_oe TYPE string,
|
||||
lower_case_ue TYPE string,
|
||||
END OF ms_german_umlaut_as_char.
|
||||
|
||||
DATA m_given_parse_string TYPE string.
|
||||
DATA mt_parsed_fields TYPE tihttpnvp.
|
||||
|
||||
METHODS _given_string_is
|
||||
IMPORTING
|
||||
i_string TYPE string.
|
||||
METHODS _when_fields_are_parsed.
|
||||
METHODS _then_fields_should_be
|
||||
IMPORTING
|
||||
index TYPE i
|
||||
name TYPE string
|
||||
value TYPE string.
|
||||
|
||||
CLASS-METHODS _hex_to_char
|
||||
IMPORTING
|
||||
i_x TYPE xstring
|
||||
RETURNING
|
||||
VALUE(r_s) TYPE string.
|
||||
|
||||
ENDCLASS. "ltcl_html_action_utils
|
||||
|
||||
CLASS ltcl_html_action_utils IMPLEMENTATION.
|
||||
|
||||
METHOD class_constructor.
|
||||
|
||||
ms_german_umlaut_as_char-lower_case_ae = _hex_to_char( co_german_umlaut_as_hex-lower_case_ae ).
|
||||
ms_german_umlaut_as_char-lower_case_oe = _hex_to_char( co_german_umlaut_as_hex-lower_case_oe ).
|
||||
ms_german_umlaut_as_char-lower_case_ue = _hex_to_char( co_german_umlaut_as_hex-lower_case_ue ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD add_field.
|
||||
|
||||
DATA: lt_fields TYPE tihttpnvp,
|
||||
|
@ -1793,6 +1895,155 @@ CLASS ltcl_html_action_utils IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "get_field
|
||||
|
||||
METHOD parse_fields_simple_case.
|
||||
|
||||
_given_string_is( `committer_name=Gustav Gans` ).
|
||||
|
||||
_when_fields_are_parsed( ).
|
||||
|
||||
_then_fields_should_be( index = 1 name = `COMMITTER_NAME` value = `Gustav Gans` ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD parse_fields_advanced_case.
|
||||
|
||||
_given_string_is( `committer_name=Albert Schweitzer&`
|
||||
&& `committer_email=albert.schweitzer@googlemail.com&`
|
||||
&& `comment=dummy comment&`
|
||||
&& `body=Message body<<new>><<new>>with line break<<new>>&`
|
||||
&& `author_name=Karl Klammer&`
|
||||
&& `author_email=karl@klammer.com` ).
|
||||
|
||||
_when_fields_are_parsed( ).
|
||||
|
||||
_then_fields_should_be( index = 1
|
||||
name = `COMMITTER_NAME`
|
||||
value = `Albert Schweitzer` ).
|
||||
|
||||
_then_fields_should_be( index = 2
|
||||
name = `COMMITTER_EMAIL`
|
||||
value = `albert.schweitzer@googlemail.com` ).
|
||||
|
||||
_then_fields_should_be( index = 3
|
||||
name = `COMMENT`
|
||||
value = `dummy comment` ).
|
||||
|
||||
_then_fields_should_be( index = 4
|
||||
name = `BODY`
|
||||
value = `Message body<<new>><<new>>with line break<<new>>` ).
|
||||
|
||||
_then_fields_should_be( index = 5
|
||||
name = `AUTHOR_NAME`
|
||||
value = `Karl Klammer` ).
|
||||
|
||||
_then_fields_should_be( index = 6
|
||||
name = `AUTHOR_EMAIL`
|
||||
value = `karl@klammer.com` ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD parse_fields_unescape.
|
||||
* file status = '?', used in staging page
|
||||
|
||||
_given_string_is( '/SRC/ZFOOBAR.PROG.ABAP=%3F' ).
|
||||
|
||||
_when_fields_are_parsed( ).
|
||||
|
||||
_then_fields_should_be( index = 1
|
||||
name = '/SRC/ZFOOBAR.PROG.ABAP'
|
||||
value = '?' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD parse_fields_german_umlauts.
|
||||
|
||||
DATA: ae TYPE string,
|
||||
oe TYPE string,
|
||||
ue TYPE string,
|
||||
ae_oe_ue TYPE string.
|
||||
|
||||
ae = ms_german_umlaut_as_char-lower_case_ae.
|
||||
oe = ms_german_umlaut_as_char-lower_case_oe.
|
||||
ue = ms_german_umlaut_as_char-lower_case_ue.
|
||||
|
||||
ae_oe_ue = ae && oe && ue.
|
||||
|
||||
_given_string_is( |committer_name=Christian G{ ue }nter&|
|
||||
&& |committer_email=guenne@googlemail.com&|
|
||||
&& |comment={ ae_oe_ue }&|
|
||||
&& |body=Message body<<new>><<new>>with line break<<new>>and umlauts. { ae_oe_ue }&|
|
||||
&& |author_name=Gerd Schr{ oe }der&|
|
||||
&& |author_email=gerd@schroeder.com| ).
|
||||
|
||||
_when_fields_are_parsed( ).
|
||||
|
||||
_then_fields_should_be( index = 1
|
||||
name = `COMMITTER_NAME`
|
||||
value = |Christian G{ ue }nter| ).
|
||||
|
||||
_then_fields_should_be( index = 2
|
||||
name = `COMMITTER_EMAIL`
|
||||
value = `guenne@googlemail.com` ).
|
||||
|
||||
_then_fields_should_be( index = 3
|
||||
name = `COMMENT`
|
||||
value = ae_oe_ue ).
|
||||
|
||||
_then_fields_should_be( index = 4
|
||||
name = `BODY`
|
||||
value = |Message body<<new>><<new>>with line break<<new>>and umlauts. { ae_oe_ue }| ).
|
||||
|
||||
_then_fields_should_be( index = 5
|
||||
name = `AUTHOR_NAME`
|
||||
value = |Gerd Schr{ oe }der| ).
|
||||
|
||||
_then_fields_should_be( index = 6
|
||||
name = `AUTHOR_EMAIL`
|
||||
value = `gerd@schroeder.com` ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD _given_string_is.
|
||||
|
||||
m_given_parse_string = i_string.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD _when_fields_are_parsed.
|
||||
|
||||
mt_parsed_fields = lcl_html_action_utils=>parse_fields_upper_case_name( m_given_parse_string ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD _then_fields_should_be.
|
||||
|
||||
FIELD-SYMBOLS: <parsed_field> LIKE LINE OF mt_parsed_fields.
|
||||
|
||||
READ TABLE mt_parsed_fields ASSIGNING <parsed_field>
|
||||
INDEX index.
|
||||
|
||||
cl_abap_unit_assert=>assert_subrc( exp = 0
|
||||
msg = |No parsed field found at index { index }| ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = <parsed_field>-name
|
||||
exp = name
|
||||
msg = |Name at index { index } should be { name }| ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = <parsed_field>-value
|
||||
exp = value
|
||||
msg = |Value at index { index } should be { value }| ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD _hex_to_char.
|
||||
|
||||
DATA lr_conv TYPE REF TO cl_abap_conv_in_ce.
|
||||
|
||||
lr_conv = cl_abap_conv_in_ce=>create( ).
|
||||
lr_conv->convert( EXPORTING input = i_x IMPORTING data = r_s ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS. "ltcl_html_action_utils
|
||||
|
||||
CLASS ltcl_path DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL
|
||||
|
@ -1957,7 +2208,8 @@ CLASS ltcl_file_status DEFINITION FOR TESTING RISK LEVEL HARMLESS
|
|||
INHERITING FROM cl_aunit_assert.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS calculate_status FOR TESTING.
|
||||
METHODS calculate_status FOR TESTING
|
||||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS. "ltcl_file_status
|
||||
|
||||
|
|
|
@ -133,9 +133,8 @@ CLASS lcl_convert DEFINITION FINAL.
|
|||
RETURNING VALUE(rv_i) TYPE i
|
||||
RAISING lcx_exception.
|
||||
|
||||
CLASS-METHODS int_to_xstring
|
||||
CLASS-METHODS int_to_xstring4
|
||||
IMPORTING iv_i TYPE i
|
||||
iv_length TYPE i
|
||||
RETURNING VALUE(rv_xstring) TYPE xstring.
|
||||
|
||||
CLASS-METHODS split_string
|
||||
|
@ -151,13 +150,12 @@ ENDCLASS. "lcl_convert DEFINITION
|
|||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_convert IMPLEMENTATION.
|
||||
|
||||
METHOD int_to_xstring.
|
||||
METHOD int_to_xstring4.
|
||||
* returns xstring of length 4 containing the integer value iv_i
|
||||
|
||||
DATA: lv_x TYPE x LENGTH 4.
|
||||
|
||||
|
||||
ASSERT iv_length = 4. " other cases not implemented
|
||||
|
||||
lv_x = iv_i.
|
||||
rv_xstring = lv_x.
|
||||
|
||||
|
@ -302,7 +300,8 @@ CLASS lcl_hash IMPLEMENTATION.
|
|||
|
||||
METHOD adler32.
|
||||
|
||||
CONSTANTS: lc_adler TYPE i VALUE 65521.
|
||||
CONSTANTS: lc_adler TYPE i VALUE 65521,
|
||||
lc_max_b TYPE i VALUE 1800000000.
|
||||
|
||||
DATA: lv_index TYPE i,
|
||||
lv_a TYPE i VALUE 1,
|
||||
|
@ -316,10 +315,22 @@ CLASS lcl_hash IMPLEMENTATION.
|
|||
DO xstrlen( iv_xstring ) TIMES.
|
||||
lv_index = sy-index - 1.
|
||||
|
||||
lv_a = ( lv_a + iv_xstring+lv_index(1) ) MOD lc_adler.
|
||||
lv_b = ( lv_b + lv_a ) MOD lc_adler.
|
||||
lv_a = lv_a + iv_xstring+lv_index(1).
|
||||
lv_b = lv_b + lv_a.
|
||||
|
||||
* delay the MOD operation until the integer might overflow
|
||||
* articles describe 5552 additions are allowed, but this assumes unsigned integers
|
||||
* instead of allowing a fixed number of additions before running MOD, then
|
||||
* just compare value of lv_b, this is 1 operation less than comparing and adding
|
||||
IF lv_b > lc_max_b.
|
||||
lv_a = lv_a MOD lc_adler.
|
||||
lv_b = lv_b MOD lc_adler.
|
||||
ENDIF.
|
||||
ENDDO.
|
||||
|
||||
lv_a = lv_a MOD lc_adler.
|
||||
lv_b = lv_b MOD lc_adler.
|
||||
|
||||
lv_x = lv_a.
|
||||
lv_ca = lv_x.
|
||||
|
||||
|
|
|
@ -2,83 +2,6 @@
|
|||
*& Include ZABAPGIT_ZLIB
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_zlib_convert DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
*
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_zlib_convert DEFINITION FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS:
|
||||
hex_to_bits
|
||||
IMPORTING iv_hex TYPE xsequence
|
||||
RETURNING VALUE(rv_bits) TYPE string,
|
||||
bits_to_int
|
||||
IMPORTING iv_bits TYPE clike
|
||||
RETURNING VALUE(rv_int) TYPE i,
|
||||
int_to_hex
|
||||
IMPORTING iv_int TYPE i
|
||||
RETURNING VALUE(rv_hex) TYPE xstring.
|
||||
|
||||
ENDCLASS. "lcl_zlib_convert DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_zlib_convert IMPLEMENTATION
|
||||
*----------------------------------------------------------------------*
|
||||
*
|
||||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_zlib_convert IMPLEMENTATION.
|
||||
|
||||
METHOD hex_to_bits.
|
||||
|
||||
DATA: lv_x TYPE x LENGTH 1,
|
||||
lv_c TYPE c LENGTH 1,
|
||||
lv_bit TYPE i,
|
||||
lv_hex TYPE xstring.
|
||||
|
||||
|
||||
lv_hex = iv_hex.
|
||||
WHILE NOT lv_hex IS INITIAL.
|
||||
lv_x = lv_hex.
|
||||
DO 8 TIMES.
|
||||
lv_bit = sy-index.
|
||||
GET BIT lv_bit OF lv_x INTO lv_c.
|
||||
CONCATENATE rv_bits lv_c INTO rv_bits.
|
||||
ENDDO.
|
||||
lv_hex = lv_hex+1.
|
||||
ENDWHILE.
|
||||
|
||||
ENDMETHOD. "hex_to_bits
|
||||
|
||||
METHOD bits_to_int.
|
||||
|
||||
DATA: lv_c TYPE c LENGTH 1,
|
||||
lv_bits TYPE string.
|
||||
|
||||
lv_bits = iv_bits.
|
||||
|
||||
WHILE NOT lv_bits IS INITIAL.
|
||||
lv_c = lv_bits.
|
||||
rv_int = rv_int * 2.
|
||||
rv_int = rv_int + lv_c.
|
||||
lv_bits = lv_bits+1.
|
||||
ENDWHILE.
|
||||
|
||||
ENDMETHOD. "bits_to_int
|
||||
|
||||
METHOD int_to_hex.
|
||||
|
||||
DATA: lv_x TYPE x.
|
||||
|
||||
|
||||
lv_x = iv_int.
|
||||
rv_hex = lv_x.
|
||||
|
||||
ENDMETHOD. "int_to_hex
|
||||
|
||||
ENDCLASS. "lcl_zlib_convert IMPLEMENTATION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_zlib_stream DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -126,7 +49,7 @@ CLASS lcl_zlib_stream IMPLEMENTATION.
|
|||
|
||||
METHOD take_int.
|
||||
|
||||
rv_int = lcl_zlib_convert=>bits_to_int( take_bits( iv_length ) ).
|
||||
rv_int = zcl_abapgit_zlib_convert=>bits_to_int( take_bits( iv_length ) ).
|
||||
|
||||
ENDMETHOD. "take_int
|
||||
|
||||
|
@ -140,7 +63,7 @@ CLASS lcl_zlib_stream IMPLEMENTATION.
|
|||
WHILE strlen( rv_bits ) < iv_length.
|
||||
IF mv_bits IS INITIAL.
|
||||
lv_x = mv_compressed(1).
|
||||
mv_bits = lcl_zlib_convert=>hex_to_bits( lv_x ).
|
||||
mv_bits = zcl_abapgit_zlib_convert=>hex_to_bits( lv_x ).
|
||||
mv_compressed = mv_compressed+1.
|
||||
ENDIF.
|
||||
lv_left = iv_length - strlen( rv_bits ).
|
||||
|
@ -334,7 +257,7 @@ CLASS lcl_zlib IMPLEMENTATION.
|
|||
|
||||
lv_bit = go_stream->take_bits( 1 ).
|
||||
CONCATENATE lv_bits lv_bit INTO lv_bits.
|
||||
lv_code = lcl_zlib_convert=>bits_to_int( lv_bits ).
|
||||
lv_code = zcl_abapgit_zlib_convert=>bits_to_int( lv_bits ).
|
||||
lv_count = io_huffman->get_count( lv_len ).
|
||||
|
||||
IF lv_code - lv_count < lv_first.
|
||||
|
@ -686,7 +609,7 @@ CLASS lcl_zlib IMPLEMENTATION.
|
|||
lv_symbol = decode( go_lencode ).
|
||||
|
||||
IF lv_symbol < 256.
|
||||
lv_x = lcl_zlib_convert=>int_to_hex( lv_symbol ).
|
||||
lv_x = zcl_abapgit_zlib_convert=>int_to_hex( lv_symbol ).
|
||||
CONCATENATE gv_out lv_x INTO gv_out IN BYTE MODE.
|
||||
ELSEIF lv_symbol = 256.
|
||||
EXIT.
|
||||
|
|
70
src/zlib/zcl_abapgit_zlib_convert.clas.abap
Normal file
70
src/zlib/zcl_abapgit_zlib_convert.clas.abap
Normal file
|
@ -0,0 +1,70 @@
|
|||
CLASS zcl_abapgit_zlib_convert DEFINITION PUBLIC CREATE PUBLIC.
|
||||
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS:
|
||||
hex_to_bits
|
||||
IMPORTING iv_hex TYPE xsequence
|
||||
RETURNING VALUE(rv_bits) TYPE string,
|
||||
bits_to_int
|
||||
IMPORTING iv_bits TYPE clike
|
||||
RETURNING VALUE(rv_int) TYPE i,
|
||||
int_to_hex
|
||||
IMPORTING iv_int TYPE i
|
||||
RETURNING VALUE(rv_hex) TYPE xstring.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_ZLIB_CONVERT IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD bits_to_int.
|
||||
|
||||
DATA: lv_c TYPE c LENGTH 1,
|
||||
lv_bits TYPE string.
|
||||
|
||||
lv_bits = iv_bits.
|
||||
|
||||
WHILE NOT lv_bits IS INITIAL.
|
||||
lv_c = lv_bits.
|
||||
rv_int = rv_int * 2.
|
||||
rv_int = rv_int + lv_c.
|
||||
lv_bits = lv_bits+1.
|
||||
ENDWHILE.
|
||||
|
||||
ENDMETHOD. "bits_to_int
|
||||
|
||||
|
||||
METHOD hex_to_bits.
|
||||
|
||||
DATA: lv_x TYPE x LENGTH 1,
|
||||
lv_c TYPE c LENGTH 1,
|
||||
lv_bit TYPE i,
|
||||
lv_hex TYPE xstring.
|
||||
|
||||
|
||||
lv_hex = iv_hex.
|
||||
WHILE NOT lv_hex IS INITIAL.
|
||||
lv_x = lv_hex.
|
||||
DO 8 TIMES.
|
||||
lv_bit = sy-index.
|
||||
GET BIT lv_bit OF lv_x INTO lv_c.
|
||||
CONCATENATE rv_bits lv_c INTO rv_bits.
|
||||
ENDDO.
|
||||
lv_hex = lv_hex+1.
|
||||
ENDWHILE.
|
||||
|
||||
ENDMETHOD. "hex_to_bits
|
||||
|
||||
|
||||
METHOD int_to_hex.
|
||||
|
||||
DATA: lv_x TYPE x.
|
||||
|
||||
|
||||
lv_x = iv_int.
|
||||
rv_hex = lv_x.
|
||||
|
||||
ENDMETHOD. "int_to_hex
|
||||
ENDCLASS.
|
18
src/zlib/zcl_abapgit_zlib_convert.clas.xml
Normal file
18
src/zlib/zcl_abapgit_zlib_convert.clas.xml
Normal file
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_ZLIB_CONVERT</CLSNAME>
|
||||
<VERSION>1</VERSION>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit</DESCRIPT>
|
||||
<EXPOSURE>2</EXPOSURE>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
Loading…
Reference in New Issue
Block a user