Compare commits

..

No commits in common. "main" and "v1.127.0" have entirely different histories.

526 changed files with 6147 additions and 20212 deletions

View File

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

View File

@ -12,10 +12,6 @@ trim_trailing_whitespace = true
indent_style = space indent_style = space
indent_size = 1 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 # match the format used by abapGit
[*.{abap,js,json,html,css}] [*.{abap,js,json,html,css}]
charset = utf-8 charset = utf-8

14
.eslintrc.yaml Normal file
View File

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

View File

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

View File

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

View File

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

1
.gitignore vendored
View File

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

View File

@ -3,7 +3,8 @@
[![License](https://img.shields.io/github/license/abapGit/abapGit?label=License&color=green)](LICENSE) [![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) [![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) [![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.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) [![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)
<!-- <!--
<picture> <picture>
@ -68,5 +69,4 @@ 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)) - 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)) - [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))

View File

@ -1,3 +0,0 @@
# 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,52 +1,20 @@
{ {
"global": {
"files": "/{test/src,src}/**/*.*",
"skipGeneratedFunctionGroups": true,
"skipGeneratedGatewayClasses": true,
"skipGeneratedPersistentClasses": true
},
"dependencies": [ "dependencies": [
{ {
"files": "/**/*.*", "files": "/**/*.*",
"folder": "/deps" "folder": "/deps"
}, },
{ {
"url": "https://github.com/abaplint/deps",
"files": "/src/**/*.*", "files": "/src/**/*.*",
"folder": "/lint_deps" "folder": "/lint_deps",
"url": "https://github.com/abaplint/deps"
} }
], ],
"syntax": { "global": {
"errorNamespace": "^(Z|Y|LT?CL_|TY_|LIF_|C_|.*ABAPGIT)", "files": "/{test/src,src}/**/*.*",
"globalConstants": [ "skipGeneratedFunctionGroups": true,
"abap_func_exporting", "skipGeneratedGatewayClasses": true,
"abap_func_tables", "skipGeneratedPersistentClasses": true
"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": { "rules": {
"7bit_ascii": { "7bit_ascii": {
@ -57,15 +25,9 @@
] ]
}, },
"abapdoc": false, "abapdoc": false,
"align_type_expressions": true,
"align_pseudo_comments": false,
"invalid_table_index": true,
"tables_declared_locally": true,
"unused_macros": true,
"align_parameters": false, "align_parameters": false,
"allowed_object_naming": true, "allowed_object_naming": true,
"allowed_object_types": { "allowed_object_types": {
"exclude": ["test/src/"],
"allowed": [ "allowed": [
"CLAS", "CLAS",
"DEVC", "DEVC",
@ -158,11 +120,8 @@
}, },
"double_space": true, "double_space": true,
"downport": false, "downport": false,
"add_test_attributes": true,
"implicit_start_of_selection": true,
"empty_event": true,
"dynpro_checks": false, "dynpro_checks": false,
"easy_to_find_messages": false, "easy_to_find_messages": true,
"empty_line_in_statement": { "empty_line_in_statement": {
"allowChained": true "allowChained": true
}, },
@ -171,7 +130,6 @@
"at": true, "at": true,
"case": true, "case": true,
"do": true, "do": true,
"loopAllowIfSubrc": false,
"if": false, "if": false,
"loop": true, "loop": true,
"select": true, "select": true,
@ -225,8 +183,8 @@
"^if_adt_lock_handle$", "^if_adt_lock_handle$",
"^if_aff_", "^if_aff_",
"^if_satc_ci_variant_access$", "^if_satc_ci_variant_access$",
"^if_saunit_internal_result_type$",
"^if_saunit_internal_result$", "^if_saunit_internal_result$",
"^if_saunit_internal_result_type$",
"^if_srvd_types$", "^if_srvd_types$",
"^if_wb_adt_plugin_resource_co$", "^if_wb_adt_plugin_resource_co$",
"^if_wb_object_data_selection_co$", "^if_wb_object_data_selection_co$",
@ -234,7 +192,6 @@
"^if_xco_", "^if_xco_",
"^int4$", "^int4$",
"^numc2$", "^numc2$",
"^pgmid$",
"^sabp_t_tadir_keys$", "^sabp_t_tadir_keys$",
"^sap_bool$", "^sap_bool$",
"^srcsystem$", "^srcsystem$",
@ -244,7 +201,6 @@
"^sychar70$", "^sychar70$",
"^sydatum$", "^sydatum$",
"^sylangu$", "^sylangu$",
"^syst_langu$",
"^syst_title$", "^syst_title$",
"^syuzeit$", "^syuzeit$",
"^xubname$" "^xubname$"
@ -293,7 +249,7 @@
"/json/", "/json/",
"zcl_abapgit_object_pdts.clas.testclasses.abap" "zcl_abapgit_object_pdts.clas.testclasses.abap"
], ],
"length": 125 "length": 120
}, },
"line_only_punc": { "line_only_punc": {
"ignoreExceptions": true "ignoreExceptions": true
@ -319,9 +275,6 @@
"message_exists": true, "message_exists": true,
"method_implemented_twice": true, "method_implemented_twice": true,
"method_length": { "method_length": {
"exclude": [
"zcl_abapgit_convert.clas.locals_imp.abap"
],
"checkForms": true, "checkForms": true,
"errorWhenEmpty": false, "errorWhenEmpty": false,
"ignoreTestClasses": false, "ignoreTestClasses": false,
@ -505,5 +458,37 @@
"when_others_last": true, "when_others_last": true,
"whitespace_end": true, "whitespace_end": true,
"xml_consistency": 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,138 +8,6 @@ Legend
+ : added + : added
- : removed - : 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 2024-01-24 v1.127.0
------------------- -------------------
@ -255,10 +123,10 @@ Legend
+ APIS: API Release State (#6403) + APIS: API Release State (#6403)
+ IWOM/IWPR/TRAN: Implement changed_by (#6411) + IWOM/IWPR/TRAN: Implement changed_by (#6411)
+ Add online/offline filter option for repo list (#6449) + Add online/offline filter option for repo list (#6449)
* Don't dump for unknown frontend (#6302) * Dont dump for unknown frontend (#6302)
* IDOC, TABL: Set released and closed status (#6306) * IDOC, TABL: Set released and closed status (#6306)
* Fix is_dirty check for Repo Settings (#6309) * Fix is_dirty check for Repo Settings (#6309)
* Unit test page: don't show SAUNIT_NO_TEST_CLASS err (#6310) * Unit test page: dont show SAUNIT_NO_TEST_CLASS err (#6310)
* Fixed links to new documentation (#6319) * Fixed links to new documentation (#6319)
* Fix "Data" page: On back go back (#6322) * Fix "Data" page: On back go back (#6322)
* OO serializer: skip includes not found (#6324) * OO serializer: skip includes not found (#6324)
@ -1703,7 +1571,7 @@ Legend
------------------ ------------------
* minor fixes for tags * minor fixes for tags
* downport * downport
* fix serialization of SXCI in background mode * fix serilization of SXCI in background mode
2018-01-03 v1.51.0 2018-01-03 v1.51.0
------------------ ------------------

61
deps/cdnames.tabl.xml vendored
View File

@ -1,61 +0,0 @@
<?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>

View File

@ -1,24 +0,0 @@
<?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>

View File

@ -1,25 +0,0 @@
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
View File

@ -1,105 +0,0 @@
<?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
View File

@ -1,116 +0,0 @@
<?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
View File

@ -1,158 +0,0 @@
<?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
View File

@ -1,54 +0,0 @@
<?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
View File

@ -1,24 +0,0 @@
<?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,8 +1,5 @@
INTERFACE if_package PUBLIC. INTERFACE if_package PUBLIC.
DATA wbo_korr_flag TYPE c LENGTH 1 READ-ONLY. 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 software_component TYPE string READ-ONLY.
DATA application_component TYPE string READ-ONLY. DATA application_component TYPE string READ-ONLY.
DATA transport_layer TYPE string READ-ONLY. DATA transport_layer TYPE string READ-ONLY.

43
deps/ko100.tabl.xml vendored
View File

@ -1,43 +0,0 @@
<?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>

View File

@ -1,48 +0,0 @@
<?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>

View File

@ -1,57 +0,0 @@
<?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
View File

@ -1,25 +0,0 @@
<?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>

View File

@ -1,54 +0,0 @@
<?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>

View File

@ -1,42 +0,0 @@
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", "test": "npm run eslint && npm run abaplint",
"merge": "abapmerge -f src/zabapgit.prog.abap -c zabapgit_standalone -o zabapgit.abap", "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 ..", "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 && cp -f src/ui/zabapgit_icon_font.w3mi.data.woff output/", "build": "rm -rf output && abap_transpile test/abap_transpile.json",
"unit": "npm run build && echo RUNNING && node output/index.mjs --skip-critical", "unit": "npm run build && echo RUNNING && node output/index.mjs",
"coverage": "npm run unit && c8 node output/index.mjs --skip-critical && c8 report --reporter=html", "coverage": "npm run unit && c8 node output/index.mjs && c8 report --reporter=html",
"integration": "npm run build && echo RUNNING && node output/index.mjs --only-critical", "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",
"abaplint": "abaplint --format codeframe", "abaplint": "abaplint --format codeframe",
"eslint": "eslint src" "eslint": "eslint src"
}, },
@ -23,14 +23,12 @@
] ]
}, },
"devDependencies": { "devDependencies": {
"@abaplint/cli": "^2.113.110", "@abaplint/cli": "^2.105.8",
"@abaplint/database-sqlite": "^2.10.24", "@abaplint/database-sqlite": "^2.7.119",
"@abaplint/runtime": "^2.10.44", "@abaplint/runtime": "^2.7.140",
"express": "^4.21.2", "@abaplint/transpiler-cli": "^2.7.140",
"@abaplint/transpiler-cli": "^2.10.44", "abapmerge": "^0.16.0",
"globals": "^16.0.0", "c8": "^9.0.0",
"abapmerge": "^0.16.6", "eslint": "^8.56.0"
"c8": "^10.1.3",
"eslint": "^9.25.1"
} }
} }

View File

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

View File

@ -89,11 +89,7 @@ CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
ls_my_dependency TYPE zif_abapgit_apack_definitions=>ty_dependency, ls_my_dependency TYPE zif_abapgit_apack_definitions=>ty_dependency,
ls_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor, ls_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor,
lv_descriptor_cust TYPE string, 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, FIELD-SYMBOLS: <lg_descriptor> TYPE any,
<lt_dependencies> TYPE ANY TABLE, <lt_dependencies> TYPE ANY TABLE,
@ -102,20 +98,9 @@ CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
lv_descriptor_cust = zif_abapgit_apack_definitions=>c_apack_interface_cust && '~DESCRIPTOR'. 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_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>. ASSIGN io_manifest_provider->(lv_descriptor_cust) TO <lg_descriptor>.
IF <lg_descriptor> IS NOT ASSIGNED. IF <lg_descriptor> IS NOT ASSIGNED.
ASSIGN io_manifest_provider->(lv_descriptor_sap) TO <lg_descriptor>. 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. ENDIF.
IF <lg_descriptor> IS ASSIGNED. IF <lg_descriptor> IS ASSIGNED.
" A little more complex than a normal MOVE-CORRSPONDING " A little more complex than a normal MOVE-CORRSPONDING

View File

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

View File

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

View File

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

View File

@ -28,37 +28,19 @@ CLASS zcl_abapgit_background_pull IMPLEMENTATION.
METHOD zif_abapgit_background~run. 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. FIELD-SYMBOLS: <ls_overwrite> LIKE LINE OF ls_checks-overwrite.
li_repo = ii_repo_online.
ls_checks = li_repo->deserialize_checks( ). ls_checks = io_repo->deserialize_checks( ).
LOOP AT ls_checks-overwrite ASSIGNING <ls_overwrite>. LOOP AT ls_checks-overwrite ASSIGNING <ls_overwrite>.
<ls_overwrite>-decision = zif_abapgit_definitions=>c_yes. <ls_overwrite>-decision = zif_abapgit_definitions=>c_yes.
ENDLOOP. ENDLOOP.
lo_settings = zcl_abapgit_persist_factory=>get_settings( )->read( ). io_repo->deserialize( is_checks = ls_checks
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 ). 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. ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

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

View File

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

View File

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

View File

@ -21,7 +21,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
"! @raising zcx_abapgit_exception | Object is not locked in a transport "! @raising zcx_abapgit_exception | Object is not locked in a transport
METHODS get_current_transport_for_obj METHODS get_current_transport_for_obj
IMPORTING IMPORTING
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR' !iv_program_id TYPE pgmid DEFAULT 'R3TR'
!iv_object_type TYPE trobjtype !iv_object_type TYPE trobjtype
!iv_object_name TYPE sobj_name !iv_object_name TYPE sobj_name
RETURNING RETURNING
@ -36,7 +36,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
"! @raising zcx_abapgit_exception | Object is not locked in a transport "! @raising zcx_abapgit_exception | Object is not locked in a transport
METHODS get_current_transport_from_db METHODS get_current_transport_from_db
IMPORTING IMPORTING
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR' !iv_program_id TYPE pgmid DEFAULT 'R3TR'
!iv_object_type TYPE trobjtype !iv_object_type TYPE trobjtype
!iv_object_name TYPE sobj_name !iv_object_name TYPE sobj_name
RETURNING RETURNING
@ -51,7 +51,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
"! @raising zcx_abapgit_exception | Object type is not lockable "! @raising zcx_abapgit_exception | Object type is not lockable
METHODS is_object_locked_in_transport METHODS is_object_locked_in_transport
IMPORTING IMPORTING
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR' !iv_program_id TYPE pgmid DEFAULT 'R3TR'
!iv_object_type TYPE trobjtype !iv_object_type TYPE trobjtype
!iv_object_name TYPE sobj_name !iv_object_name TYPE sobj_name
RETURNING RETURNING
@ -64,7 +64,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
"! @parameter rv_lockable | Lockable "! @parameter rv_lockable | Lockable
METHODS is_object_type_lockable METHODS is_object_type_lockable
IMPORTING IMPORTING
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR' !iv_program_id TYPE pgmid DEFAULT 'R3TR'
!iv_object_type TYPE trobjtype !iv_object_type TYPE trobjtype
RETURNING RETURNING
VALUE(rv_lockable) TYPE abap_bool . VALUE(rv_lockable) TYPE abap_bool .
@ -74,7 +74,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
"! @parameter rv_transportable | Transportable "! @parameter rv_transportable | Transportable
METHODS is_object_type_transportable METHODS is_object_type_transportable
IMPORTING IMPORTING
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR' !iv_program_id TYPE pgmid DEFAULT 'R3TR'
!iv_object_type TYPE trobjtype !iv_object_type TYPE trobjtype
RETURNING RETURNING
VALUE(rv_transportable) TYPE abap_bool . VALUE(rv_transportable) TYPE abap_bool .
@ -82,16 +82,13 @@ ENDCLASS.
CLASS zcl_abapgit_cts_api IMPLEMENTATION. CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
METHOD get_current_transport_for_obj. METHOD get_current_transport_for_obj.
DATA: lv_object_lockable TYPE abap_bool, DATA: lv_object_lockable TYPE abap_bool,
lv_locked TYPE abap_bool, lv_locked TYPE abap_bool,
lv_transport_request TYPE trkorr, 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_task TYPE trkorr,
lv_tr_object_name TYPE trobj_name. lv_tr_object_name TYPE trobj_name.
@ -107,8 +104,6 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
we_locked = lv_locked we_locked = lv_locked
we_lock_order = lv_transport_request we_lock_order = lv_transport_request
we_lock_task = lv_task we_lock_task = lv_task
TABLES
wt_tlock = lt_tlock
EXCEPTIONS EXCEPTIONS
empty_key = 1 empty_key = 1
no_systemname = 2 no_systemname = 2
@ -127,15 +122,7 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
zcx_abapgit_exception=>raise( |Object type { iv_program_id }-{ iv_object_type } not lockable| ). zcx_abapgit_exception=>raise( |Object type { iv_program_id }-{ iv_object_type } not lockable| ).
ENDIF. 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. rv_transport = lv_transport_request.
ELSE.
rv_transport = zif_abapgit_definitions=>c_multiple_transports.
ENDIF.
ENDMETHOD. ENDMETHOD.
@ -222,75 +209,7 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
IMPORTING IMPORTING
pe_result = lv_type_check_result. pe_result = lv_type_check_result.
rv_transportable = boolc( lv_type_check_result CA 'RTL' OR iv_object_type = 'TABU' ). rv_transportable = boolc( lv_type_check_result CA 'RTL' ).
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. ENDMETHOD.
@ -358,9 +277,6 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
DATA lt_table_keys TYPE STANDARD TABLE OF e071k. DATA lt_table_keys TYPE STANDARD TABLE OF e071k.
DATA lv_with_dialog TYPE abap_bool. 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( cl_table_utilities_brf=>create_transport_entries(
EXPORTING EXPORTING
it_table_ins = it_table_ins it_table_ins = it_table_ins
@ -376,7 +292,6 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
CALL FUNCTION 'TR_OBJECTS_CHECK' CALL FUNCTION 'TR_OBJECTS_CHECK'
TABLES TABLES
wt_ko200 = lt_tables wt_ko200 = lt_tables
wt_e071k = lt_table_keys
EXCEPTIONS EXCEPTIONS
cancel_edit_other_error = 1 cancel_edit_other_error = 1
show_only_other_error = 2 show_only_other_error = 2
@ -389,24 +304,15 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
lv_with_dialog = abap_true. lv_with_dialog = abap_true.
ENDIF. ENDIF.
READ TABLE lt_tables ASSIGNING <ls_table> INDEX 1. CALL FUNCTION 'TRINT_OBJECTS_CHECK_AND_INSERT'
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 EXPORTING
wi_order = iv_transport iv_order = iv_transport
wi_ko200 = <ls_table> iv_with_dialog = lv_with_dialog
iv_no_show_option = abap_true CHANGING
TABLES ct_ko200 = lt_tables
wt_e071k = lt_table_keys ct_e071k = lt_table_keys
EXCEPTIONS EXCEPTIONS
cancel_edit_other_error = 1 OTHERS = 1.
show_only_other_error = 2
OTHERS = 3.
IF sy-subrc <> 0. IF sy-subrc <> 0.
zcx_abapgit_exception=>raise_t100( ). zcx_abapgit_exception=>raise_t100( ).
ENDIF. ENDIF.
@ -483,12 +389,8 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
WHERE object = ls_lock_key-obj WHERE object = ls_lock_key-obj
AND hikey >= ls_lock_key-low AND hikey >= ls_lock_key-low
AND lokey <= ls_lock_key-hi. "#EC PORTABLE AND lokey <= ls_lock_key-hi. "#EC PORTABLE
IF lv_request IS INITIAL.
lv_request = <ls_tlock>-trkorr. lv_request = <ls_tlock>-trkorr.
ELSE.
lv_request = zif_abapgit_definitions=>c_multiple_transports.
EXIT. EXIT.
ENDIF.
ENDLOOP. ENDLOOP.
ELSEIF is_object_type_transportable( <ls_item>-obj_type ) = abap_true. ELSEIF is_object_type_transportable( <ls_item>-obj_type ) = abap_true.
lv_request = get_current_transport_from_db( lv_request = get_current_transport_from_db(
@ -640,7 +542,7 @@ CLASS zcl_abapgit_cts_api IMPLEMENTATION.
ev_object = ls_list-object ev_object = ls_list-object
ev_obj_name = ls_list-obj_name ). ev_obj_name = ls_list-obj_name ).
INSERT ls_list INTO TABLE rt_list. INSERT ls_list INTO TABLE rt_list.
CATCH zcx_abapgit_exception ##NO_HANDLER. CATCH zcx_abapgit_exception.
ENDTRY. ENDTRY.
ENDCASE. ENDCASE.
ENDLOOP. ENDLOOP.

View File

@ -5,14 +5,19 @@ CLASS zcl_abapgit_default_transport DEFINITION
PUBLIC SECTION. PUBLIC SECTION.
INTERFACES zif_abapgit_default_transport. INTERFACES zif_abapgit_default_transport.
METHODS constructor. METHODS
constructor
RAISING
zcx_abapgit_exception.
PROTECTED SECTION. PROTECTED SECTION.
PRIVATE SECTION. PRIVATE SECTION.
DATA mv_is_set_by_abapgit TYPE abap_bool . DATA mv_is_set_by_abapgit TYPE abap_bool .
DATA ms_save TYPE e070use . DATA ms_save TYPE e070use .
METHODS store. METHODS store
RAISING
zcx_abapgit_exception .
METHODS restore METHODS restore
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
@ -30,7 +35,7 @@ ENDCLASS.
CLASS zcl_abapgit_default_transport IMPLEMENTATION. CLASS ZCL_ABAPGIT_DEFAULT_TRANSPORT IMPLEMENTATION.
METHOD clear. METHOD clear.
@ -111,11 +116,7 @@ CLASS zcl_abapgit_default_transport IMPLEMENTATION.
METHOD store. METHOD store.
TRY.
ms_save = zif_abapgit_default_transport~get( ). ms_save = zif_abapgit_default_transport~get( ).
CATCH zcx_abapgit_exception.
CLEAR ms_save.
ENDTRY.
ENDMETHOD. ENDMETHOD.
@ -172,7 +173,7 @@ CLASS zcl_abapgit_default_transport IMPLEMENTATION.
METHOD zif_abapgit_default_transport~set. METHOD zif_abapgit_default_transport~set.
" checks whether object changes of the package are reordered in transport " checks whether object changes of the package are rerorded in transport
" requests. If true then we set the default task, so that no annoying " requests. If true then we set the default task, so that no annoying
" transport request popups are shown while deserializing. " 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. 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 " We used TR_REQUEST_CHOICE before, but it issues its error log with
" write lists which are not compatible with abapGit. " write lists which are not compatible with abapGit.
" There we user TRINT_REQUEST_CHOICE which returns the error log " There we user TRINT_REQUEST_CHOICE which returns the error log
" and display the log ourselves. " and display the log ourselve.
CALL FUNCTION 'TRINT_REQUEST_CHOICE' CALL FUNCTION 'TRINT_REQUEST_CHOICE'
EXPORTING EXPORTING
iv_request_types = 'FTCOK' iv_request_types = 'FTCOK'
@ -146,7 +146,7 @@ CLASS zcl_abapgit_transport IMPLEMENTATION.
lt_objects TYPE scts_tadir, lt_objects TYPE scts_tadir,
lt_objects_all LIKE lt_objects, lt_objects_all LIKE lt_objects,
ls_e071 LIKE LINE OF rt_objects, ls_e071 LIKE LINE OF rt_objects,
li_repo TYPE REF TO zif_abapgit_repo, lo_repo TYPE REF TO zcl_abapgit_repo,
lv_package TYPE zif_abapgit_persistence=>ty_repo-package, lv_package TYPE zif_abapgit_persistence=>ty_repo-package,
lt_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt. lt_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt.
@ -154,8 +154,8 @@ CLASS zcl_abapgit_transport IMPLEMENTATION.
<lv_package> TYPE devclass, <lv_package> TYPE devclass,
<ls_object> TYPE tadir. <ls_object> TYPE tadir.
li_repo = zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ). lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
lv_package = li_repo->get_package( ). lv_package = lo_repo->get_package( ).
lt_packages = zcl_abapgit_factory=>get_sap_package( lv_package )->list_subpackages( ). lt_packages = zcl_abapgit_factory=>get_sap_package( lv_package )->list_subpackages( ).
INSERT lv_package INTO TABLE lt_packages. INSERT lv_package INTO TABLE lt_packages.

View File

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

View File

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

View File

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

View File

@ -38,10 +38,9 @@ CLASS zcl_abapgit_transport_objects IMPLEMENTATION.
LOOP AT mt_transport_objects INTO ls_transport_object. LOOP AT mt_transport_objects INTO ls_transport_object.
LOOP AT it_object_statuses INTO ls_object_status 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 WHERE obj_name = ls_transport_object-obj_name
AND obj_type = ls_transport_object-object AND obj_type = ls_transport_object-object
AND NOT lstate IS INITIAL ##PRIMKEY[SEC_KEY]. AND NOT lstate IS INITIAL.
CASE ls_object_status-lstate. CASE ls_object_status-lstate.
WHEN zif_abapgit_definitions=>c_state-added OR zif_abapgit_definitions=>c_state-modified. WHEN zif_abapgit_definitions=>c_state-added OR zif_abapgit_definitions=>c_state-modified.
@ -75,7 +74,7 @@ CLASS zcl_abapgit_transport_objects IMPLEMENTATION.
ENDLOOP. ENDLOOP.
IF sy-subrc <> 0. IF sy-subrc <> 0.
" Since not all objects in a transport might be in the local repo " 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. " the stage.
ENDIF. ENDIF.
ENDLOOP. ENDLOOP.

View File

@ -60,9 +60,9 @@ INTERFACE zif_abapgit_cts_api
METHODS create_transport_entries METHODS create_transport_entries
IMPORTING IMPORTING
!iv_transport TYPE trkorr !iv_transport TYPE trkorr
!it_table_ins TYPE ANY TABLE OPTIONAL !it_table_ins TYPE ANY TABLE
!it_table_upd TYPE ANY TABLE OPTIONAL !it_table_upd TYPE ANY TABLE
!it_table_del TYPE ANY TABLE OPTIONAL !it_table_del TYPE ANY TABLE
!iv_tabname TYPE tabname !iv_tabname TYPE tabname
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
@ -153,12 +153,4 @@ INTERFACE zif_abapgit_cts_api
!iv_transport_request TYPE trkorr !iv_transport_request TYPE trkorr
RAISING RAISING
zcx_abapgit_exception . 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. ENDINTERFACE.

View File

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

View File

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

View File

@ -49,7 +49,7 @@ ENDCLASS.
CLASS zcl_abapgit_data_utils IMPLEMENTATION. CLASS ZCL_ABAPGIT_DATA_UTILS IMPLEMENTATION.
METHOD build_config_filename. METHOD build_config_filename.
@ -196,7 +196,7 @@ CLASS zcl_abapgit_data_utils IMPLEMENTATION.
db_not_exists = 3 db_not_exists = 3
no_permission = 4 no_permission = 4
no_change_allowed = 5 no_change_allowed = 5
* table_is_gtt = 6 " not in lower releases table_is_gtt = 6
OTHERS = 7. OTHERS = 7.
IF sy-subrc <> 0. IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Table { is_item-obj_name } cannot be displayed| ). 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 METHODS deserialize_check
IMPORTING IMPORTING
!ii_repo TYPE REF TO zif_abapgit_repo !io_repo TYPE REF TO zcl_abapgit_repo
!ii_config TYPE REF TO zif_abapgit_data_config !ii_config TYPE REF TO zif_abapgit_data_config
RETURNING RETURNING
VALUE(rs_checks) TYPE zif_abapgit_definitions=>ty_deserialize_checks-customizing VALUE(rs_checks) TYPE zif_abapgit_definitions=>ty_deserialize_checks-customizing

View File

@ -26,8 +26,6 @@ CLASS lcl_environment IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_environment~get_basis_release. METHOD zif_abapgit_environment~get_basis_release.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_environment~get_available_user_sessions.
ENDMETHOD.
METHOD zif_abapgit_environment~get_system_language_filter. METHOD zif_abapgit_environment~get_system_language_filter.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_environment~is_merged. METHOD zif_abapgit_environment~is_merged.
@ -42,8 +40,6 @@ CLASS lcl_environment IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_environment~init_parallel_processing. METHOD zif_abapgit_environment~init_parallel_processing.
ENDMETHOD. ENDMETHOD.
METHOD zif_abapgit_environment~check_parallel_processing.
ENDMETHOD.
ENDCLASS. ENDCLASS.
@ -81,12 +77,10 @@ CLASS ltcl_abap_language_version DEFINITION FOR TESTING RISK LEVEL HARMLESS
PRIVATE SECTION. PRIVATE SECTION.
" Cloud package hardcoded in cl_abap_language_version " Cloud package hardcoded in cl_abap_language_version
CONSTANTS c_cloud_package TYPE devclass VALUE 'TEST_LANGUAGE_VERSION_SCP'. CONSTANTS c_cloud_package TYPE devclass VALUE 'TEST_LANGUAGE_VERSION_SCP'.
CONSTANTS c_language_cfg TYPE seoclsname VALUE 'CL_ABAP_LANGUAGE_VERSION_CFG'.
DATA: DATA:
mt_versions TYPE string_table, mt_versions TYPE string_table,
mv_has_cloud_package TYPE abap_bool, mv_has_cloud_package TYPE abap_bool,
mv_has_language_cfg TYPE abap_bool,
mo_environment TYPE REF TO lcl_environment, mo_environment TYPE REF TO lcl_environment,
mi_persistency TYPE REF TO zif_abapgit_persist_settings, mi_persistency TYPE REF TO zif_abapgit_persist_settings,
mo_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit, mo_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit,
@ -370,11 +364,9 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
" Assume on-prem (no cloud) " Assume on-prem (no cloud)
set_environment( abap_false ). set_environment( abap_false ).
IF mv_has_language_cfg = abap_true.
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
exp = iv_standard ). exp = iv_standard ).
ENDIF.
IF mv_has_cloud_package = abap_true. IF mv_has_cloud_package = abap_true.
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
@ -389,11 +381,9 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
" Assume cloud platform " Assume cloud platform
set_environment( abap_true ). set_environment( abap_true ).
IF mv_has_language_cfg = abap_true.
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
exp = iv_standard ). exp = iv_standard ).
ENDIF.
IF mv_has_cloud_package = abap_true. IF mv_has_cloud_package = abap_true.
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
@ -412,11 +402,6 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
DATA lv_version TYPE string. 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. LOOP AT mt_versions INTO lv_version.
CASE lv_version. CASE lv_version.

View File

@ -1,21 +0,0 @@
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

@ -1,16 +0,0 @@
<?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

@ -1,14 +0,0 @@
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

@ -1,16 +0,0 @@
<?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,74 +76,11 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
ENDMETHOD. 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. METHOD zif_abapgit_environment~compare_with_inactive.
rv_result = zif_abapgit_environment~is_sap_cloud_platform( ). rv_result = zif_abapgit_environment~is_sap_cloud_platform( ).
ENDMETHOD. 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. METHOD zif_abapgit_environment~get_basis_release.
SELECT SINGLE release extrelease FROM cvers INTO (rs_result-release, rs_result-sp) SELECT SINGLE release extrelease FROM cvers INTO (rs_result-release, rs_result-sp)
@ -152,78 +89,6 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
ENDMETHOD. 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. METHOD zif_abapgit_environment~is_merged.
DATA lr_marker TYPE REF TO data ##NEEDED. DATA lr_marker TYPE REF TO data ##NEEDED.
@ -290,6 +155,50 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
ENDMETHOD. 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. METHOD zif_abapgit_environment~is_variant_maintenance.
@ -303,4 +212,30 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
rv_is_variant_maintenance = boolc( lines( lt_variscreens ) > 0 ). rv_is_variant_maintenance = boolc( lines( lt_variscreens ) > 0 ).
ENDMETHOD. 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. ENDCLASS.

View File

@ -156,18 +156,6 @@ CLASS zcl_abapgit_settings DEFINITION
METHODS set_activate_wo_popup METHODS set_activate_wo_popup
IMPORTING IMPORTING
!iv_act_wo_popup TYPE zif_abapgit_definitions=>ty_s_user_settings-activate_wo_popup . !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. PROTECTED SECTION.
PRIVATE SECTION. PRIVATE SECTION.
TYPES: BEGIN OF ty_s_settings, TYPES: BEGIN OF ty_s_settings,
@ -334,11 +322,7 @@ CLASS zcl_abapgit_settings IMPLEMENTATION.
WHEN 'Belize'. WHEN 'Belize'.
rv_ui_theme = c_ui_theme-belize. rv_ui_theme = c_ui_theme-belize.
WHEN OTHERS. WHEN OTHERS.
IF lv_frontend_theme CS 'dark'.
rv_ui_theme = c_ui_theme-dark.
ELSE.
rv_ui_theme = c_ui_theme-default. rv_ui_theme = c_ui_theme-default.
ENDIF.
ENDCASE. ENDCASE.
ENDIF. ENDIF.
ENDMETHOD. ENDMETHOD.
@ -503,24 +487,4 @@ CLASS zcl_abapgit_settings IMPLEMENTATION.
cg_data = ms_settings ). cg_data = ms_settings ).
ENDMETHOD. 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. ENDCLASS.

View File

@ -1,26 +1,45 @@
CLASS zcl_abapgit_user_record DEFINITION CLASS zcl_abapgit_user_record DEFINITION
PUBLIC PUBLIC
FINAL FINAL
CREATE PRIVATE CREATE PRIVATE.
GLOBAL FRIENDS zcl_abapgit_env_factory.
PUBLIC SECTION. PUBLIC SECTION.
CLASS-METHODS reset. CLASS-METHODS reset.
CLASS-METHODS get_instance
INTERFACES zif_abapgit_user_record. 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.
PROTECTED SECTION. PROTECTED SECTION.
PRIVATE SECTION. PRIVATE SECTION.
TYPES: TYPES:
BEGIN OF ty_user, BEGIN OF ty_user,
user TYPE sy-uname, user TYPE sy-uname,
name TYPE string, o_user TYPE REF TO zcl_abapgit_user_record,
email TYPE string,
END OF ty_user. END OF ty_user.
CLASS-DATA gt_user TYPE HASHED TABLE OF ty_user WITH UNIQUE KEY user. CLASS-DATA gt_user TYPE HASHED TABLE OF ty_user WITH UNIQUE KEY user.
CLASS-METHODS check_user_exists DATA: BEGIN OF ms_user,
name TYPE string,
email TYPE string,
END OF ms_user .
METHODS check_user_exists
IMPORTING IMPORTING
iv_user TYPE sy-uname iv_user TYPE sy-uname
EXPORTING EXPORTING
@ -29,51 +48,35 @@ CLASS zcl_abapgit_user_record DEFINITION
RAISING RAISING
zcx_abapgit_exception. zcx_abapgit_exception.
CLASS-METHODS get_user_dtls_from_other_clnt METHODS get_user_dtls_from_other_clnt
IMPORTING 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. ENDCLASS.
CLASS ZCL_ABAPGIT_USER_RECORD IMPLEMENTATION. CLASS zcl_abapgit_user_record IMPLEMENTATION.
METHOD build_cache. METHOD get_title.
* the queried username might not exist, so this method is static
" Get user details DATA ls_user_address TYPE addr3_val.
TRY.
check_user_exists( CALL FUNCTION 'SUSR_USER_ADDRESS_READ'
EXPORTING EXPORTING
iv_user = iv_user user_name = iv_username
IMPORTING IMPORTING
ev_fullname = rs_user-name user_address = ls_user_address
ev_email = rs_user-email ). EXCEPTIONS
CATCH zcx_abapgit_exception. user_address_not_found = 1
" Could not find user, try to get from other clients OTHERS = 2.
rs_user = get_user_dtls_from_other_clnt( iv_user ). IF sy-subrc = 0.
ENDTRY. rv_title = ls_user_address-name_text.
ENDIF.
rs_user-user = iv_user.
INSERT rs_user INTO TABLE gt_user.
ENDMETHOD. ENDMETHOD.
METHOD check_user_exists. METHOD check_user_exists.
DATA lt_return TYPE STANDARD TABLE OF bapiret2 WITH DEFAULT KEY. DATA lt_return TYPE STANDARD TABLE OF bapiret2 WITH DEFAULT KEY.
@ -106,6 +109,63 @@ CLASS ZCL_ABAPGIT_USER_RECORD IMPLEMENTATION.
ENDMETHOD. 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. METHOD get_user_dtls_from_other_clnt.
CONSTANTS lc_cc_category TYPE string VALUE 'C'. CONSTANTS lc_cc_category TYPE string VALUE 'C'.
@ -119,7 +179,7 @@ CLASS ZCL_ABAPGIT_USER_RECORD IMPLEMENTATION.
ORDER BY PRIMARY KEY. ORDER BY PRIMARY KEY.
LOOP AT lt_dev_clients ASSIGNING <lv_dev_client>. LOOP AT lt_dev_clients ASSIGNING <lv_dev_client>.
SELECT SINGLE u~bname p~name_text a~smtp_addr INTO (rs_user-user, rs_user-name, rs_user-email) SELECT SINGLE p~name_text a~smtp_addr INTO (ms_user-name, ms_user-email)
FROM usr21 AS u FROM usr21 AS u
INNER JOIN adrp AS p ON p~persnumber = u~persnumber INNER JOIN adrp AS p ON p~persnumber = u~persnumber
AND p~client = u~mandt AND p~client = u~mandt
@ -140,61 +200,7 @@ CLASS ZCL_ABAPGIT_USER_RECORD IMPLEMENTATION.
ENDMETHOD. 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. METHOD reset.
CLEAR gt_user. CLEAR gt_user.
ENDMETHOD. 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. ENDCLASS.

View File

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

View File

@ -39,13 +39,5 @@ INTERFACE zif_abapgit_environment
iv_group TYPE clike iv_group TYPE clike
RETURNING RETURNING
VALUE(rv_free_work_processes) TYPE i. 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. ENDINTERFACE.

View File

@ -1,21 +0,0 @@
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

@ -1,15 +0,0 @@
<?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,9 +250,6 @@ CLASS zcl_abapgit_exit IMPLEMENTATION.
EXPORTING EXPORTING
iv_package = iv_package iv_package = iv_package
ii_log = ii_log 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 CHANGING
ct_tadir = ct_tadir ). ct_tadir = ct_tadir ).
CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER. CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER.
@ -317,7 +314,7 @@ CLASS zcl_abapgit_exit IMPLEMENTATION.
TRY. TRY.
gi_exit->determine_transport_request( gi_exit->determine_transport_request(
EXPORTING EXPORTING
ii_repo = ii_repo io_repo = io_repo
iv_transport_type = iv_transport_type iv_transport_type = iv_transport_type
CHANGING CHANGING
cv_transport_request = cv_transport_request ). cv_transport_request = cv_transport_request ).
@ -328,18 +325,6 @@ CLASS zcl_abapgit_exit IMPLEMENTATION.
ENDMETHOD. 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. METHOD zif_abapgit_exit~enhance_repo_toolbar.
IF gi_exit IS NOT INITIAL. IF gi_exit IS NOT INITIAL.
@ -454,7 +439,7 @@ CLASS zcl_abapgit_exit IMPLEMENTATION.
gi_exit->validate_before_push( gi_exit->validate_before_push(
is_comment = is_comment is_comment = is_comment
io_stage = io_stage io_stage = io_stage
ii_repo_online = ii_repo_online ). io_repo = io_repo ).
CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER. CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER.
ENDTRY. ENDTRY.
ENDIF. ENDIF.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -81,7 +81,7 @@ CLASS zcl_abapgit_git_commit IMPLEMENTATION.
METHOD extract_author_data. 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 FIND REGEX zif_abapgit_definitions=>c_author_regex IN iv_author
SUBMATCHES SUBMATCHES
ev_author ev_author

