* otgr: initial object support
This commit replaces the generic SOBJ support with native support for
the object type OTGR and the format is not backward compatible,
so repos containing SOBJ serialized objects could not be pulled anymore
(it's necessary to pull them with previous version of abapGit and push
them with the new version of abapGit).
The new OTGR handler supports only master language description because
there is no API which would allow us to maintain other languages and
I am not willing to re-implement parts of ABAP platform just to version
texts which nobody cares about. Also, the texts dealing part is not
that straightforward - one has to think about keeping the texts
in sync which requires lot of code.
I did the following optimizations to the XML format:
- removed the activation state from all elements because we
always serialize only Active and deserialize as Inactive
- removed the foreign key name from texts and other details
because we know which object type group is currently being handled
- used short names for root elements of details to avoid redundancy
because the detail's table name is used for child XML elements -
e.g. TEXTS vs. CLS_TYPE_GROUPT.
Closes#1515
* Update ref-supported.md
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* Web DynPro Component Configuration Support
Web DynPro Component Configuration Support Class
* WDCC Support - Syntax Corrections
Web DynPro Component Configuration Support
Syntax Corrrections
* TADIR Object Name Concatenation Change/Removal
TADIR Object Name Concatenation Change/Removal
As ms_item-obj_name hold complete TADIR name, concatenation with ..00 is not necessary.
* WDCC Support - Syntax Corrections
Web DynPro Component Configuration Support
-Remove dynamic coding
-Remove explicit commit/roll back
-Use Tadir functionality of base class
* WDCC Support - Syntax Corrections
Web DynPro Component Configuration Support
-The EXPORTING keyword can be omitted (exporting))
* WDCC Support - Syntax Corrections
Web DynPro Component Configuration Support
-Removal of HJA comments
-Removal of me->
* Removal of Component Config XML in main object fil
Removal of Component Config XML in main object file
-Component Configuration raw XML added to additional comp_conf.xml file
* Additional xml file pretty printed as string
Additional file contents now pretty printed and added as string for easy diff.
Serialisation / Derialisation now working with pretty printing and un-pretty printing.
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* WDYN: Fix missing texts
Texts were missing if more than one concept existed per WebDynpro component. Also fixes unit tests which were not working properly before and adds anew test.
* Pretty print
* Refactor and enhance SOTR support
Now supports all objects that use OTR: CLAS (LIMU/CPUB), ENHC, ENHO, ENHS, ENSC, WAPA (LIMU/WAPP) WDYA, WDYN (LIMU/WDYV), WEBI
* Lint
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* IOBJ: Remove number range objects
Number ranges for BW objects are local to a system and will cause errors when duplicates occur.
* Fix spelling
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* Fix for objects with space or dot in name
* Update zcl_abapgit_file_status.clas.abap
* Fix for objects with space or dot in name
* Escaping of filenames
* Escape %
* Remove escape of space
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* add variant transaction support and fix FG globals
add handling of variant transaction
clear globals in FG for FM RPY_TRANSACTION_INSERT
fixes#2744
* CC cleanup
* fix linter errors
* fix linter errors
* fix linter error - type pool constants
* fix linter error void type
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* Update zcl_abapgit_objects.clas.abap
* DDIC with reference to class/interface
* DDIC with reference to class/interface
* Search help with exit function
* Table with reference to search help
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* DSYS serializer rewritten
* Fixes issue #3374 when object names include a namespace.
* Uses longtexts facility to serialize texts:
* Supports i18n texts.
* Supports text versions other than 0001.
* Fix linter compliance
Co-authored-by: Lars Hvam <larshp@hotmail.com>
Fixes the dump and import error for package interfaces. Even if the package interface is in a different package than the referencedpackage itself.
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* Update 3 objects
* Update zcl_abapgit_exit.clas.abap
Pretty printer didnt work in JAVA GUI, so had to manually change the file
* IS_STEP as input parameter
* Issue in JAVA based GUI
Pretty printer not working for class name in implementation
* Move TY_STEP_DATA to ZIF_ABAPGIT_DEFINITIONS
* try moving ty_deserialization_step
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* Issue 3324: WDA Texta are not taken into accout
* Remove the not allowed Web Dynpro component
* Correct ABAB CHECKS 702 for SOTR_HANDLER
* ABAP Check 702 SOTR_HANDLER II
* ABAP Check 702 SOTR_HANDLER III: AUnit Exception
* ABAP Check 702 compliant IV
* ABAB Check 702 compliance V
* ABAP Check Compliance 702 VI
* ABAP Check 702 compliance VII
* ABAP Check 702 compliance VIII: delete comment
* ABAP Check compliance 702 IX : conv #
* Commit X: Improvements of ABAP Unit tests
-Test uses a 100% existing wd component and TEST(!) checks it
-Test enhanced with a non existing component -> no exception is raised nor existence is checked inside the PRODUCTIVE ROUTINE(!) via WDR_REPOSITORY_INFO as this check should have been done earlier not in this last phase to append the texts, labels, etc... to the component archive
* C XI: ABAP Unit Tests(2)
* C XII : ABAP Checks 702 for ABAP Unit Tests
* C XIII : ABAP CHECKS 702
* C XIV : ABAP CHECKS 702
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* Add syntax-highlighters for CSS, JS, JSON
* Update W3MI ZABAPGIT_CSS_THEME_DEFAULT
* Fix line size and case statement
* Fix line size
* Update styles, removed operators
* Added highlight for comments in HTML/XML
* Fix menu hover background
This makes the selected menu more visible.
Also includes color fix for repo name and url in dark theme.
* Fix for W3xx objects with "." in name
* Reverse fix for W3xx
* Remove hover style changes
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* Master lang only - descriptions for clas, intf
* Use master language instead of logon language
* sy-langu to master language - fix cus0, cus1, cus2
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* char: deserialize missing attribute hide_icons
* char: unlock upon all errors
It's very annoying when I have to go to SM12 to unlock CHAR
objects which could not be activated due to a missing OTGR.
* IOBJ fix#3105
* Variable fix
* BW function modules check
* AREA support
AREA support
* update, comment fix
* update
* iobj update
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* Support for CHDO
* Remove dependency from GENERIC
* Skip gen. objects by CHDO
* abaplint checks
* Moved filter to zcl_abapgit_repo
* Adjusted filter logic
* Delete unused methods
* Extract apply filter methods
New class zcl_abapgit_repo_filter generated with apply filter methods
* docs: update supported with CHDO
* Clear serialization fields
* Set package at deserialize
* Check errors at deserialize
I know don't why but on our systems the "include for generated
maintenance views" is returned from the function module
RS_GET_ALL_INCLUDES, so when we add it in the method
zcl_abapgit_object_fugr=>includes we have the file twice which cause
duplicate errors on our systems.
I didn't remove the code because we are supposed to run on all ABAP
rutime versions and the problem with duplicates for the T00 includes has
started occurring only recently, so the older versions need this
artificial include (I guess).
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* IOBJ fix#3105
* Variable fix
* BW function modules check
* Enhancement of iobj support
Enhancement of iobj support which enable handling of:
-attributes,
-compoundings,
-hierarchies
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* Issue 3066: Class text elements translation
* Removed comments for Issue 3066
* Pull request checks
* Travis-CI checks fixes
* Travis-CI checks fixes - Identation
* Interfaces pretty printed
* Travis-CI identation check
* Travis-CI identation check
* Changes type tt_langu and serialization
Type tt_langu moved from zif_abapgit_definitions to ZCL_ABAPGIT_OBJECTS_PROGRAM
Encapsulated code to serialize DOCU, TPOOL and SOTR for classes
* abaplint corrections
* abaplint corrections
* Encapsulated serialization %26 new IF lang def.
* zif_abapgit_definitions types indentation
* Restore zif_abapgit_definitions
* Revert zcl_abapgit_object_clas
* Revert zcl_abapgit_object_clas
* Revert zcl_abapgit_objects_program
* Revert zif_abapgit_oo_object_fnc.intf.abap
* Revert zcl_abapgit_object_clas.clas.abap
* Class text language
* Class text language
Co-authored-by: Lars Hvam <larshp@hotmail.com>
* Create pull.yml
* Update zcl_abapgit_git_transport.clas.abap
* Update zcl_abapgit_git_transport.clas.abap
* Update pull.yml
* Delete pull.yml
* Remove select for exists check
Due to the language flag-specific select a type group/pool couldn't be found. Removed the select at all because the following FM also recognizes unexistent type groups/pools and sets sy-subrc to something <> 0.
* Fill description if available in login language
Co-authored-by: pull[bot] <39814207+pull[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
During creation of classes with redefinitions in the protected section, entries in table SEOREDEF are not updated properly.
Reason: The buffer of Class Builder does not recognize the creation of the inheritance in the active version. During the creation of the super class relationship in SEO_INHERITANCE_CREATE_F_DATA only the inactive buffer is updated. The buffer for the active version has still the state that the class has no super class.
Therefore, SEOREDEF is filled with an empty super class name.
If the buffer is refreshed before the metadata is updated, the super class is read correctly before SEOREDEF entries are created.
* Possible Solution #1
* Update zcl_abapgit_objects_super.clas.xml
* abapLint
* Removed german language flag
* Fixes
* Removed flag for german language
* Removed test code
* abapLint
* Implemented suggestions from PR
> mo_xml_api is just local now
> li_service removed
> implemented exception handling for calls of xml api methods set_changeable, delete and save
> integrated sy-subrc into all exception calls
> wrote update routine if IAXU object already exists (object will be deleted first and after that local method save is called)
* abapLint
* abapLint
* String template, restructured api methods
* Remove descriptions
* abapLint
* Fixed issues after restructuring api methods calls
* Alternative error handling for existence check
* Use api existence check instead of load
* Fixed some bugs
The methods CL_OO_CLASS_SECTION_SOURCE=>SCAN_SECTION_SOURCE calls the
function SCAN_ABAP_OBJECTS_SECTION without the parameter superclsname
which causes that variable scan_result (vse_tabs) holds a broken table of
redefinitions for protected methods which leads into a short dump during
CL_OO_CLASS_SECTION_SOURCE=>REVERT_SCAN_RESULTS.
The problem does not occur for public section because the public section
contains "CLASS ... INHERITING FROM ...", so superclsname gets
populated. It's obvious that the class definition statement is not
present in the protected section.
The crash is reported as DBSQL_DUPLICATE_KEY_ERROR in the program
SAPLSEOR at INSERT_REDEFINITIONS.
The code is the following:
* first refresh db table
perform delete_redefinitions
using inhkey.
delete adjacent duplicates from redefinitions.
* insert again
insert seoredef from table redefinitions.
One might think that the delete statement form clears the table seoredef
but the problem is that the variable inhkey contains the super class
name so no redefinitions are actually removed and the insert statement
attempts to insert the redefinitions without parent class again.
The proper solution is to enhance CL_OO_CLASS_SECTION_SOURCE=>SCAN_SECTION_SOURCE
to pass the super class name to SCAN_ABAP_OBJECTS_SECTION - at least for
the protected section.
However, I am not patient and I am not going to wait for the proper fix
(which the maintainers may refuse).
* UENO: Entity Type Implementation (#1906)
* Resolve ABAPlint issues
Resolve ABAPlint issues
* UENO - Use zcl_abapgit_objects_generic
Removal of many unnecessary methods due to use of zcl_abapgit_objects_generic
* fixes issue #2815
The existing object handler for CDS metadata extension (DDLX) has been reviewed by an expert.
Doing this, the following feedback has been provided:
enable existing logging capability
include environment specific logic (e.g. import of an inactive version)
improve exception handling so that the related object information can be displayed in log
assign package information to handle abap language version ina proper way
adapt lock object
* fixes saplint issues
* fixes saplint issues
* fixes saplint issues
* extract dependency injection for TADIR_INSERT
* fixes saplint issues
* zcl_abapgit_environment.clas.testclasses.abap set to master version
* changes related to code review
* redo changes
* redo changes
* back to master version
* Pass log interface for de-serialization
Interface ZIF_ABAPGIT_LOG is now passed for deseriaization API.
This includes:
- Log messages for FUGR: Imported function modules and includes
- Improved error messages for TABL compare
- Log objects w/o changes
- Log is shown in the UI if available ("Log" entry appears if a log exists, no persistence!)
This PR enhances #2534 and #2694
Another important change: In case an object fails (or a single function module in a group fails), the import continues with the next object!
* small pretty printer changes
small pretty printer changes
* fix abaplint issues
reduce line sizes and ensure 7.02 compatibility
* show errors and warnings from pull
Errors and warnings after a pull are now part of the "message list" above the object list in the main screen and will be shown immediately. The new"Log" button shows errors, warnings and success messages on demand.
The log title is now part of the ZIF_ABAPGIT_LOG interface.
* fix abaplint issue
fix abaplint issue
BEFORE:
In case the webi already existed in the receiving system a dump occured that prevent the import from happening
AFTER
The old webi object will be overwritten with the new changes.
* log: move show functions to new class
Enhance ZIF_ABAPGIT_LOG
- add IS_ITEM structure (object) to message adding functions
- add method "add_exception"
- add method "add_info"
- relocate methods "show", "to_html" and "write" to new class ZCL_ABAPGIT_LOG_VIEWER
Introduction of new log viewer class ZCL_ABAPGIT_LOG_VIEWER
Replacement of relocated methods where used
-> This is the next step providing a log for serialzation/de-serialization (see #2534)
* fix abaplint issues
fix abaplint issues
* fix abaplint issues (2)
fix abaplint issues
Since all object handler contains exactly the same CASE statement for STEP definition, I would recommend that each object handler simply returns the STEP he belongs to.
This fix should "simply" issue #2499.
* Update zcl_abapgit_objects_program.clas.abap
Found a situation on my project where on pulling code from a zip file, the error RS_CUA_INTERNAL_WRITE sy-subrc = 2 popped.
The error was due to the content of XML file exported : <CUA><ADM>ACTCODE was containing an 'X' value for a single file. I corrected the file putting it blank and it worked. But it's a fastidious task so I fixed the method ZCL_ABAPGIT_OBJECTS_PROGRAM->auto_correct_cua_adm in order to fix this field also when it contains only an 'X'. Tested ok on my system so I propose this small change.
* Update zcl_abapgit_objects_program.clas.abap
* Update zcl_abapgit_objects_program.clas.abap
Use the same check SAP does in form check_adm of include LSMPIF03 for the CUA values.
* Avoid DYNPRO_SEND_IN_BACKGROUND while ADT Pull
When ADT (aka ABAP in Eclipse) is used to trigger a pull request, there is no SAPGUI available in the backend system. Whenever a dynpro is called, a DYNPRO_SEND_IN_BACKGROUND short dump occurs.
This commit fixes issue #2632.
Additional remark: In case of a private repository, username and password are passed to the backend system. The ADT backend coding handles this via class ZCL_ABAPGIT_DEFAULT_AUTH_INFO. To avoid sending a password dialog in the backend system (class CL_ABAPGIT_PASSWORD_DIALOG), ZABAPGIT coding needs to be adjusted to take over user/pw from ZCL_ABAPGIT_DEFAULT_AUTH_INFO. I know this is not nice and it would be better to have ZCL_ABAPGIT_DEFAULT_AUTH_INFO in ZABAPGIT. Even the best solution would be to re-use ZCL_ABAPGIT_LOGIN_MANAGER, but I would recommend to refactor this in a new pull request later on...
* Fix abaplint identiation failure
Fix abaplint identiation failure
* Rest ZCL_ABAPGIT_PASSWORD_DIALOG
Rest ZCL_ABAPGIT_PASSWORD_DIALOG to prelimiary version.
To be changed in a different pull request....
* Add user exit for serialize_abap_clif_source
* Document CLIF serializer exit
* Add exit redirection for CLIF serializer
* Add link to example for CLIF serialization exit
* report name of xml file in case of format error
In case of an error in the XML file, for support reason I want to know which file causes the error. The file name is mentioned if the XML itself is corrupt or if there is an XML version mismatch.
This PR fixes issue #2619.
* fix abaplint issues
fix abaplint issues
Issue #2579: diff still shown after pull of ENHO hooks (implicit enhancements i.e. code added at start/end of existing methods, etc.)
Reason: if the author has created and deleted implicit enhancements in the original system, the numbering doesn't start from 1 (this is the numbering we can see for the statement ENHANCEMENT, for instance ENHANCEMENT 1. ... ENDENHANCEMENT.) When pulling in another system, the numbering will start from 1, so it will differ from the source. As this enhancement number is serialized by abapGit in the XML, it will detect a difference.
Correction: the method SERIALIZE of class ZCL_ABAPGIT_OBJECT_ENHO_HOOK is changed so that to not serialize the enhancement number.
Three issues are corrected:
- Enhancement events are not serialized at all, nor deserialized (missing feature).
- The codeof new enhancement methods (not the implicit enhancements of existing methods, the code for methods added) are serialized but not deserialized (incomplete feature).
- DIFF may also appear after pulling ENHO objects, concerning attributes (OTR text ID being different) and method parameters (author, date, etc.)
Corrections:
- Add serialization/deserialization of events in class ZCL_ABAPGIT_OBJECT_ENHO_CLIF
- Add deserialization of method implementations in class ZCL_ABAPGIT_OBJECT_ENHO_CLASS
- I havealso moved the existing method SERIALIZE_INCLUDES from ZCL_ABAPGIT_OBJECT_ENHO_CLIF to ZCL_ABAPGIT_OBJECT_ENHO_CLASS and created DESERIALIZE_INCLUDES in the latter class because method implementations exist only for classes, not for interfaces, so it should be done in "CLASS", not in "CLIF".
- DIFF criteria cleared in method SERIALIZE of class ZCL_ABAPGIT_OBJECT_ENHO_CLIF
Short dump GETWA_NOT_ASSIGNED because of stupid copy/paste error in method SERIALIZE of ZCL_ABAPGIT_OBJECT_ENHO_CLIF:
LOOP AT lt_tab_types ASSIGNING <ls_type>.
CLEAR: <ls_attr>-author,
<ls_attr>-createdon,
<ls_attr>-changedby,
<ls_attr>-changedon.
ENDLOOP.
Replace all <ls_attr> with <ls_type>.
+ clearing of <ls_type>-descript_id (OTR text ID) so that the DIFF ignores this field (new OTR texts, with new IDs, are always created while pulling so the ID must not be compared).
* sfpf: make deserialization errors more verbose
Just to make debugging a little be easier.
* prog: make updating errors more verbose
For simpler debugging.
* objects: add a method checking presence of a file
The method is called 'contains' because then you can write:
if mo_files->contains( iv_ext = 'abap' ) = abap_true.
In newer system, you can even leave out the suffix '= abap_true'.
I am not sure how to make the logic deciding how to the select
shared with the method read_file.
For future developers: if you change the type of raised exception of the
method read_file when the passed file is not found, you can stop using
the method contains and you can save some time in the cases where it is
highly unexpected that the file is missing. You could also remove the
method contains which will have the benefit of having one place with the
select statement.
* sfpf: save layout in solo XDP file
Manually tested pushing and pulling but it still might cause some
problems.
This commit adds a new file with the suffix XDP for every XFPF object.
The new file contains the form layout which can be edited in Adobe
LiveCycle Designer. During debugging I learned that we put layouts in
all supported languages to the serialized SFPF XML file but the new
layout file contains only the layout of the Form's language.
I am not sure if removing the layout data make sense because thelayout
object contains layout data for all supported languages and the call
set_layout_data changes only the form's language.
--- v2
Removed the statement:
li_fp_form->get_layout( )->set_layout_data( i_layout_data = conv #('') ).
Because it did not save any space in the SFPF XML file (because there
are layouts for other languages) and the statement instantly removes
the layout from caches and breaks forms.
--- v3
Added a check for the presence of the XDP file to make this change
backward compatible with already existing repositories where the XDP
file does not exist. Pointed out by Lars in the review.
In this version, I also "beautified" the code by a constant for the
layout file extension.
--- v4
Re-added the statement:
li_fp_form->get_layout( )->set_layout_data( i_layout_data = conv #('')
i_set_xliff_ids = abap_false ).
and added the re-cover layout data statement:
li_fp_form->get_layout( )->set_layout_data( i_layout_data = lv_layout_bck
i_set_xliff_ids = abap_false ).
The parameter i_set_xliff_ids is required by the layout type 'XFA'. It
is not possible to set layout data to an empty string without that
parameter, if you do, an exception is thrown.
The layout type 'XFA2' uses the parameter by default.
---
Closes#2554
* TABL: Simplify control flow
When this commit is applied the control flow in object serializer TABL
is eased. The idoc check returns now a boolean instead of raising an exception. Main purpose is to ease debugging due to reducing the use of
zcx_abapgit_exception%3D>raise.
* TABL: fill rv_deleted on early exit
* add method to determine if running in cloud
add new class and method to determine if abapGit is running on ABAP cloud/Steampunk systems, part of an effort to align codelines #2511
* fix naming
* add simple unit test
* Implement deserialize steps swap DDIC/ÁBAP order
* fix for wapa and abaplint
* bugfix in falback logic and type definition
* fixed constant usage
* fixed abaplint and constant usage
* focus only on design change of deserialze
* focus only on design change of deserialze
* Bugfix for CI because of changes of the order
* cleanup
* cleanup
* minor changes
* move types to IF
IWPR basic version #75
can later be extended with implementations of IS_LOCKED, JUMP, and CHANGED_BY
this uses the generic serializer via OBJH, like abapGit-Plugins
With this commit we fix the filename construction so that for
objects without file extension the correct filename is constructed.
Before this commit is applied these objects create file names with
an additional dot at the end.
With this commit we add an existence check the delete method
of ENHO serializer because some enhancements, like implicit source code
enhancements of classes, are deleted implicitly.
* ECATT: remove dynamic method calls
This commit introduces two new interfaces to remove dynamic method calls.
- ZIF_ABAPGIT_ECATT_DOWNLOAD
- ZIF_ABAPGIT_ECATT_UPLOAD
* ECATT: Rename method
Rename method z_set_stream_for_upload to set_stream_for_upload
as we now use our own interface and there's no risk that SAP
standard introduces a method with the same name
* delete method CHECK_PROG_CHANGED_SINCE
not in use anymore
* delete method ADD_XML_FROM_PLUGIN
looks like it is not used anywhere, also not in plugins
* naming conventions
Function groups can use includes that were separately created as programs of type include. Those includes could be reusedin various other programs and function groups. They might even be created in a different package. This type of include is an object of it's own that get serialized with it's package as a separate object. Therefore it should not be included in serialization of any function group that uses it. This fix checks for which includes TADIR entries of type PROG exists and excludes them from serialization in FUGR serializer.
* SFPF, SFPI: Error by import (issue #2353)
The renumbering of the attributes "id" and "href" is reworked
* Pretty printer of the full class source
* indentation
* add missing functions in plugin VCLS
* fix pretty print
* fix check usage for abaplint
* adjust detection of locks
* german type
* move fix to deserialize
* fix syntax for 7.02