Compare commits

...

296 Commits

Author SHA1 Message Date
Marc Bernard
34ec448b39
Refactor: Persistence factory (#7229)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2025-04-30 11:27:13 +02:00
Marc Bernard
efbc0245ce
Fix trigger location for zcx_abapgit_exception (#7221)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Thanks!

Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-04-29 14:29:46 +02:00
Marc Bernard
220417e73f
FDT0: Remove comparator (#7227)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
2025-04-28 11:51:38 +02:00
Christian Günter
781313ad7c
SAXX: implement is_locked + refactorings (#7226) 2025-04-28 11:07:14 +02:00
Christian Günter
402ec37b3b
refactor DDLS + DDLX + DCLS (#7224)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2025-04-25 13:29:18 +02:00
Marc Bernard
5e087d33c7
Fix some class descriptions (#7223)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-04-25 13:25:56 +02:00
Lennart Emmerich
267c210c5a
STVI: Fix unstable diff when shdtvsvciu or shdfvguicu are not initial (#7225) 2025-04-25 13:04:37 +02:00
Lennart Emmerich
2b0f4e74d9
SCVI: Fix unstable diff when shdsvfvci or shdguixt are not initial (#7222)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2025-04-24 12:07:17 +02:00
Lars Hvam
3f673ebe8c
update npm deps + E0* deps + back button on flow page (#7217)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
2025-04-22 13:12:33 +02:00
Marc Bernard
b9389bde33
Add support for ABAP Language Version for generic (#7218)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-04-22 08:20:12 +02:00
Christian Günter
cc414d26e0
New error handling for not supported object types (#7215)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-04-22 06:43:52 +02:00
Lars Hvam
becfe9bb08
bugfix: offline repo pull /data/ (#7216)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2025-04-21 16:27:32 +02:00
Lars Hvam
c21dc53e00
user record: interface and factory (#7212)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2025-04-18 09:46:58 +02:00
Lars Hvam
96a010614b
refactor zcl_abapgit_user_record (#7211)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
2025-04-16 07:59:21 +02:00
Lars Hvam
1fa75ebb47
zcl_abapgit_gui_page_sett_repo: remove use of T002T (#7209)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Co-authored-by: Marc Bernard <marc@marcbernardtools.com>
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2025-04-14 14:41:59 +02:00
Lars Hvam
b6e375b3d6
update npm dependencies (#7202) 2025-04-14 09:34:05 +02:00
Lars Hvam
b2d0d98ec0
user record: refactor get_title() for open-abap compatibility (#7210) 2025-04-14 09:29:39 +02:00
Marc Bernard
c0ce2cb2e2
Add clarifying comment to exists check (#7207)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2025-04-10 20:32:57 +02:00
Marc Bernard
b55791765f
Fix zcl_abapgit_serializer test (#7205) 2025-04-10 20:10:41 +02:00
Christian Günter
a4019f38fb
HTTP: Detect if it's supported in constructor (#7204) 2025-04-10 20:02:07 +02:00
Christian Günter
d79887c0a2
Repo Refactoring: Use interfaces instead of classes (#7189)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-04-10 08:52:51 +02:00
Marc Bernard
aaec314b14
Repo Overview: Add sort by online/offline repo (#7200)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2025-04-09 20:00:26 +02:00
Lars Hvam
edfbfab6ce
web test: move files and fixes (#7195)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2025-04-08 15:57:59 +02:00
Lars Hvam
301f860821
move zcl_abapgit_gui_hotkey_ctl (#7192)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2025-04-08 11:13:50 +02:00
Lars Hvam
d73e00bc8a
remove use of PGMID (#7199) 2025-04-08 11:10:59 +02:00
Lars Hvam
12d6b480b1
bugfix zif_abapgit_sap_package~read_description (#7198) 2025-04-08 07:40:57 +02:00
Lars Hvam
6302fa6b1c
refactor select TDEVCT (#7196) 2025-04-08 07:18:37 +02:00
Lars Hvam
15584a3da7
flow: extract logic to new class (#7197) 2025-04-08 07:15:21 +02:00
Lars Hvam
fc76035b7b
decouple utils from zif_abapgit_git_definitions (#7193) 2025-04-08 07:13:08 +02:00
Lars Hvam
bb9462f979
new class zcl_abapgit_ui_core_factory (#7194) 2025-04-08 07:10:40 +02:00
Lars Hvam
8b9dd0fdfa
zcl_abapgit_code_inspector, remove friend (#7191) 2025-04-08 07:01:02 +02:00
Marc Bernard
220cb9aad1
Fix checking support of object types (exit) (#7187)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-04-07 16:31:44 +02:00
Marc Bernard
51d115a1c1
Add style option for HTML rendering (#7190)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2025-04-06 10:19:21 +02:00
Marc Bernard
12b93deb1e
Debug info: Fix exit list in standalone (#7188) 2025-04-06 10:06:16 +02:00
Marc Bernard
db0526a3b8
Add some icons (#7186)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-04-04 12:17:27 +02:00
Lars Hvam
8a72e762f5
update devcontainer.json (#7184)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2025-04-03 21:21:18 +02:00
Marc Bernard
663b2b5583
Feature: Objects locked in multiple requests (#7178)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Co-authored-by: Christian Günter <christianguenter@googlemail.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-04-01 18:31:57 +02:00
Marc Bernard
e7af0fb6a0
Fix "Maximum number of GUI sessions reached" (#7176)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-04-01 18:07:14 +02:00
Lars Hvam
0ea8aa0f43
update npm dependencies (#7167) 2025-04-01 18:03:01 +02:00
Marc Bernard
5145a6691f
Refactor repo type in overview (#7177) 2025-04-01 16:07:22 +02:00
Marc Bernard
74c0979a8c
Remove http-agent from factory (#7182)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2025-04-01 06:57:55 +02:00
Christian Günter
d9c4483cc2
Fix AFF unit tests for lower releases (#7181)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2025-03-31 13:55:41 +02:00
Marc Bernard
a0e7a47f7a
Refactor: Decouple code inspection from factory (#7180)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-03-31 10:43:06 +02:00
Marc Bernard
bc104e396e
Add "Refresh" to repository list (#7179) 2025-03-31 10:14:41 +02:00
Marc Bernard
8e02089f8f
Add "Back" button to diff and where-used pages (#7174)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2025-03-29 14:05:18 +01:00
Jon Friesen
8984655d86
delete obsolete objects when pulling in the bgd (#7170)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2025-03-29 12:48:56 +01:00
Christian Günter
0af09e13bd
add pragma for secondary key warnings (#7173)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2025-03-29 12:43:01 +01:00
Christian Günter
464afa8193
Page Stage: fix case logic (#7168)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2025-03-29 12:37:24 +01:00
Marc Bernard
b45a4969ba
Fix syntax errors in lower releases (table keys) (#7172)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2025-03-29 10:10:48 +01:00
Christian Günter
ec12f18b62
using existing secondary keys (#7169) 2025-03-29 08:34:20 +01:00
Marc Bernard
aa6e97ac99
Replace sotr_head* update with API (#7165)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-03-25 15:24:17 +01:00
Lars Hvam
1557d8c295
add back button to stage page (#7166) 2025-03-25 15:06:59 +01:00
Christian Günter
90219ae271
add actionbars to command palette (F1) (#7164)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2025-03-24 19:26:10 +01:00
Lars Hvam
1ef41d3f77
OO factory, fix type (#7163) 2025-03-24 17:37:35 +01:00
Mike Pokraka
18cf90740d
Fix type mismatch dump (#7162) 2025-03-24 15:53:32 +01:00
Marc Bernard
bfc2518658
Feature: Change Repo Package (#7131)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-03-24 14:31:43 +01:00
Lars Hvam
079e7ce797
refactor zcl_abapgit_abap_language_vers testclass (#7160) 2025-03-24 14:21:08 +01:00
Lars Hvam
dd9790d9bd
update npm + actions dependencies (#7157)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2025-03-14 10:02:43 +01:00
github-actions[bot]
4469771f01
ajson, Automatic Update (#7158)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: larshp <larshp@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-03-13 16:29:54 +01:00
Marc Bernard
d374436ae3
Refactor: Decouple staging logic from factory (#7155)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-03-13 16:19:29 +01:00
Marc Bernard
2f0281b6ed
Fix unit tests for non-Unicode systems (#7151) 2025-03-13 16:14:41 +01:00
Łukasz Pęgiel
39fe716022
Staging issue when folder name is in uppercase (#7150)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
Co-authored-by: Marc Bernard <marc@marcbernardtools.com>
2025-03-10 20:01:22 +01:00
Ben9ka
adc1dad930
Fix http service githandler in older releases (#7149)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-02-27 09:26:31 +01:00
Marc Bernard
91dd6873ab
Fix highlight of CR, LF, CRLF (#7153)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-02-23 13:28:19 +01:00
Marc Bernard
ae9ec4c141
Fix version badge (#7152) 2025-02-23 13:12:02 +01:00
Marc Bernard
90cb2201fa
Fix dump in non-Unicode systems (#7146)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-02-22 15:50:21 +01:00
Mike Pokraka
188bf8d69a
Filter nonexistent FMs from inconsistent FUGR (#7147)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2025-02-17 11:52:23 +01:00
Marc Bernard
626f23d72a
Exit: Enhance any toolbar (#7132)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2025-02-15 09:24:33 +01:00
Marc Bernard
2814ade981
Fix saving inconsistent default transport (#7144)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2025-02-14 19:08:07 +01:00
Marc Bernard
d99cc7a9cf
Fix color of selector (#7141)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2025-02-13 15:31:33 +01:00
Ben9ka
f45425f665
Added support for COTA - Communication Target (#7143) 2025-02-06 14:27:50 +01:00
Florian Dupret
160f10c38b
Execute WDCC after import method (#7140)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2025-02-06 10:44:14 +01:00
Marc Bernard
f6683582d1
Remove unused exceptions (#7145) 2025-02-05 23:40:51 +01:00
Fabian Lupa
527d512409
Enable ABAP Language Version support for DDLX (#7136)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2025-01-23 21:31:02 +01:00
Fabian Lupa
99fe0f5240
Enable ABAP Language Version support for DCLS (#7135)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2025-01-23 21:29:14 +01:00
Fabian Lupa
c08d33bb4a
Enable ABAP Language Version support for DDLS (#7134)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2025-01-23 21:23:25 +01:00
Christian Günter
5182ed6213
Patch: fix 'invalid filename' error if filename is empty (#7126)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2025-01-23 12:10:56 +01:00
Christian Günter
fd38cd873c
add edge case for diff calculation - tab vs space (#7130)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2025-01-16 09:38:29 +01:00
Marc Bernard
bdbfd57248
CHDO: Refactor logic for generated objects (#7129)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2025-01-15 17:41:04 +01:00
Marc Bernard
ee9e32d442
Refactor zcx_abapgit_exception (#7123)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2025-01-10 13:01:11 +01:00
Marc Bernard
3daf4d3f5c
Fix dump in language mapping (#7124)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
2025-01-08 19:25:52 +01:00
Marc Bernard
a8cb44d548
1.131.0 (#7122) 2025-01-01 10:57:34 -05:00
ThomasPloski
9f00aac592
Object Handler of type HTTP (#7100)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
Co-authored-by: Marc Bernard <marc@marcbernardtools.com>
2025-01-01 10:52:48 -05:00
Marc Bernard
97f5435b81
Remove need to parallel_generators server group (#7119)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-30 11:00:14 +01:00
Marc Bernard
4b6ac3c2a6
Fix dump when converting xstring to bintab (#7120)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2024-12-20 07:27:16 +01:00
Marc Bernard
1fac2a71e2
Fix indent of <pre> tags in HTML (#7118)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
2024-12-18 16:21:26 +01:00
Marc Bernard
b7bb00d7ee
Limit number of GUI sessions (#7080)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-18 09:26:08 -05:00
Lars Hvam
31e860bde7
update npm dependencies (#7078)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2024-12-18 08:15:54 +01:00
Marc Bernard
e16e3d3ac6
FUGS: Fix activation error (#7115)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2024-12-17 08:59:39 -05:00
Marc Bernard
cf9da3c06d
Enhance logging with message id and number (#7111)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-10 15:17:28 -05:00
Marc Bernard
7dd14b7ccf
USCA: Fix missing transport entry (#7110)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-10 13:31:04 +01:00
Marc Bernard
3d3cae3990
IDOC/IEXT: Fix deserialize in background (#7113) 2024-12-10 07:50:34 +01:00
Marc Bernard
bc36dcc44b
Fix RFC error handling (#7102)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-09 08:56:39 -05:00
Marc Bernard
621f0192ef
Fix missing longtexts (#7108)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-08 11:47:37 +01:00
Marc Bernard
f24f0c9589
MSAG: Fix deletion of message longtexts (#7109)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-06 17:09:18 +01:00
Marc Bernard
fef6bf49ca
Fix generic table types (#7105)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-06 10:25:58 -05:00
Marc Bernard
53bad5bd20
Adjust object descriptions (#7101)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-06 10:51:12 +01:00
Marc Bernard
d21c8a3cfe
Fix dark theme CSS whitespace (#7104)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-06 10:47:39 +01:00
Marc Bernard
0e6c6fc120
Fix extended check issues - Part 9 (#7106)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2024-12-06 10:18:50 +01:00
Marc Bernard
cb58678c79
Refactor: Types related to object interface (#7096)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-05 18:01:09 +01:00
Marc Bernard
da3f5e2a08
Fix extended check issues - Part 8 (#7094)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-05 17:56:41 +01:00
Marc Bernard
697bc7f51d
Fix extended check issues - Part 7 (#7092)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-05 17:53:17 +01:00
Marc Bernard
b835900776
Fix extended check issues - Part 6 (#7091)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-05 17:50:17 +01:00
Marc Bernard
c266a4826c
Fix extended check issues - Part 5 (#7090)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-05 17:45:22 +01:00
Marc Bernard
03dfdb072c
Fix extended check issues - Part 4 (#7089)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-05 17:41:31 +01:00
Marc Bernard
a23c1d6d58
Fix extended check issues - Part 3 (#7088)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-05 17:35:53 +01:00
Marc Bernard
6f0dfc5a81
Fix extended check issues - Part 2 (#7087)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-03 07:21:05 +01:00
Marc Bernard
900952495e
Fix extended check issues - Part 1 (#7086)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-12-03 07:18:52 +01:00
Marc Bernard
994cbf8f92
Fix error handling in exception viewer (#7095)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2024-12-02 09:27:48 -05:00
Marc Bernard
d31627d6a6
MSAG: Fix error handling during deletion (#7093) 2024-12-02 09:00:46 -05:00
Marc Bernard
65d08de249
SRVB: Clear fields and fix deserialize order (#7085)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-11-29 13:13:19 +01:00
Marc Bernard
d9a2fc8fdf
Fix unit test in 702 - Part 3 (#7084)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-11-29 13:01:06 +01:00
Marc Bernard
e77abaea8c
Fix unit test in 702 - Part 2 (#7083)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-11-29 12:59:30 +01:00
Marc Bernard
a1535908ec
Fix unit test in 702 - Part 1 (#7082) 2024-11-29 08:23:59 +01:00
Marc Bernard
93935b3dfb
VIEW: save tddat entries to transport (#7042)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-11-21 14:42:16 +01:00
Lars Hvam
aa2e082dcb
longtexts: workaround strange object names dump (#7077)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2024-11-15 12:56:02 +01:00
ConjuringCoffee
8f793b7b9e
Fix language conversion for language A (#7076)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
2024-11-12 18:17:51 -05:00
Lars Hvam
a58de530d7
Update changelog.txt (#7073)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2024-11-04 10:31:54 +01:00
Marc Bernard
8bf5f0c4f8
1.130.0 (#7068)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-11-04 10:26:52 +01:00
Marc Bernard
c83ebbe82c
SSFO: Store smartform code as separate ABAP files (#7071)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-11-04 10:23:51 +01:00
Marc Bernard
996d26ac3a
WDYN: Store controller code as separate ABAP files (#7069)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-11-04 10:19:56 +01:00
Marc Bernard
5ee49e33e8
PROG: Store flow logic as separate ABAP files (#7066)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
Co-authored-by: Marc Bernard <marc@abappm.com>
2024-11-04 10:11:38 +01:00
Marc Bernard
b2d795d8b6
SHI8: Avoid package popup (#7072)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2024-11-02 11:45:54 -04:00
ThomasPloski
454607953d
SAJT: Support for Application Job Templates (#7027)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Co-authored-by: Lars Hvam <larshp@hotmail.com>
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-10-31 08:11:41 +01:00
ThomasPloski
713c258ff8
SAJC: Support for Application Job Catalog Entry (#7026)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-10-31 08:03:17 +01:00
ThomasPloski
f97818df21
APLO: Support for Application Log Objects (#7025)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-10-31 07:57:02 +01:00
Marc Bernard
3b77c130ee
Fix failing AFF unit tests in dev edition 2022 (#7070) 2024-10-31 07:51:29 +01:00
Marc Bernard
57d785ac98
Show diffs in case of trailing spaces (#7062)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-10-29 05:40:08 +01:00
Lars Hvam
e4bb6ec3ef
update npm dependencies (#7067) 2024-10-29 05:35:01 +01:00
github-actions[bot]
e83a31ebaf
ajson, Automatic Update (#7065)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: larshp <larshp@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-10-28 08:17:59 +01:00
Marc Bernard
436f23c899
TABU: Display transport requests (#7063)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-10-28 08:16:12 +01:00
Marc Bernard
af8f1e23df
Remove generic comments (#7064)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2024-10-22 20:26:25 -04:00
gardian12
21c8865209
Added enhanced method resolution for background exit (#7059)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-10-22 10:04:40 -04:00
Lars Hvam
b1abcd8764
update npm dependencies (#7043) 2024-10-16 15:45:26 +02:00
Mike Pokraka
aee4d0aedd
Don't discard includes of nonexistent FUGR (#7053)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-09-24 00:25:28 +02:00
fvalves
8997e51b32
Comparing GET TIME STAMP and sy-datum and sy-uzeit only works if the user is in UTC (#7031)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-09-16 13:06:50 -04:00
Lars Hvam
a6c073409e
align TYPE expressions (#7050) 2024-09-13 10:47:32 +02:00
fvalves
ca1d349ca5
Enable CDS types (#7048) 2024-09-12 11:44:02 -04:00
Lars Hvam
cc9b9ef08e
bugfix: git chmod = symbolic link (#7047) 2024-09-12 05:47:41 +02:00
Lars Hvam
bd060315d0
abaplint.json move important stuff to start (#7046) 2024-09-11 18:46:12 +02:00
Lars Hvam
b751ff519e
basic FUGS serialization (#7045)
Co-authored-by: Marc Bernard <marc@marcbernardtools.com>
2024-09-11 13:52:41 +02:00
Lars Hvam
41619e6e4d
update npm dependencies (#7032)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2024-09-05 16:04:13 +02:00
Marc Bernard
a02632edcb
Add package check when creating repository (#7037)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-09-05 09:03:11 -04:00
Marc Bernard
65f8fa87ac
SFPF: Fix check if object exists (#7041)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-09-05 08:46:28 -04:00
Marc Bernard
0525d01394
SFPF: Add syntax highlighting for xdp files (#7040)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-09-05 10:31:43 +02:00
Marc Bernard
4c40ca0232
JOBD: Clear changedby field (#7039) 2024-09-05 07:51:42 +02:00
Marc Bernard
fd673dac68
PROG: Support dynpros with splitter control (2) (#7038)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2024-09-04 15:36:35 -04:00
Marc Bernard
019cfe8152
Fix CX_SY_ZERODIVIDE dump in progress bar (#7036)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2024-09-04 10:45:56 -04:00
Marc Bernard
84656774fd
PROG: Support dynpros with splitter control (#7035) 2024-09-04 10:23:50 -04:00
fvalves
be5ec9ed29
Added test attributes to test class in ZCL_ABAPGIT_PROPERTIES_FILE (#7030)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-08-29 16:28:46 +02:00
fvalves
ff60057e62
Enable deserialization of DSFD, DSFI and DRAS (#7029)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
2024-08-29 09:46:23 +02:00
Albert Mink
72a1a13033
[AFF] experimental: Serialize all languages (#7022)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
2024-08-27 09:44:32 +02:00
Albert Mink
1339a71969
Filenames for translation are case sensitive (#6995)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-08-20 10:21:03 -04:00
Albert Mink
d28dcaef29
Language conversion sap2/sap1 (#7017)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
2024-08-20 15:13:28 +02:00
Lars Hvam
0f74ad944f
dont hide experimental settings, just disable it (#7014)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2024-08-13 09:22:55 +02:00
fvalves
2c9898e649
DSFI: Updated object handler to match the latest AFF definition (#7013) 2024-08-07 16:10:06 -04:00
Lukas
e93934d1cf
Add support for Software Component Relations (#7012)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-08-06 11:02:22 +02:00
Christian Günter
1e0ff12c60
fix sticky header with browser control warning (#6997)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-08-06 10:54:49 +02:00
Lars Hvam
0d6d999e62
remove 200% icon scaling (#7003)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2024-08-05 18:08:54 +02:00
fvalves
82bed9224c
DSFI: CDS Scalar Function Implementation (#6952)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-08-05 14:55:00 +02:00
Lars Hvam
a1a65d2e48
update to docker compose v2 (#7010) 2024-08-05 13:40:22 +02:00
Lars Hvam
5dd4d83f3f
testing: transpiled abapGit running on web via express js (#7008)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2024-08-02 08:06:32 +02:00
Lars Hvam
d4c7365725
router: extract to method (#7009)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2024-08-01 15:51:22 +02:00
Lars Hvam
d9a00a5f55
README.md: update credits, add AFF (#7007) 2024-08-01 15:43:50 +02:00
Lars Hvam
5d59d6f8d2
html: refactor setting debug mode (#7005)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2024-07-31 18:22:04 +02:00
Lars Hvam
1c2b65814f
zcl_abapgit_timer: delete unit tests (#7004) 2024-07-31 18:17:06 +02:00
Lars Hvam
27e767e935
zcl_abapgit_function_module: cloud compatiblity (#7002) 2024-07-31 18:07:58 +02:00
Lars Hvam
36d91e973e
where-used: remove public use of RSFINDLST (#6992)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
2024-07-30 09:30:53 +02:00
Abo
c5a6aed115
fix: syst_langu does not exist on older releases (#6999)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-07-25 21:52:35 +02:00
Albert Mink
a120ce66b0
Fix sap2/sap1 for AFF experimental (#6993)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
2024-07-23 12:36:06 +02:00
fvalves
a7e984151b
DRAS: CDS Aspect (#6953)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-07-23 10:23:18 +02:00
fvalves
b9ac1265f4
DSFD: CDS Scalar Function Definition (#6951)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-07-23 10:21:09 +02:00
Lars Hvam
8d91119371
uccp(), cloud compatibility (#6991) 2024-07-23 10:15:41 +02:00
Lars Hvam
8b7c4862f3
update npm dependencies (#6973)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2024-07-23 08:20:46 +02:00
Albert Mink
f9bd01021d
Extend logic to detect BCP47 languages (#6986)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-07-22 14:28:16 +02:00
Albert Mink
d8afb7bf42
Pass variable to METH (#6987) 2024-07-18 14:10:48 +02:00
Marc Bernard
872ed2758f
Allow staging for empty repositories (#6981)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2024-07-14 09:04:10 -04:00
Albert Mink
faac8542e4
Clear variables when getting i18n files (#6978)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2024-07-11 14:01:56 +02:00
Albert Mink
a7fbf2205f
Fix deserialize SEOCLASSTX for INTF [AFF] (#6983)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-07-11 13:37:52 +02:00
Christian Günter
7854587a5f
downport (#6984) 2024-07-11 07:23:43 -04:00
Albert Mink
c1c36a5780
Simplify the JSON2ABAP (#6979)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
2024-07-11 08:45:32 +02:00
ellima
dd77c9930f
BGQC: Add support for Background Processing Context (#6974)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-07-10 15:38:42 -04:00
ViktoriaFreidel
68e507604c
UIAD: Add support for Launchpad App Descriptor Item (#6969)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-07-10 15:32:27 -04:00
github-actions[bot]
1269360946
ajson, Automatic Update (#6977)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: larshp <larshp@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-07-09 21:22:13 +02:00
Albert Mink
263a58e84f
Fix typo in BCP47 to SAP1 conversion (#6971)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-07-09 21:17:14 +02:00
Lars Hvam
840ec2d8f0
update npm dependencies (#6972)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
2024-07-06 10:52:40 +02:00
Marc Bernard
8b2ab1e5d9
CLIF: Add missing translations for classes and interfaces (#6963)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-07-04 13:16:40 +02:00
Marc Bernard
9261028dcb
Fix dump in activation error handling (#6967) 2024-07-03 12:04:03 +02:00
Mike Pokraka
e4540da772
CDBO: Fix missing parameters in constructor (#6966)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
2024-07-03 09:06:20 +02:00
Marc Bernard
618f5ec279
SXSD: Fix check if BADI exists (#6961)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
2024-07-01 17:05:25 +02:00
Marc Bernard
7d67620b03
ENHO: Fix diff in generated comments of class enhancements (#6962) 2024-07-01 17:01:29 +02:00
Marc Bernard
121f580abb
1.129.0 (#6954)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-07-01 10:01:40 +02:00
Alexander Tsybulsky
b4f14ab6e8
TABL: Clear DBINCLEXCL and DBSYSSELx fields (#6960)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-07-01 09:55:55 +02:00
Mike Pokraka
b87f5c4ee8
Read-only support for SXSD - Classic BAdI definition (#6958)
Some checks failed
main-build / build-merged (push) Has been cancelled
main-build / auto-tag (push) Has been cancelled
main-build / coverage (push) Has been cancelled
main-build / auto-tag-artifact (push) Has been cancelled
ajson mirror / pr_ajson_changes (push) Has been cancelled
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-06-28 14:11:16 +02:00
thorsten-wolf-neptune
2e63907565
data serializer: fix carriage return problem (#6957)
Some checks are pending
main-build / build-merged (push) Waiting to run
main-build / auto-tag (push) Waiting to run
main-build / auto-tag-artifact (push) Blocked by required conditions
main-build / coverage (push) Waiting to run
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-06-27 16:56:14 +02:00
Marc Bernard
55f9b49577
Add parameters to map_object_to_filename (#6955)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-06-27 16:44:22 +02:00
Lars Hvam
a96e581fa4
update npm dependencies (#6931) 2024-06-17 07:44:17 +02:00
Alexander Tsybulsky
f0a6532deb
Exclude files from remote (#6942)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-06-16 07:34:23 +02:00
Christian Günter
f486167cc4
Fix yank mode - copy to clipboad (#6946) 2024-06-12 13:16:47 +02:00
Marc Bernard
3929cfab17
Fix folder logic buffer (#6945) 2024-06-11 16:28:50 +02:00
Marc Bernard
22e6df1d4d
Remove duplicate clipboad action (#6944) 2024-06-11 16:15:53 +02:00
Marc Bernard
4bf6e07235
Small performance improvement in folder logic (#6941) 2024-06-08 21:01:38 +02:00
Francisco Milán
376a7d8be8
Set Default Git User Details (#6920)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-06-06 07:03:17 +02:00
Marc Bernard
38e785ddb0
Sync UI theme in dark mode (#6940)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
2024-05-29 09:13:45 +02:00
Lars Hvam
e2c625f2d9
HOOK: catch exception (#6937) 2024-05-24 13:00:21 +02:00
Lars Hvam
11a7e58237
ENHO: workaround dump during serialization (#6935) 2024-05-23 15:30:41 +02:00
Francisco Milán
13fd9a3897
Set Character Limit for "Table" Field in Data Config page (#6934)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-05-23 14:24:08 +02:00
Lars Hvam
667ac8966a
bugfix, new pull page: decide package warnings (#6932) 2024-05-21 17:46:36 +02:00
Francisco Milán
01544d86c6
Fix Issue Encountered on "Data Config" Page. (#6913)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-05-21 07:00:33 +02:00
Dennis Schaaf
32f002893c
VIEW: Add authorization group to serialize and deserialize (#6918)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-05-18 10:33:43 +02:00
ThomasPloski
2973cb4cba
CDBO Object Handler (#6930) 2024-05-15 08:04:47 +02:00
Mike Pokraka
40c5cd7212
Suppress popup when using background API (#6926)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-05-10 17:22:46 +02:00
Katharina Wurz
29baa5a152
Use bcp47 language code for AFF (#6915)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
2024-04-24 16:40:58 +02:00
Lars Hvam
a18b9c7f81
update eslint to 9 + update actions (#6910) 2024-04-21 11:32:42 +02:00
Kai Busse
6645fcecd5
Improve error message for SUSH objects not being supported. (#6916) 2024-04-19 14:28:10 +02:00
Alexander Tsybulsky
3bfb2be6ab
Where used page (#6897) 2024-04-19 07:51:59 +02:00
Marc Bernard
9b10bba142
DEVC: Fix "Package must be assigned to the software component LOCAL" (#6912) 2024-04-15 17:14:04 +02:00
Francisco Milán
0c4e5f5495
Fix bug in "Object to Files" Page. (#6908)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-04-14 09:41:22 +02:00
Marc Bernard
a648f1ef51
DEVC,NSPC: Serialize software component for add-ons (#6891) 2024-04-14 09:37:02 +02:00
Alexander Tsybulsky
f60e92d9b9
Template page (#6899) 2024-04-10 17:21:03 +02:00
Marc Bernard
ecdd17162a
SOTS: Remove from TADIR selection (#6906) 2024-04-10 16:30:33 +02:00
Marc Bernard
a972831441
Change message if local packages got lost (#6905) 2024-04-10 13:57:18 +02:00
ConjuringCoffee
6459b0c067
Integrate repo interface into online repo interface (#6894)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-04-08 15:40:52 +02:00
Marc Bernard
993466a1c9
Refactor: Translations for AFF (#6904) 2024-04-08 15:12:16 +02:00
Marc Bernard
3acb94ef05
1.128.0 (#6903) 2024-04-05 14:47:48 +02:00
Christian Günter
493cfceedd
Make HTTP/1.1 new default in abapGit (#6902)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-04-05 14:43:19 +02:00
Christian Günter
6980aae774
add specific error message for 426 http error (#6901)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-04-05 13:36:12 +02:00
Marc Bernard
412cd9995b
Refactor: i18n filename logic (#6892)
Co-authored-by: Albert Mink <albert.mink@sap.com>
2024-04-05 12:57:27 +02:00
Marc Bernard
72d80c1120
Update description of i18n classes/interfaces (#6895) 2024-04-03 15:46:07 +02:00
Marc Bernard
3032db29d7
ENHO/ENHS: Add missing longtexts (#6890) 2024-04-02 17:34:09 +02:00
Lars Hvam
2c30602e10
item graph: performance (#6885) 2024-04-02 10:09:38 +02:00
Francisco Milán
30258f3898
Limit Package Name to 30 characters (#6889) 2024-04-02 08:36:20 +02:00
Lars Hvam
d63c162ac6
fix unit tests after gui classes moved (#6887) 2024-04-01 10:20:03 +02:00
Lars Hvam
6533a40793
ZAG1 object type for integration testing (#6652) 2024-04-01 09:04:06 +02:00
Francisco Milán
25091cc6fb
Restore Variable lv_commitmsg_comment_length (#6886) 2024-03-31 09:23:15 +02:00
Marc Bernard
52c9bd1847
Fix changing transport type when setting original system (#6870)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-03-29 12:56:35 +01:00
Lars Hvam
483d852823
update npm dependencies (#6854) 2024-03-29 12:05:55 +01:00
Lars Hvam
9840d88ea4
Create SECURITY.md (#6882) 2024-03-29 06:51:11 +01:00
Francisco Milán
9ad328b681
Fix Hint for "Maximum Length of Comment" Field (#6877) 2024-03-22 18:28:59 +01:00
Marc Bernard
505c73a27c
Avoid popup on exit after saving remote settings (#6875)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-03-22 15:45:16 +01:00
Marc Bernard
67ec3980b5
Refactor: Determine i18n parameters (#6869)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-03-21 14:06:10 +01:00
Francisco Milán
c40964ec33
Fix Unexpected Functionality for "Maximum Length of Comment" Field (#6871)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-03-21 12:06:32 +01:00
ViktoriaFreidel
17a59c4a35
UIPG, UIST: Add support for Launchpad Page and Space Templates (#6873)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-03-21 11:57:48 +01:00
Albert Mink
d260e3dfbb
AFF: deserialize translation files (#6830)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-03-19 15:27:46 +01:00
Alexander Tsybulsky
cefc4dde7a
Code inspector pages improvements (#6862) 2024-03-19 06:04:47 +01:00
Abo
cbda2ffb78
SFPI: exists() also look for inactive objects (#6867) 2024-03-18 17:32:01 +01:00
Francisco Milán
57ea8ba7fc
Fix typos within the code base (#6864) 2024-03-17 18:32:49 +01:00
Francisco Milán
105a202f8c
Fix typos within the code base (#6858) 2024-03-16 10:24:16 +01:00
Marc Bernard
fe457a0349
apack: additional namespace case (#6851) 2024-03-14 16:48:15 +01:00
Marc Bernard
463f112c85
SICF: Include alternate service name (#6853) 2024-03-14 15:43:19 +01:00
Marc Bernard
668da207aa
IDOC: Fix MOVE_TO_LIT_NOTALLOWED_NODATA (#6852) 2024-03-12 13:24:38 +01:00
Francisco Milán
687c91bcf5
Remove duplicate labels from Command Palette. (#6821)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
Co-authored-by: Marc Bernard <marc@marcbernardtools.com>
2024-03-12 10:19:44 +01:00
Einar Eiríksson
9295929903
apack: fix namespace problem (#6841)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-03-11 18:45:25 +01:00
Christian Günter
a06530ee31
Fix warning in unit test (#6842)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-03-11 07:11:33 +01:00
github-actions[bot]
6183f2d30d
ajson, Automatic Update (#6844)
Co-authored-by: larshp <larshp@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-03-11 06:41:43 +01:00
Lars Hvam
f7d2384e16
update npm dependencies (#6831) 2024-03-11 06:31:09 +01:00
Alexander Tsybulsky
b3f2085443
Group pages (#6839) 2024-03-09 13:52:43 +02:00
Lars Hvam
15443a6aaa
unit test page: change colours for runtime (#6833) 2024-03-05 10:19:49 +01:00
Lars Hvam
3ad85b4c58
bugfix, FORM existence (#6832) 2024-03-05 10:16:04 +01:00
github-actions[bot]
6f8a136cde
ajson, Automatic Update (#6827)
Co-authored-by: larshp <larshp@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-02-26 06:32:32 +01:00
Lars Hvam
687e43137c
update npm dependencies (#6811) 2024-02-26 06:29:10 +01:00
Marius Raht
301fdbb1b6
Fix #6825 (#6826) 2024-02-23 20:04:17 +01:00
Marc Bernard
37390a521e
Change transport type when setting original system (#6816)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-02-23 14:23:07 +01:00
Marc Bernard
0d35e9377e
HTTP connection check and improved error messages (#6806)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-02-23 14:09:38 +01:00
Michael Käsemann
c8b3cf0746
Fix Filter Application Bug (#6824) 2024-02-23 12:37:51 +01:00
Albert Mink
a7f9ceedea
Translation for INTF in AFF (#6774)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-02-21 10:50:48 +01:00
Francisco Milán
5eec8f264e
Fix Navigation Issue in "Config Display" and "Config Edit" pages. (#6820)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-02-19 22:03:02 +01:00
Francisco Milán
75836f2264
Fix bug in Personal settings page (#6818) 2024-02-19 12:36:37 +01:00
Marc Bernard
e07edcd18f
Improve form validation of text fields (#6813) 2024-02-16 09:31:29 +01:00
Marc Bernard
d76aa90cd1
Improve error messages when checking branches/tags (#6814) 2024-02-16 09:25:57 +01:00
Marc Bernard
d4f6879a18
Add "ignore sub-packages" option to package export (#6815) 2024-02-16 09:18:45 +01:00
Christian Günter
30415249ac
CLAS/INTF-SYNTAX_CHECK: Suppress status message (#6812) 2024-02-14 06:45:18 +01:00
Francisco Milán
ac09bd0334
Update the text "Submit Query" in the Command Palette. (#6810) 2024-02-13 10:06:54 +01:00
Marc Bernard
999da0ef9e
Fix unit tests for ZCL_ABAPGIT_REPO_REQUIREMENTS (#6801)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-02-11 06:44:04 +01:00
Marc Bernard
fa66b626de
XSLT: Add check for correct EOL separator (#6803)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-02-10 15:13:22 +01:00
Marc Bernard
05c9a33c57
Fix AFF unit test on lower releases (#6800)
Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-02-10 09:34:17 +01:00
Marc Bernard
ddd6bdb332
DIAL: Prefill package popup (#6805) 2024-02-07 17:13:02 +01:00
francisco-milan
b4e34da365
Fix bug in Command Palette (#6799) 2024-02-07 08:50:06 +01:00
github-actions[bot]
0514b2df62
ajson, Automatic Update (#6796)
Co-authored-by: larshp <larshp@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-02-05 14:54:58 +01:00
Lars Hvam
83573bf7e6
update npm dependencies (#6776) 2024-02-05 14:36:23 +01:00
Michael Schneider
178616bccc
Fix ABAP Language Version Handling for Repository Setting "Any" for AFF Object Types (#6793) 2024-02-05 14:14:58 +01:00
Lars Hvam
deb3c66a86
fix tadir read, io_dot is optional (#6790) 2024-02-02 15:01:36 +01:00
Matthias Becker
9a33f2180c
Ignore macOS "Desktop Services Store" files (#6787) 2024-02-01 10:16:54 +01:00
francisco-milan
bac2666e51
Fix typos and adjust comments within the codebase (Cont'd) (#6786) 2024-02-01 08:21:41 +01:00
francisco-milan
a1eb874ae7
Fix typos and adjust comments within the codebase (Cont'd). (#6785) 2024-01-31 06:20:03 +01:00
francisco-milan
fc67e3ef87
Remove Duplicate Entries in Command Palette (#6763)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-01-30 18:04:03 +01:00
francisco-milan
01df9ce948
Fix typos and adjust comments within the codebase (Cont'd). (#6780)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-01-30 06:36:46 +01:00
francisco-milan
4a36f0bb34
Fixing bug in Status Bar message when there's only 1 thread. (#6783) 2024-01-30 06:29:45 +01:00
André
6d0f7de2f5
user exit: include settings parameters in change_tadir() (#6775) 2024-01-29 18:12:37 +01:00
francisco-milan
374bc13a7b
Fix typos and adjust comments within the codebase (#6779) 2024-01-29 06:53:30 +01:00
francisco-milan
7bff32b718
Fix typos and adjust comments within source code. (#6778)
Co-authored-by: Lars Hvam <larshp@hotmail.com>
2024-01-28 09:21:14 +01:00
francisco-milan
101e519c89
Distinguish between "Global Settings" and "Repository Settings" (#6759)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-01-28 09:13:49 +01:00
Albert Mink
4b1110396d
Fix EOF, fix diff (#6773) 2024-01-26 10:27:01 +01:00
Lars Hvam
6c4f7a7c3c
zcl_abapgit_http: add note (#6771) 2024-01-25 17:34:25 +01:00
Matthias Becker
ffe847c9cc
New abapGit Handler for Object Type DTEB (#6769) 2024-01-25 14:56:13 +01:00
Matthias Becker
054a024d2c
New abapGit Handler for Object Type DRTY (#6767)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
2024-01-25 11:03:39 +01:00
522 changed files with 19817 additions and 5963 deletions

View File

@ -1,6 +1,10 @@
{
"name": "abapGit",
"image": "mcr.microsoft.com/vscode/devcontainers/javascript-node:0-12",
"extensions": ["larshp.vscode-abaplint"],
"image": "mcr.microsoft.com/vscode/devcontainers/javascript-node:0-20",
"customizations": {
"vscode": {
"extensions": ["larshp.vscode-abaplint"]
}
},
"postCreateCommand": "npm install"
}

View File

@ -12,6 +12,10 @@ trim_trailing_whitespace = true
indent_style = space
indent_size = 1
# XSLT source code must have CR LF to be deserialized correctly by SAP code
[*.xslt.source.xml]
end_of_line = crlf
# match the format used by abapGit
[*.{abap,js,json,html,css}]
charset = utf-8

View File

@ -1,14 +0,0 @@
---
parserOptions:
ecmaVersion: 5
env:
browser: true
extends:
- eslint:recommended
rules:
quotes: ['error', 'double', { 'avoidEscape': true }]
semi: ['error', 'always', { 'omitLastInOneLineBlock': true}]
no-console: off
indent: ['error', 2]
no-trailing-spaces: ['error']
no-unused-vars: ['warn']

View File

@ -19,11 +19,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '20'
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- name: run
run: |
git clone https://github.com/abapGit/ajson_mirror.git

View File

@ -9,11 +9,8 @@ jobs:
build-merged:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Use Node.js
uses: actions/setup-node@v3
with:
node-version: '16'
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- name: Run npm steps
run: |
npm install
@ -44,12 +41,10 @@ jobs:
outputs:
pushedTag: ${{ steps.deploy-release-tag.outputs.pushedTag }}
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
fetch-depth: 2
- uses: actions/setup-node@v3
with:
node-version: '16'
- uses: actions/setup-node@v4
- name: deploy-release-tag
id: deploy-release-tag
if: github.ref == 'refs/heads/main' && github.repository == 'abapGit/abapGit'
@ -64,12 +59,12 @@ jobs:
needs: [build-merged, auto-tag]
if: github.ref == 'refs/heads/main' && github.repository == 'abapGit/abapGit' && !!needs.auto-tag.outputs.pushedTag
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
repository: abapGit/build
path: build
ssh-key: ${{ secrets.DEPLOY_ABAPGIT_BUILD }}
- uses: actions/checkout@v3
- uses: actions/checkout@v4
with:
path: abapGit
- name: mirror tag to the artifact
@ -84,10 +79,8 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '16'
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- name: npm run unit
run: |
npm install

View File

@ -6,6 +6,6 @@ jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- name: REUSE Compliance Check
uses: fsfe/reuse-action@v1
uses: fsfe/reuse-action@v5

View File

@ -11,12 +11,9 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '20'
- name: npm install
run: |
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: |
npm install
npm run eslint
npm run merge
@ -32,30 +29,21 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '20'
- name: npm install
run: npm install
- name: npm run unit
run: npm run unit
- name: npm run coverage
run: npm run coverage
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm install
- run: npm run unit
- run: npm run coverage
integration:
runs-on: ubuntu-latest
needs: unit-tests
timeout-minutes: 10
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '20'
- name: npm install
run: npm install
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
- run: npm install
- name: start gitea
working-directory: test/gitea/
run: npm install && npm run gitea
- name: npm run integration
run: npm run integration
- run: npm run integration

1
.gitignore vendored
View File

@ -13,3 +13,4 @@ list.txt
/playwright-report/
/blob-report/
/playwright/.cache/
.DS_Store

View File

@ -3,8 +3,7 @@
[![License](https://img.shields.io/github/license/abapGit/abapGit?label=License&color=green)](LICENSE)
[![REUSE Status](https://api.reuse.software/badge/github.com/abapGit/abapGit?color=success)](https://api.reuse.software/info/github.com/abapGit/abapGit)
[![Slack](https://img.shields.io/badge/Join-Slack-blue)](https://communityinviter.com/apps/abapgit/abap)
[![abap package version](https://img.shields.io/endpoint?url=https://shield.abap.space/version-shield-json/github/abapGit/abapGit/src/zif_abapgit_version.intf.abap/c_abap_version&label=version)](https://github.com/abapGit/abapGit/blob/main/src/zif_abapgit_version.intf.abap)
[![abap package version](https://img.shields.io/endpoint?url=https://shield.abappm.com/github/abapGit/abapGit/-main/src/zif_abapgit_version.intf.abap/c_abap_version&label=version)](https://github.com/abapGit/abapGit/blob/main/src/zif_abapgit_version.intf.abap)
<!--
<picture>
@ -69,4 +68,5 @@ For questions/comments/bugs/feature requests/wishes please create an [issue](htt
- Icons used in abapGit are created from [Font Awesome](https://fontawesome.com/) free icon set ([CC-BY-4.0](LICENSES/CC-BY-4.0.txt))
- [AJSON](https://github.com/sbcgua/ajson) and [String-Map](https://github.com/sbcgua/abap-string-map) are developed by Alexander Tsybulsky ([MIT](LICENSES/MIT.txt))
- [AFF](https://github.com/SAP/abap-file-formats) formats are by SAP ([MIT](LICENSES/MIT.txt))

3
SECURITY.md Normal file
View File

@ -0,0 +1,3 @@
# Reporting Security Issues
To report a security issue, please use the GitHub Security Advisory ["Report a Vulnerability"](https://github.com/abapGit/abapGit/security/advisories/new) tab.

View File

@ -1,20 +1,52 @@
{
"global": {
"files": "/{test/src,src}/**/*.*",
"skipGeneratedFunctionGroups": true,
"skipGeneratedGatewayClasses": true,
"skipGeneratedPersistentClasses": true
},
"dependencies": [
{
"files": "/**/*.*",
"folder": "/deps"
},
{
"url": "https://github.com/abaplint/deps",
"files": "/src/**/*.*",
"folder": "/lint_deps",
"url": "https://github.com/abaplint/deps"
"folder": "/lint_deps"
}
],
"global": {
"files": "/{test/src,src}/**/*.*",
"skipGeneratedFunctionGroups": true,
"skipGeneratedGatewayClasses": true,
"skipGeneratedPersistentClasses": true
"syntax": {
"errorNamespace": "^(Z|Y|LT?CL_|TY_|LIF_|C_|.*ABAPGIT)",
"globalConstants": [
"abap_func_exporting",
"abap_func_tables",
"cssf_formtype_text",
"seok_access_free",
"seok_access_modify",
"sews_c_vif_version",
"skwfc_obtype_folder",
"skwfc_obtype_loio",
"so2_controller",
"srext_ext_class_pool",
"srext_ext_interface_pool",
"ststc_c_type_dialog",
"ststc_c_type_object",
"ststc_c_type_parameters",
"ststc_c_type_report",
"swbm_c_op_delete_no_dialog",
"swbm_c_type_ddic_db_tabxinx",
"swbm_c_type_wdy_application",
"swbm_version_active",
"swbm_version_inactive",
"swfco_org_standard_task",
"swfco_org_workflow_template",
"wbmr_c_skwf_folder_class",
"wdyn_limu_component_controller",
"wdyn_limu_component_definition",
"wdyn_limu_component_view"
],
"version": "v702"
},
"rules": {
"7bit_ascii": {
@ -25,9 +57,15 @@
]
},
"abapdoc": false,
"align_type_expressions": true,
"align_pseudo_comments": false,
"invalid_table_index": true,
"tables_declared_locally": true,
"unused_macros": true,
"align_parameters": false,
"allowed_object_naming": true,
"allowed_object_types": {
"exclude": ["test/src/"],
"allowed": [
"CLAS",
"DEVC",
@ -120,8 +158,11 @@
},
"double_space": true,
"downport": false,
"add_test_attributes": true,
"implicit_start_of_selection": true,
"empty_event": true,
"dynpro_checks": false,
"easy_to_find_messages": true,
"easy_to_find_messages": false,
"empty_line_in_statement": {
"allowChained": true
},
@ -130,6 +171,7 @@
"at": true,
"case": true,
"do": true,
"loopAllowIfSubrc": false,
"if": false,
"loop": true,
"select": true,
@ -183,8 +225,8 @@
"^if_adt_lock_handle$",
"^if_aff_",
"^if_satc_ci_variant_access$",
"^if_saunit_internal_result$",
"^if_saunit_internal_result_type$",
"^if_saunit_internal_result$",
"^if_srvd_types$",
"^if_wb_adt_plugin_resource_co$",
"^if_wb_object_data_selection_co$",
@ -192,6 +234,7 @@
"^if_xco_",
"^int4$",
"^numc2$",
"^pgmid$",
"^sabp_t_tadir_keys$",
"^sap_bool$",
"^srcsystem$",
@ -201,6 +244,7 @@
"^sychar70$",
"^sydatum$",
"^sylangu$",
"^syst_langu$",
"^syst_title$",
"^syuzeit$",
"^xubname$"
@ -249,7 +293,7 @@
"/json/",
"zcl_abapgit_object_pdts.clas.testclasses.abap"
],
"length": 120
"length": 125
},
"line_only_punc": {
"ignoreExceptions": true
@ -275,6 +319,9 @@
"message_exists": true,
"method_implemented_twice": true,
"method_length": {
"exclude": [
"zcl_abapgit_convert.clas.locals_imp.abap"
],
"checkForms": true,
"errorWhenEmpty": false,
"ignoreTestClasses": false,
@ -458,37 +505,5 @@
"when_others_last": true,
"whitespace_end": true,
"xml_consistency": true
},
"syntax": {
"errorNamespace": "^(Z|Y|LT?CL_|TY_|LIF_|C_|.*ABAPGIT)",
"globalConstants": [
"abap_func_exporting",
"abap_func_tables",
"cssf_formtype_text",
"seok_access_free",
"seok_access_modify",
"sews_c_vif_version",
"skwfc_obtype_folder",
"skwfc_obtype_loio",
"so2_controller",
"srext_ext_class_pool",
"srext_ext_interface_pool",
"ststc_c_type_dialog",
"ststc_c_type_object",
"ststc_c_type_parameters",
"ststc_c_type_report",
"swbm_c_op_delete_no_dialog",
"swbm_c_type_ddic_db_tabxinx",
"swbm_c_type_wdy_application",
"swbm_version_active",
"swbm_version_inactive",
"swfco_org_standard_task",
"swfco_org_workflow_template",
"wbmr_c_skwf_folder_class",
"wdyn_limu_component_controller",
"wdyn_limu_component_definition",
"wdyn_limu_component_view"
],
"version": "v702"
}
}

View File

@ -8,6 +8,138 @@ Legend
+ : added
- : removed
2025-01-01 v1.131.0
-------------------
! Remove need to `parallel_generators` server group (#7119)
+ VIEW: save `tddat` entries to transport (#7042)
+ Support for HTTP Destination (#7100)
+ Enhance logging with message id and number (#7111)
* Fix language conversion for language A (#7076)
* longtexts: workaround strange object names dump (#7077)
* SRVB: Clear fields and fix deserialize order (#7085)
* MSAG: Fix error handling during deletion (#7093)
* Fix error handling in exception viewer (#7095)
* Fix dark theme CSS whitespace (#7104)
* MSAG: Fix deletion of message longtexts (#7109)
* Fix RFC error handling (#7102)
* IDOC/IEXT: Fix deserialize in background (#7113)
* USCA: Fix missing transport entry (#7110)
* FUGS: Fix activation error (#7115)
* Limit number of GUI sessions (#7080)
* Fix dump when converting `xstring` to `bintab` (#7120)
2024-11-04 v1.130.0
-------------------
! PROG: Store flow logic as separate ABAP files (#7066)
! WDYN: Store controller code as separate ABAP files (#7069)
! SSFO: Store smartform code as separate ABAP files (#7071)
+ CLIF: Add missing translations for classes and interfaces (#6963)
+ UIAD: Add support for Launchpad App Descriptor Item (#6969)
+ BGQC: Add support for Background Processing Context (#6974)
+ DSFD: CDS Scalar Function Definition (#6951)
+ DRAS: CDS Aspect (#6953)
+ DSFI: CDS Scalar Function Implementation (#6952)
+ Add support for Software Component Relations (#7012)
* ENHO: Fix diff in generated comments of class enhancements (#6962)
* SXSD: Fix check if BADI exists (#6961)
* CDBO: Fix missing parameters in `constructor` (#6966)
* Fix dump in activation error handling (#6967)
* Fix deserialize SEOCLASSTX for INTF [AFF] (#6983)
* Allow staging for empty repositories (#6981)
* fix: syst_langu does not exist on older releases (#6999)
* fix sticky header with browser control warning (#6997)
* DSFI: Updated object handler to match the latest AFF definition (#7013)
* Filenames for translation are case sensitive (#6995)
* Enable deserialization of DSFD, DSFI and DRAS (#7029)
* PROG: Support dynpros with splitter control (#7035, #7038)
* Fix `CX_SY_ZERODIVIDE` dump in progress bar (#7036)
* JOBD: Clear `changedby` field (#7039)
* SFPF: Add syntax highlighting for `xdp` files (#7040)
* SFPF: Fix check if object exists (#7041)
* Add package check when creating repository (#7037)
* FUGS: serialization (#7045)
* Enable CDS types (#7048)
* Don't discard includes of nonexistent FUGR (#7053)
* Added enhanced method resolution for background exit (#7059)
* TABU: Display transport requests (#7063)
* Show diffs in case of trailing spaces (#7062)
- remove 200% icon scaling (#7003)
2024-07-01 v1.129.0
-------------------
+ DEVC,NSPC: Serialize software component for add-ons (#6891)
+ Where-used page (#6897)
+ CDBO: Customer Data Browser Object (#6930)
+ VIEW: Add authorization group to serialize and deserialize (#6918)
+ Exclude files from remote (#6942)
+ Read-only support for SXSD - Classic BAdI definition (#6958)
* Change message if local packages got lost (#6905)
* SOTS: Remove from TADIR selection (#6906)
* Fix bug in "Object to Files" Page. (#6908)
* DEVC: Fix "Package must be assigned to the software component LOCAL" (#6912)
* Improve error message for SUSH objects not being supported. (#6916)
* Use bcp47 language code for AFF (#6915)
* Suppress popup when using background API (#6926)
* Fix Issue Encountered on "Data Config" Page. (#6913)
* Bugfix, new pull page: decide package warnings (#6932)
* Set Character Limit for "Table" Field in Data Config page (#6934)
* ENHO: workaround dump during serialization (#6935)
* HOOK: catch exception (#6937)
* Sync UI theme in dark mode (#6940)
* Set Default Git User Details (#6920)
* Small performance improvement in folder logic (#6941)
* Fix folder logic buffer (#6945)
* Fix yank mode - copy to clipboad (#6946)
* Data serializer: fix carriage return problem (#6957)
* TABL: Clear DBINCLEXCL and DBSYSSELx fields (#6960)
2024-04-05 v1.128.0
-------------------
! Make HTTP/1.1 new default in abapGit (#6902)
! Distinguish between "Global Settings" and "Repository Settings" (#6759)
+ Add support for DRTY - CDS Type (#6767)
+ Add support for DTEB - CDS Entity Buffer (#6769)
+ Add "ignore sub-packages" option to package export (#6815)
+ HTTP connection check and improved error messages (#6806)
+ UIPG, UIST: Add support for Launchpad Page and Space Templates (#6873)
+ ENHO/ENHS: Add missing longtexts (#6890)
* Fix typos and adjust comments (#6778, #6779, #6780, #6783, #6785, #6786m #6858, #6864)
* User exit: include settings parameters in change_tadir() (#6775)
* Remove Duplicate Entries in Command Palette (#6763)
* Ignore macOS "Desktop Services Store" files (#6787)
* Fix ABAP Language Version Handling for Repository Setting "Any" for AFF Object Types (#6793)
* Fix bug in Command Palette (#6799)
* DIAL: Prefill package popup (#6805)
* XSLT: Add check for correct EOL separator (#6803)
* Update the text "Submit Query" in the Command Palette. (#6810)
* CLAS/INTF-SYNTAX_CHECK: Suppress status message (#6812)
* Improve error messages when checking branches/tags (#6814)
* Improve form validation of text fields (#6813)
* Fix bug in Personal settings page (#6818)
* Fix Navigation Issue in "Config Display" and "Config Edit" pages. (#6820)
* Fix Filter Application Bug (#6824)
* Change transport type when setting original system (#6816)
* FORM: Fix existence check (#6832)
* Apack: fix namespace problem (#6841)
* Remove duplicate labels from Command Palette. (#6821)
* IDOC: Fix MOVE_TO_LIT_NOTALLOWED_NODATA (#6852)
* SICF: Include alternate service name (#6853)
* Apack: additional namespace case (#6851)
* SFPI: exists() also look for inactive objects (#6867)
* Code inspector pages improvements (#6862)
* AFF: deserialize translation files (#6830)
* Fix Unexpected Functionality for "Maximum Length of Comment" Field (#6871)
* Avoid popup on exit after saving remote settings (#6875)
* Fix Hint for "Maximum Length of Comment" Field (#6877)
* Fix changing transport type when setting original system (#6870)
* Limit Package Name to 30 characters (#6889)
* Item graph: performance (#6885)
* Add specific error message for 426 http error (#6901)
2024-01-24 v1.127.0
-------------------
@ -123,10 +255,10 @@ Legend
+ APIS: API Release State (#6403)
+ IWOM/IWPR/TRAN: Implement changed_by (#6411)
+ Add online/offline filter option for repo list (#6449)
* Dont dump for unknown frontend (#6302)
* Don't dump for unknown frontend (#6302)
* IDOC, TABL: Set released and closed status (#6306)
* Fix is_dirty check for Repo Settings (#6309)
* Unit test page: dont show SAUNIT_NO_TEST_CLASS err (#6310)
* Unit test page: don't show SAUNIT_NO_TEST_CLASS err (#6310)
* Fixed links to new documentation (#6319)
* Fix "Data" page: On back go back (#6322)
* OO serializer: skip includes not found (#6324)
@ -1571,7 +1703,7 @@ Legend
------------------
* minor fixes for tags
* downport
* fix serilization of SXCI in background mode
* fix serialization of SXCI in background mode
2018-01-03 v1.51.0
------------------

61
deps/cdnames.tabl.xml vendored Normal file
View File

@ -0,0 +1,61 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>CDNAMES</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>INTTAB</TABCLASS>
<DDTEXT>CDNAMES</DDTEXT>
<EXCLASS>1</EXCLASS>
</DD02V>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>REPNAMEC</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>REPNAMET</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>REPNAMEFIX</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>REPNAMEVAR</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>FGRP</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<MASK> CHAR</MASK>
</DD03P>
</DD03P_TABLE>
</asx:values>
</asx:abap>
</abapGit>

24
deps/cdobjectcl.dtel.xml vendored Normal file
View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DTEL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD04V>
<ROLLNAME>CDOBJECTCL</ROLLNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<HEADLEN>15</HEADLEN>
<SCRLEN1>10</SCRLEN1>
<SCRLEN2>20</SCRLEN2>
<SCRLEN3>40</SCRLEN3>
<DDTEXT>CDOBJECTCL</DDTEXT>
<REPTEXT>CDOBJECTCL</REPTEXT>
<SCRTEXT_S>CDOBJECTCL</SCRTEXT_S>
<SCRTEXT_M>CDOBJECTCL</SCRTEXT_M>
<SCRTEXT_L>CDOBJECTCL</SCRTEXT_L>
<DTELMASTER>E</DTELMASTER>
<DATATYPE>CHAR</DATATYPE>
<LENG>000015</LENG>
<OUTPUTLEN>000015</OUTPUTLEN>
</DD04V>
</asx:values>
</asx:abap>
</abapGit>

25
deps/cl_package_helper.clas.abap vendored Normal file
View File

@ -0,0 +1,25 @@
CLASS cl_package_helper DEFINITION PUBLIC.
PUBLIC SECTION.
CLASS-METHODS check_package_name
IMPORTING
i_package_name TYPE any.
CLASS-METHODS check_package_existence
IMPORTING
i_package_name TYPE any
EXPORTING
e_package_exists TYPE abap_bool.
ENDCLASS.
CLASS cl_package_helper IMPLEMENTATION.
METHOD check_package_name.
ASSERT i_package_name IS NOT INITIAL.
ENDMETHOD.
METHOD check_package_existence.
ASSERT i_package_name IS NOT INITIAL.
e_package_exists = abap_true.
ENDMETHOD.
ENDCLASS.

105
deps/e070.tabl.xml vendored Normal file
View File

@ -0,0 +1,105 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>E070</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>TRANSP</TABCLASS>
<DDTEXT>E070</DDTEXT>
<CONTFLAG>A</CONTFLAG>
<EXCLASS>1</EXCLASS>
</DD02V>
<DD09L>
<TABNAME>ZE070</TABNAME>
<AS4LOCAL>A</AS4LOCAL>
<TABKAT>0</TABKAT>
<TABART>APPL0</TABART>
<BUFALLOW>N</BUFALLOW>
</DD09L>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>TRKORR</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ROLLNAME>TRKORR</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD>
<NOTNULL>X</NOTNULL>
<COMPTYPE>E</COMPTYPE>
</DD03P>
<DD03P>
<FIELDNAME>TRFUNCTION</FIELDNAME>
<ROLLNAME>TRFUNCTION</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD>
<VALEXI>X</VALEXI>
<SHLPORIGIN>F</SHLPORIGIN>
<COMPTYPE>E</COMPTYPE>
</DD03P>
<DD03P>
<FIELDNAME>TRSTATUS</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>TARSYSTEM</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000020</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000010</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>KORRDEV</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000004</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>AS4USER</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000024</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000012</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>AS4DATE</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>D</INTTYPE>
<INTLEN>000016</INTLEN>
<DATATYPE>DATS</DATATYPE>
<LENG>000008</LENG>
<MASK> DATS</MASK>
<SHLPORIGIN>T</SHLPORIGIN>
</DD03P>
<DD03P>
<FIELDNAME>AS4TIME</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>T</INTTYPE>
<INTLEN>000012</INTLEN>
<DATATYPE>TIMS</DATATYPE>
<LENG>000006</LENG>
<MASK> TIMS</MASK>
<SHLPORIGIN>T</SHLPORIGIN>
</DD03P>
<DD03P>
<FIELDNAME>STRKORR</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000040</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000020</LENG>
<MASK> CHAR</MASK>
</DD03P>
</DD03P_TABLE>
</asx:values>
</asx:abap>
</abapGit>

116
deps/e071.tabl.xml vendored Normal file
View File

@ -0,0 +1,116 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>E071</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>TRANSP</TABCLASS>
<DDTEXT>E071</DDTEXT>
<CONTFLAG>A</CONTFLAG>
<EXCLASS>1</EXCLASS>
</DD02V>
<DD09L>
<TABNAME>ZE071</TABNAME>
<AS4LOCAL>A</AS4LOCAL>
<TABKAT>0</TABKAT>
<TABART>APPL0</TABART>
<BUFALLOW>N</BUFALLOW>
</DD09L>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>TRKORR</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ROLLNAME>TRKORR</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD>
<NOTNULL>X</NOTNULL>
<COMPTYPE>E</COMPTYPE>
</DD03P>
<DD03P>
<FIELDNAME>AS4POS</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>N</INTTYPE>
<INTLEN>000012</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>NUMC</DATATYPE>
<LENG>000006</LENG>
<MASK> NUMC</MASK>
</DD03P>
<DD03P>
<FIELDNAME>PGMID</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000004</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>OBJECT</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000004</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>OBJ_NAME</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000240</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000120</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>OBJFUNC</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>LOCKFLAG</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>GENNUM</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000006</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000003</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>LANG</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<DATATYPE>LANG</DATATYPE>
<LENG>000001</LENG>
<MASK> LANG</MASK>
<LANGUFLAG>X</LANGUFLAG>
</DD03P>
<DD03P>
<FIELDNAME>ACTIVITY</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000040</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000020</LENG>
<MASK> CHAR</MASK>
</DD03P>
</DD03P_TABLE>
</asx:values>
</asx:abap>
</abapGit>

158
deps/e071k.tabl.xml vendored Normal file
View File

@ -0,0 +1,158 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>E071K</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>TRANSP</TABCLASS>
<DDTEXT>E071K</DDTEXT>
<CONTFLAG>A</CONTFLAG>
<EXCLASS>1</EXCLASS>
</DD02V>
<DD09L>
<TABNAME>ZE071K</TABNAME>
<AS4LOCAL>A</AS4LOCAL>
<TABKAT>0</TABKAT>
<TABART>APPL0</TABART>
<BUFALLOW>N</BUFALLOW>
</DD09L>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>TRKORR</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ROLLNAME>TRKORR</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD>
<NOTNULL>X</NOTNULL>
<COMPTYPE>E</COMPTYPE>
</DD03P>
<DD03P>
<FIELDNAME>PGMID</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000008</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>CHAR</DATATYPE>
<LENG>000004</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>OBJECT</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000008</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>CHAR</DATATYPE>
<LENG>000004</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>OBJNAME</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000060</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>CHAR</DATATYPE>
<LENG>000030</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>AS4POS</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>N</INTTYPE>
<INTLEN>000012</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>NUMC</DATATYPE>
<LENG>000006</LENG>
<MASK> NUMC</MASK>
</DD03P>
<DD03P>
<FIELDNAME>MASTERTYPE</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000004</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>MASTERNAME</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000080</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000040</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>VIEWNAME</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000060</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000030</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>OBJFUNC</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>TABKEY</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000240</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000120</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>SORTFLAG</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>FLAG</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>LANG</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<DATATYPE>LANG</DATATYPE>
<LENG>000001</LENG>
<MASK> LANG</MASK>
<LANGUFLAG>X</LANGUFLAG>
</DD03P>
<DD03P>
<FIELDNAME>ACTIVITY</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000040</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000020</LENG>
<MASK> CHAR</MASK>
</DD03P>
</DD03P_TABLE>
</asx:values>
</asx:abap>
</abapGit>

54
deps/e07t.tabl.xml vendored Normal file
View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>E07T</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>TRANSP</TABCLASS>
<DDTEXT>E07T</DDTEXT>
<CONTFLAG>A</CONTFLAG>
<EXCLASS>1</EXCLASS>
</DD02V>
<DD09L>
<TABNAME>ZE07T</TABNAME>
<AS4LOCAL>A</AS4LOCAL>
<TABKAT>0</TABKAT>
<TABART>APPL0</TABART>
<UEBERSETZ>N</UEBERSETZ>
<BUFALLOW>N</BUFALLOW>
</DD09L>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>TRKORR</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ROLLNAME>TRKORR</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD>
<NOTNULL>X</NOTNULL>
<COMPTYPE>E</COMPTYPE>
</DD03P>
<DD03P>
<FIELDNAME>LANGU</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>LANG</DATATYPE>
<LENG>000001</LENG>
<MASK> LANG</MASK>
<LANGUFLAG>X</LANGUFLAG>
</DD03P>
<DD03P>
<FIELDNAME>AS4TEXT</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000120</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000060</LENG>
<MASK> CHAR</MASK>
</DD03P>
</DD03P_TABLE>
</asx:values>
</asx:abap>
</abapGit>

24
deps/enqmode.dtel.xml vendored Normal file
View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DTEL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD04V>
<ROLLNAME>ENQMODE</ROLLNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<HEADLEN>55</HEADLEN>
<SCRLEN1>10</SCRLEN1>
<SCRLEN2>20</SCRLEN2>
<SCRLEN3>40</SCRLEN3>
<DDTEXT>ENQMODE</DDTEXT>
<REPTEXT>ENQMODE</REPTEXT>
<SCRTEXT_S>ENQMODE</SCRTEXT_S>
<SCRTEXT_M>ENQMODE</SCRTEXT_M>
<SCRTEXT_L>ENQMODE</SCRTEXT_L>
<DTELMASTER>E</DTELMASTER>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<OUTPUTLEN>000001</OUTPUTLEN>
</DD04V>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -1,5 +1,8 @@
INTERFACE if_package PUBLIC.
DATA wbo_korr_flag TYPE c LENGTH 1 READ-ONLY.
DATA package_name TYPE string READ-ONLY.
DATA short_text TYPE string READ-ONLY.
DATA super_package_name TYPE string READ-ONLY.
DATA software_component TYPE string READ-ONLY.
DATA application_component TYPE string READ-ONLY.
DATA transport_layer TYPE string READ-ONLY.

43
deps/ko100.tabl.xml vendored Normal file
View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>KO100</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>INTTAB</TABCLASS>
<DDTEXT>KO100</DDTEXT>
<EXCLASS>1</EXCLASS>
</DD02V>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>PGMID</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000004</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>OBJECT</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000004</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>TEXT</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000120</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000060</LENG>
<MASK> CHAR</MASK>
</DD03P>
</DD03P_TABLE>
</asx:values>
</asx:abap>
</abapGit>

48
deps/seoclasstx.tabl.xml vendored Normal file
View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>SEOCLASSTX</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>TRANSP</TABCLASS>
<DDTEXT>SEOCLASSTX</DDTEXT>
<CONTFLAG>A</CONTFLAG>
<EXCLASS>1</EXCLASS>
</DD02V>
<DD09L>
<TABNAME>SEOCLASSTX</TABNAME>
<AS4LOCAL>A</AS4LOCAL>
<TABKAT>0</TABKAT>
<TABART>APPL0</TABART>
<UEBERSETZ>N</UEBERSETZ>
<BUFALLOW>N</BUFALLOW>
</DD09L>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>CLSNAME</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ROLLNAME>SEOCLSNAME</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD>
<NOTNULL>X</NOTNULL>
<COMPTYPE>E</COMPTYPE>
</DD03P>
<DD03P>
<FIELDNAME>LANGU</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ROLLNAME>LANGU</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD>
<NOTNULL>X</NOTNULL>
<COMPTYPE>E</COMPTYPE>
<LANGUFLAG>X</LANGUFLAG>
</DD03P>
<DD03P>
<FIELDNAME>DESCRIPT</FIELDNAME>
<ROLLNAME>SEODESCR</ROLLNAME>
<ADMINFIELD>0</ADMINFIELD>
<COMPTYPE>E</COMPTYPE>
</DD03P>
</DD03P_TABLE>
</asx:values>
</asx:abap>
</abapGit>

57
deps/seometarel.tabl.xml vendored Normal file
View File

@ -0,0 +1,57 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>SEOMETAREL</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>TRANSP</TABCLASS>
<DDTEXT>SEOMETAREL</DDTEXT>
<CONTFLAG>A</CONTFLAG>
<EXCLASS>1</EXCLASS>
</DD02V>
<DD09L>
<TABNAME>SEOMETAREL</TABNAME>
<AS4LOCAL>A</AS4LOCAL>
<TABKAT>0</TABKAT>
<TABART>APPL0</TABART>
<BUFALLOW>N</BUFALLOW>
</DD09L>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>CLSNAME</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000060</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>CHAR</DATATYPE>
<LENG>000030</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>REFCLSNAME</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000060</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>CHAR</DATATYPE>
<LENG>000030</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>VERSION</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000002</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>CHAR</DATATYPE>
<LENG>000001</LENG>
<MASK> CHAR</MASK>
</DD03P>
</DD03P_TABLE>
</asx:values>
</asx:abap>
</abapGit>

25
deps/tcdrs.tabl.xml vendored Normal file
View File

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>TCDRS</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>INTTAB</TABCLASS>
<DDTEXT>TCDRS</DDTEXT>
<EXCLASS>1</EXCLASS>
</DD02V>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>TABNAME</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000060</INTLEN>
<DATATYPE>CHAR</DATATYPE>
<LENG>000030</LENG>
<MASK> CHAR</MASK>
</DD03P>
</DD03P_TABLE>
</asx:values>
</asx:abap>
</abapGit>

54
deps/zabapgit.tabl.xml vendored Normal file
View File

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DD02V>
<TABNAME>ZABAPGIT</TABNAME>
<DDLANGUAGE>E</DDLANGUAGE>
<TABCLASS>TRANSP</TABCLASS>
<DDTEXT>Generated by abapGit</DDTEXT>
<CONTFLAG>L</CONTFLAG>
<EXCLASS>1</EXCLASS>
</DD02V>
<DD09L>
<TABNAME>ZABAPGIT</TABNAME>
<AS4LOCAL>A</AS4LOCAL>
<TABKAT>1</TABKAT>
<TABART>APPL1</TABART>
<BUFALLOW>N</BUFALLOW>
</DD09L>
<DD03P_TABLE>
<DD03P>
<FIELDNAME>TYPE</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000024</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>CHAR</DATATYPE>
<LENG>000012</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>VALUE</FIELDNAME>
<KEYFLAG>X</KEYFLAG>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>C</INTTYPE>
<INTLEN>000024</INTLEN>
<NOTNULL>X</NOTNULL>
<DATATYPE>CHAR</DATATYPE>
<LENG>000012</LENG>
<MASK> CHAR</MASK>
</DD03P>
<DD03P>
<FIELDNAME>DATA_STR</FIELDNAME>
<ADMINFIELD>0</ADMINFIELD>
<INTTYPE>g</INTTYPE>
<INTLEN>000008</INTLEN>
<DATATYPE>STRG</DATATYPE>
<MASK> STRG</MASK>
</DD03P>
</DD03P_TABLE>
</asx:values>
</asx:abap>
</abapGit>

42
eslint.config.mjs Normal file
View File

@ -0,0 +1,42 @@
import js from "@eslint/js";
import globals from "globals";
export default [
js.configs.recommended,
{
"languageOptions": {
"parserOptions": {
"ecmaVersion": 2015
},
"sourceType": "script",
"globals": globals.browser,
},
"rules": {
"quotes": [
"error",
"double",
{
"avoidEscape": true
}
],
"semi": [
"error",
"always",
{
"omitLastInOneLineBlock": true
}
],
"no-console": "off",
"indent": [
"error",
2
],
"no-trailing-spaces": [
"error"
],
"no-unused-vars": [
"warn"
]
}
}
];

View File

@ -5,10 +5,10 @@
"test": "npm run eslint && npm run abaplint",
"merge": "abapmerge -f src/zabapgit.prog.abap -c zabapgit_standalone -o zabapgit.abap",
"merge.ci": "cp zabapgit.abap ci/zabapgit_standalone.prog.abap && cd ci && abaplint --format codeframe && cd ..",
"build": "rm -rf output && abap_transpile test/abap_transpile.json",
"unit": "npm run build && echo RUNNING && node output/index.mjs",
"coverage": "npm run unit && c8 node output/index.mjs && c8 report --reporter=html",
"integration": "rm -rf output && cp test/abap_transpile.json test/abap_transpile_int.json && sed -i 's/src,deps/test\\\/src,src,deps/g' test/abap_transpile_int.json && abap_transpile test/abap_transpile_int.json && echo RUNNING && node output/index.mjs",
"build": "rm -rf output && abap_transpile test/abap_transpile.json && cp -f src/ui/zabapgit_icon_font.w3mi.data.woff output/",
"unit": "npm run build && echo RUNNING && node output/index.mjs --skip-critical",
"coverage": "npm run unit && c8 node output/index.mjs --skip-critical && c8 report --reporter=html",
"integration": "npm run build && echo RUNNING && node output/index.mjs --only-critical",
"abaplint": "abaplint --format codeframe",
"eslint": "eslint src"
},
@ -23,12 +23,14 @@
]
},
"devDependencies": {
"@abaplint/cli": "^2.105.8",
"@abaplint/database-sqlite": "^2.7.119",
"@abaplint/runtime": "^2.7.140",
"@abaplint/transpiler-cli": "^2.7.140",
"abapmerge": "^0.16.0",
"c8": "^9.0.0",
"eslint": "^8.56.0"
"@abaplint/cli": "^2.113.110",
"@abaplint/database-sqlite": "^2.10.24",
"@abaplint/runtime": "^2.10.44",
"express": "^4.21.2",
"@abaplint/transpiler-cli": "^2.10.44",
"globals": "^16.0.0",
"abapmerge": "^0.16.6",
"c8": "^10.1.3",
"eslint": "^9.25.1"
}
}

View File

@ -178,7 +178,7 @@ CLASS zcl_abapgit_apack_migration IMPLEMENTATION.
component_error = 4
no_access = 5
other = 6
OTHERS = 7.
OTHERS = 7 ##FM_SUBRC_OK.
CATCH cx_sy_dyn_call_param_not_found.
CALL FUNCTION 'SEO_INTERFACE_CREATE_COMPLETE'
EXPORTING

View File

@ -89,7 +89,11 @@ CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
ls_my_dependency TYPE zif_abapgit_apack_definitions=>ty_dependency,
ls_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor,
lv_descriptor_cust TYPE string,
lv_descriptor_sap TYPE string.
lv_descriptor_sap TYPE string,
lv_descriptor_nspc TYPE string,
lv_class_name TYPE abap_abstypename,
lv_empty TYPE string,
ls_namespace TYPE zif_abapgit_definitions=>ty_obj_namespace.
FIELD-SYMBOLS: <lg_descriptor> TYPE any,
<lt_dependencies> TYPE ANY TABLE,
@ -98,9 +102,20 @@ CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
lv_descriptor_cust = zif_abapgit_apack_definitions=>c_apack_interface_cust && '~DESCRIPTOR'.
lv_descriptor_sap = zif_abapgit_apack_definitions=>c_apack_interface_sap && '~DESCRIPTOR'.
lv_class_name = cl_abap_classdescr=>get_class_name( io_manifest_provider ).
SPLIT lv_class_name AT '\CLASS=' INTO lv_empty lv_class_name.
ls_namespace = zcl_abapgit_factory=>get_sap_namespace( )->split_by_name( lv_class_name ).
IF ls_namespace-namespace IS NOT INITIAL.
lv_descriptor_nspc = |{ ls_namespace-namespace }{ lv_descriptor_sap }|.
ENDIF.
ASSIGN io_manifest_provider->(lv_descriptor_cust) TO <lg_descriptor>.
IF <lg_descriptor> IS NOT ASSIGNED.
ASSIGN io_manifest_provider->(lv_descriptor_sap) TO <lg_descriptor>.
IF <lg_descriptor> IS NOT ASSIGNED AND lv_descriptor_nspc IS NOT INITIAL.
ASSIGN io_manifest_provider->(lv_descriptor_nspc) TO <lg_descriptor>.
ENDIF.
ENDIF.
IF <lg_descriptor> IS ASSIGNED.
" A little more complex than a normal MOVE-CORRSPONDING

View File

@ -1,4 +1,3 @@
*"* use this source file for your ABAP unit test classes
CLASS ltcl_apack_manifest_reader DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
PRIVATE SECTION.
METHODS:

View File

@ -1,4 +1,3 @@
*"* use this source file for your ABAP unit test classes
CLASS ltcl_apack_manifest_writer DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
PRIVATE SECTION.
METHODS: the_serializator FOR TESTING RAISING cx_static_check.

View File

@ -26,6 +26,7 @@ CLASS zcl_abapgit_background DEFINITION
PROTECTED SECTION.
PRIVATE SECTION.
CONSTANTS c_enq_type TYPE c LENGTH 12 VALUE 'BACKGROUND'.
CONSTANTS c_interface TYPE seoclskey VALUE 'ZIF_ABAPGIT_BACKGROUND'.
ENDCLASS.
@ -60,35 +61,68 @@ CLASS zcl_abapgit_background IMPLEMENTATION.
METHOD list_methods.
DATA: ls_method LIKE LINE OF rt_methods,
ls_key TYPE seoclskey,
lt_implementing TYPE seor_implementing_keys,
ls_implementing LIKE LINE OF lt_implementing.
ls_implementing LIKE LINE OF lt_implementing,
lt_interf TYPE abap_intfdescr_tab,
lt_local_classes TYPE STANDARD TABLE OF scompo,
lv_classname TYPE string,
lr_typedescr TYPE REF TO cl_abap_typedescr,
lr_typedescr_class TYPE REF TO cl_abap_classdescr.
FIELD-SYMBOLS: <ls_method> LIKE LINE OF rt_methods.
FIELD-SYMBOLS: <ls_local_class> LIKE LINE OF lt_local_classes,
<ls_method> LIKE LINE OF rt_methods.
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_true.
" Assume the standalone version runs.
CALL FUNCTION 'WB_TREE_GET_OBJECTS'
EXPORTING
include = ' '
otype = 'L'
program = sy-repid
TABLES
olist = lt_local_classes.
* in order to handle local classes in the compiled report
ls_method-class = 'ZCL_ABAPGIT_BACKGROUND_PULL'.
INSERT ls_method INTO TABLE rt_methods.
ls_method-class = 'ZCL_ABAPGIT_BACKGROUND_PUSH_AU'.
INSERT ls_method INTO TABLE rt_methods.
ls_method-class = 'ZCL_ABAPGIT_BACKGROUND_PUSH_FI'.
LOOP AT lt_local_classes ASSIGNING <ls_local_class>.
lv_classname = |\\PROGRAM={ sy-repid }\\CLASS={ <ls_local_class>-name }|.
cl_abap_typedescr=>describe_by_name(
EXPORTING
p_name = lv_classname
RECEIVING
p_descr_ref = lr_typedescr
EXCEPTIONS
type_not_found = 1
OTHERS = 2 ).
IF sy-subrc = 0 AND lr_typedescr IS BOUND.
lr_typedescr_class ?= lr_typedescr.
IF lr_typedescr_class IS BOUND.
lt_interf = lr_typedescr_class->interfaces.
READ TABLE lt_interf WITH TABLE KEY name = c_interface TRANSPORTING NO FIELDS.
IF sy-subrc = 0.
ls_method-class = <ls_local_class>-name.
INSERT ls_method INTO TABLE rt_methods.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
ls_key-clsname = 'ZIF_ABAPGIT_BACKGROUND'.
ELSE.
" Assume the developer version runs.
CALL FUNCTION 'SEO_INTERFACE_IMPLEM_GET_ALL'
EXPORTING
intkey = ls_key
intkey = c_interface
IMPORTING
impkeys = lt_implementing
EXCEPTIONS
not_existing = 1
OTHERS = 2 ##FM_SUBRC_OK.
OTHERS = 2.
IF sy-subrc = 0.
LOOP AT lt_implementing INTO ls_implementing.
ls_method-class = ls_implementing-clsname.
INSERT ls_method INTO TABLE rt_methods.
ENDLOOP.
ENDIF.
ENDIF.
LOOP AT rt_methods ASSIGNING <ls_method>.
CALL METHOD (<ls_method>-class)=>zif_abapgit_background~get_description
@ -101,9 +135,10 @@ CLASS zcl_abapgit_background IMPLEMENTATION.
METHOD run.
DATA: lo_per TYPE REF TO zcl_abapgit_persist_background,
lo_repo TYPE REF TO zcl_abapgit_repo_online,
lt_list TYPE zcl_abapgit_persist_background=>ty_background_keys,
DATA:
li_repo TYPE REF TO zif_abapgit_repo,
li_repo_online TYPE REF TO zif_abapgit_repo_online,
lt_list TYPE zif_abapgit_persist_background=>ty_background_keys,
li_background TYPE REF TO zif_abapgit_background,
li_log TYPE REF TO zif_abapgit_log,
lx_error TYPE REF TO zcx_abapgit_exception,
@ -118,8 +153,7 @@ CLASS zcl_abapgit_background IMPLEMENTATION.
RETURN.
ENDTRY.
CREATE OBJECT lo_per.
lt_list = lo_per->list( ).
lt_list = zcl_abapgit_persist_factory=>get_background( )->list( ).
WRITE: / 'Background mode'.
@ -127,24 +161,30 @@ CLASS zcl_abapgit_background IMPLEMENTATION.
CREATE OBJECT li_log TYPE zcl_abapgit_log.
TRY.
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( <ls_list>-key ).
lv_repo_name = lo_repo->get_name( ).
li_repo = zcl_abapgit_repo_srv=>get_instance( )->get( <ls_list>-key ).
li_repo_online ?= li_repo.
lv_repo_name = li_repo->get_name( ).
WRITE: / <ls_list>-method, lv_repo_name.
zcl_abapgit_login_manager=>set(
iv_uri = lo_repo->get_url( )
iv_uri = li_repo_online->get_url( )
iv_username = <ls_list>-username
iv_password = <ls_list>-password ).
TRY.
CREATE OBJECT li_background TYPE (<ls_list>-method).
li_background->run(
io_repo = lo_repo
ii_repo_online = li_repo_online
ii_log = li_log
it_settings = <ls_list>-settings ).
CATCH cx_sy_create_object_error.
li_log->add_warning( |{ <ls_list>-method } could not be executed,|
& | as it is not accessible (local/global class).| ).
ENDTRY.
" Decrease memory usage for repository already processed (but keep log)
lo_repo->refresh(
li_repo->refresh(
iv_drop_cache = abap_true
iv_drop_log = abap_false ).
CATCH zcx_abapgit_exception INTO lx_error.

View File

@ -28,19 +28,37 @@ CLASS zcl_abapgit_background_pull IMPLEMENTATION.
METHOD zif_abapgit_background~run.
DATA: ls_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks.
DATA: ls_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks,
lo_settings TYPE REF TO zcl_abapgit_settings,
li_repo TYPE REF TO zif_abapgit_repo,
lv_activation_setting TYPE zif_abapgit_definitions=>ty_s_user_settings-activate_wo_popup.
FIELD-SYMBOLS: <ls_overwrite> LIKE LINE OF ls_checks-overwrite.
li_repo = ii_repo_online.
ls_checks = io_repo->deserialize_checks( ).
ls_checks = li_repo->deserialize_checks( ).
LOOP AT ls_checks-overwrite ASSIGNING <ls_overwrite>.
<ls_overwrite>-decision = zif_abapgit_definitions=>c_yes.
ENDLOOP.
io_repo->deserialize( is_checks = ls_checks
lo_settings = zcl_abapgit_persist_factory=>get_settings( )->read( ).
lv_activation_setting = lo_settings->get_activate_wo_popup( ).
lo_settings->set_activate_wo_popup( abap_true ).
" pass decisions to delete
zcl_abapgit_services_repo=>delete_unnecessary_objects(
ii_repo = li_repo
is_checks = ls_checks
ii_log = ii_log ).
li_repo->deserialize( is_checks = ls_checks
ii_log = ii_log ).
lo_settings->set_activate_wo_popup( lv_activation_setting ).
ENDMETHOD.
ENDCLASS.

View File

@ -17,7 +17,7 @@ CLASS zcl_abapgit_background_push_au DEFINITION
VALUE(rv_comment) TYPE string .
METHODS push_auto
IMPORTING
!io_repo TYPE REF TO zcl_abapgit_repo_online
!ii_repo_online TYPE REF TO zif_abapgit_repo_online
RAISING
zcx_abapgit_exception .
METHODS determine_user_details
@ -27,7 +27,7 @@ CLASS zcl_abapgit_background_push_au DEFINITION
VALUE(rs_user) TYPE zif_abapgit_git_definitions=>ty_git_user .
METHODS push_deletions
IMPORTING
!io_repo TYPE REF TO zcl_abapgit_repo_online
!ii_repo_online TYPE REF TO zif_abapgit_repo_online
!is_files TYPE zif_abapgit_definitions=>ty_stage_files
RAISING
zcx_abapgit_exception .
@ -69,12 +69,12 @@ CLASS zcl_abapgit_background_push_au IMPLEMENTATION.
METHOD determine_user_details.
DATA: lo_user_record TYPE REF TO zcl_abapgit_user_record.
DATA li_user_record TYPE REF TO zif_abapgit_user_record.
lo_user_record = zcl_abapgit_user_record=>get_instance( iv_changed_by ).
rs_user-name = lo_user_record->get_name( ).
rs_user-email = lo_user_record->get_email( ).
li_user_record = zcl_abapgit_env_factory=>get_user_record( ).
rs_user-name = li_user_record->get_name( iv_changed_by ).
rs_user-email = li_user_record->get_email( iv_changed_by ).
* If no email, fall back to localhost/default email
IF rs_user-email IS INITIAL.
@ -110,7 +110,7 @@ CLASS zcl_abapgit_background_push_au IMPLEMENTATION.
<ls_local> LIKE LINE OF ls_files-local.
ls_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo ).
ls_files = zcl_abapgit_stage_logic=>get_stage_logic( )->get( ii_repo_online ).
LOOP AT ls_files-local ASSIGNING <ls_local>.
lv_changed_by = zcl_abapgit_objects=>changed_by(
@ -172,12 +172,12 @@ CLASS zcl_abapgit_background_push_au IMPLEMENTATION.
ls_comment-comment = build_comment( ls_user_files ).
io_repo->push( is_comment = ls_comment
ii_repo_online->push( is_comment = ls_comment
io_stage = lo_stage ).
ENDLOOP.
IF lines( ls_files-remote ) > 0.
push_deletions( io_repo = io_repo
push_deletions( ii_repo_online = ii_repo_online
is_files = ls_files ).
ENDIF.
@ -212,7 +212,7 @@ CLASS zcl_abapgit_background_push_au IMPLEMENTATION.
ls_comment-committer-name = 'Deletion'.
ls_comment-committer-email = 'deletion@localhost'.
io_repo->push( is_comment = ls_comment
ii_repo_online->push( is_comment = ls_comment
io_stage = lo_stage ).
ENDMETHOD.
@ -237,14 +237,14 @@ CLASS zcl_abapgit_background_push_au IMPLEMENTATION.
DATA: ls_files TYPE zif_abapgit_definitions=>ty_stage_files.
mi_log = ii_log.
ls_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo ).
ls_files = zcl_abapgit_stage_logic=>get_stage_logic( )->get( ii_repo_online ).
IF lines( ls_files-local ) = 0 AND lines( ls_files-remote ) = 0.
ii_log->add_info( 'Nothing to stage' ).
RETURN.
ENDIF.
push_auto( io_repo ).
push_auto( ii_repo_online ).
ENDMETHOD.
ENDCLASS.

View File

@ -22,7 +22,7 @@ CLASS zcl_abapgit_background_push_fi DEFINITION
VALUE(rv_comment) TYPE string .
METHODS push_fixed
IMPORTING
!io_repo TYPE REF TO zcl_abapgit_repo_online
!ii_repo_online TYPE REF TO zif_abapgit_repo_online
!iv_name TYPE string
!iv_email TYPE string
RAISING
@ -73,7 +73,7 @@ CLASS zcl_abapgit_background_push_fi IMPLEMENTATION.
<ls_remote> LIKE LINE OF ls_files-remote.
ls_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo ).
ls_files = zcl_abapgit_stage_logic=>get_stage_logic( )->get( ii_repo_online ).
ASSERT lines( ls_files-local ) > 0
OR lines( ls_files-remote ) > 0.
@ -99,7 +99,7 @@ CLASS zcl_abapgit_background_push_fi IMPLEMENTATION.
ls_comment-committer-email = iv_email.
ls_comment-comment = build_comment( ls_files ).
io_repo->push( is_comment = ls_comment
ii_repo_online->push( is_comment = ls_comment
io_stage = lo_stage ).
ENDMETHOD.
@ -142,7 +142,7 @@ CLASS zcl_abapgit_background_push_fi IMPLEMENTATION.
lv_email TYPE string.
mi_log = ii_log.
ls_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo ).
ls_files = zcl_abapgit_stage_logic=>get_stage_logic( )->get( ii_repo_online ).
IF lines( ls_files-local ) = 0 AND lines( ls_files-remote ) = 0.
ii_log->add_info( 'Nothing to stage' ).
@ -156,7 +156,7 @@ CLASS zcl_abapgit_background_push_fi IMPLEMENTATION.
lv_email = ls_setting-value.
push_fixed(
io_repo = io_repo
ii_repo_online = ii_repo_online
iv_name = lv_name
iv_email = lv_email ).

View File

@ -18,7 +18,7 @@ INTERFACE zif_abapgit_background
ct_settings TYPE ty_settings_tt .
METHODS run
IMPORTING
!io_repo TYPE REF TO zcl_abapgit_repo_online
!ii_repo_online TYPE REF TO zif_abapgit_repo_online
!ii_log TYPE REF TO zif_abapgit_log
!it_settings TYPE ty_settings_tt OPTIONAL
RAISING

View File

@ -21,7 +21,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
"! @raising zcx_abapgit_exception | Object is not locked in a transport
METHODS get_current_transport_for_obj
IMPORTING
!iv_program_id TYPE pgmid DEFAULT 'R3TR'
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
!iv_object_type TYPE trobjtype
!iv_object_name TYPE sobj_name
RETURNING
@ -36,7 +36,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
"! @raising zcx_abapgit_exception | Object is not locked in a transport
METHODS get_current_transport_from_db
IMPORTING
!iv_program_id TYPE pgmid DEFAULT 'R3TR'
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
!iv_object_type TYPE trobjtype
!iv_object_name TYPE sobj_name
RETURNING
@ -51,7 +51,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
"! @raising zcx_abapgit_exception | Object type is not lockable
METHODS is_object_locked_in_transport
IMPORTING
!iv_program_id TYPE pgmid DEFAULT 'R3TR'
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
!iv_object_type TYPE trobjtype
!iv_object_name TYPE sobj_name
RETURNING
@ -64,7 +64,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
"! @parameter rv_lockable | Lockable
METHODS is_object_type_lockable
IMPORTING
!iv_program_id TYPE pgmid DEFAULT 'R3TR'
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
!iv_object_type TYPE trobjtype
RETURNING
VALUE(rv_lockable) TYPE abap_bool .
@ -74,7 +74,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
"! @parameter rv_transportable | Transportable
METHODS is_object_type_transportable
IMPORTING
!iv_program_id TYPE pgmid DEFAULT 'R3TR'
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
!iv_object_type TYPE trobjtype
RETURNING
VALUE(rv_transportable) TYPE abap_bool .
@ -82,13 +82,16 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
CLASS zcl_abapgit_cts_api IMPLEMENTATION.
METHOD get_current_transport_for_obj.
DATA: lv_object_lockable TYPE abap_bool,
lv_locked TYPE abap_bool,
lv_transport_request TYPE trkorr,
ls_tlock TYPE tlock,
lt_tlock TYPE STANDARD TABLE OF tlock WITH DEFAULT KEY,
lt_transports TYPE STANDARD TABLE OF trkorr WITH DEFAULT KEY,
lv_task TYPE trkorr,
lv_tr_object_name TYPE trobj_name.
@ -104,6 +107,8 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
we_locked = lv_locked
we_lock_order = lv_transport_request
we_lock_task = lv_task
TABLES
wt_tlock = lt_tlock
EXCEPTIONS
empty_key = 1
no_systemname = 2
@ -122,7 +127,15 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
zcx_abapgit_exception=>raise( |Object type { iv_program_id }-{ iv_object_type } not lockable| ).
ENDIF.
LOOP AT lt_tlock INTO ls_tlock.
COLLECT ls_tlock-trkorr INTO lt_transports.
ENDLOOP.
IF lines( lt_transports ) = 1.
rv_transport = lv_transport_request.
ELSE.
rv_transport = zif_abapgit_definitions=>c_multiple_transports.
ENDIF.
ENDMETHOD.
@ -209,7 +222,75 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
IMPORTING
pe_result = lv_type_check_result.
rv_transportable = boolc( lv_type_check_result CA 'RTL' ).
rv_transportable = boolc( lv_type_check_result CA 'RTL' OR iv_object_type = 'TABU' ).
ENDMETHOD.
METHOD zif_abapgit_cts_api~change_transport_type.
DATA:
ls_request_header TYPE trwbo_request_header,
lt_request_headers TYPE trwbo_request_headers.
CALL FUNCTION 'ENQUEUE_E_TRKORR'
EXPORTING
trkorr = iv_transport_request
EXCEPTIONS
foreign_lock = 1
system_failure = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
CALL FUNCTION 'TR_READ_REQUEST_WITH_TASKS'
EXPORTING
iv_trkorr = iv_transport_request
IMPORTING
et_request_headers = lt_request_headers
EXCEPTIONS
invalid_input = 1
OTHERS = 2.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
LOOP AT lt_request_headers INTO ls_request_header WHERE trfunction = iv_transport_type_from.
CALL FUNCTION 'TRINT_READ_REQUEST_HEADER'
EXPORTING
iv_read_e070 = abap_true
iv_read_e070c = abap_true
CHANGING
cs_request = ls_request_header
EXCEPTIONS
empty_trkorr = 1
not_exist_e070 = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
CALL FUNCTION 'TRINT_CHANGE_TRFUNCTION'
EXPORTING
iv_new_trfunction = iv_transport_type_to
CHANGING
cs_request_header = ls_request_header
EXCEPTIONS
action_aborted_by_user = 1
change_not_allowed = 2
db_access_error = 3
OTHERS = 4.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
ENDLOOP.
CALL FUNCTION 'DEQUEUE_E_TRKORR'
EXPORTING
trkorr = iv_transport_request.
ENDMETHOD.
@ -277,6 +358,9 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
DATA lt_table_keys TYPE STANDARD TABLE OF e071k.
DATA lv_with_dialog TYPE abap_bool.
FIELD-SYMBOLS <ls_table> LIKE LINE OF lt_tables.
FIELD-SYMBOLS <ls_table_key> LIKE LINE OF lt_table_keys.
cl_table_utilities_brf=>create_transport_entries(
EXPORTING
it_table_ins = it_table_ins
@ -292,6 +376,7 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
CALL FUNCTION 'TR_OBJECTS_CHECK'
TABLES
wt_ko200 = lt_tables
wt_e071k = lt_table_keys
EXCEPTIONS
cancel_edit_other_error = 1
show_only_other_error = 2
@ -304,15 +389,24 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
lv_with_dialog = abap_true.
ENDIF.
CALL FUNCTION 'TRINT_OBJECTS_CHECK_AND_INSERT'
READ TABLE lt_tables ASSIGNING <ls_table> INDEX 1.
ASSERT sy-subrc = 0.
LOOP AT lt_table_keys ASSIGNING <ls_table_key>.
<ls_table_key>-objfunc = <ls_table>-objfunc.
ENDLOOP.
CALL FUNCTION 'TR_OBJECT_INSERT'
EXPORTING
iv_order = iv_transport
iv_with_dialog = lv_with_dialog
CHANGING
ct_ko200 = lt_tables
ct_e071k = lt_table_keys
wi_order = iv_transport
wi_ko200 = <ls_table>
iv_no_show_option = abap_true
TABLES
wt_e071k = lt_table_keys
EXCEPTIONS
OTHERS = 1.
cancel_edit_other_error = 1
show_only_other_error = 2
OTHERS = 3.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
@ -389,8 +483,12 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
WHERE object = ls_lock_key-obj
AND hikey >= ls_lock_key-low
AND lokey <= ls_lock_key-hi. "#EC PORTABLE
IF lv_request IS INITIAL.
lv_request = <ls_tlock>-trkorr.
ELSE.
lv_request = zif_abapgit_definitions=>c_multiple_transports.
EXIT.
ENDIF.
ENDLOOP.
ELSEIF is_object_type_transportable( <ls_item>-obj_type ) = abap_true.
lv_request = get_current_transport_from_db(
@ -542,7 +640,7 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
ev_object = ls_list-object
ev_obj_name = ls_list-obj_name ).
INSERT ls_list INTO TABLE rt_list.
CATCH zcx_abapgit_exception.
CATCH zcx_abapgit_exception ##NO_HANDLER.
ENDTRY.
ENDCASE.
ENDLOOP.

View File

@ -5,19 +5,14 @@ CLASS zcl_abapgit_default_transport DEFINITION
PUBLIC SECTION.
INTERFACES zif_abapgit_default_transport.
METHODS
constructor
RAISING
zcx_abapgit_exception.
METHODS constructor.
PROTECTED SECTION.
PRIVATE SECTION.
DATA mv_is_set_by_abapgit TYPE abap_bool .
DATA ms_save TYPE e070use .
METHODS store
RAISING
zcx_abapgit_exception .
METHODS store.
METHODS restore
RAISING
zcx_abapgit_exception .
@ -35,7 +30,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_DEFAULT_TRANSPORT IMPLEMENTATION.
CLASS zcl_abapgit_default_transport IMPLEMENTATION.
METHOD clear.
@ -116,7 +111,11 @@ CLASS ZCL_ABAPGIT_DEFAULT_TRANSPORT IMPLEMENTATION.
METHOD store.
TRY.
ms_save = zif_abapgit_default_transport~get( ).
CATCH zcx_abapgit_exception.
CLEAR ms_save.
ENDTRY.
ENDMETHOD.
@ -173,7 +172,7 @@ CLASS ZCL_ABAPGIT_DEFAULT_TRANSPORT IMPLEMENTATION.
METHOD zif_abapgit_default_transport~set.
" checks whether object changes of the package are rerorded in transport
" checks whether object changes of the package are reordered in transport
" requests. If true then we set the default task, so that no annoying
" transport request popups are shown while deserializing.

View File

@ -71,7 +71,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION.
CLASS zcl_abapgit_transport IMPLEMENTATION.
METHOD add_all_objects_to_trans_req.
@ -103,7 +103,7 @@ CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION.
" We used TR_REQUEST_CHOICE before, but it issues its error log with
" write lists which are not compatible with abapGit.
" There we user TRINT_REQUEST_CHOICE which returns the error log
" and display the log ourselve.
" and display the log ourselves.
CALL FUNCTION 'TRINT_REQUEST_CHOICE'
EXPORTING
iv_request_types = 'FTCOK'
@ -146,7 +146,7 @@ CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION.
lt_objects TYPE scts_tadir,
lt_objects_all LIKE lt_objects,
ls_e071 LIKE LINE OF rt_objects,
lo_repo TYPE REF TO zcl_abapgit_repo,
li_repo TYPE REF TO zif_abapgit_repo,
lv_package TYPE zif_abapgit_persistence=>ty_repo-package,
lt_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt.
@ -154,8 +154,8 @@ CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION.
<lv_package> TYPE devclass,
<ls_object> TYPE tadir.
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
lv_package = lo_repo->get_package( ).
li_repo = zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
lv_package = li_repo->get_package( ).
lt_packages = zcl_abapgit_factory=>get_sap_package( lv_package )->list_subpackages( ).
INSERT lv_package INTO TABLE lt_packages.

View File

@ -7,7 +7,7 @@ CLASS zcl_abapgit_transport_2_branch DEFINITION
METHODS create
IMPORTING
!io_repository TYPE REF TO zcl_abapgit_repo_online
!ii_repo_online TYPE REF TO zif_abapgit_repo_online
!is_transport_to_branch TYPE zif_abapgit_definitions=>ty_transport_to_branch
!it_transport_objects TYPE zif_abapgit_definitions=>ty_tadir_tt
RAISING
@ -46,13 +46,13 @@ CLASS zcl_abapgit_transport_2_branch IMPLEMENTATION.
lv_branch_name = zcl_abapgit_git_branch_list=>complete_heads_branch_name(
zcl_abapgit_git_branch_list=>normalize_branch_name( is_transport_to_branch-branch_name ) ).
io_repository->create_branch( lv_branch_name ).
ii_repo_online->create_branch( lv_branch_name ).
CREATE OBJECT lo_stage.
ls_stage_objects = zcl_abapgit_factory=>get_stage_logic( )->get( io_repository ).
ls_stage_objects = zcl_abapgit_stage_logic=>get_stage_logic( )->get( ii_repo_online ).
lt_object_statuses = zcl_abapgit_repo_status=>calculate( io_repository ).
lt_object_statuses = zcl_abapgit_repo_status=>calculate( ii_repo_online ).
stage_transport_objects(
it_transport_objects = it_transport_objects
@ -62,7 +62,7 @@ CLASS zcl_abapgit_transport_2_branch IMPLEMENTATION.
ls_comment = generate_commit_message( is_transport_to_branch ).
io_repository->push( is_comment = ls_comment
ii_repo_online->push( is_comment = ls_comment
io_stage = lo_stage ).
ENDMETHOD.

View File

@ -53,7 +53,7 @@ CLASS zcl_abapgit_transport_mass IMPLEMENTATION.
lcl_gui=>open_folder_frontend( lo_transport_zipper->get_folder( ) ).
ELSE.
* No data found for the provided selection criterias
* No data found for the provided selection criteria
zcx_abapgit_exception=>raise( 'No transport requests selected' ).
ENDIF.

View File

@ -63,7 +63,7 @@ CLASS lcl_gui IMPLEMENTATION.
iv_via_selscreen = 'X'
is_selection = ls_selection
iv_complete_projects = space
iv_title = 'ABAPGit Transport Mass Downloader'
iv_title = 'abapGit Transport Mass Downloader'
is_popup = ls_popup
IMPORTING
et_requests = rt_trkorr

View File

@ -38,9 +38,10 @@ CLASS zcl_abapgit_transport_objects IMPLEMENTATION.
LOOP AT mt_transport_objects INTO ls_transport_object.
LOOP AT it_object_statuses INTO ls_object_status
" USING KEY sec_key " syntax error in 754
WHERE obj_name = ls_transport_object-obj_name
AND obj_type = ls_transport_object-object
AND NOT lstate IS INITIAL.
AND NOT lstate IS INITIAL ##PRIMKEY[SEC_KEY].
CASE ls_object_status-lstate.
WHEN zif_abapgit_definitions=>c_state-added OR zif_abapgit_definitions=>c_state-modified.
@ -74,7 +75,7 @@ CLASS zcl_abapgit_transport_objects IMPLEMENTATION.
ENDLOOP.
IF sy-subrc <> 0.
" Since not all objects in a transport might be in the local repo
" i.e generated SADL objects, we don't add these objects to
" i.e. generated SADL objects, we don't add these objects to
" the stage.
ENDIF.
ENDLOOP.

View File

@ -60,9 +60,9 @@ INTERFACE zif_abapgit_cts_api
METHODS create_transport_entries
IMPORTING
!iv_transport TYPE trkorr
!it_table_ins TYPE ANY TABLE
!it_table_upd TYPE ANY TABLE
!it_table_del TYPE ANY TABLE
!it_table_ins TYPE ANY TABLE OPTIONAL
!it_table_upd TYPE ANY TABLE OPTIONAL
!it_table_del TYPE ANY TABLE OPTIONAL
!iv_tabname TYPE tabname
RAISING
zcx_abapgit_exception .
@ -153,4 +153,12 @@ INTERFACE zif_abapgit_cts_api
!iv_transport_request TYPE trkorr
RAISING
zcx_abapgit_exception .
METHODS change_transport_type
IMPORTING
!iv_transport_request TYPE trkorr
!iv_transport_type_from TYPE trfunction
!iv_transport_type_to TYPE trfunction
RAISING
zcx_abapgit_exception.
ENDINTERFACE.

View File

@ -5,7 +5,7 @@
<VSEOINTERF>
<CLSNAME>ZIF_ABAPGIT_DEFAULT_TRANSPORT</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>ZIF_ABAPGIT_DEFAULT_TRANSPORT</DESCRIPT>
<DESCRIPT>abapGit - Default Transport</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>

View File

@ -44,7 +44,7 @@ CLASS zcl_abapgit_data_deserializer DEFINITION
zcx_abapgit_exception .
METHODS determine_transport_request
IMPORTING
io_repo TYPE REF TO zcl_abapgit_repo
ii_repo TYPE REF TO zif_abapgit_repo
iv_transport_type TYPE zif_abapgit_definitions=>ty_transport_type
RETURNING
VALUE(rv_transport_request) TYPE trkorr.
@ -88,11 +88,11 @@ CLASS zcl_abapgit_data_deserializer IMPLEMENTATION.
" Use transport from repo settings if maintained, or determine via user exit.
" If transport keeps empty here, it'll requested later via popup.
rv_transport_request = io_repo->get_local_settings( )-customizing_request.
rv_transport_request = ii_repo->get_local_settings( )-customizing_request.
li_exit->determine_transport_request(
EXPORTING
io_repo = io_repo
ii_repo = ii_repo
iv_transport_type = iv_transport_type
CHANGING
cv_transport_request = rv_transport_request ).
@ -337,7 +337,7 @@ CLASS zcl_abapgit_data_deserializer IMPLEMENTATION.
rs_checks-type-request = zif_abapgit_cts_api=>c_transport_type-cust_request.
rs_checks-type-task = zif_abapgit_cts_api=>c_transport_type-cust_task.
rs_checks-transport = determine_transport_request(
io_repo = io_repo
ii_repo = ii_repo
iv_transport_type = rs_checks-type ).
ENDIF.

View File

@ -49,7 +49,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_DATA_UTILS IMPLEMENTATION.
CLASS zcl_abapgit_data_utils IMPLEMENTATION.
METHOD build_config_filename.
@ -196,7 +196,7 @@ CLASS ZCL_ABAPGIT_DATA_UTILS IMPLEMENTATION.
db_not_exists = 3
no_permission = 4
no_change_allowed = 5
table_is_gtt = 6
* table_is_gtt = 6 " not in lower releases
OTHERS = 7.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Table { is_item-obj_name } cannot be displayed| ).

View File

@ -15,7 +15,7 @@ INTERFACE zif_abapgit_data_deserializer
METHODS deserialize_check
IMPORTING
!io_repo TYPE REF TO zcl_abapgit_repo
!ii_repo TYPE REF TO zif_abapgit_repo
!ii_config TYPE REF TO zif_abapgit_data_config
RETURNING
VALUE(rs_checks) TYPE zif_abapgit_definitions=>ty_deserialize_checks-customizing

View File

@ -26,6 +26,8 @@ CLASS lcl_environment IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_environment~get_basis_release.
ENDMETHOD.
METHOD zif_abapgit_environment~get_available_user_sessions.
ENDMETHOD.
METHOD zif_abapgit_environment~get_system_language_filter.
ENDMETHOD.
METHOD zif_abapgit_environment~is_merged.
@ -40,6 +42,8 @@ CLASS lcl_environment IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_environment~init_parallel_processing.
ENDMETHOD.
METHOD zif_abapgit_environment~check_parallel_processing.
ENDMETHOD.
ENDCLASS.
@ -77,10 +81,12 @@ CLASS ltcl_abap_language_version DEFINITION FOR TESTING RISK LEVEL HARMLESS
PRIVATE SECTION.
" Cloud package hardcoded in cl_abap_language_version
CONSTANTS c_cloud_package TYPE devclass VALUE 'TEST_LANGUAGE_VERSION_SCP'.
CONSTANTS c_language_cfg TYPE seoclsname VALUE 'CL_ABAP_LANGUAGE_VERSION_CFG'.
DATA:
mt_versions TYPE string_table,
mv_has_cloud_package TYPE abap_bool,
mv_has_language_cfg TYPE abap_bool,
mo_environment TYPE REF TO lcl_environment,
mi_persistency TYPE REF TO zif_abapgit_persist_settings,
mo_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit,
@ -364,9 +370,11 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
" Assume on-prem (no cloud)
set_environment( abap_false ).
IF mv_has_language_cfg = abap_true.
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
exp = iv_standard ).
ENDIF.
IF mv_has_cloud_package = abap_true.
cl_abap_unit_assert=>assert_equals(
@ -381,9 +389,11 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
" Assume cloud platform
set_environment( abap_true ).
IF mv_has_language_cfg = abap_true.
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
exp = iv_standard ).
ENDIF.
IF mv_has_cloud_package = abap_true.
cl_abap_unit_assert=>assert_equals(
@ -402,6 +412,11 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
DATA lv_version TYPE string.
" Tests using ABAP language version "standard" only work if the required
" SAP class is available. In older releases, all packages will have
" ABAP language version "undefined" and are handled like a new package
mv_has_language_cfg = zcl_abapgit_oo_factory=>get_by_type( 'CLAS' )->exists( c_language_cfg ).
LOOP AT mt_versions INTO lv_version.
CASE lv_version.

View File

@ -0,0 +1,21 @@
CLASS zcl_abapgit_env_factory DEFINITION PUBLIC GLOBAL FRIENDS zcl_abapgit_env_injector.
PUBLIC SECTION.
CLASS-METHODS get_user_record
RETURNING
VALUE(ri_user_record) TYPE REF TO zif_abapgit_user_record.
PRIVATE SECTION.
CLASS-DATA gi_user_record TYPE REF TO zif_abapgit_user_record.
ENDCLASS.
CLASS zcl_abapgit_env_factory IMPLEMENTATION.
METHOD get_user_record.
IF gi_user_record IS NOT BOUND.
CREATE OBJECT gi_user_record TYPE zcl_abapgit_user_record.
ENDIF.
ri_user_record = gi_user_record.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?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_ENV_FACTORY</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - Environment Factory</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,14 @@
CLASS zcl_abapgit_env_injector DEFINITION PUBLIC.
PUBLIC SECTION.
CLASS-METHODS set_user_record
IMPORTING
!ii_user_record TYPE REF TO zif_abapgit_user_record.
ENDCLASS.
CLASS zcl_abapgit_env_injector IMPLEMENTATION.
METHOD set_user_record.
zcl_abapgit_env_factory=>gi_user_record = ii_user_record.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?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_ENV_INJECTOR</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - Environment Injector</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -76,11 +76,74 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_environment~check_parallel_processing.
" If check fails, see transactions RZ12
DATA:
lt_setup TYPE STANDARD TABLE OF rzllitab,
ls_setup LIKE LINE OF lt_setup,
lt_erfc_setup TYPE STANDARD TABLE OF rzlliclass,
lt_instances TYPE STANDARD TABLE OF msxxlist WITH DEFAULT KEY.
" Check if server group for parallel processing exists
CALL FUNCTION 'SMLG_GET_SETUP'
EXPORTING
grouptype = 'S'
TABLES
setup = lt_setup
erfc_setup = lt_erfc_setup
EXCEPTIONS
foreign_lock = 1
system_failure = 2
invalid_group_type = 3
OTHERS = 4.
IF sy-subrc <> 0.
RETURN.
ENDIF.
READ TABLE lt_setup INTO ls_setup WITH KEY classname = iv_group.
IF sy-subrc = 0 AND ls_setup-applserver IS NOT INITIAL.
" Check if assigned server instance exists
CALL FUNCTION 'TH_SERVER_LIST'
TABLES
list = lt_instances.
READ TABLE lt_instances TRANSPORTING NO FIELDS WITH KEY name = ls_setup-applserver.
IF sy-subrc = 0.
rv_checked = abap_true.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_environment~compare_with_inactive.
rv_result = zif_abapgit_environment~is_sap_cloud_platform( ).
ENDMETHOD.
METHOD zif_abapgit_environment~get_available_user_sessions.
DATA:
lv_act_sessions TYPE i,
lv_max_sessions TYPE i,
lv_subrc TYPE sy-subrc.
CALL FUNCTION 'TH_USER_INFO'
IMPORTING
act_sessions = lv_act_sessions
max_sessions = lv_max_sessions
rc = lv_subrc.
IF lv_subrc = 0.
rv_sessions = lv_max_sessions - lv_act_sessions.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_environment~get_basis_release.
SELECT SINGLE release extrelease FROM cvers INTO (rs_result-release, rs_result-sp)
@ -89,6 +152,78 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_environment~get_system_language_filter.
DATA lv_translation_detective_lang TYPE spras.
DATA lv_pseudo_translation_language TYPE spras.
FIELD-SYMBOLS <ls_system_language_filter> LIKE LINE OF rt_system_language_filter.
" Translation Object Detective
" https://help.sap.com/docs/ABAP_PLATFORM_NEW/ceb25152cb0d4adba664cebea2bf4670/88a3d3cbccf64601975acabaccdfde45.html
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
input = '1Q'
IMPORTING
output = lv_translation_detective_lang
EXCEPTIONS
unknown_language = 1
OTHERS = 2.
IF sy-subrc = 1.
" The language for Translation Object Detective was not setup
ENDIF.
IF NOT lv_translation_detective_lang IS INITIAL.
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
<ls_system_language_filter>-sign = 'E'.
<ls_system_language_filter>-option = 'EQ'.
<ls_system_language_filter>-low = lv_translation_detective_lang.
ENDIF.
" 1943470 - Using technical language key 2Q to create pseudo-translations of ABAP developments
" https://launchpad.support.sap.com/#/notes/1943470
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
input = '2Q'
IMPORTING
output = lv_pseudo_translation_language
EXCEPTIONS
unknown_language = 1
OTHERS = 2.
IF sy-subrc = 1.
" The language for Pseudo Translation was not setup
ENDIF.
IF NOT lv_pseudo_translation_language IS INITIAL.
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
<ls_system_language_filter>-sign = 'E'.
<ls_system_language_filter>-option = 'EQ'.
<ls_system_language_filter>-low = lv_pseudo_translation_language.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_environment~init_parallel_processing.
DATA: lv_group TYPE rzlli_apcl.
lv_group = iv_group.
" SPBT_INITIALIZE gives error PBT_ENV_ALREADY_INITIALIZED if called
" multiple times in same session
CALL FUNCTION 'SPBT_INITIALIZE'
EXPORTING
group_name = lv_group
IMPORTING
free_pbt_wps = rv_free_work_processes
EXCEPTIONS
invalid_group_name = 1
internal_error = 2
pbt_env_already_initialized = 3
currently_no_resources_avail = 4
no_pbt_resources_found = 5
cant_init_different_pbt_groups = 6
OTHERS = 7 ##FM_SUBRC_OK.
" If SPBT_INITIALIZE fails, check transactions RZ12, SM50, SM21, SARFC
ENDMETHOD.
METHOD zif_abapgit_environment~is_merged.
DATA lr_marker TYPE REF TO data ##NEEDED.
@ -155,50 +290,6 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_environment~get_system_language_filter.
DATA lv_translation_detective_lang TYPE spras.
DATA lv_pseudo_translation_language TYPE spras.
FIELD-SYMBOLS <ls_system_language_filter> LIKE LINE OF rt_system_language_filter.
" Translation Object Detective
" https://help.sap.com/docs/ABAP_PLATFORM_NEW/ceb25152cb0d4adba664cebea2bf4670/88a3d3cbccf64601975acabaccdfde45.html
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
input = '1Q'
IMPORTING
output = lv_translation_detective_lang
EXCEPTIONS
unknown_language = 1
OTHERS = 2.
IF sy-subrc = 1.
" The language for Translation Object Detective was not setup
ENDIF.
IF NOT lv_translation_detective_lang IS INITIAL.
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
<ls_system_language_filter>-sign = 'E'.
<ls_system_language_filter>-option = 'EQ'.
<ls_system_language_filter>-low = lv_translation_detective_lang.
ENDIF.
" 1943470 - Using technical language key 2Q to create pseudo-translations of ABAP developments
" https://launchpad.support.sap.com/#/notes/1943470
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
input = '2Q'
IMPORTING
output = lv_pseudo_translation_language
EXCEPTIONS
unknown_language = 1
OTHERS = 2.
IF sy-subrc = 1.
" The language for Pseudo Translation was not setup
ENDIF.
IF NOT lv_pseudo_translation_language IS INITIAL.
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
<ls_system_language_filter>-sign = 'E'.
<ls_system_language_filter>-option = 'EQ'.
<ls_system_language_filter>-low = lv_pseudo_translation_language.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_environment~is_variant_maintenance.
@ -212,30 +303,4 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
rv_is_variant_maintenance = boolc( lines( lt_variscreens ) > 0 ).
ENDMETHOD.
METHOD zif_abapgit_environment~init_parallel_processing.
DATA: lv_group TYPE rzlli_apcl.
lv_group = iv_group.
" SPBT_INITIALIZE gives error PBT_ENV_ALREADY_INITIALIZED if called
" multiple times in same session
CALL FUNCTION 'SPBT_INITIALIZE'
EXPORTING
group_name = lv_group
IMPORTING
free_pbt_wps = rv_free_work_processes
EXCEPTIONS
invalid_group_name = 1
internal_error = 2
pbt_env_already_initialized = 3
currently_no_resources_avail = 4
no_pbt_resources_found = 5
cant_init_different_pbt_groups = 6
OTHERS = 7.
" If SPBT_INITIALIZE fails, check transactions RZ12, SM50, SM21, SARFC
ENDMETHOD.
ENDCLASS.

View File

@ -156,6 +156,18 @@ CLASS zcl_abapgit_settings DEFINITION
METHODS set_activate_wo_popup
IMPORTING
!iv_act_wo_popup TYPE zif_abapgit_definitions=>ty_s_user_settings-activate_wo_popup .
METHODS set_default_git_uname
IMPORTING
!iv_default_git_uname TYPE string.
METHODS get_default_git_uname
RETURNING
VALUE(rv_default_git_uname) TYPE string.
METHODS set_default_git_email
IMPORTING
!iv_default_git_email TYPE string.
METHODS get_default_git_email
RETURNING
VALUE(rv_default_git_email) TYPE string.
PROTECTED SECTION.
PRIVATE SECTION.
TYPES: BEGIN OF ty_s_settings,
@ -322,7 +334,11 @@ CLASS zcl_abapgit_settings IMPLEMENTATION.
WHEN 'Belize'.
rv_ui_theme = c_ui_theme-belize.
WHEN OTHERS.
IF lv_frontend_theme CS 'dark'.
rv_ui_theme = c_ui_theme-dark.
ELSE.
rv_ui_theme = c_ui_theme-default.
ENDIF.
ENDCASE.
ENDIF.
ENDMETHOD.
@ -487,4 +503,24 @@ CLASS zcl_abapgit_settings IMPLEMENTATION.
cg_data = ms_settings ).
ENDMETHOD.
METHOD get_default_git_uname.
rv_default_git_uname = ms_user_settings-default_git_uname.
ENDMETHOD.
METHOD set_default_git_uname.
ms_user_settings-default_git_uname = iv_default_git_uname.
ENDMETHOD.
METHOD get_default_git_email.
rv_default_git_email = ms_user_settings-default_git_email.
ENDMETHOD.
METHOD set_default_git_email.
ms_user_settings-default_git_email = iv_default_git_email.
ENDMETHOD.
ENDCLASS.

View File

@ -1,45 +1,26 @@
CLASS zcl_abapgit_user_record DEFINITION
PUBLIC
FINAL
CREATE PRIVATE.
CREATE PRIVATE
GLOBAL FRIENDS zcl_abapgit_env_factory.
PUBLIC SECTION.
CLASS-METHODS reset.
CLASS-METHODS get_instance
IMPORTING
!iv_user TYPE sy-uname
RETURNING
VALUE(ro_user) TYPE REF TO zcl_abapgit_user_record.
METHODS constructor
IMPORTING
!iv_user TYPE sy-uname.
METHODS get_name
RETURNING
VALUE(rv_name) TYPE string.
METHODS get_email
RETURNING
VALUE(rv_email) TYPE string.
CLASS-METHODS get_title
IMPORTING
iv_username TYPE sy-uname
RETURNING
VALUE(rv_title) TYPE string.
INTERFACES zif_abapgit_user_record.
PROTECTED SECTION.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_user,
user TYPE sy-uname,
o_user TYPE REF TO zcl_abapgit_user_record,
name TYPE string,
email TYPE string,
END OF ty_user.
CLASS-DATA gt_user TYPE HASHED TABLE OF ty_user WITH UNIQUE KEY user.
DATA: BEGIN OF ms_user,
name TYPE string,
email TYPE string,
END OF ms_user .
METHODS check_user_exists
CLASS-METHODS check_user_exists
IMPORTING
iv_user TYPE sy-uname
EXPORTING
@ -48,35 +29,51 @@ CLASS zcl_abapgit_user_record DEFINITION
RAISING
zcx_abapgit_exception.
METHODS get_user_dtls_from_other_clnt
CLASS-METHODS get_user_dtls_from_other_clnt
IMPORTING
iv_user TYPE sy-uname.
iv_user TYPE sy-uname
RETURNING
VALUE(rs_user) TYPE ty_user.
CLASS-METHODS build_cache
IMPORTING
iv_user TYPE sy-uname
RETURNING
VALUE(rs_user) TYPE ty_user.
CLASS-METHODS read_cache
IMPORTING
iv_user TYPE sy-uname
RETURNING
VALUE(rs_user) TYPE ty_user.
ENDCLASS.
CLASS zcl_abapgit_user_record IMPLEMENTATION.
CLASS ZCL_ABAPGIT_USER_RECORD IMPLEMENTATION.
METHOD get_title.
* the queried username might not exist, so this method is static
METHOD build_cache.
DATA ls_user_address TYPE addr3_val.
CALL FUNCTION 'SUSR_USER_ADDRESS_READ'
" Get user details
TRY.
check_user_exists(
EXPORTING
user_name = iv_username
iv_user = iv_user
IMPORTING
user_address = ls_user_address
EXCEPTIONS
user_address_not_found = 1
OTHERS = 2.
IF sy-subrc = 0.
rv_title = ls_user_address-name_text.
ENDIF.
ev_fullname = rs_user-name
ev_email = rs_user-email ).
CATCH zcx_abapgit_exception.
" Could not find user, try to get from other clients
rs_user = get_user_dtls_from_other_clnt( iv_user ).
ENDTRY.
rs_user-user = iv_user.
INSERT rs_user INTO TABLE gt_user.
ENDMETHOD.
METHOD check_user_exists.
DATA lt_return TYPE STANDARD TABLE OF bapiret2 WITH DEFAULT KEY.
@ -109,63 +106,6 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION.
ENDMETHOD.
METHOD constructor.
DATA ls_user TYPE ty_user.
" Get user details
TRY.
check_user_exists(
EXPORTING
iv_user = iv_user
IMPORTING
ev_fullname = ms_user-name
ev_email = ms_user-email ).
CATCH zcx_abapgit_exception.
" Could not find user, try to get from other clients
get_user_dtls_from_other_clnt( iv_user ).
ENDTRY.
" If the user has been found add it to the list
IF ms_user-name IS NOT INITIAL AND ms_user-email IS NOT INITIAL.
ls_user-user = iv_user.
ls_user-o_user = me.
INSERT ls_user INTO TABLE gt_user.
ENDIF.
ENDMETHOD.
METHOD get_email.
rv_email = ms_user-email.
ENDMETHOD.
METHOD get_instance.
FIELD-SYMBOLS <ls_user> TYPE ty_user.
READ TABLE gt_user ASSIGNING <ls_user> WITH TABLE KEY user = iv_user.
IF sy-subrc = 0.
ro_user = <ls_user>-o_user.
ELSE.
CREATE OBJECT ro_user
EXPORTING
iv_user = iv_user.
ENDIF.
ENDMETHOD.
METHOD get_name.
rv_name = ms_user-name.
ENDMETHOD.
METHOD get_user_dtls_from_other_clnt.
CONSTANTS lc_cc_category TYPE string VALUE 'C'.
@ -179,7 +119,7 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION.
ORDER BY PRIMARY KEY.
LOOP AT lt_dev_clients ASSIGNING <lv_dev_client>.
SELECT SINGLE p~name_text a~smtp_addr INTO (ms_user-name, ms_user-email)
SELECT SINGLE u~bname p~name_text a~smtp_addr INTO (rs_user-user, rs_user-name, rs_user-email)
FROM usr21 AS u
INNER JOIN adrp AS p ON p~persnumber = u~persnumber
AND p~client = u~mandt
@ -200,7 +140,61 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION.
ENDMETHOD.
METHOD read_cache.
READ TABLE gt_user INTO rs_user WITH TABLE KEY user = iv_user.
IF sy-subrc <> 0.
rs_user = build_cache( iv_user ).
ENDIF.
ENDMETHOD.
METHOD reset.
CLEAR gt_user.
ENDMETHOD.
METHOD zif_abapgit_user_record~get_email.
rv_email = read_cache( iv_username )-email.
ENDMETHOD.
METHOD zif_abapgit_user_record~get_name.
rv_name = read_cache( iv_username )-name.
ENDMETHOD.
METHOD zif_abapgit_user_record~get_title.
* the queried username might not exist, refactored for open-abap compatibility
DATA lr_addr3 TYPE REF TO data.
FIELD-SYMBOLS <ls_addr3> TYPE any.
FIELD-SYMBOLS <lv_simple> TYPE simple.
TRY.
CREATE DATA lr_addr3 TYPE ('ADDR3_VAL').
CATCH cx_sy_create_data_error.
RETURN.
ENDTRY.
ASSIGN lr_addr3->* TO <ls_addr3>.
CALL FUNCTION 'SUSR_USER_ADDRESS_READ'
EXPORTING
user_name = iv_username
IMPORTING
user_address = <ls_addr3>
EXCEPTIONS
user_address_not_found = 1
OTHERS = 2.
IF sy-subrc = 0.
ASSIGN COMPONENT 'NAME_TEXT' OF STRUCTURE <ls_addr3> TO <lv_simple>.
rv_title = <lv_simple>.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -16,10 +16,10 @@ ENDCLASS.
CLASS ltcl_user_record IMPLEMENTATION.
METHOD test_invalid_user.
DATA: lo_user_record TYPE REF TO zcl_abapgit_user_record.
DATA li_user_record TYPE REF TO zif_abapgit_user_record.
zcl_abapgit_user_record=>reset( ).
lo_user_record = zcl_abapgit_user_record=>get_instance( c_wrong_user ).
li_user_record = zcl_abapgit_env_factory=>get_user_record( ).
cl_abap_unit_assert=>assert_equals(
exp = 0

View File

@ -39,5 +39,13 @@ INTERFACE zif_abapgit_environment
iv_group TYPE clike
RETURNING
VALUE(rv_free_work_processes) TYPE i.
METHODS check_parallel_processing
IMPORTING
iv_group TYPE clike
RETURNING
VALUE(rv_checked) TYPE abap_bool.
METHODS get_available_user_sessions
RETURNING
VALUE(rv_sessions) TYPE i.
ENDINTERFACE.

View File

@ -0,0 +1,21 @@
INTERFACE zif_abapgit_user_record PUBLIC.
METHODS get_name
IMPORTING
iv_username TYPE sy-uname
RETURNING
VALUE(rv_name) TYPE string.
METHODS get_email
IMPORTING
iv_username TYPE sy-uname
RETURNING
VALUE(rv_email) TYPE string.
METHODS get_title
IMPORTING
iv_username TYPE sy-uname
RETURNING
VALUE(rv_title) TYPE string.
ENDINTERFACE.

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOINTERF>
<CLSNAME>ZIF_ABAPGIT_USER_RECORD</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - User Record</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<UNICODE>X</UNICODE>
</VSEOINTERF>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -250,6 +250,9 @@ CLASS zcl_abapgit_exit IMPLEMENTATION.
EXPORTING
iv_package = iv_package
ii_log = ii_log
is_dot_abapgit = is_dot_abapgit
iv_ignore_subpackages = iv_ignore_subpackages
iv_only_local_objects = iv_only_local_objects
CHANGING
ct_tadir = ct_tadir ).
CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER.
@ -314,7 +317,7 @@ CLASS zcl_abapgit_exit IMPLEMENTATION.
TRY.
gi_exit->determine_transport_request(
EXPORTING
io_repo = io_repo
ii_repo = ii_repo
iv_transport_type = iv_transport_type
CHANGING
cv_transport_request = cv_transport_request ).
@ -325,6 +328,18 @@ CLASS zcl_abapgit_exit IMPLEMENTATION.
ENDMETHOD.
METHOD zif_abapgit_exit~enhance_any_toolbar.
IF gi_exit IS NOT INITIAL.
TRY.
gi_exit->enhance_any_toolbar( io_menu ).
CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER.
ENDTRY.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_exit~enhance_repo_toolbar.
IF gi_exit IS NOT INITIAL.
@ -439,7 +454,7 @@ CLASS zcl_abapgit_exit IMPLEMENTATION.
gi_exit->validate_before_push(
is_comment = is_comment
io_stage = io_stage
io_repo = io_repo ).
ii_repo_online = ii_repo_online ).
CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER.
ENDTRY.
ENDIF.

View File

@ -1,5 +1,3 @@
*"* use this source file for your ABAP unit test classes
CLASS ltcl_test DEFINITION DEFERRED.
CLASS zcl_abapgit_exit DEFINITION LOCAL FRIENDS ltcl_test.

View File

@ -5,10 +5,11 @@ INTERFACE zif_abapgit_exit PUBLIC.
name TYPE string,
clone_url TYPE string,
END OF ty_ci_repo.
TYPES:
ty_ci_repos TYPE TABLE OF ty_ci_repo.
TYPES:
ty_object_types TYPE STANDARD TABLE OF tadir-object WITH DEFAULT KEY.
TYPES ty_ci_repos TYPE STANDARD TABLE OF ty_ci_repo WITH DEFAULT KEY.
TYPES ty_object_types TYPE HASHED TABLE OF tadir-object WITH UNIQUE KEY table_line.
TYPES:
BEGIN OF ty_class_key,
clsname TYPE abap_classname,
@ -42,9 +43,9 @@ INTERFACE zif_abapgit_exit PUBLIC.
METHODS change_max_parallel_processes
IMPORTING
iv_package TYPE devclass
!iv_package TYPE devclass
CHANGING
cv_max_processes TYPE i.
!cv_max_processes TYPE i.
METHODS change_proxy_authentication
IMPORTING
@ -66,7 +67,7 @@ INTERFACE zif_abapgit_exit PUBLIC.
METHODS change_rfc_server_group
CHANGING
cv_group TYPE rzlli_apcl.
!cv_group TYPE rzlli_apcl.
METHODS change_supported_data_objects
CHANGING
@ -80,6 +81,9 @@ INTERFACE zif_abapgit_exit PUBLIC.
IMPORTING
!iv_package TYPE devclass
!ii_log TYPE REF TO zif_abapgit_log
!is_dot_abapgit TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit
!iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
!iv_only_local_objects TYPE abap_bool DEFAULT abap_false
CHANGING
!ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt.
@ -107,11 +111,15 @@ INTERFACE zif_abapgit_exit PUBLIC.
METHODS determine_transport_request
IMPORTING
!io_repo TYPE REF TO zcl_abapgit_repo
!ii_repo TYPE REF TO zif_abapgit_repo
!iv_transport_type TYPE zif_abapgit_definitions=>ty_transport_type
CHANGING
!cv_transport_request TYPE trkorr.
METHODS enhance_any_toolbar
IMPORTING
!io_menu TYPE REF TO zcl_abapgit_html_toolbar.
METHODS enhance_repo_toolbar
IMPORTING
!io_menu TYPE REF TO zcl_abapgit_html_toolbar
@ -161,7 +169,7 @@ INTERFACE zif_abapgit_exit PUBLIC.
IMPORTING
!is_comment TYPE zif_abapgit_git_definitions=>ty_comment
!io_stage TYPE REF TO zcl_abapgit_stage
!io_repo TYPE REF TO zcl_abapgit_repo_online
!ii_repo_online TYPE REF TO zif_abapgit_repo_online
RAISING
zcx_abapgit_exception.
@ -173,5 +181,4 @@ INTERFACE zif_abapgit_exit PUBLIC.
IMPORTING
!is_repo_meta TYPE zif_abapgit_persistence=>ty_repo
!ii_html TYPE REF TO zif_abapgit_html.
ENDINTERFACE.

View File

@ -148,7 +148,7 @@ CLASS ZCL_ABAPGIT_GITV2_PORCELAIN IMPLEMENTATION.
lv_argument = |want { lv_sha1 }|.
APPEND lv_argument TO lt_arguments.
ENDLOOP.
* 'filter object:type=commit' doesnt work on github
* 'filter object:type=commit' doesn't work on github
APPEND 'filter blob:none' TO lt_arguments.
APPEND 'no-progress' TO lt_arguments.
APPEND 'done' TO lt_arguments.

View File

@ -1,5 +1,3 @@
*"* use this source file for your ABAP unit test classes
CLASS ltcl_calculate_patch DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.

View File

@ -45,6 +45,11 @@ CLASS zcl_abapgit_git_branch_list DEFINITION
!iv_current_row_index TYPE sy-tabix OPTIONAL
RETURNING
VALUE(rv_type) TYPE zif_abapgit_git_definitions=>ty_git_branch_type .
CLASS-METHODS get_description
IMPORTING
!iv_branch_name TYPE clike
RETURNING
VALUE(rv_description) TYPE string.
CLASS-METHODS complete_heads_branch_name
IMPORTING
!iv_branch_name TYPE clike
@ -130,8 +135,7 @@ CLASS zcl_abapgit_git_branch_list IMPLEMENTATION.
WITH TABLE KEY name_key
COMPONENTS name = iv_branch_name.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Branch { get_display_name( iv_branch_name )
} not found. Use 'Branch' > 'Switch' to select a different branch| ).
zcx_abapgit_exception=>raise( |{ get_description( iv_branch_name ) } not found| ).
ENDIF.
ENDIF.
@ -150,7 +154,7 @@ CLASS zcl_abapgit_git_branch_list IMPLEMENTATION.
WITH TABLE KEY name_key
COMPONENTS name = iv_branch_name.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( 'Branch not found' ).
zcx_abapgit_exception=>raise( |{ get_description( iv_branch_name ) } not found| ).
ENDIF.
ENDIF.
@ -176,6 +180,24 @@ CLASS zcl_abapgit_git_branch_list IMPLEMENTATION.
ENDMETHOD.
METHOD get_description.
CASE get_type( iv_branch_name ).
WHEN zif_abapgit_git_definitions=>c_git_branch_type-branch.
rv_description = 'Branch'.
WHEN zif_abapgit_git_definitions=>c_git_branch_type-lightweight_tag.
rv_description = 'Tag'.
WHEN zif_abapgit_git_definitions=>c_git_branch_type-annotated_tag.
rv_description = 'Annotated Tag'.
WHEN OTHERS.
rv_description = 'Branch'.
ENDCASE.
rv_description = |{ rv_description } "{ get_display_name( iv_branch_name ) }"|.
ENDMETHOD.
METHOD get_display_name.
rv_display_name = iv_branch_name.

View File

@ -81,7 +81,7 @@ CLASS zcl_abapgit_git_commit IMPLEMENTATION.
METHOD extract_author_data.
" unix time stamps are in same time zone, so ignore the zone
" Unix time stamps are in same time zone, so ignore the zone
FIND REGEX zif_abapgit_definitions=>c_author_regex IN iv_author
SUBMATCHES
ev_author

View File

@ -178,14 +178,18 @@ CLASS zcl_abapgit_git_pack IMPLEMENTATION.
lv_data = iv_data.
* header
IF NOT xstrlen( lv_data ) > 4 OR lv_data(4) <> c_pack_start.
zcx_abapgit_exception=>raise( |Unexpected pack header| ).
IF xstrlen( lv_data ) < 4.
zcx_abapgit_exception=>raise( |Unexpected pack header, short reply| ).
ENDIF.
IF lv_data(4) <> c_pack_start.
zcx_abapgit_exception=>raise( |Unexpected pack header, { lv_data(4) }| ).
ENDIF.
lv_data = lv_data+4.
* version
IF lv_data(4) <> c_version.
zcx_abapgit_exception=>raise( |Version not supported| ).
zcx_abapgit_exception=>raise( |Version not supported, { lv_data(4) }| ).
ENDIF.
lv_data = lv_data+4.
@ -228,7 +232,7 @@ CLASS zcl_abapgit_git_pack IMPLEMENTATION.
raw_out_len = lv_decompress_len ).
IF lv_expected <> lv_decompress_len.
zcx_abapgit_exception=>raise( |Decompression falied| ).
zcx_abapgit_exception=>raise( |Decompression failed| ).
ENDIF.
cl_abap_gzip=>compress_binary(
@ -280,7 +284,7 @@ CLASS zcl_abapgit_git_pack IMPLEMENTATION.
lv_xstring = iv_data(lv_len).
lv_sha1 = zcl_abapgit_hash=>sha1_raw( lv_xstring ).
IF to_upper( lv_sha1 ) <> lv_data.
zcx_abapgit_exception=>raise( |SHA1 at end of pack doesnt match| ).
zcx_abapgit_exception=>raise( |SHA1 at end of pack doesn't match| ).
ENDIF.
decode_deltas( CHANGING ct_objects = rt_objects ).
@ -481,9 +485,10 @@ CLASS zcl_abapgit_git_pack IMPLEMENTATION.
ls_node-chmod = lv_chmod.
IF ls_node-chmod <> zif_abapgit_git_definitions=>c_chmod-dir
AND ls_node-chmod <> zif_abapgit_git_definitions=>c_chmod-file
AND ls_node-chmod <> zif_abapgit_git_definitions=>c_chmod-symbolic_link
AND ls_node-chmod <> zif_abapgit_git_definitions=>c_chmod-executable
AND ls_node-chmod <> zif_abapgit_git_definitions=>c_chmod-submodule.
zcx_abapgit_exception=>raise( |Unknown chmod| ).
zcx_abapgit_exception=>raise( |Unknown chmod { ls_node-chmod }| ).
ENDIF.
lv_offset = lv_match + 1.
@ -934,7 +939,7 @@ CLASS zcl_abapgit_git_pack IMPLEMENTATION.
cv_decompressed = ls_data-raw.
IF lv_compressed_len IS INITIAL.
zcx_abapgit_exception=>raise( |Decompression falied :o/| ).
zcx_abapgit_exception=>raise( |Decompression failed :o/| ).
ENDIF.
cv_data = cv_data+lv_compressed_len.

View File

@ -1,7 +1,3 @@
*"* use this source file for any type of declarations (class
*"* definitions, interfaces or type declarations) you need for
*"* components in the private section
CLASS lcl_stream DEFINITION FINAL.
PUBLIC SECTION.
TYPES: ty_hex TYPE x LENGTH 1.

View File

@ -1,7 +1,3 @@
*"* use this source file for the definition and implementation of
*"* local helper classes, interface definitions and type
*"* declarations
CLASS lcl_stream IMPLEMENTATION.
METHOD constructor.

View File

@ -809,6 +809,7 @@ CLASS zcl_abapgit_git_porcelain IMPLEMENTATION.
CASE <ls_node>-chmod.
WHEN zif_abapgit_git_definitions=>c_chmod-file
OR zif_abapgit_git_definitions=>c_chmod-executable
OR zif_abapgit_git_definitions=>c_chmod-symbolic_link
OR zif_abapgit_git_definitions=>c_chmod-submodule.
APPEND INITIAL LINE TO rt_expanded ASSIGNING <ls_exp>.
<ls_exp>-path = iv_base.
@ -822,7 +823,7 @@ CLASS zcl_abapgit_git_porcelain IMPLEMENTATION.
iv_base = iv_base && <ls_node>-name && '/' ).
APPEND LINES OF lt_expanded TO rt_expanded.
WHEN OTHERS.
zcx_abapgit_exception=>raise( 'walk_tree: unknown chmod' ).
zcx_abapgit_exception=>raise( |walk_tree: unknown chmod { <ls_node>-chmod }| ).
ENDCASE.
ENDLOOP.

View File

@ -51,7 +51,7 @@ CLASS zcl_abapgit_git_time IMPLEMENTATION.
METHOD get_unix.
* returns seconds since unix epoch, including timezone indicator
* returns seconds since Unix epoch, including timezone indicator
CONSTANTS lc_epoch TYPE timestamp VALUE '19700101000000'.
DATA lv_time TYPE timestamp.

View File

@ -82,6 +82,7 @@ INTERFACE zif_abapgit_git_definitions
executable TYPE ty_chmod VALUE '100755',
dir TYPE ty_chmod VALUE '40000 ',
submodule TYPE ty_chmod VALUE '160000',
symbolic_link TYPE ty_chmod VALUE '120000',
END OF c_chmod .
TYPES:

View File

@ -7,7 +7,7 @@ CLASS zcl_abapgit_git_url DEFINITION
METHODS get_commit_display_url
IMPORTING
!io_repo TYPE REF TO zcl_abapgit_repo_online
!ii_repo_online TYPE REF TO zif_abapgit_repo_online
RETURNING
VALUE(rv_url) TYPE string
RAISING
@ -40,18 +40,21 @@ CLASS zcl_abapgit_git_url IMPLEMENTATION.
METHOD get_commit_display_url.
DATA li_exit TYPE REF TO zif_abapgit_exit.
DATA li_repo TYPE REF TO zif_abapgit_repo.
li_repo = ii_repo_online.
rv_url = get_default_commit_display_url(
iv_repo_url = io_repo->get_url( )
iv_hash = io_repo->get_current_remote( ) ).
iv_repo_url = ii_repo_online->get_url( )
iv_hash = ii_repo_online->get_current_remote( ) ).
li_exit = zcl_abapgit_exit=>get_instance( ).
li_exit->adjust_display_commit_url(
EXPORTING
iv_repo_url = io_repo->get_url( )
iv_repo_name = io_repo->get_name( )
iv_repo_key = io_repo->get_key( )
iv_commit_hash = io_repo->get_current_remote( )
iv_repo_url = ii_repo_online->get_url( )
iv_repo_name = li_repo->get_name( )
iv_repo_key = li_repo->get_key( )
iv_commit_hash = ii_repo_online->get_current_remote( )
CHANGING
cv_display_url = rv_url ).

View File

@ -50,7 +50,7 @@ CLASS zcl_abapgit_pr_enumerator IMPLEMENTATION.
mv_repo_url = to_lower( iv_url ).
TRY.
mi_enum_provider = create_provider( mv_repo_url ).
CATCH zcx_abapgit_exception.
CATCH zcx_abapgit_exception ##NO_HANDLER.
ENDTRY.
ENDMETHOD.
@ -62,7 +62,7 @@ CLASS zcl_abapgit_pr_enumerator IMPLEMENTATION.
DATA lv_user TYPE string.
DATA lv_repo TYPE string.
li_agent = zcl_abapgit_factory=>get_http_agent( ).
li_agent = zcl_abapgit_http_agent=>create( ).
FIND ALL OCCURRENCES OF REGEX 'github\.com\/([^\/]+)\/([^\/]+)'
IN iv_repo_url

View File

@ -28,6 +28,12 @@ CLASS zcl_abapgit_http DEFINITION
VALUE(ro_client) TYPE REF TO zcl_abapgit_http_client
RAISING
zcx_abapgit_exception .
CLASS-METHODS check_connection
IMPORTING
!iv_url TYPE string
RAISING
zcx_abapgit_exception.
PROTECTED SECTION.
CLASS-METHODS check_auth_requested
@ -51,6 +57,24 @@ CLASS zcl_abapgit_http DEFINITION
VALUE(rv_scheme) TYPE string
RAISING
zcx_abapgit_exception .
CLASS-METHODS get_http_client
IMPORTING
!iv_url TYPE string
RETURNING
VALUE(ri_client) TYPE REF TO if_http_client
RAISING
zcx_abapgit_exception.
CLASS-METHODS get_connection_longtext
IMPORTING
!iv_host TYPE string
!iv_ssl_id TYPE ssfapplssl
!iv_proxy_host TYPE string
!iv_proxy_service TYPE string
RETURNING
VALUE(rv_longtext) TYPE string.
PRIVATE SECTION.
ENDCLASS.
@ -123,54 +147,22 @@ CLASS zcl_abapgit_http IMPLEMENTATION.
ENDMETHOD.
METHOD check_connection.
" Check if a connection from this system to the git host is possible
" This will validate the general HTTP/HTTPS/SSL configuration and certificates
get_http_client( iv_url ).
ENDMETHOD.
METHOD create_by_url.
DATA: lv_uri TYPE string,
lv_scheme TYPE string,
lv_authorization TYPE string,
li_client TYPE REF TO if_http_client,
ls_header LIKE LINE OF it_headers,
lo_proxy_configuration TYPE REF TO zcl_abapgit_proxy_config,
lv_text TYPE string.
ls_header LIKE LINE OF it_headers.
CREATE OBJECT lo_proxy_configuration.
li_client = zcl_abapgit_exit=>get_instance( )->create_http_client( iv_url ).
IF li_client IS NOT BOUND.
cl_http_client=>create_by_url(
EXPORTING
url = zcl_abapgit_url=>host( iv_url )
ssl_id = zcl_abapgit_exit=>get_instance( )->get_ssl_id( )
proxy_host = lo_proxy_configuration->get_proxy_url( iv_url )
proxy_service = lo_proxy_configuration->get_proxy_port( iv_url )
IMPORTING
client = li_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4 ).
IF sy-subrc <> 0.
CASE sy-subrc.
WHEN 1.
" make sure:
" a) SSL is setup properly in STRUST
lv_text = 'HTTPS ARGUMENT_NOT_FOUND | STRUST/SSL Setup correct?'.
WHEN OTHERS.
lv_text = 'While creating HTTP Client'.
ENDCASE.
zcx_abapgit_exception=>raise( lv_text ).
ENDIF.
ENDIF.
IF lo_proxy_configuration->get_proxy_authentication( iv_url ) = abap_true.
zcl_abapgit_proxy_auth=>run( li_client ).
ENDIF.
li_client = get_http_client( iv_url ).
CREATE OBJECT ro_client
EXPORTING
@ -212,6 +204,8 @@ CLASS zcl_abapgit_http IMPLEMENTATION.
li_client->propertytype_logon_popup = li_client->co_disabled.
ENDIF.
li_client->request->set_version( if_http_request=>co_protocol_version_1_1 ).
zcl_abapgit_exit=>get_instance( )->http_client(
iv_url = iv_url
ii_client = li_client ).
@ -243,6 +237,123 @@ CLASS zcl_abapgit_http IMPLEMENTATION.
ENDMETHOD.
METHOD get_connection_longtext.
CONSTANTS lc_docs TYPE string VALUE 'https://docs.abapgit.org/user-guide/setup/ssl-setup.html'.
DATA lv_proxy TYPE string.
IF iv_proxy_host IS NOT INITIAL.
lv_proxy = | via proxy <b>{ iv_proxy_host }:{ iv_proxy_service }</b>|.
ENDIF.
rv_longtext = |abapGit is trying to connect to <b>{ iv_host }</b> |
&& |using SSL certificates under <b>{ iv_ssl_id }</b>{ lv_proxy }. |
&& |Check system parameters (transaction |
&& zcl_abapgit_html=>create( )->a(
iv_txt = 'RZ10'
iv_act = |{ zif_abapgit_definitions=>c_action-jump_transaction }?transaction=RZ10|
iv_class = 'no-pad' )
&& |), SSL setup (transaction |
&& zcl_abapgit_html=>create( )->a(
iv_txt = 'STRUST'
iv_act = |{ zif_abapgit_definitions=>c_action-jump_transaction }?transaction=STRUST|
iv_class = 'no-pad' )
&& |), Internet connection monitor (transaction |
&& zcl_abapgit_html=>create( )->a(
iv_txt = 'SMICM'
iv_act = |{ zif_abapgit_definitions=>c_action-jump_transaction }?transaction=SMICM|
iv_class = 'no-pad' )
&& |)|.
IF lv_proxy IS NOT INITIAL.
rv_longtext = rv_longtext
&& |, and proxy configuration (|
&& zcl_abapgit_html=>create( )->a(
iv_txt = 'global settings'
iv_act = |{ zif_abapgit_definitions=>c_action-go_settings }|
iv_class = 'no-pad' )
&& |)|.
ENDIF.
rv_longtext = rv_longtext
&& |. It's recommended to get your SAP Basis and network teams involved. |
&& |For more information and troubleshooting, see the |
&& zcl_abapgit_html=>create( )->a(
iv_txt = 'abapGit documentation'
iv_act = |{ zif_abapgit_definitions=>c_action-url }?url={ lc_docs }|
iv_class = 'no-pad' )
&& |.|.
ENDMETHOD.
METHOD get_http_client.
DATA:
lv_error TYPE string,
lv_longtext TYPE string,
lv_host TYPE string,
lv_ssl_id TYPE ssfapplssl,
lv_proxy_host TYPE string,
lv_proxy_service TYPE string,
lo_proxy_configuration TYPE REF TO zcl_abapgit_proxy_config.
CREATE OBJECT lo_proxy_configuration.
ri_client = zcl_abapgit_exit=>get_instance( )->create_http_client( iv_url ).
IF ri_client IS INITIAL.
lv_host = zcl_abapgit_url=>host( iv_url ).
lv_ssl_id = zcl_abapgit_exit=>get_instance( )->get_ssl_id( ).
lv_proxy_host = lo_proxy_configuration->get_proxy_url( iv_url ).
lv_proxy_service = lo_proxy_configuration->get_proxy_port( iv_url ).
lv_longtext = get_connection_longtext(
iv_host = lv_host
iv_ssl_id = lv_ssl_id
iv_proxy_host = lv_proxy_host
iv_proxy_service = lv_proxy_service ).
cl_http_client=>create_by_url(
EXPORTING
url = lv_host
ssl_id = lv_ssl_id
proxy_host = lv_proxy_host
proxy_service = lv_proxy_service
IMPORTING
client = ri_client
EXCEPTIONS
argument_not_found = 1
plugin_not_active = 2
internal_error = 3
OTHERS = 4 ).
IF sy-subrc <> 0.
CASE sy-subrc.
WHEN 1.
lv_error = 'ARGUMENT_NOT_FOUND'.
WHEN 2.
lv_error = 'PLUGIN_NOT_ACTIVE'.
WHEN 3.
lv_error = 'INTERNAL_ERROR'.
WHEN OTHERS.
lv_error = |OTHER_ERROR_{ sy-subrc }|.
ENDCASE.
zcx_abapgit_exception=>raise(
iv_text = |Error { lv_error } creating HTTP connection. Check the configuration|
iv_longtext = lv_longtext ).
ENDIF.
ENDIF.
IF lo_proxy_configuration->get_proxy_authentication( iv_url ) = abap_true.
zcl_abapgit_proxy_auth=>run( ri_client ).
ENDIF.
ENDMETHOD.
METHOD is_local_system.
DATA: lv_host TYPE string,

View File

@ -71,6 +71,12 @@ CLASS zcl_abapgit_http_client IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'Unsupported media type (HTTP 415)' ).
WHEN 422.
zcx_abapgit_exception=>raise( 'Unprocessable entity (HTTP 422). Check, if URL has to end with ".git"' ).
WHEN 426.
zcx_abapgit_exception=>raise(
iv_text = 'Upgrade Required (HTTP 426)'
iv_longtext = |The git server requires a different HTTP-protocol than which is sent. |
&& |abapGit uses HTTP/1.1 as default. |
&& |See more details in the abapGit online documentation.| ).
WHEN OTHERS.
lv_text = mi_client->response->get_cdata( ).
zcx_abapgit_exception=>raise( |(HTTP { lv_code }) { lv_text }| ).
@ -152,7 +158,7 @@ CLASS zcl_abapgit_http_client IMPLEMENTATION.
code = lv_code
message = lv_message ).
lv_text = |HTTP error { lv_code } occured: { lv_message }|.
lv_text = |HTTP error { lv_code } occurred: { lv_message }|.
zcx_abapgit_exception=>raise( lv_text ).
ENDIF.

View File

@ -1,7 +1,6 @@
CLASS zcl_abapgit_code_inspector DEFINITION
PUBLIC
CREATE PROTECTED
GLOBAL FRIENDS zcl_abapgit_factory .
CREATE PROTECTED.
PUBLIC SECTION.
@ -13,6 +12,19 @@ CLASS zcl_abapgit_code_inspector DEFINITION
RAISING
zcx_abapgit_exception .
CLASS-METHODS get_code_inspector
IMPORTING
!iv_package TYPE devclass
RETURNING
VALUE(ri_code_inspector) TYPE REF TO zif_abapgit_code_inspector
RAISING
zcx_abapgit_exception.
CLASS-METHODS set_code_inspector
IMPORTING
!iv_package TYPE devclass
!ii_code_inspector TYPE REF TO zif_abapgit_code_inspector.
PROTECTED SECTION.
DATA mv_package TYPE devclass .
@ -35,6 +47,15 @@ CLASS zcl_abapgit_code_inspector DEFINITION
VALUE(rv_skip) TYPE abap_bool.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_code_inspector_pack,
package TYPE devclass,
instance TYPE REF TO zif_abapgit_code_inspector,
END OF ty_code_inspector_pack,
ty_code_inspector_packs TYPE HASHED TABLE OF ty_code_inspector_pack WITH UNIQUE KEY package.
CLASS-DATA gt_code_inspector TYPE ty_code_inspector_packs.
DATA mv_success TYPE abap_bool .
DATA mv_summary TYPE string.
@ -266,6 +287,28 @@ CLASS zcl_abapgit_code_inspector IMPLEMENTATION.
ENDMETHOD.
METHOD get_code_inspector.
DATA ls_code_inspector LIKE LINE OF gt_code_inspector.
FIELD-SYMBOLS <ls_code_inspector> TYPE ty_code_inspector_pack.
READ TABLE gt_code_inspector ASSIGNING <ls_code_inspector> WITH TABLE KEY package = iv_package.
IF sy-subrc <> 0.
ls_code_inspector-package = iv_package.
CREATE OBJECT ls_code_inspector-instance TYPE zcl_abapgit_code_inspector
EXPORTING
iv_package = iv_package.
INSERT ls_code_inspector INTO TABLE gt_code_inspector ASSIGNING <ls_code_inspector>.
ENDIF.
ri_code_inspector = <ls_code_inspector>-instance.
ENDMETHOD.
METHOD run_inspection.
io_inspection->run(
@ -290,6 +333,24 @@ CLASS zcl_abapgit_code_inspector IMPLEMENTATION.
ENDMETHOD.
METHOD set_code_inspector.
DATA ls_code_inspector LIKE LINE OF gt_code_inspector.
FIELD-SYMBOLS <ls_code_inspector> LIKE LINE OF gt_code_inspector.
READ TABLE gt_code_inspector ASSIGNING <ls_code_inspector> WITH TABLE KEY package = iv_package.
IF sy-subrc <> 0.
ls_code_inspector-package = iv_package.
INSERT ls_code_inspector INTO TABLE gt_code_inspector ASSIGNING <ls_code_inspector>.
ENDIF.
<ls_code_inspector>-instance = ii_code_inspector.
ENDMETHOD.
METHOD skip_object.
DATA ls_program_type TYPE subc.

View File

@ -0,0 +1,442 @@
CLASS zcl_abapgit_where_used_tools DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
TYPES ty_devc_range TYPE RANGE OF tadir-devclass.
TYPES:
BEGIN OF ty_dependency,
package TYPE devclass,
obj_type TYPE tadir-object,
obj_prog_type TYPE trdir-subc,
obj_name TYPE tadir-obj_name,
obj_cls TYPE string,
dep_package TYPE devclass,
dep_obj_type TYPE tadir-object,
dep_obj_name TYPE tadir-obj_name,
dep_used_cls TYPE string,
dep_used_obj TYPE string,
END OF ty_dependency.
TYPES:
ty_dependency_tt TYPE STANDARD TABLE OF ty_dependency WITH DEFAULT KEY.
CLASS-METHODS new
RETURNING
VALUE(ro_instance) TYPE REF TO zcl_abapgit_where_used_tools.
" the initial version of this utility is also available as a standalone tool
" here: https://github.com/sbcgua/crossdeps
METHODS select_external_usages
IMPORTING
iv_package TYPE tadir-devclass
iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
ir_package_scope TYPE ty_devc_range OPTIONAL
RETURNING
VALUE(rt_objs) TYPE ty_dependency_tt
RAISING
zcx_abapgit_exception.
PROTECTED SECTION.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_obj_signature,
package TYPE devclass,
obj_type TYPE tadir-object,
obj_name TYPE tadir-obj_name,
END OF ty_obj_signature.
TYPES ty_where_used_tt TYPE STANDARD TABLE OF rsfindlst WITH DEFAULT KEY.
TYPES ty_seu_obj TYPE STANDARD TABLE OF seu_obj WITH DEFAULT KEY.
TYPES:
BEGIN OF ty_dev_object,
type TYPE seu_stype,
tadir TYPE trobjtype,
END OF ty_dev_object.
DATA mt_object_packages TYPE HASHED TABLE OF ty_obj_signature WITH UNIQUE KEY obj_type obj_name.
DATA mt_dev_obj_cache TYPE HASHED TABLE OF ty_dev_object WITH UNIQUE KEY type.
METHODS get_where_used
IMPORTING
iv_obj_type TYPE euobj-id
iv_obj_name TYPE tadir-obj_name
it_scope TYPE ty_seu_obj OPTIONAL
ir_package_scope TYPE ty_devc_range OPTIONAL
RETURNING
VALUE(rt_findings) TYPE ty_where_used_tt
RAISING
zcx_abapgit_exception.
METHODS get_obj_package
IMPORTING
iv_obj_type TYPE tadir-object
iv_obj_name TYPE tadir-obj_name
RETURNING
VALUE(rv_package) TYPE tadir-devclass.
METHODS get_func_package
IMPORTING
iv_func_name TYPE tadir-obj_name
RETURNING
VALUE(rv_package) TYPE tadir-devclass.
METHODS get_incl_package
IMPORTING
iv_prog_name TYPE tadir-obj_name
RETURNING
VALUE(rv_package) TYPE tadir-devclass.
METHODS build_package_scope
IMPORTING
it_tadir TYPE STANDARD TABLE
ir_package_scope TYPE ty_devc_range
RETURNING
VALUE(rt_package_scope) TYPE ty_devc_range.
METHODS collect_where_used
IMPORTING
it_tadir TYPE STANDARD TABLE
ir_package_scope TYPE ty_devc_range
RETURNING
VALUE(rt_objs) TYPE ty_dependency_tt
RAISING
zcx_abapgit_exception.
METHODS convert_list
IMPORTING
iv_package TYPE ty_dependency-dep_package
iv_obj_type TYPE ty_dependency-dep_obj_type
iv_obj_name TYPE ty_dependency-dep_obj_name
it_where_used TYPE ty_where_used_tt
RETURNING
VALUE(rt_objs) TYPE ty_dependency_tt.
METHODS decode_obj_type
IMPORTING
iv_type TYPE rsfindlst-object_cls
RETURNING
VALUE(rv_type) TYPE ty_dev_object-tadir.
ENDCLASS.
CLASS zcl_abapgit_where_used_tools IMPLEMENTATION.
METHOD build_package_scope.
FIELD-SYMBOLS <ls_tadir> TYPE zif_abapgit_definitions=>ty_tadir.
FIELD-SYMBOLS <ls_pkg> LIKE LINE OF rt_package_scope.
rt_package_scope = ir_package_scope.
LOOP AT it_tadir ASSIGNING <ls_tadir>.
CHECK <ls_tadir>-object = 'DEVC'.
APPEND INITIAL LINE TO rt_package_scope ASSIGNING <ls_pkg>.
<ls_pkg>-sign = 'E'.
<ls_pkg>-option = 'EQ'.
<ls_pkg>-low = <ls_tadir>-obj_name.
ENDLOOP.
ENDMETHOD.
METHOD collect_where_used.
DATA li_progress TYPE REF TO zif_abapgit_progress.
DATA lt_where_used TYPE ty_where_used_tt.
DATA lt_objs_portion LIKE rt_objs.
FIELD-SYMBOLS <ls_tadir> TYPE zif_abapgit_definitions=>ty_tadir.
li_progress = zcl_abapgit_progress=>get_instance( lines( it_tadir ) ).
LOOP AT it_tadir ASSIGNING <ls_tadir>.
CHECK <ls_tadir>-object <> 'DEVC'.
li_progress->show(
iv_current = sy-tabix
iv_text = |{ <ls_tadir>-object } { <ls_tadir>-obj_name }| ).
lt_where_used = get_where_used(
iv_obj_type = |{ <ls_tadir>-object }|
iv_obj_name = <ls_tadir>-obj_name
ir_package_scope = ir_package_scope ).
lt_objs_portion = convert_list(
iv_package = <ls_tadir>-devclass
iv_obj_type = <ls_tadir>-object
iv_obj_name = <ls_tadir>-obj_name
it_where_used = lt_where_used ).
APPEND LINES OF lt_objs_portion TO rt_objs.
ENDLOOP.
li_progress->off( ).
ENDMETHOD.
METHOD convert_list.
" See also CL_FINB_GN_BBI=>GET_CROSSREF
FIELD-SYMBOLS <ls_dep> LIKE LINE OF rt_objs.
FIELD-SYMBOLS <ls_use> LIKE LINE OF it_where_used.
LOOP AT it_where_used ASSIGNING <ls_use>.
APPEND INITIAL LINE TO rt_objs ASSIGNING <ls_dep>.
<ls_dep>-dep_package = iv_package.
<ls_dep>-dep_obj_type = iv_obj_type.
<ls_dep>-dep_obj_name = iv_obj_name.
<ls_dep>-dep_used_obj = <ls_use>-used_obj.
<ls_dep>-dep_used_cls = <ls_use>-used_cls.
<ls_dep>-obj_cls = <ls_use>-object_cls.
<ls_dep>-obj_name = <ls_use>-encl_objec.
IF <ls_dep>-obj_name IS INITIAL.
<ls_dep>-obj_name = <ls_use>-object.
ENDIF.
IF <ls_use>-object_cls = 'FF'. " Function module
<ls_dep>-obj_type = 'FUNC'.
<ls_dep>-package = get_func_package( <ls_dep>-obj_name ).
ELSE.
<ls_dep>-obj_type = decode_obj_type( <ls_use>-object_cls ).
<ls_dep>-package = get_obj_package(
iv_obj_type = <ls_dep>-obj_type
iv_obj_name = <ls_dep>-obj_name ).
IF <ls_dep>-package IS INITIAL AND <ls_dep>-obj_type = 'CLAS'.
<ls_dep>-package = get_obj_package(
iv_obj_type = 'INTF'
iv_obj_name = <ls_dep>-obj_name ).
IF <ls_dep>-package IS NOT INITIAL.
<ls_dep>-obj_type = 'INTF'.
ENDIF.
ENDIF.
ENDIF.
IF <ls_dep>-package IS INITIAL.
IF <ls_dep>-obj_type = 'PROG'. " Maybe it is an include
<ls_dep>-package = get_incl_package( <ls_dep>-obj_name ).
IF <ls_dep>-package IS INITIAL.
SELECT SINGLE subc INTO <ls_dep>-obj_prog_type FROM trdir WHERE name = <ls_dep>-obj_name.
IF <ls_dep>-obj_prog_type IS NOT INITIAL AND <ls_dep>-obj_prog_type <> '1'. " Exec. prog
<ls_dep>-obj_type = 'INCL'.
ENDIF.
ENDIF.
ENDIF.
IF <ls_dep>-package IS INITIAL.
<ls_dep>-package = '????'.
ENDIF.
ENDIF.
ENDLOOP.
" some includes are ENHO ...
" include detection TRDIR, D010INC ???
" how to find connection with ENHO ?
" Useful: https://github.com/abaplint/abaplint-sci-client/blob/main/src/deps/zcl_abaplint_deps_find.clas.abap
" And cl_wb_manager->if_wb_manager~request_tool_access
" And discussions in https://github.com/abapGit/abapGit/pull/6897
ENDMETHOD.
METHOD decode_obj_type.
FIELD-SYMBOLS <ls_devobj> LIKE LINE OF mt_dev_obj_cache.
IF mt_dev_obj_cache IS INITIAL.
SELECT type tadir INTO TABLE mt_dev_obj_cache
FROM euobjedit.
ENDIF.
READ TABLE mt_dev_obj_cache ASSIGNING <ls_devobj> WITH KEY type = iv_type.
IF sy-subrc = 0.
rv_type = <ls_devobj>-tadir.
ENDIF.
ENDMETHOD.
METHOD get_func_package.
" See also: FUNCTION_INCLUDE_INFO, TFDIR, find main program -> get its pkg
DATA ls_obj_sig LIKE LINE OF mt_object_packages.
READ TABLE mt_object_packages INTO ls_obj_sig WITH KEY obj_type = 'FUNC' obj_name = iv_func_name.
IF sy-subrc <> 0.
SELECT SINGLE devclass INTO ls_obj_sig-package
FROM info_func
WHERE funcname = iv_func_name.
IF ls_obj_sig-package IS NOT INITIAL.
ls_obj_sig-obj_type = 'FUNC'.
ls_obj_sig-obj_name = iv_func_name.
INSERT ls_obj_sig INTO TABLE mt_object_packages.
ENDIF.
ENDIF.
rv_package = ls_obj_sig-package.
ENDMETHOD.
METHOD get_incl_package.
DATA lv_program TYPE progname.
DATA lv_area TYPE rs38l_area.
lv_program = iv_prog_name.
CALL FUNCTION 'FUNCTION_INCLUDE_CONCATENATE'
CHANGING
program = lv_program
complete_area = lv_area
EXCEPTIONS
not_enough_input = 1
no_function_pool = 2
delimiter_wrong_position = 3
OTHERS = 4 ##FM_SUBRC_OK.
IF lv_area IS INITIAL.
SELECT SINGLE master FROM d010inc INTO lv_program
WHERE include = iv_prog_name.
CALL FUNCTION 'FUNCTION_INCLUDE_CONCATENATE'
CHANGING
program = lv_program
complete_area = lv_area
EXCEPTIONS
not_enough_input = 1
no_function_pool = 2
delimiter_wrong_position = 3
OTHERS = 4 ##FM_SUBRC_OK.
ENDIF.
IF lv_area IS NOT INITIAL.
rv_package = get_obj_package(
iv_obj_type = 'FUGR'
iv_obj_name = |{ lv_area }| ).
RETURN.
ENDIF.
" TODO more ...
ENDMETHOD.
METHOD get_obj_package.
" see also zcl_abapgit_tadir->get_object_package for checks
DATA ls_obj_sig LIKE LINE OF mt_object_packages.
READ TABLE mt_object_packages INTO ls_obj_sig WITH KEY obj_type = iv_obj_type obj_name = iv_obj_name.
IF sy-subrc <> 0.
ls_obj_sig-package = zcl_abapgit_factory=>get_tadir( )->read_single(
iv_object = iv_obj_type
iv_obj_name = iv_obj_name )-devclass.
IF ls_obj_sig-package IS NOT INITIAL.
ls_obj_sig-obj_type = iv_obj_type.
ls_obj_sig-obj_name = iv_obj_name.
INSERT ls_obj_sig INTO TABLE mt_object_packages.
ENDIF.
ENDIF.
rv_package = ls_obj_sig-package.
ENDMETHOD.
METHOD get_where_used.
DATA lt_findstrings TYPE string_table.
DATA lt_scope LIKE it_scope.
DATA lv_findstring LIKE LINE OF lt_findstrings.
IF iv_obj_name IS INITIAL.
RETURN.
ENDIF.
lt_scope = it_scope.
lv_findstring = iv_obj_name.
INSERT lv_findstring INTO TABLE lt_findstrings.
CALL FUNCTION 'RS_EU_CROSSREF'
EXPORTING
i_find_obj_cls = iv_obj_type
no_dialog = abap_true
without_text = abap_true
TABLES
i_findstrings = lt_findstrings
o_founds = rt_findings
i_scope_object_cls = lt_scope
i_scope_devclass = ir_package_scope
EXCEPTIONS
not_executed = 1
not_found = 2
illegal_object = 3
no_cross_for_this_object = 4
batch = 5
batchjob_error = 6
wrong_type = 7
object_not_exist = 8
OTHERS = 9.
IF sy-subrc = 1 OR sy-subrc = 2 OR lines( rt_findings ) = 0.
RETURN.
ELSEIF sy-subrc > 2.
zcx_abapgit_exception=>raise( |RS_EU_CROSSREF({ sy-subrc }) for { iv_obj_type } { iv_obj_name }| ).
ENDIF.
ENDMETHOD.
METHOD new.
CREATE OBJECT ro_instance.
ENDMETHOD.
METHOD select_external_usages.
DATA lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt.
DATA lt_package_scope LIKE ir_package_scope.
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read(
iv_package = iv_package
iv_ignore_subpackages = iv_ignore_subpackages ).
lt_package_scope = build_package_scope(
ir_package_scope = ir_package_scope
it_tadir = lt_tadir ).
rt_objs = collect_where_used(
ir_package_scope = lt_package_scope
it_tadir = lt_tadir ).
SORT rt_objs.
DELETE ADJACENT DUPLICATES FROM rt_objs.
" Duplicates happen e.g. because where-used is found by method.
" However here this functionality aggregates them to the object
" These are not true duplicates, so if ever the method name (or any other duplicate cause)
" will be extracted, this sort can be removed
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?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_WHERE_USED_TOOLS</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - Where-used Utilities</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -50,7 +50,7 @@ CLASS zcl_abapgit_ajson DEFINITION
CLASS-METHODS parse
IMPORTING
!iv_json TYPE string
!iv_json TYPE any
!iv_freeze TYPE abap_bool DEFAULT abap_false
!ii_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
!iv_keep_item_order TYPE abap_bool DEFAULT abap_false
@ -848,6 +848,8 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
DATA lv_path_pattern TYPE string.
CREATE OBJECT lo_section.
lo_section->mi_custom_mapping = mi_custom_mapping.
lv_normalized_path = lcl_utils=>normalize_path( iv_path ).
lv_path_len = strlen( lv_normalized_path ).
ls_path_parts = lcl_utils=>split_path( lv_normalized_path ).
@ -924,8 +926,12 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
ls_new_node-name = ls_split_path-name.
ls_new_node-type = zif_abapgit_ajson_types=>node_type-array.
IF ms_opts-keep_item_order = abap_true AND ls_deleted_node IS NOT INITIAL.
IF ms_opts-keep_item_order = abap_true.
IF ls_deleted_node IS NOT INITIAL.
ls_new_node-order = ls_deleted_node-order.
ELSE.
ls_new_node-order = lr_parent->children.
ENDIF.
ENDIF.
INSERT ls_new_node INTO TABLE mt_json_tree.

View File

@ -20,27 +20,27 @@ INTERFACE lif_kind.
CONSTANTS:
BEGIN OF numeric,
int1 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_int1,
int2 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_int2,
int4 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_int,
int8 TYPE ty_kind VALUE '8', " cl_abap_tabledescr=>typekind_int8 not in lower releases
float TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_float,
packed TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_packed,
decfloat16 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_decfloat16,
decfloat34 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_decfloat34,
int1 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_int1,
int2 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_int2,
int4 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_int,
int8 TYPE ty_kind VALUE '8', " cl_abap_typedescr=>typekind_int8 not in lower releases
float TYPE ty_kind VALUE cl_abap_typedescr=>typekind_float,
packed TYPE ty_kind VALUE cl_abap_typedescr=>typekind_packed,
decfloat16 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_decfloat16,
decfloat34 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_decfloat34,
END OF numeric.
CONSTANTS:
BEGIN OF texts,
char TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_char,
numc TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_num,
string TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_string,
char TYPE ty_kind VALUE cl_abap_typedescr=>typekind_char,
numc TYPE ty_kind VALUE cl_abap_typedescr=>typekind_num,
string TYPE ty_kind VALUE cl_abap_typedescr=>typekind_string,
END OF texts.
CONSTANTS:
BEGIN OF binary,
hex TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_hex,
xstring TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_xstring,
hex TYPE ty_kind VALUE cl_abap_typedescr=>typekind_hex,
xstring TYPE ty_kind VALUE cl_abap_typedescr=>typekind_xstring,
END OF binary.
CONSTANTS:
@ -80,6 +80,25 @@ CLASS lcl_utils DEFINITION FINAL.
iv_str TYPE string
RETURNING
VALUE(rv_xstr) TYPE xstring.
CLASS-METHODS xstring_to_string_utf8
IMPORTING
iv_xstr TYPE xstring
RETURNING
VALUE(rv_str) TYPE string.
CLASS-METHODS any_to_xstring
IMPORTING
iv_data TYPE any
RETURNING
VALUE(rv_xstr) TYPE xstring
RAISING
zcx_abapgit_ajson_error.
CLASS-METHODS any_to_string
IMPORTING
iv_data TYPE any
RETURNING
VALUE(rv_str) TYPE string
RAISING
zcx_abapgit_ajson_error.
ENDCLASS.
@ -116,6 +135,37 @@ CLASS lcl_utils IMPLEMENTATION.
ENDMETHOD.
METHOD xstring_to_string_utf8.
DATA lo_conv TYPE REF TO object.
DATA lv_in_ce TYPE string.
lv_in_ce = 'CL_ABAP_CONV_IN_CE'.
TRY.
CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in
RECEIVING
instance = lo_conv.
CALL METHOD lo_conv->('IF_ABAP_CONV_IN~CONVERT')
EXPORTING
source = iv_xstr
RECEIVING
result = rv_str.
CATCH cx_sy_dyn_call_illegal_class.
CALL METHOD (lv_in_ce)=>create
EXPORTING
encoding = 'UTF-8'
RECEIVING
conv = lo_conv.
CALL METHOD lo_conv->('CONVERT')
EXPORTING
data = iv_xstr
IMPORTING
buffer = rv_str.
ENDTRY.
ENDMETHOD.
METHOD validate_array_index.
IF NOT iv_index CO '0123456789'.
@ -176,6 +226,74 @@ CLASS lcl_utils IMPLEMENTATION.
ENDMETHOD.
METHOD any_to_xstring.
" supports xstring, char, string, or string_table as input
DATA lo_type TYPE REF TO cl_abap_typedescr.
DATA lo_table_type TYPE REF TO cl_abap_tabledescr.
DATA lv_str TYPE string.
FIELD-SYMBOLS: <data> TYPE STANDARD TABLE.
lo_type = cl_abap_typedescr=>describe_by_data( iv_data ).
CASE lo_type->type_kind.
WHEN lif_kind=>binary-xstring.
rv_xstr = iv_data.
WHEN lif_kind=>texts-string OR lif_kind=>texts-char.
rv_xstr = string_to_xstring_utf8( iv_data ).
WHEN lif_kind=>table.
lo_table_type ?= lo_type.
IF lo_table_type->table_kind <> cl_abap_tabledescr=>tablekind_std.
zcx_abapgit_ajson_error=>raise( 'Unsupported type of input table (must be standard table)' ).
ENDIF.
TRY.
ASSIGN iv_data TO <data>.
lv_str = concat_lines_of( table = <data>
sep = cl_abap_char_utilities=>newline ).
rv_xstr = string_to_xstring_utf8( lv_str ).
CATCH cx_root.
zcx_abapgit_ajson_error=>raise( 'Error converting input table (should be string_table)' ).
ENDTRY.
WHEN OTHERS.
zcx_abapgit_ajson_error=>raise( 'Unsupported type of input (must be char, string, string_table, or xstring)' ).
ENDCASE.
ENDMETHOD.
METHOD any_to_string.
" supports xstring, char, string, or string_table as input
DATA lo_type TYPE REF TO cl_abap_typedescr.
DATA lo_table_type TYPE REF TO cl_abap_tabledescr.
FIELD-SYMBOLS: <data> TYPE STANDARD TABLE.
lo_type = cl_abap_typedescr=>describe_by_data( iv_data ).
CASE lo_type->type_kind.
WHEN lif_kind=>binary-xstring.
rv_str = xstring_to_string_utf8( iv_data ).
WHEN lif_kind=>texts-string OR lif_kind=>texts-char.
rv_str = iv_data.
WHEN lif_kind=>table.
lo_table_type ?= lo_type.
IF lo_table_type->table_kind <> cl_abap_tabledescr=>tablekind_std.
zcx_abapgit_ajson_error=>raise( 'Unsupported type of input table (must be standard table)' ).
ENDIF.
TRY.
ASSIGN iv_data TO <data>.
rv_str = concat_lines_of( table = <data>
sep = cl_abap_char_utilities=>newline ).
CATCH cx_root.
zcx_abapgit_ajson_error=>raise( 'Error converting input table (should be string_table)' ).
ENDTRY.
WHEN OTHERS.
zcx_abapgit_ajson_error=>raise( 'Unsupported type of input (must be char, string, string_table, or xstring)' ).
ENDCASE.
ENDMETHOD.
ENDCLASS.
@ -188,7 +306,7 @@ CLASS lcl_json_parser DEFINITION FINAL.
METHODS parse
IMPORTING
iv_json TYPE string
iv_json TYPE any
iv_keep_item_order TYPE abap_bool DEFAULT abap_false
RETURNING
VALUE(rt_json_tree) TYPE zif_abapgit_ajson_types=>ty_nodes_tt
@ -212,7 +330,7 @@ CLASS lcl_json_parser DEFINITION FINAL.
METHODS _parse
IMPORTING
iv_json TYPE string
iv_json TYPE xstring
RETURNING
VALUE(rt_json_tree) TYPE zif_abapgit_ajson_types=>ty_nodes_tt
RAISING
@ -233,17 +351,20 @@ CLASS lcl_json_parser IMPLEMENTATION.
DATA lx_sxml_parse TYPE REF TO cx_sxml_parse_error.
DATA lx_sxml TYPE REF TO cx_dynamic_check.
DATA lv_location TYPE string.
DATA lv_json TYPE xstring.
mv_keep_item_order = iv_keep_item_order.
lv_json = lcl_utils=>any_to_xstring( iv_json ).
TRY.
" TODO sane JSON check:
" JSON can be true,false,null,(-)digits
" or start from " or from {
rt_json_tree = _parse( iv_json ).
rt_json_tree = _parse( lv_json ).
CATCH cx_sxml_parse_error INTO lx_sxml_parse.
lv_location = _get_location(
iv_json = iv_json
iv_json = lcl_utils=>any_to_string( iv_json )
iv_offset = lx_sxml_parse->xml_offset ).
zcx_abapgit_ajson_error=>raise(
iv_msg = |Json parsing error (SXML): { lx_sxml_parse->get_text( ) }|
@ -305,7 +426,7 @@ CLASS lcl_json_parser IMPLEMENTATION.
IF iv_json IS INITIAL.
RETURN.
ENDIF.
lo_reader = cl_sxml_string_reader=>create( lcl_utils=>string_to_xstring_utf8( iv_json ) ).
lo_reader = cl_sxml_string_reader=>create( iv_json ).
" TODO: self protection, check non-empty, check starting from object ...
@ -672,6 +793,14 @@ CLASS lcl_json_to_abap DEFINITION FINAL.
RAISING
zcx_abapgit_ajson_error.
METHODS to_time
IMPORTING
iv_value TYPE zif_abapgit_ajson_types=>ty_node-value
RETURNING
VALUE(rv_result) TYPE t
RAISING
zcx_abapgit_ajson_error.
PRIVATE SECTION.
TYPES:
@ -803,7 +932,7 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
zcx_abapgit_ajson_error=>raise( |Unexpected parent type| ).
ENDCASE.
rs_node_type-type_kind = rs_node_type-dd->type_kind. " for caching and cleaner unintialized access
rs_node_type-type_kind = rs_node_type-dd->type_kind. " for caching and cleaner uninitialized access
IF rs_node_type-type_kind = lif_kind=>table.
lo_tdescr ?= rs_node_type-dd.
IF lo_tdescr->table_kind <> cl_abap_tabledescr=>tablekind_std.
@ -888,6 +1017,8 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
IF is_parent_type-tab_item_buf IS NOT BOUND. " Indirect hint that table was srt/hsh, see get_node_type
APPEND INITIAL LINE TO <parent_stdtab> REFERENCE INTO lr_target_field.
ASSERT sy-subrc = 0.
ELSE.
CLEAR <tab_item>.
ENDIF.
WHEN lif_kind=>struct_flat OR lif_kind=>struct_deep.
@ -984,10 +1115,19 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
WHEN zif_abapgit_ajson_types=>node_type-string.
" TODO: check type ?
IF is_node_type-type_kind = lif_kind=>date AND is_node-value IS NOT INITIAL.
IF is_node-value IS NOT INITIAL.
IF is_node_type-type_kind = lif_kind=>date.
<container> = to_date( is_node-value ).
ELSEIF is_node_type-type_kind = lif_kind=>packed AND is_node-value IS NOT INITIAL.
ELSEIF is_node_type-type_kind = lif_kind=>time.
<container> = to_time( is_node-value ).
ELSEIF is_node_type-dd->absolute_name = '\TYPE=TIMESTAMP'
OR is_node_type-dd->absolute_name = '\TYPE=TIMESTAMPL'.
<container> = to_timestamp( is_node-value ).
ELSEIF is_node_type-type_kind = lif_kind=>packed. " Number as a string, but not a timestamp
<container> = is_node-value.
ELSE.
<container> = is_node-value.
ENDIF.
ELSE.
<container> = is_node-value.
ENDIF.
@ -1095,6 +1235,22 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
ENDMETHOD.
METHOD to_time.
DATA lv_h TYPE c LENGTH 2.
DATA lv_m TYPE c LENGTH 2.
DATA lv_s TYPE c LENGTH 2.
FIND FIRST OCCURRENCE OF REGEX '^(\d{2}):(\d{2}):(\d{2})(T|$)'
IN iv_value
SUBMATCHES lv_h lv_m lv_s.
IF sy-subrc <> 0.
zcx_abapgit_ajson_error=>raise( 'Unexpected time format' ).
ENDIF.
CONCATENATE lv_h lv_m lv_s INTO rv_result.
ENDMETHOD.
ENDCLASS.
**********************************************************************
@ -1776,8 +1932,13 @@ CLASS lcl_filter_runner IMPLEMENTATION.
METHOD walk.
DATA ls_node TYPE zif_abapgit_ajson_types=>ty_node.
DATA lv_tab_key TYPE string.
LOOP AT mr_source_tree->* INTO ls_node WHERE path = iv_path.
IF cs_parent-type = zif_abapgit_ajson_types=>node_type-array.
lv_tab_key = 'array_index'. " path + index
ENDIF.
LOOP AT mr_source_tree->* INTO ls_node USING KEY (lv_tab_key) WHERE path = iv_path.
CASE ls_node-type.
WHEN zif_abapgit_ajson_types=>node_type-boolean OR zif_abapgit_ajson_types=>node_type-null
OR zif_abapgit_ajson_types=>node_type-number OR zif_abapgit_ajson_types=>node_type-string.

View File

@ -85,6 +85,10 @@ CLASS ltcl_parser_test DEFINITION FINAL
METHODS parse_date FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS parse_bare_values FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS parse_error FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS parse_input_xstring FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS parse_input_string FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS parse_input_string_table FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS parse_input_error FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS duplicate_key FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS non_json FOR TESTING RAISING zcx_abapgit_ajson_error.
@ -248,6 +252,78 @@ CLASS ltcl_parser_test IMPLEMENTATION.
exp = mo_nodes->mt_nodes ).
ENDMETHOD.
METHOD parse_input_xstring.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |string |str |abc | |0' ).
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
DATA lv_xstr TYPE xstring.
lv_xstr = '7B22737472696E67223A2022616263227D0A'.
lt_act = mo_cut->parse( lv_xstr ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
exp = mo_nodes->mt_nodes ).
ENDMETHOD.
METHOD parse_input_string.
mo_nodes->add( ' | |object | | |1' ).
mo_nodes->add( '/ |string |str |abc | |0' ).
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
DATA lv_str TYPE string.
lv_str = `{"string": "abc"}`.
lt_act = mo_cut->parse( lv_str ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
exp = mo_nodes->mt_nodes ).
ENDMETHOD.
METHOD parse_input_string_table.
mo_nodes->add( ' | |object | | |2' ).
mo_nodes->add( '/ |string |str |abc | |0' ).
mo_nodes->add( '/ |number |num |123 | |0' ).
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
DATA lt_json TYPE string_table.
INSERT `{` INTO TABLE lt_json.
INSERT `"string": "abc",` INTO TABLE lt_json.
INSERT `"number": 123` INTO TABLE lt_json.
INSERT `}` INTO TABLE lt_json.
lt_act = mo_cut->parse( lt_json ).
cl_abap_unit_assert=>assert_equals(
act = lt_act
exp = mo_nodes->mt_nodes ).
ENDMETHOD.
METHOD parse_input_error.
DATA lo_cut TYPE REF TO lcl_json_parser.
DATA lx TYPE REF TO zcx_abapgit_ajson_error.
DATA lv_numc TYPE n LENGTH 10.
DATA lt_hashed TYPE HASHED TABLE OF string WITH UNIQUE DEFAULT KEY.
CREATE OBJECT lo_cut.
TRY.
lo_cut->parse( lv_numc ).
cl_abap_unit_assert=>fail( ).
CATCH zcx_abapgit_ajson_error INTO lx.
cl_abap_unit_assert=>assert_not_initial( lx ).
ENDTRY.
TRY.
lo_cut->parse( lt_hashed ).
cl_abap_unit_assert=>fail( ).
CATCH zcx_abapgit_ajson_error INTO lx.
cl_abap_unit_assert=>assert_not_initial( lx ).
ENDTRY.
ENDMETHOD.
METHOD sample_json.
rv_json =
@ -1409,6 +1485,7 @@ CLASS ltcl_json_to_abap DEFINITION
timestamp1 TYPE timestamp,
timestamp2 TYPE timestamp,
timestamp3 TYPE timestamp,
timestamp4 TYPE timestampl,
END OF ty_complex.
METHODS to_abap_struc
@ -1459,7 +1536,27 @@ CLASS ltcl_json_to_abap DEFINITION
METHODS to_abap_corresponding_pub_neg
FOR TESTING
RAISING zcx_abapgit_ajson_error.
METHODS to_abap_time
FOR TESTING
RAISING cx_static_check.
METHODS to_abap_str_to_packed
FOR TESTING
RAISING cx_static_check.
METHODS to_abap_compressed_stdrd
FOR TESTING
RAISING cx_static_check.
METHODS to_abap_compressed_stdrd_key
FOR TESTING
RAISING cx_static_check.
METHODS to_abap_compressed_sort
FOR TESTING
RAISING cx_static_check.
METHODS to_abap_compressed_sort_unique
FOR TESTING
RAISING cx_static_check.
METHODS to_abap_compressed_hash
FOR TESTING
RAISING cx_static_check.
ENDCLASS.
CLASS zcl_abapgit_ajson DEFINITION LOCAL FRIENDS ltcl_json_to_abap.
@ -1489,6 +1586,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
lo_nodes->add( '/ |timestamp1 |str |2020-07-28T00:00:00 | ' ).
lo_nodes->add( '/ |timestamp2 |str |2020-07-28T00:00:00Z | ' ).
lo_nodes->add( '/ |timestamp3 |str |2020-07-28T01:00:00+01:00 | ' ).
lo_nodes->add( '/ |timestamp4 |str |2020-07-28T01:00:00+01:00 | ' ).
CREATE OBJECT lo_cut.
lo_cut->to_abap(
@ -1507,6 +1605,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
ls_exp-timestamp1 = lv_exp_timestamp.
ls_exp-timestamp2 = lv_exp_timestamp.
ls_exp-timestamp3 = lv_exp_timestamp.
ls_exp-timestamp4 = lv_exp_timestamp.
cl_abap_unit_assert=>assert_equals(
act = ls_mock
@ -1536,6 +1635,66 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
ENDMETHOD.
METHOD to_abap_time.
DATA lo_cut TYPE REF TO lcl_json_to_abap.
DATA lv_mock TYPE t.
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |str |11:11:11| ' ).
CREATE OBJECT lo_cut.
lo_cut->to_abap(
EXPORTING
it_nodes = lo_nodes->sorted( )
CHANGING
c_container = lv_mock ).
cl_abap_unit_assert=>assert_equals(
act = lv_mock
exp = '111111' ).
DATA lv_mock_init TYPE t.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |str || ' ).
CREATE OBJECT lo_cut.
lo_cut->to_abap(
EXPORTING
it_nodes = lo_nodes->sorted( )
CHANGING
c_container = lv_mock_init ).
cl_abap_unit_assert=>assert_equals(
act = lv_mock_init
exp = '000000' ).
ENDMETHOD.
METHOD to_abap_str_to_packed.
DATA lo_cut TYPE REF TO lcl_json_to_abap.
DATA lv_act TYPE p LENGTH 10 DECIMALS 3.
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
CREATE OBJECT lo_nodes.
lo_nodes->add( ' | |str |1.3333 | ' ).
CREATE OBJECT lo_cut.
lo_cut->to_abap(
EXPORTING
it_nodes = lo_nodes->sorted( )
CHANGING
c_container = lv_act ).
cl_abap_unit_assert=>assert_equals(
act = lv_act
exp = '1.333' ).
ENDMETHOD.
METHOD to_abap_value.
DATA lo_cut TYPE REF TO lcl_json_to_abap.
@ -2121,6 +2280,171 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
ENDMETHOD.
METHOD to_abap_compressed_stdrd.
TYPES: BEGIN OF ty_foo_bar,
foo TYPE string,
bar TYPE string,
END OF ty_foo_bar.
DATA lt_foo_bar TYPE STANDARD TABLE OF ty_foo_bar.
DATA ls_foo_bar LIKE LINE OF lt_foo_bar.
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
DATA lv_json TYPE string.
lv_json =
'[' &&
' {' &&
' "foo": "abc",' &&
' "bar": "123"' &&
' },' &&
' {' &&
' "foo": "cde"' &&
' }' &&
']'.
lo_ajson = zcl_abapgit_ajson=>parse( lv_json ).
lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ).
READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar.
cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ).
ENDMETHOD.
METHOD to_abap_compressed_stdrd_key.
TYPES: BEGIN OF ty_foo_bar,
foo TYPE string,
bar TYPE string,
END OF ty_foo_bar.
DATA lt_foo_bar TYPE STANDARD TABLE OF ty_foo_bar WITH NON-UNIQUE KEY foo.
DATA ls_foo_bar LIKE LINE OF lt_foo_bar.
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
DATA lv_json TYPE string.
lv_json =
'[' &&
' {' &&
' "foo": "abc",' &&
' "bar": "123"' &&
' },' &&
' {' &&
' "foo": "cde"' &&
' }' &&
']'.
lo_ajson = zcl_abapgit_ajson=>parse( lv_json ).
lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ).
READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar.
cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ).
ENDMETHOD.
METHOD to_abap_compressed_sort.
TYPES: BEGIN OF ty_foo_bar,
foo TYPE string,
bar TYPE string,
END OF ty_foo_bar.
DATA lt_foo_bar TYPE SORTED TABLE OF ty_foo_bar WITH NON-UNIQUE KEY foo.
DATA ls_foo_bar LIKE LINE OF lt_foo_bar.
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
DATA lv_json TYPE string.
lv_json =
'[' &&
' {' &&
' "foo": "abc",' &&
' "bar": "123"' &&
' },' &&
' {' &&
' "foo": "cde"' &&
' }' &&
']'.
lo_ajson = zcl_abapgit_ajson=>parse( lv_json ).
lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ).
READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar.
cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ).
ENDMETHOD.
METHOD to_abap_compressed_sort_unique.
TYPES: BEGIN OF ty_foo_bar,
foo TYPE string,
bar TYPE string,
END OF ty_foo_bar.
DATA lt_foo_bar TYPE SORTED TABLE OF ty_foo_bar WITH UNIQUE KEY foo.
DATA ls_foo_bar LIKE LINE OF lt_foo_bar.
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
DATA lv_json TYPE string.
lv_json =
'[' &&
' {' &&
' "foo": "abc",' &&
' "bar": "123"' &&
' },' &&
' {' &&
' "foo": "cde"' &&
' }' &&
']'.
lo_ajson = zcl_abapgit_ajson=>parse( lv_json ).
lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ).
READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar.
cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ).
ENDMETHOD.
METHOD to_abap_compressed_hash.
TYPES: BEGIN OF ty_foo_bar,
foo TYPE string,
bar TYPE string,
END OF ty_foo_bar.
DATA lt_foo_bar TYPE HASHED TABLE OF ty_foo_bar WITH UNIQUE KEY foo.
DATA ls_foo_bar LIKE LINE OF lt_foo_bar.
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
DATA lv_json TYPE string.
lv_json =
'[' &&
' {' &&
' "foo": "abc",' &&
' "bar": "123"' &&
' },' &&
' {' &&
' "foo": "cde"' &&
' }' &&
']'.
lo_ajson = zcl_abapgit_ajson=>parse( lv_json ).
lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ).
READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar.
cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ).
ENDMETHOD.
ENDCLASS.
**********************************************************************
@ -2153,11 +2477,13 @@ CLASS ltcl_writer_test DEFINITION FINAL
METHODS set_bool_tab FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_str FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_int FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_number FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_date FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_timestamp FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS read_only FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_array_obj FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_with_type FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS new_array_w_keep_order_touch FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS overwrite_w_keep_order_touch FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS overwrite_w_keep_order_set FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS setx FOR TESTING RAISING zcx_abapgit_ajson_error.
@ -2992,6 +3318,27 @@ CLASS ltcl_writer_test IMPLEMENTATION.
ENDMETHOD.
METHOD set_number.
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
DATA li_json TYPE REF TO zif_abapgit_ajson.
DATA lv_p TYPE p LENGTH 5 DECIMALS 2 VALUE '123.45'.
li_json = zcl_abapgit_ajson=>create_empty( ).
CREATE OBJECT lo_nodes_exp.
lo_nodes_exp->add( ' | |object | ||1' ).
lo_nodes_exp->add( '/ |a |num |123.45 ||0' ).
li_json->set(
iv_path = '/a'
iv_val = lv_p ).
cl_abap_unit_assert=>assert_equals(
act = li_json->mt_json_tree
exp = lo_nodes_exp->sorted( ) ).
ENDMETHOD.
METHOD set_date.
DATA lo_cut TYPE REF TO zcl_abapgit_ajson.
@ -3231,6 +3578,37 @@ CLASS ltcl_writer_test IMPLEMENTATION.
ENDMETHOD.
METHOD new_array_w_keep_order_touch.
DATA li_cut TYPE REF TO zif_abapgit_ajson.
" default order adds new arrays at beginning of node (pos 0)
li_cut = zcl_abapgit_ajson=>create_empty(
)->set(
iv_path = '/b'
iv_val = 1 ).
li_cut->touch_array( '/a' ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->stringify( )
exp = '{"a":[],"b":1}' ).
" with keep order, new array is created at end of node
li_cut = zcl_abapgit_ajson=>create_empty(
)->keep_item_order(
)->set(
iv_path = '/b'
iv_val = 1 ).
li_cut->touch_array( '/a' ).
cl_abap_unit_assert=>assert_equals(
act = li_cut->stringify( )
exp = '{"b":1,"a":[]}' ).
ENDMETHOD.
METHOD overwrite_w_keep_order_touch.
DATA li_cut TYPE REF TO zif_abapgit_ajson.
@ -4308,15 +4686,47 @@ CLASS ltcl_filter_test IMPLEMENTATION.
lo_json->push(
iv_path = '/'
iv_val = 'b' ).
lo_json->push(
iv_path = '/'
iv_val = 'c' ).
lo_json->push(
iv_path = '/'
iv_val = 'd' ).
lo_json->push(
iv_path = '/'
iv_val = 'e' ).
lo_json->push(
iv_path = '/'
iv_val = 'f' ).
lo_json->push(
iv_path = '/'
iv_val = 'g' ).
lo_json->push(
iv_path = '/'
iv_val = 'h' ).
lo_json->push(
iv_path = '/'
iv_val = 'i' ).
lo_json->push(
iv_path = '/'
iv_val = 'j' ).
lo_json_filtered = zcl_abapgit_ajson=>create_from(
ii_source_json = lo_json
ii_filter = me ).
CREATE OBJECT lo_nodes_exp.
lo_nodes_exp->add( ' | |array | | |2' ).
lo_nodes_exp->add( ' | |array | | |10' ).
lo_nodes_exp->add( '/ |1 |str |a |1|0' ).
lo_nodes_exp->add( '/ |2 |str |b |2|0' ).
lo_nodes_exp->add( '/ |3 |str |c |3|0' ).
lo_nodes_exp->add( '/ |4 |str |d |4|0' ).
lo_nodes_exp->add( '/ |5 |str |e |5|0' ).
lo_nodes_exp->add( '/ |6 |str |f |6|0' ).
lo_nodes_exp->add( '/ |7 |str |g |7|0' ).
lo_nodes_exp->add( '/ |8 |str |h |8|0' ).
lo_nodes_exp->add( '/ |9 |str |i |9|0' ).
lo_nodes_exp->add( '/ |10 |str |j |10|0' ).
cl_abap_unit_assert=>assert_equals(
act = lo_json_filtered->mt_json_tree

View File

@ -72,7 +72,7 @@ CLASS lcl_paths_filter IMPLEMENTATION.
ENDIF.
LOOP AT it_skip_paths INTO lv_s.
lv_s = to_lower( lv_s ).
lv_s = condense( lv_s ).
APPEND lv_s TO lt_tab.
ENDLOOP.
@ -83,7 +83,7 @@ CLASS lcl_paths_filter IMPLEMENTATION.
DELETE lt_tab INDEX sy-tabix.
CONTINUE.
ENDIF.
<s> = condense( to_lower( <s> ) ).
<s> = condense( <s> ).
ENDLOOP.
ENDIF.

View File

@ -10,6 +10,7 @@ CLASS ltcl_filters_test DEFINITION FINAL
METHODS path_filter_w_patterns FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS path_filter_deep FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS and_filter FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS mixed_case_filter FOR TESTING RAISING zcx_abapgit_ajson_error.
ENDCLASS.
@ -227,4 +228,36 @@ CLASS ltcl_filters_test IMPLEMENTATION.
ENDMETHOD.
METHOD mixed_case_filter.
DATA li_json TYPE REF TO zif_abapgit_ajson.
DATA li_json_filtered TYPE REF TO zif_abapgit_ajson.
li_json = zcl_abapgit_ajson=>create_empty( ).
li_json->set(
iv_path = '/a'
iv_val = '1' ).
li_json->set(
iv_path = '/bB'
iv_val = '2' ).
li_json->set(
iv_path = '/CC'
iv_val = '3' ).
li_json->set(
iv_path = '/cc'
iv_val = '4' ).
li_json->set(
iv_path = '/d'
iv_val = 5 ).
li_json_filtered = zcl_abapgit_ajson=>create_from(
ii_source_json = li_json
ii_filter = zcl_abapgit_ajson_filter_lib=>create_path_filter( iv_skip_paths = '/bB,/CC' ) ).
cl_abap_unit_assert=>assert_equals(
act = li_json_filtered->stringify( )
exp = '{"a":"1","cc":"4","d":5}' ).
ENDMETHOD.
ENDCLASS.

View File

@ -358,6 +358,7 @@ CLASS ltcl_fields DEFINITION FINAL FOR TESTING
to_json_without_path FOR TESTING RAISING zcx_abapgit_ajson_error,
to_json_with_path FOR TESTING RAISING zcx_abapgit_ajson_error,
to_abap FOR TESTING RAISING zcx_abapgit_ajson_error,
to_abap_with_slice FOR TESTING RAISING zcx_abapgit_ajson_error,
to_json IMPORTING iv_path TYPE string RETURNING VALUE(rv_result) TYPE string RAISING zcx_abapgit_ajson_error.
@ -403,6 +404,33 @@ CLASS ltcl_fields IMPLEMENTATION.
ENDMETHOD.
METHOD to_abap_with_slice.
DATA: BEGIN OF ls_act,
y TYPE i,
END OF ls_act.
DATA lo_cut TYPE REF TO zif_abapgit_ajson.
DATA lt_mapping_fields TYPE zif_abapgit_ajson_mapping=>ty_mapping_fields.
DATA ls_mapping_field LIKE LINE OF lt_mapping_fields.
CLEAR ls_mapping_field.
ls_mapping_field-abap = 'Y'.
ls_mapping_field-json = 'c'.
INSERT ls_mapping_field INTO TABLE lt_mapping_fields.
lo_cut = zcl_abapgit_ajson=>parse( iv_json = '{"a":1,"b":{"c":2},"d":{"e":3}}'
ii_custom_mapping = zcl_abapgit_ajson_mapping=>create_field_mapping( lt_mapping_fields )
)->slice( `/b` ).
lo_cut->to_abap( IMPORTING ev_container = ls_act ).
cl_abap_unit_assert=>assert_equals(
act = ls_act-y
exp = 2 ).
ENDMETHOD.
METHOD to_json_without_path.

View File

@ -1,7 +1,7 @@
INTERFACE zif_abapgit_ajson
PUBLIC.
CONSTANTS version TYPE string VALUE 'v1.1.9'. "#EC NOTEXT
CONSTANTS version TYPE string VALUE 'v1.1.11'. "#EC NOTEXT
CONSTANTS origin TYPE string VALUE 'https://github.com/sbcgua/ajson'. "#EC NOTEXT
CONSTANTS license TYPE string VALUE 'MIT'. "#EC NOTEXT

View File

@ -37,7 +37,7 @@ ENDCLASS.
CLASS zcl_abapgit_aff_registry IMPLEMENTATION.
CLASS ZCL_ABAPGIT_AFF_REGISTRY IMPLEMENTATION.
METHOD constructor.
@ -46,17 +46,32 @@ CLASS zcl_abapgit_aff_registry IMPLEMENTATION.
METHOD initialize_registry_table.
register( 'APLO' ).
register( 'BGQC' ).
register( 'CDBO' ).
register( 'CHKC' ).
register( 'CHKO' ).
register( 'CHKV' ).
register( 'COTA' ).
register( 'DRTY' ).
register( 'DTEB' ).
register( 'DSFI' ).
register( 'DRAS' ).
register( 'DSFD' ).
register( 'EVTB' ).
register( 'EEEC' ).
register( 'GSMP' ).
register( iv_obj_type = 'INTF'
iv_experimental = abap_true ).
register( 'SAJT' ).
register( 'SAJC' ).
register( 'SMBC' ).
register( 'SWCR' ).
register( 'NONT' ).
register( 'RONT' ).
register( 'UIAD' ).
register( 'UIPG' ).
register( 'UIST' ).
ENDMETHOD.

View File

@ -18,7 +18,7 @@ CLASS zcl_abapgit_json_handler DEFINITION
mappings TYPE ty_json_abap_mappings,
END OF ty_enum_mapping .
TYPES:
ty_enum_mappings TYPE TABLE OF ty_enum_mapping WITH DEFAULT KEY .
ty_enum_mappings TYPE STANDARD TABLE OF ty_enum_mapping WITH DEFAULT KEY .
TYPES:
BEGIN OF ty_path_value_pair,
path TYPE string,
@ -51,7 +51,7 @@ CLASS zcl_abapgit_json_handler DEFINITION
"! @parameter ev_data | data of the xstring
METHODS deserialize
IMPORTING
!iv_content TYPE xstring
!iv_content TYPE string
!iv_defaults TYPE ty_skip_paths OPTIONAL
!iv_enum_mappings TYPE ty_enum_mappings OPTIONAL
EXPORTING
@ -99,14 +99,11 @@ CLASS zcl_abapgit_json_handler IMPLEMENTATION.
METHOD deserialize.
DATA lv_json TYPE string.
DATA lo_ajson TYPE REF TO zif_abapgit_ajson.
CLEAR ev_data.
lv_json = zcl_abapgit_convert=>xstring_to_string_utf8( iv_content ).
lo_ajson = zcl_abapgit_ajson=>parse( lv_json
lo_ajson = zcl_abapgit_ajson=>parse( iv_content
)->map( zcl_abapgit_ajson_mapping=>create_to_snake_case( ) ).
map2abap_original_language( CHANGING co_ajson = lo_ajson ).
@ -161,17 +158,13 @@ CLASS zcl_abapgit_json_handler IMPLEMENTATION.
METHOD map2abap_original_language.
DATA:
lv_iso_language TYPE laiso,
lv_bcp47_language TYPE string,
lv_original_language TYPE sy-langu.
lv_iso_language = co_ajson->get_string( '/header/original_language' ).
lv_bcp47_language = co_ajson->get_string( '/header/original_language' ).
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
EXPORTING
input = lv_iso_language
IMPORTING
output = lv_original_language.
lv_original_language = zcl_abapgit_convert=>language_bcp47_to_sap1( lv_bcp47_language ).
co_ajson->set_string( iv_path = '/header/original_language'
iv_val = lv_original_language ).
@ -219,17 +212,16 @@ CLASS zcl_abapgit_json_handler IMPLEMENTATION.
METHOD map2json_original_language.
DATA:
lv_iso_language TYPE laiso,
lv_bcp47_language TYPE string,
lv_original_language TYPE sy-langu.
lv_original_language = co_ajson->get_string( '/header/originalLanguage' ).
lv_iso_language = zcl_abapgit_convert=>conversion_exit_isola_output( lv_original_language ).
lv_bcp47_language = zcl_abapgit_convert=>language_sap1_to_bcp47( lv_original_language ).
TRANSLATE lv_iso_language TO LOWER CASE.
co_ajson->set_string( iv_path = '/header/originalLanguage'
iv_val = lv_iso_language ).
iv_val = lv_bcp47_language ).
ENDMETHOD.

View File

@ -0,0 +1,52 @@
CLASS zcl_abapgit_json_path DEFINITION PUBLIC CREATE PUBLIC.
PUBLIC SECTION.
METHODS: serialize
IMPORTING iv_json TYPE string
RETURNING VALUE(rt_result) TYPE string_table
RAISING zcx_abapgit_exception.
METHODS: deserialize
IMPORTING it_json_path TYPE string_table
RETURNING VALUE(rv_result) TYPE string
RAISING zcx_abapgit_exception.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_abapgit_json_path IMPLEMENTATION.
METHOD deserialize.
rv_result = lcl_json_path=>deserialize( it_json_path ).
ENDMETHOD.
METHOD serialize.
DATA: lo_json_path TYPE REF TO lcl_json_path,
lv_json_xstring TYPE xstring,
lt_root_path TYPE string_table,
lo_reader TYPE REF TO if_sxml_reader,
lx_parse_error TYPE REF TO cx_sxml_parse_error.
lv_json_xstring = zcl_abapgit_convert=>string_to_xstring_utf8( iv_json ).
lo_reader = cl_sxml_string_reader=>create( input = lv_json_xstring ).
TRY.
IF lo_reader->read_next_node( ) IS INITIAL.
RETURN.
ENDIF.
CATCH cx_sxml_parse_error INTO lx_parse_error.
zcx_abapgit_exception=>raise_with_text( lx_parse_error ).
ENDTRY.
APPEND `$` TO lt_root_path.
CREATE OBJECT lo_json_path.
lo_json_path->serialize_rec( EXPORTING io_reader = lo_reader
it_path = lt_root_path
CHANGING ct_json_paths = rt_result ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,404 @@
*"* use this source file for the definition and implementation of
*"* local helper classes, interface definitions and type
*"* declarations
CLASS lcl_json_path DEFINITION CREATE PUBLIC.
PUBLIC SECTION.
METHODS:
serialize_rec
IMPORTING io_reader TYPE REF TO if_sxml_reader
it_path TYPE string_table
CHANGING ct_json_paths TYPE string_table.
CLASS-METHODS: deserialize
IMPORTING it_json_path TYPE string_table
RETURNING VALUE(rv_result) TYPE string
RAISING zcx_abapgit_exception.
PROTECTED SECTION.
PRIVATE SECTION.
METHODS:
is_array
IMPORTING io_reader TYPE REF TO if_sxml_reader
RETURNING VALUE(rv_result) TYPE abap_bool.
METHODS:
is_string_open
IMPORTING io_reader TYPE REF TO if_sxml_reader
RETURNING VALUE(rv_result) TYPE abap_bool.
METHODS:
is_object
IMPORTING io_reader TYPE REF TO if_sxml_reader
RETURNING VALUE(rv_result) TYPE abap_bool.
METHODS:
serialize_rec_array
IMPORTING io_reader TYPE REF TO if_sxml_reader
it_path TYPE string_table
CHANGING ct_json_paths TYPE string_table.
METHODS:
get_json_path
IMPORTING it_path TYPE string_table
RETURNING VALUE(rv_result) TYPE string.
CLASS-METHODS get_path_elements
IMPORTING iv_path TYPE string
RETURNING VALUE(rt_result) TYPE string_table
RAISING zcx_abapgit_exception.
CLASS-METHODS build_json
IMPORTING it_path_elements TYPE string_table
iv_value TYPE string
CHANGING cv_json_string TYPE string.
CLASS-METHODS path_contains_array
IMPORTING iv_path TYPE string
RETURNING VALUE(rv_result) TYPE abap_bool.
CLASS-METHODS: to_json
IMPORTING iv_json_path TYPE string
RETURNING VALUE(ro_result) TYPE REF TO zcl_abapgit_ajson
RAISING zcx_abapgit_ajson_error
zcx_abapgit_exception.
CLASS-METHODS: is_primitiv
IMPORTING iv_string TYPE string
RETURNING VALUE(rv_result) TYPE abap_bool.
CLASS-METHODS: is_comment_or_empty_line
IMPORTING iv_line TYPE string
RETURNING VALUE(rv_result) TYPE abap_bool.
ENDCLASS.
CLASS lcl_json_path IMPLEMENTATION.
METHOD to_json.
DATA: lv_path TYPE string,
lv_value TYPE string,
lt_path_elements TYPE string_table,
lv_json TYPE string.
FIND REGEX `(.*)=(.*$)` IN iv_json_path SUBMATCHES lv_path lv_value.
IF path_contains_array( lv_path ) = abap_true.
lt_path_elements = get_path_elements( lv_path ).
build_json( EXPORTING it_path_elements = lt_path_elements
iv_value = lv_value
CHANGING cv_json_string = lv_json ).
ro_result = zcl_abapgit_ajson=>parse( lv_json ).
ELSE.
REPLACE FIRST OCCURRENCE OF '$.' IN lv_path WITH ''.
REPLACE '.' IN lv_path WITH '/'.
ro_result = zcl_abapgit_ajson=>create_empty( iv_keep_item_order = abap_true ).
ro_result->set( iv_path = lv_path
iv_val = lv_value ).
ENDIF.
ENDMETHOD.
METHOD path_contains_array.
DATA lv_array_pattern TYPE string VALUE `.*\[.*\].*`.
rv_result = boolc( matches( val = iv_path
regex = lv_array_pattern ) ).
ENDMETHOD.
METHOD build_json.
DATA: lt_new_path_element TYPE string_table,
lv_sub_match TYPE string,
lv_key_name TYPE string,
lv_key_value TYPE string,
lv_name TYPE string,
lv_first_elem TYPE string.
lt_new_path_element = it_path_elements.
IF lines( lt_new_path_element ) = 0.
RETURN.
ENDIF.
READ TABLE lt_new_path_element INTO lv_first_elem INDEX 1.
IF lv_first_elem = `$`. " is root level
DELETE lt_new_path_element INDEX 1.
build_json( EXPORTING it_path_elements = lt_new_path_element
iv_value = iv_value
CHANGING cv_json_string = cv_json_string ).
ELSEIF is_primitiv( lv_first_elem ) = abap_true.
cv_json_string = cv_json_string && | \{"{ lv_first_elem+1 }": |.
DELETE lt_new_path_element INDEX 1.
build_json( EXPORTING it_path_elements = lt_new_path_element
iv_value = iv_value
CHANGING cv_json_string = cv_json_string ).
cv_json_string = cv_json_string && ` }`.
ELSE. " is array
FIND REGEX `\[(.*)\]` IN lv_first_elem SUBMATCHES lv_sub_match.
FIND REGEX `(\w+)(?==='([^']*)')` IN lv_sub_match SUBMATCHES lv_key_name lv_key_value.
READ TABLE lt_new_path_element INTO lv_name INDEX 2.
DELETE lt_new_path_element INDEX 1.
DELETE lt_new_path_element INDEX 1.
IF lines( lt_new_path_element ) = 0.
cv_json_string = cv_json_string &&
|[ \{ "{ lv_key_name }": "{ lv_key_value }", "{ lv_name+1 }": "{ iv_value }"\} ]|.
ELSE.
cv_json_string = cv_json_string && |[ \{ "{ lv_key_name }": "{ lv_key_value }", "{ lv_name+1 }":|.
build_json( EXPORTING it_path_elements = lt_new_path_element
iv_value = iv_value
CHANGING cv_json_string = cv_json_string ).
cv_json_string = cv_json_string && `} ] `.
ENDIF.
ENDIF.
ENDMETHOD.
METHOD is_primitiv.
FIND REGEX `^.\w+` IN iv_string. " string start with .
rv_result = boolc( sy-subrc = 0 ).
ENDMETHOD.
METHOD get_path_elements.
DATA: lv_pcre_pattern TYPE string,
lt_match_result TYPE match_result_tab,
lv_match TYPE match_result,
lv_hit TYPE string,
lx_find TYPE REF TO cx_root.
lv_pcre_pattern = `(^\$)|(\.\w+)|(\[[^\]]*\])`.
TRY.
FIND ALL OCCURRENCES OF REGEX lv_pcre_pattern IN iv_path RESULTS lt_match_result.
CATCH cx_sy_find_infinite_loop cx_sy_range_out_of_bounds cx_sy_invalid_regex cx_sy_regex_too_complex INTO lx_find.
zcx_abapgit_exception=>raise_with_text( lx_find ).
ENDTRY.
LOOP AT lt_match_result INTO lv_match.
lv_hit = substring( val = iv_path
off = lv_match-offset
len = lv_match-length ).
APPEND lv_hit TO rt_result.
ENDLOOP.
ENDMETHOD.
METHOD is_array.
rv_result = boolc( io_reader->name = 'array' ).
ENDMETHOD.
METHOD is_string_open.
rv_result = boolc( io_reader->name = 'str' AND io_reader->node_type = if_sxml_node=>co_nt_element_open ).
ENDMETHOD.
METHOD is_object.
rv_result = boolc( io_reader->name = 'object' ).
ENDMETHOD.
METHOD serialize_rec.
DATA: lt_new_path TYPE string_table,
lv_key TYPE string.
lt_new_path = it_path.
IF io_reader->read_next_node( ) IS INITIAL.
RETURN.
ENDIF.
IF is_string_open( io_reader ) = abap_true.
APPEND io_reader->value TO lt_new_path.
lv_key = get_json_path( lt_new_path ).
io_reader->read_next_node( ).
lv_key = |{ lv_key }={ io_reader->value }|.
APPEND lv_key TO ct_json_paths.
io_reader->read_next_node( ).
DELETE lt_new_path INDEX lines( lt_new_path ).
serialize_rec( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ELSEIF is_object( io_reader ) = abap_true AND io_reader->node_type = if_sxml_node=>co_nt_element_open.
APPEND io_reader->value TO lt_new_path.
serialize_rec( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ELSEIF is_array( io_reader ) = abap_true AND io_reader->node_type = if_sxml_node=>co_nt_element_open.
APPEND io_reader->value TO lt_new_path.
serialize_rec_array( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ELSEIF ( is_object( io_reader ) = abap_true OR is_array( io_reader ) = abap_true )
AND io_reader->node_type = if_sxml_node=>co_nt_element_close.
DELETE lt_new_path INDEX lines( lt_new_path ).
serialize_rec( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ENDIF.
ENDMETHOD.
METHOD serialize_rec_array.
DATA: lt_new_path TYPE string_table,
lv_json_path TYPE string,
lv_array_key TYPE string.
lt_new_path = it_path.
IF io_reader->read_next_node( ) IS INITIAL.
RETURN.
ENDIF.
IF is_string_open( io_reader ) = abap_true.
APPEND io_reader->value TO lt_new_path.
lv_json_path = get_json_path( lt_new_path ).
io_reader->read_next_node( ).
lv_json_path = |{ lv_json_path }={ io_reader->value }|.
APPEND lv_json_path TO ct_json_paths.
io_reader->read_next_node( ).
serialize_rec( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ELSEIF is_object( io_reader ) = abap_true AND io_reader->node_type = if_sxml_node=>co_nt_element_open.
io_reader->read_next_node( ).
lv_array_key = io_reader->value.
io_reader->read_next_node( ).
lv_array_key = |[?(@.{ lv_array_key }=='{ io_reader->value }')]|.
APPEND lv_array_key TO lt_new_path.
io_reader->read_next_node( ).
io_reader->read_next_node( ).
APPEND io_reader->value TO lt_new_path.
lv_json_path = get_json_path( lt_new_path ).
io_reader->read_next_node( ).
lv_json_path = |{ lv_json_path }={ io_reader->value }|.
APPEND lv_json_path TO ct_json_paths.
io_reader->read_next_node( ).
DELETE lt_new_path INDEX lines( lt_new_path ).
serialize_rec_array( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ELSEIF is_array( io_reader ) = abap_true AND io_reader->node_type = if_sxml_node=>co_nt_element_open.
APPEND io_reader->value TO lt_new_path.
serialize_rec_array( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ELSEIF ( is_object( io_reader ) = abap_true OR is_array( io_reader ) = abap_true )
AND io_reader->node_type = if_sxml_node=>co_nt_element_close.
DELETE lt_new_path INDEX lines( lt_new_path ).
serialize_rec_array( EXPORTING io_reader = io_reader
it_path = lt_new_path
CHANGING ct_json_paths = ct_json_paths ).
ENDIF.
ENDMETHOD.
METHOD get_json_path.
rv_result = concat_lines_of( table = it_path
sep = `.` ).
REPLACE ALL OCCURRENCES OF `.[` IN rv_result WITH `[`.
ENDMETHOD.
METHOD deserialize.
DATA: lo_merged TYPE REF TO zif_abapgit_ajson,
lv_json_path TYPE string,
lo_deserialization_result TYPE REF TO zif_abapgit_ajson,
lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
TRY.
lo_merged = zcl_abapgit_ajson=>parse( `` ).
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
zcx_abapgit_exception=>raise_with_text( lx_ajson ).
ENDTRY.
LOOP AT it_json_path INTO lv_json_path.
IF is_comment_or_empty_line( lv_json_path ) = abap_true.
CONTINUE.
ENDIF.
TRY.
lo_deserialization_result = to_json( lv_json_path ).
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
zcx_abapgit_exception=>raise_with_text( lx_ajson ).
ENDTRY.
TRY.
lo_merged = zcl_abapgit_ajson_utilities=>new( )->merge( io_json_a = lo_merged
io_json_b = lo_deserialization_result ).
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
zcx_abapgit_exception=>raise_with_text( lx_ajson ).
ENDTRY.
ENDLOOP.
TRY.
rv_result = lo_merged->stringify( 2 ).
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
zcx_abapgit_exception=>raise_with_text( lx_ajson ).
ENDTRY.
ENDMETHOD.
METHOD is_comment_or_empty_line.
IF iv_line IS INITIAL.
rv_result = abap_true.
RETURN.
ENDIF.
FIND REGEX `^!` IN iv_line.
IF sy-subrc = 0.
rv_result = abap_true.
RETURN.
ENDIF.
FIND REGEX `^#` IN iv_line.
IF sy-subrc = 0.
rv_result = abap_true.
RETURN.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,216 @@
CLASS ltcl_json_path DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA: mt_act TYPE string_table,
mt_exp TYPE string_table,
ms_data TYPE zif_abapgit_aff_intf_v1=>ty_main.
METHODS:
deserialize_simple FOR TESTING RAISING cx_static_check,
deserialize_nested_arrays FOR TESTING RAISING cx_static_check,
flat_structure FOR TESTING RAISING cx_static_check,
array FOR TESTING RAISING cx_static_check,
array_nested FOR TESTING RAISING cx_static_check,
deserialize_with_comments FOR TESTING RAISING cx_static_check.
METHODS:
serialize
IMPORTING is_data TYPE zif_abapgit_aff_intf_v1=>ty_main
RETURNING VALUE(rt_result) TYPE string_table
RAISING zcx_abapgit_ajson_error
zcx_abapgit_exception.
ENDCLASS.
CLASS ltcl_json_path IMPLEMENTATION.
METHOD serialize.
DATA:
lo_ajson TYPE REF TO zif_abapgit_ajson,
lo_cut TYPE REF TO zcl_abapgit_json_path.
lo_ajson = zcl_abapgit_ajson=>new( iv_keep_item_order = abap_true
)->set( iv_path = '/'
iv_val = is_data
)->map( zcl_abapgit_ajson_mapping=>create_to_camel_case( )
)->filter( zcl_abapgit_ajson_filter_lib=>create_empty_filter( ) ).
lo_ajson->delete( '/category/' ).
lo_ajson->delete( '/proxy/' ).
CREATE OBJECT lo_cut.
rt_result = lo_cut->serialize( lo_ajson->stringify( ) ).
ENDMETHOD.
METHOD flat_structure.
DATA lv_header_descr TYPE string.
lv_header_descr = `$.header.description=Text`.
ms_data-header-description = 'Text'.
mt_act = serialize( ms_data ).
APPEND lv_header_descr TO mt_exp.
cl_abap_unit_assert=>assert_equals( exp = mt_exp
act = mt_act ).
ENDMETHOD.
METHOD array.
DATA lv_header_descr TYPE string.
DATA lv_descr_meth_1 TYPE string.
DATA lv_descr_meth_2 TYPE string.
DATA ls_meth_desc TYPE zif_abapgit_aff_oo_types_v1=>ty_method.
lv_header_descr = `$.header.description=Text`.
lv_descr_meth_1 = `$.descriptions.methods[?(@.name=='METH1')].description=Sonne`.
lv_descr_meth_2 = `$.descriptions.methods[?(@.name=='METH2')].description=Mond`.
APPEND lv_header_descr TO mt_exp.
APPEND lv_descr_meth_1 TO mt_exp.
APPEND lv_descr_meth_2 TO mt_exp.
ms_data-header-description = 'Text'.
ls_meth_desc-name = `METH1`.
ls_meth_desc-description = `Sonne`.
APPEND ls_meth_desc TO ms_data-descriptions-methods.
CLEAR ls_meth_desc.
ls_meth_desc-name = `METH2`.
ls_meth_desc-description = `Mond`.
APPEND ls_meth_desc TO ms_data-descriptions-methods.
mt_act = serialize( ms_data ).
cl_abap_unit_assert=>assert_equals( exp = mt_exp
act = mt_act ).
ENDMETHOD.
METHOD array_nested.
DATA lv_header_descr TYPE string.
DATA lv_descr_meth_1 TYPE string.
DATA lv_descr_meth_1_param_1 TYPE string.
DATA lv_descr_meth_1_param_2 TYPE string.
DATA lv_descr_meth_2 TYPE string.
DATA ls_meth_desc TYPE zif_abapgit_aff_oo_types_v1=>ty_method.
DATA ls_meth_param TYPE zif_abapgit_aff_oo_types_v1=>ty_component_description.
lv_header_descr = `$.header.description=Text`.
lv_descr_meth_1 = `$.descriptions.methods[?(@.name=='METH1')].description=Sonne`.
lv_descr_meth_1_param_1 =
`$.descriptions.methods[?(@.name=='METH1')].parameters[?(@.name=='param1')].description=Parameter A`.
lv_descr_meth_1_param_2 =
`$.descriptions.methods[?(@.name=='METH1')].parameters[?(@.name=='param2')].description=Parameter B`.
lv_descr_meth_2 = `$.descriptions.methods[?(@.name=='METH2')].description=Mond`.
APPEND lv_header_descr TO mt_exp.
APPEND lv_descr_meth_1 TO mt_exp.
APPEND lv_descr_meth_1_param_1 TO mt_exp.
APPEND lv_descr_meth_1_param_2 TO mt_exp.
APPEND lv_descr_meth_2 TO mt_exp.
ls_meth_param-name = 'param1'.
ls_meth_param-description = 'Parameter A'.
APPEND ls_meth_param TO ls_meth_desc-parameters.
ls_meth_param-name = 'param2'.
ls_meth_param-description = 'Parameter B'.
APPEND ls_meth_param TO ls_meth_desc-parameters.
ls_meth_desc-name = `METH1`.
ls_meth_desc-description = `Sonne`.
APPEND ls_meth_desc TO ms_data-descriptions-methods.
CLEAR ls_meth_desc.
ls_meth_desc-name = `METH2`.
ls_meth_desc-description = `Mond`.
APPEND ls_meth_desc TO ms_data-descriptions-methods.
ms_data-header-description = 'Text'.
mt_act = serialize( ms_data ).
cl_abap_unit_assert=>assert_equals( exp = mt_exp
act = mt_act ).
ENDMETHOD.
METHOD deserialize_nested_arrays.
DATA: lt_file TYPE string_table,
lo_cut TYPE REF TO zcl_abapgit_json_path,
lv_act TYPE string,
lv_exp TYPE string,
lt_exp TYPE string_table,
lv_is_equal TYPE abap_bool.
APPEND `$.header.description=Text` TO lt_file.
APPEND `$.descriptions.methods[?(@.name=='METH1')].description=Sonne` TO lt_file.
APPEND `$.descriptions.methods[?(@.name=='METH1')].parameters[?(@.name=='param2')].description=ABC` TO lt_file.
CREATE OBJECT lo_cut.
lv_act = lo_cut->deserialize( lt_file ).
APPEND `{ "header": { "description": "Text" } ,` TO lt_exp.
APPEND `"descriptions": {` TO lt_exp.
APPEND `"methods": [ ` TO lt_exp.
APPEND ` { "name": "METH1",` TO lt_exp.
APPEND `"description": "Sonne",` TO lt_exp.
APPEND `"parameters": [ { "name": "param2", "description": "ABC" } ]` TO lt_exp.
APPEND `}]}}` TO lt_exp.
lv_exp = concat_lines_of( table = lt_exp
sep = cl_abap_char_utilities=>newline ).
lv_is_equal = zcl_abapgit_ajson_utilities=>new( )->is_equal( iv_json_a = lv_act
iv_json_b = lv_exp ).
cl_abap_unit_assert=>assert_equals( act = lv_is_equal
exp = abap_true ).
ENDMETHOD.
METHOD deserialize_simple.
DATA: lt_file TYPE string_table,
lo_cut TYPE REF TO zcl_abapgit_json_path,
lv_act TYPE string,
lv_is_equal TYPE abap_bool.
APPEND `$.header.description=Text` TO lt_file.
CREATE OBJECT lo_cut.
lv_act = lo_cut->deserialize( lt_file ).
lv_is_equal = zcl_abapgit_ajson_utilities=>new( )->is_equal(
iv_json_a = lv_act
iv_json_b = ` { "header": { "description": "Text" } } ` ).
cl_abap_unit_assert=>assert_equals( act = lv_is_equal
exp = abap_true ).
ENDMETHOD.
METHOD deserialize_with_comments.
DATA: lt_file TYPE string_table,
lo_cut TYPE REF TO zcl_abapgit_json_path,
lv_act TYPE string.
APPEND `# comment = abc` TO lt_file.
APPEND `!this is a comment [abc]` TO lt_file.
APPEND `` TO lt_file.
CREATE OBJECT lo_cut.
lv_act = lo_cut->deserialize( lt_file ).
cl_abap_unit_assert=>assert_initial( lv_act ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,17 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_JSON_PATH</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - de-/serializes JSON string to JSON paths</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,24 @@
CLASS zcl_abapgit_object_aplo DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_object_common_aff
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
METHODS zif_abapgit_object~changed_by
REDEFINITION .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_ABAPGIT_OBJECT_APLO IMPLEMENTATION.
METHOD zif_abapgit_object~changed_by.
CLEAR rv_user.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_OBJECT_APLO</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - APLO - Application Log Object</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,56 @@
CLASS zcl_abapgit_object_bgqc DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_object_common_aff FINAL
CREATE PUBLIC.
PUBLIC SECTION.
METHODS zif_abapgit_object~changed_by REDEFINITION.
PRIVATE SECTION.
CONSTANTS c_bgqc_name TYPE string VALUE 'BGQCNAME'.
CONSTANTS c_bgqc_wbi_p TYPE string VALUE 'CL_BGQC_WBI_P'.
CONSTANTS c_select_changed_by TYPE string VALUE 'IF_BGQC_WBI_P~SELECT_CHANGED_BY'.
ENDCLASS.
CLASS zcl_abapgit_object_bgqc IMPLEMENTATION.
METHOD zif_abapgit_object~changed_by.
DATA lo_bgqc_wbi_p TYPE REF TO object.
DATA lv_ref_bgqc_name TYPE REF TO data.
DATA lv_changed_by TYPE syuname.
DATA lv_subrc TYPE sy-subrc.
DATA lx_root TYPE REF TO cx_root.
FIELD-SYMBOLS: <lv_ref_bgqc_name> TYPE any.
TRY.
CREATE DATA lv_ref_bgqc_name TYPE (c_bgqc_name).
ASSIGN lv_ref_bgqc_name->* TO <lv_ref_bgqc_name>.
ASSERT sy-subrc = 0.
me->ms_item-obj_name = <lv_ref_bgqc_name>.
CREATE OBJECT lo_bgqc_wbi_p TYPE (c_bgqc_wbi_p).
CALL METHOD lo_bgqc_wbi_p->(c_select_changed_by)
EXPORTING
iv_bgqc_name = <lv_ref_bgqc_name>
IMPORTING
ev_changed_by = lv_changed_by
ev_subrc = lv_subrc.
IF lv_subrc <> 0.
zcx_abapgit_exception=>raise_t100( ).
ENDIF.
rv_user = lv_changed_by.
CATCH cx_root INTO lx_root.
zcx_abapgit_exception=>raise_with_text( lx_root ).
ENDTRY.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_OBJECT_BGQC</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - BGQC - Background Processing Context</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -0,0 +1,57 @@
CLASS zcl_abapgit_object_cdbo DEFINITION
PUBLIC
INHERITING FROM zcl_abapgit_object_common_aff
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
METHODS constructor
IMPORTING
!is_item TYPE zif_abapgit_definitions=>ty_item
!iv_language TYPE spras
!io_files TYPE REF TO zcl_abapgit_objects_files OPTIONAL
!io_i18n_params TYPE REF TO zcl_abapgit_i18n_params OPTIONAL
RAISING
zcx_abapgit_exception.
METHODS zif_abapgit_object~changed_by REDEFINITION.
PROTECTED SECTION.
PRIVATE SECTION.
CONSTANTS c_table_name TYPE tabname VALUE 'CDB_OBJH' ##NO_TEXT.
ENDCLASS.
CLASS zcl_abapgit_object_cdbo IMPLEMENTATION.
METHOD constructor.
super->constructor( is_item = is_item
iv_language = iv_language
io_files = io_files
io_i18n_params = io_i18n_params ).
ENDMETHOD.
METHOD zif_abapgit_object~changed_by.
DATA: lv_user TYPE string,
lx_error TYPE REF TO cx_root.
TRY.
SELECT SINGLE changed_by FROM (c_table_name) INTO lv_user WHERE obj_name = ms_item-obj_name.
IF lv_user IS INITIAL.
SELECT SINGLE created_by FROM (c_table_name) INTO lv_user WHERE obj_name = ms_item-obj_name.
ENDIF.
rv_user = lv_user.
CATCH cx_root INTO lx_error.
zcx_abapgit_exception=>raise_with_text( lx_error ).
ENDTRY.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_OBJECT_CDBO</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - CDBO - Customer Data Browser Object</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

Some files were not shown because too many files have changed in this diff Show More