View File

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

View File

@ -1,3 +1,7 @@
*"* 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. CLASS lcl_stream DEFINITION FINAL.
PUBLIC SECTION. PUBLIC SECTION.
TYPES: ty_hex TYPE x LENGTH 1. TYPES: ty_hex TYPE x LENGTH 1.

View File

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

View File

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

View File

@ -51,7 +51,7 @@ CLASS zcl_abapgit_git_time IMPLEMENTATION.
METHOD get_unix. 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'. CONSTANTS lc_epoch TYPE timestamp VALUE '19700101000000'.
DATA lv_time TYPE timestamp. DATA lv_time TYPE timestamp.

View File

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

View File

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

View File

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

View File

@ -28,12 +28,6 @@ CLASS zcl_abapgit_http DEFINITION
VALUE(ro_client) TYPE REF TO zcl_abapgit_http_client VALUE(ro_client) TYPE REF TO zcl_abapgit_http_client
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
CLASS-METHODS check_connection
IMPORTING
!iv_url TYPE string
RAISING
zcx_abapgit_exception.
PROTECTED SECTION. PROTECTED SECTION.
CLASS-METHODS check_auth_requested CLASS-METHODS check_auth_requested
@ -57,24 +51,6 @@ CLASS zcl_abapgit_http DEFINITION
VALUE(rv_scheme) TYPE string VALUE(rv_scheme) TYPE string
RAISING RAISING
zcx_abapgit_exception . 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. PRIVATE SECTION.
ENDCLASS. ENDCLASS.
@ -147,22 +123,54 @@ CLASS zcl_abapgit_http IMPLEMENTATION.
ENDMETHOD. 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. METHOD create_by_url.
DATA: lv_uri TYPE string, DATA: lv_uri TYPE string,
lv_scheme TYPE string, lv_scheme TYPE string,
lv_authorization TYPE string, lv_authorization TYPE string,
li_client TYPE REF TO if_http_client, li_client TYPE REF TO if_http_client,
ls_header LIKE LINE OF it_headers. ls_header LIKE LINE OF it_headers,
lo_proxy_configuration TYPE REF TO zcl_abapgit_proxy_config,
lv_text TYPE string.
li_client = get_http_client( iv_url ).
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.
CREATE OBJECT ro_client CREATE OBJECT ro_client
EXPORTING EXPORTING
@ -204,8 +212,6 @@ CLASS zcl_abapgit_http IMPLEMENTATION.
li_client->propertytype_logon_popup = li_client->co_disabled. li_client->propertytype_logon_popup = li_client->co_disabled.
ENDIF. ENDIF.
li_client->request->set_version( if_http_request=>co_protocol_version_1_1 ).
zcl_abapgit_exit=>get_instance( )->http_client( zcl_abapgit_exit=>get_instance( )->http_client(
iv_url = iv_url iv_url = iv_url
ii_client = li_client ). ii_client = li_client ).
@ -237,123 +243,6 @@ CLASS zcl_abapgit_http IMPLEMENTATION.
ENDMETHOD. 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. METHOD is_local_system.
DATA: lv_host TYPE string, DATA: lv_host TYPE string,

View File

@ -71,12 +71,6 @@ CLASS zcl_abapgit_http_client IMPLEMENTATION.
zcx_abapgit_exception=>raise( 'Unsupported media type (HTTP 415)' ). zcx_abapgit_exception=>raise( 'Unsupported media type (HTTP 415)' ).
WHEN 422. WHEN 422.
zcx_abapgit_exception=>raise( 'Unprocessable entity (HTTP 422). Check, if URL has to end with ".git"' ). 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. WHEN OTHERS.
lv_text = mi_client->response->get_cdata( ). lv_text = mi_client->response->get_cdata( ).
zcx_abapgit_exception=>raise( |(HTTP { lv_code }) { lv_text }| ). zcx_abapgit_exception=>raise( |(HTTP { lv_code }) { lv_text }| ).
@ -158,7 +152,7 @@ CLASS zcl_abapgit_http_client IMPLEMENTATION.
code = lv_code code = lv_code
message = lv_message ). message = lv_message ).
lv_text = |HTTP error { lv_code } occurred: { lv_message }|. lv_text = |HTTP error { lv_code } occured: { lv_message }|.
zcx_abapgit_exception=>raise( lv_text ). zcx_abapgit_exception=>raise( lv_text ).
ENDIF. ENDIF.

View File

@ -1,6 +1,7 @@
CLASS zcl_abapgit_code_inspector DEFINITION CLASS zcl_abapgit_code_inspector DEFINITION
PUBLIC PUBLIC
CREATE PROTECTED. CREATE PROTECTED
GLOBAL FRIENDS zcl_abapgit_factory .
PUBLIC SECTION. PUBLIC SECTION.
@ -12,19 +13,6 @@ CLASS zcl_abapgit_code_inspector DEFINITION
RAISING RAISING
zcx_abapgit_exception . 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. PROTECTED SECTION.
DATA mv_package TYPE devclass . DATA mv_package TYPE devclass .
@ -47,15 +35,6 @@ CLASS zcl_abapgit_code_inspector DEFINITION
VALUE(rv_skip) TYPE abap_bool. VALUE(rv_skip) TYPE abap_bool.
PRIVATE SECTION. 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_success TYPE abap_bool .
DATA mv_summary TYPE string. DATA mv_summary TYPE string.
@ -287,28 +266,6 @@ CLASS zcl_abapgit_code_inspector IMPLEMENTATION.
ENDMETHOD. 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. METHOD run_inspection.
io_inspection->run( io_inspection->run(
@ -333,24 +290,6 @@ CLASS zcl_abapgit_code_inspector IMPLEMENTATION.
ENDMETHOD. 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. METHOD skip_object.
DATA ls_program_type TYPE subc. DATA ls_program_type TYPE subc.

View File

@ -1,442 +0,0 @@
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

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

View File

@ -20,27 +20,27 @@ INTERFACE lif_kind.
CONSTANTS: CONSTANTS:
BEGIN OF numeric, BEGIN OF numeric,
int1 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_int1, int1 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_int1,
int2 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_int2, int2 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_int2,
int4 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_int, int4 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_int,
int8 TYPE ty_kind VALUE '8', " cl_abap_typedescr=>typekind_int8 not in lower releases int8 TYPE ty_kind VALUE '8', " cl_abap_tabledescr=>typekind_int8 not in lower releases
float TYPE ty_kind VALUE cl_abap_typedescr=>typekind_float, float TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_float,
packed TYPE ty_kind VALUE cl_abap_typedescr=>typekind_packed, packed TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_packed,
decfloat16 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_decfloat16, decfloat16 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_decfloat16,
decfloat34 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_decfloat34, decfloat34 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_decfloat34,
END OF numeric. END OF numeric.
CONSTANTS: CONSTANTS:
BEGIN OF texts, BEGIN OF texts,
char TYPE ty_kind VALUE cl_abap_typedescr=>typekind_char, char TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_char,
numc TYPE ty_kind VALUE cl_abap_typedescr=>typekind_num, numc TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_num,
string TYPE ty_kind VALUE cl_abap_typedescr=>typekind_string, string TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_string,
END OF texts. END OF texts.
CONSTANTS: CONSTANTS:
BEGIN OF binary, BEGIN OF binary,
hex TYPE ty_kind VALUE cl_abap_typedescr=>typekind_hex, hex TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_hex,
xstring TYPE ty_kind VALUE cl_abap_typedescr=>typekind_xstring, xstring TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_xstring,
END OF binary. END OF binary.
CONSTANTS: CONSTANTS:
@ -80,25 +80,6 @@ CLASS lcl_utils DEFINITION FINAL.
iv_str TYPE string iv_str TYPE string
RETURNING RETURNING
VALUE(rv_xstr) TYPE xstring. 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. ENDCLASS.
@ -135,37 +116,6 @@ CLASS lcl_utils IMPLEMENTATION.
ENDMETHOD. 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. METHOD validate_array_index.
IF NOT iv_index CO '0123456789'. IF NOT iv_index CO '0123456789'.
@ -226,74 +176,6 @@ CLASS lcl_utils IMPLEMENTATION.
ENDMETHOD. 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. ENDCLASS.
@ -306,7 +188,7 @@ CLASS lcl_json_parser DEFINITION FINAL.
METHODS parse METHODS parse
IMPORTING IMPORTING
iv_json TYPE any iv_json TYPE string
iv_keep_item_order TYPE abap_bool DEFAULT abap_false iv_keep_item_order TYPE abap_bool DEFAULT abap_false
RETURNING RETURNING
VALUE(rt_json_tree) TYPE zif_abapgit_ajson_types=>ty_nodes_tt VALUE(rt_json_tree) TYPE zif_abapgit_ajson_types=>ty_nodes_tt
@ -330,7 +212,7 @@ CLASS lcl_json_parser DEFINITION FINAL.
METHODS _parse METHODS _parse
IMPORTING IMPORTING
iv_json TYPE xstring iv_json TYPE string
RETURNING RETURNING
VALUE(rt_json_tree) TYPE zif_abapgit_ajson_types=>ty_nodes_tt VALUE(rt_json_tree) TYPE zif_abapgit_ajson_types=>ty_nodes_tt
RAISING RAISING
@ -351,20 +233,17 @@ CLASS lcl_json_parser IMPLEMENTATION.
DATA lx_sxml_parse TYPE REF TO cx_sxml_parse_error. DATA lx_sxml_parse TYPE REF TO cx_sxml_parse_error.
DATA lx_sxml TYPE REF TO cx_dynamic_check. DATA lx_sxml TYPE REF TO cx_dynamic_check.
DATA lv_location TYPE string. DATA lv_location TYPE string.
DATA lv_json TYPE xstring.
mv_keep_item_order = iv_keep_item_order. mv_keep_item_order = iv_keep_item_order.
lv_json = lcl_utils=>any_to_xstring( iv_json ).
TRY. TRY.
" TODO sane JSON check: " TODO sane JSON check:
" JSON can be true,false,null,(-)digits " JSON can be true,false,null,(-)digits
" or start from " or from { " or start from " or from {
rt_json_tree = _parse( lv_json ). rt_json_tree = _parse( iv_json ).
CATCH cx_sxml_parse_error INTO lx_sxml_parse. CATCH cx_sxml_parse_error INTO lx_sxml_parse.
lv_location = _get_location( lv_location = _get_location(
iv_json = lcl_utils=>any_to_string( iv_json ) iv_json = iv_json
iv_offset = lx_sxml_parse->xml_offset ). iv_offset = lx_sxml_parse->xml_offset ).
zcx_abapgit_ajson_error=>raise( zcx_abapgit_ajson_error=>raise(
iv_msg = |Json parsing error (SXML): { lx_sxml_parse->get_text( ) }| iv_msg = |Json parsing error (SXML): { lx_sxml_parse->get_text( ) }|
@ -426,7 +305,7 @@ CLASS lcl_json_parser IMPLEMENTATION.
IF iv_json IS INITIAL. IF iv_json IS INITIAL.
RETURN. RETURN.
ENDIF. ENDIF.
lo_reader = cl_sxml_string_reader=>create( iv_json ). lo_reader = cl_sxml_string_reader=>create( lcl_utils=>string_to_xstring_utf8( iv_json ) ).
" TODO: self protection, check non-empty, check starting from object ... " TODO: self protection, check non-empty, check starting from object ...
@ -793,14 +672,6 @@ CLASS lcl_json_to_abap DEFINITION FINAL.
RAISING RAISING
zcx_abapgit_ajson_error. 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. PRIVATE SECTION.
TYPES: TYPES:
@ -932,7 +803,7 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
zcx_abapgit_ajson_error=>raise( |Unexpected parent type| ). zcx_abapgit_ajson_error=>raise( |Unexpected parent type| ).
ENDCASE. ENDCASE.
rs_node_type-type_kind = rs_node_type-dd->type_kind. " for caching and cleaner uninitialized access rs_node_type-type_kind = rs_node_type-dd->type_kind. " for caching and cleaner unintialized access
IF rs_node_type-type_kind = lif_kind=>table. IF rs_node_type-type_kind = lif_kind=>table.
lo_tdescr ?= rs_node_type-dd. lo_tdescr ?= rs_node_type-dd.
IF lo_tdescr->table_kind <> cl_abap_tabledescr=>tablekind_std. IF lo_tdescr->table_kind <> cl_abap_tabledescr=>tablekind_std.
@ -1017,8 +888,6 @@ 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 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. APPEND INITIAL LINE TO <parent_stdtab> REFERENCE INTO lr_target_field.
ASSERT sy-subrc = 0. ASSERT sy-subrc = 0.
ELSE.
CLEAR <tab_item>.
ENDIF. ENDIF.
WHEN lif_kind=>struct_flat OR lif_kind=>struct_deep. WHEN lif_kind=>struct_flat OR lif_kind=>struct_deep.
@ -1115,19 +984,10 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
WHEN zif_abapgit_ajson_types=>node_type-string. WHEN zif_abapgit_ajson_types=>node_type-string.
" TODO: check type ? " TODO: check type ?
IF is_node-value IS NOT INITIAL. IF is_node_type-type_kind = lif_kind=>date AND is_node-value IS NOT INITIAL.
IF is_node_type-type_kind = lif_kind=>date.
<container> = to_date( is_node-value ). <container> = to_date( is_node-value ).
ELSEIF is_node_type-type_kind = lif_kind=>time. ELSEIF is_node_type-type_kind = lif_kind=>packed AND is_node-value IS NOT INITIAL.
<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 ). <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. ELSE.
<container> = is_node-value. <container> = is_node-value.
ENDIF. ENDIF.
@ -1235,22 +1095,6 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
ENDMETHOD. 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. ENDCLASS.
********************************************************************** **********************************************************************
@ -1932,13 +1776,8 @@ CLASS lcl_filter_runner IMPLEMENTATION.
METHOD walk. METHOD walk.
DATA ls_node TYPE zif_abapgit_ajson_types=>ty_node. DATA ls_node TYPE zif_abapgit_ajson_types=>ty_node.
DATA lv_tab_key TYPE string.
IF cs_parent-type = zif_abapgit_ajson_types=>node_type-array. LOOP AT mr_source_tree->* INTO ls_node WHERE path = iv_path.
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. CASE ls_node-type.
WHEN zif_abapgit_ajson_types=>node_type-boolean OR zif_abapgit_ajson_types=>node_type-null 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. OR zif_abapgit_ajson_types=>node_type-number OR zif_abapgit_ajson_types=>node_type-string.

View File

@ -85,10 +85,6 @@ CLASS ltcl_parser_test DEFINITION FINAL
METHODS parse_date FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS parse_date FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS parse_bare_values 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_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 duplicate_key FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS non_json FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS non_json FOR TESTING RAISING zcx_abapgit_ajson_error.
@ -252,78 +248,6 @@ CLASS ltcl_parser_test IMPLEMENTATION.
exp = mo_nodes->mt_nodes ). exp = mo_nodes->mt_nodes ).
ENDMETHOD. 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. METHOD sample_json.
rv_json = rv_json =
@ -1485,7 +1409,6 @@ CLASS ltcl_json_to_abap DEFINITION
timestamp1 TYPE timestamp, timestamp1 TYPE timestamp,
timestamp2 TYPE timestamp, timestamp2 TYPE timestamp,
timestamp3 TYPE timestamp, timestamp3 TYPE timestamp,
timestamp4 TYPE timestampl,
END OF ty_complex. END OF ty_complex.
METHODS to_abap_struc METHODS to_abap_struc
@ -1536,27 +1459,7 @@ CLASS ltcl_json_to_abap DEFINITION
METHODS to_abap_corresponding_pub_neg METHODS to_abap_corresponding_pub_neg
FOR TESTING FOR TESTING
RAISING zcx_abapgit_ajson_error. 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. ENDCLASS.
CLASS zcl_abapgit_ajson DEFINITION LOCAL FRIENDS ltcl_json_to_abap. CLASS zcl_abapgit_ajson DEFINITION LOCAL FRIENDS ltcl_json_to_abap.
@ -1586,7 +1489,6 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
lo_nodes->add( '/ |timestamp1 |str |2020-07-28T00:00:00 | ' ). lo_nodes->add( '/ |timestamp1 |str |2020-07-28T00:00:00 | ' ).
lo_nodes->add( '/ |timestamp2 |str |2020-07-28T00:00:00Z | ' ). 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( '/ |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. CREATE OBJECT lo_cut.
lo_cut->to_abap( lo_cut->to_abap(
@ -1605,7 +1507,6 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
ls_exp-timestamp1 = lv_exp_timestamp. ls_exp-timestamp1 = lv_exp_timestamp.
ls_exp-timestamp2 = lv_exp_timestamp. ls_exp-timestamp2 = lv_exp_timestamp.
ls_exp-timestamp3 = lv_exp_timestamp. ls_exp-timestamp3 = lv_exp_timestamp.
ls_exp-timestamp4 = lv_exp_timestamp.
cl_abap_unit_assert=>assert_equals( cl_abap_unit_assert=>assert_equals(
act = ls_mock act = ls_mock
@ -1635,66 +1536,6 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
ENDMETHOD. 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. METHOD to_abap_value.
DATA lo_cut TYPE REF TO lcl_json_to_abap. DATA lo_cut TYPE REF TO lcl_json_to_abap.
@ -2280,171 +2121,6 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
ENDMETHOD. 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. ENDCLASS.
********************************************************************** **********************************************************************
@ -2477,13 +2153,11 @@ CLASS ltcl_writer_test DEFINITION FINAL
METHODS set_bool_tab FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS set_bool_tab FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_str 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_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_date FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_timestamp 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 read_only FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS set_array_obj 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 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_touch FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS overwrite_w_keep_order_set 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. METHODS setx FOR TESTING RAISING zcx_abapgit_ajson_error.
@ -3318,27 +2992,6 @@ CLASS ltcl_writer_test IMPLEMENTATION.
ENDMETHOD. 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. METHOD set_date.
DATA lo_cut TYPE REF TO zcl_abapgit_ajson. DATA lo_cut TYPE REF TO zcl_abapgit_ajson.
@ -3578,37 +3231,6 @@ CLASS ltcl_writer_test IMPLEMENTATION.
ENDMETHOD. 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. METHOD overwrite_w_keep_order_touch.
DATA li_cut TYPE REF TO zif_abapgit_ajson. DATA li_cut TYPE REF TO zif_abapgit_ajson.
@ -4686,47 +4308,15 @@ CLASS ltcl_filter_test IMPLEMENTATION.
lo_json->push( lo_json->push(
iv_path = '/' iv_path = '/'
iv_val = 'b' ). 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( lo_json_filtered = zcl_abapgit_ajson=>create_from(
ii_source_json = lo_json ii_source_json = lo_json
ii_filter = me ). ii_filter = me ).
CREATE OBJECT lo_nodes_exp. CREATE OBJECT lo_nodes_exp.
lo_nodes_exp->add( ' | |array | | |10' ). lo_nodes_exp->add( ' | |array | | |2' ).
lo_nodes_exp->add( '/ |1 |str |a |1|0' ). lo_nodes_exp->add( '/ |1 |str |a |1|0' ).
lo_nodes_exp->add( '/ |2 |str |b |2|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( cl_abap_unit_assert=>assert_equals(
act = lo_json_filtered->mt_json_tree act = lo_json_filtered->mt_json_tree

View File

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

View File

@ -10,7 +10,6 @@ CLASS ltcl_filters_test DEFINITION FINAL
METHODS path_filter_w_patterns FOR TESTING RAISING zcx_abapgit_ajson_error. METHODS path_filter_w_patterns FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS path_filter_deep 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 and_filter FOR TESTING RAISING zcx_abapgit_ajson_error.
METHODS mixed_case_filter FOR TESTING RAISING zcx_abapgit_ajson_error.
ENDCLASS. ENDCLASS.
@ -228,36 +227,4 @@ CLASS ltcl_filters_test IMPLEMENTATION.
ENDMETHOD. 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. ENDCLASS.

View File

@ -358,7 +358,6 @@ CLASS ltcl_fields DEFINITION FINAL FOR TESTING
to_json_without_path FOR TESTING RAISING zcx_abapgit_ajson_error, to_json_without_path FOR TESTING RAISING zcx_abapgit_ajson_error,
to_json_with_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 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. to_json IMPORTING iv_path TYPE string RETURNING VALUE(rv_result) TYPE string RAISING zcx_abapgit_ajson_error.
@ -404,33 +403,6 @@ CLASS ltcl_fields IMPLEMENTATION.
ENDMETHOD. 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. METHOD to_json_without_path.

View File

@ -1,7 +1,7 @@
INTERFACE zif_abapgit_ajson INTERFACE zif_abapgit_ajson
PUBLIC. PUBLIC.
CONSTANTS version TYPE string VALUE 'v1.1.11'. "#EC NOTEXT CONSTANTS version TYPE string VALUE 'v1.1.9'. "#EC NOTEXT
CONSTANTS origin TYPE string VALUE 'https://github.com/sbcgua/ajson'. "#EC NOTEXT CONSTANTS origin TYPE string VALUE 'https://github.com/sbcgua/ajson'. "#EC NOTEXT
CONSTANTS license TYPE string VALUE 'MIT'. "#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. METHOD constructor.
@ -46,32 +46,17 @@ CLASS ZCL_ABAPGIT_AFF_REGISTRY IMPLEMENTATION.
METHOD initialize_registry_table. METHOD initialize_registry_table.
register( 'APLO' ).
register( 'BGQC' ).
register( 'CDBO' ).
register( 'CHKC' ). register( 'CHKC' ).
register( 'CHKO' ). register( 'CHKO' ).
register( 'CHKV' ). register( 'CHKV' ).
register( 'COTA' ).
register( 'DRTY' ).
register( 'DTEB' ).
register( 'DSFI' ).
register( 'DRAS' ).
register( 'DSFD' ).
register( 'EVTB' ). register( 'EVTB' ).
register( 'EEEC' ). register( 'EEEC' ).
register( 'GSMP' ). register( 'GSMP' ).
register( iv_obj_type = 'INTF' register( iv_obj_type = 'INTF'
iv_experimental = abap_true ). iv_experimental = abap_true ).
register( 'SAJT' ).
register( 'SAJC' ).
register( 'SMBC' ). register( 'SMBC' ).
register( 'SWCR' ).
register( 'NONT' ). register( 'NONT' ).
register( 'RONT' ). register( 'RONT' ).
register( 'UIAD' ).
register( 'UIPG' ).
register( 'UIST' ).
ENDMETHOD. ENDMETHOD.

View File

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

View File

@ -1,52 +0,0 @@
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

@ -1,404 +0,0 @@
*"* 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

@ -1,216 +0,0 @@
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

@ -1,17 +0,0 @@
<?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

@ -1,24 +0,0 @@
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

@ -1,16 +0,0 @@
<?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

@ -1,56 +0,0 @@
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

@ -1,16 +0,0 @@
<?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

@ -1,57 +0,0 @@
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

@ -1,16 +0,0 @@
<?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