mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00
Compare commits
296 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
34ec448b39 | ||
![]() |
efbc0245ce | ||
![]() |
220417e73f | ||
![]() |
781313ad7c | ||
![]() |
402ec37b3b | ||
![]() |
5e087d33c7 | ||
![]() |
267c210c5a | ||
![]() |
2b0f4e74d9 | ||
![]() |
3f673ebe8c | ||
![]() |
b9389bde33 | ||
![]() |
cc414d26e0 | ||
![]() |
becfe9bb08 | ||
![]() |
c21dc53e00 | ||
![]() |
96a010614b | ||
![]() |
1fa75ebb47 | ||
![]() |
b6e375b3d6 | ||
![]() |
b2d0d98ec0 | ||
![]() |
c0ce2cb2e2 | ||
![]() |
b55791765f | ||
![]() |
a4019f38fb | ||
![]() |
d79887c0a2 | ||
![]() |
aaec314b14 | ||
![]() |
edfbfab6ce | ||
![]() |
301f860821 | ||
![]() |
d73e00bc8a | ||
![]() |
12d6b480b1 | ||
![]() |
6302fa6b1c | ||
![]() |
15584a3da7 | ||
![]() |
fc76035b7b | ||
![]() |
bb9462f979 | ||
![]() |
8b9dd0fdfa | ||
![]() |
220cb9aad1 | ||
![]() |
51d115a1c1 | ||
![]() |
12b93deb1e | ||
![]() |
db0526a3b8 | ||
![]() |
8a72e762f5 | ||
![]() |
663b2b5583 | ||
![]() |
e7af0fb6a0 | ||
![]() |
0ea8aa0f43 | ||
![]() |
5145a6691f | ||
![]() |
74c0979a8c | ||
![]() |
d9c4483cc2 | ||
![]() |
a0e7a47f7a | ||
![]() |
bc104e396e | ||
![]() |
8e02089f8f | ||
![]() |
8984655d86 | ||
![]() |
0af09e13bd | ||
![]() |
464afa8193 | ||
![]() |
b45a4969ba | ||
![]() |
ec12f18b62 | ||
![]() |
aa6e97ac99 | ||
![]() |
1557d8c295 | ||
![]() |
90219ae271 | ||
![]() |
1ef41d3f77 | ||
![]() |
18cf90740d | ||
![]() |
bfc2518658 | ||
![]() |
079e7ce797 | ||
![]() |
dd9790d9bd | ||
![]() |
4469771f01 | ||
![]() |
d374436ae3 | ||
![]() |
2f0281b6ed | ||
![]() |
39fe716022 | ||
![]() |
adc1dad930 | ||
![]() |
91dd6873ab | ||
![]() |
ae9ec4c141 | ||
![]() |
90cb2201fa | ||
![]() |
188bf8d69a | ||
![]() |
626f23d72a | ||
![]() |
2814ade981 | ||
![]() |
d99cc7a9cf | ||
![]() |
f45425f665 | ||
![]() |
160f10c38b | ||
![]() |
f6683582d1 | ||
![]() |
527d512409 | ||
![]() |
99fe0f5240 | ||
![]() |
c08d33bb4a | ||
![]() |
5182ed6213 | ||
![]() |
fd38cd873c | ||
![]() |
bdbfd57248 | ||
![]() |
ee9e32d442 | ||
![]() |
3daf4d3f5c | ||
![]() |
a8cb44d548 | ||
![]() |
9f00aac592 | ||
![]() |
97f5435b81 | ||
![]() |
4b6ac3c2a6 | ||
![]() |
1fac2a71e2 | ||
![]() |
b7bb00d7ee | ||
![]() |
31e860bde7 | ||
![]() |
e16e3d3ac6 | ||
![]() |
cf9da3c06d | ||
![]() |
7dd14b7ccf | ||
![]() |
3d3cae3990 | ||
![]() |
bc36dcc44b | ||
![]() |
621f0192ef | ||
![]() |
f24f0c9589 | ||
![]() |
fef6bf49ca | ||
![]() |
53bad5bd20 | ||
![]() |
d21c8a3cfe | ||
![]() |
0e6c6fc120 | ||
![]() |
cb58678c79 | ||
![]() |
da3f5e2a08 | ||
![]() |
697bc7f51d | ||
![]() |
b835900776 | ||
![]() |
c266a4826c | ||
![]() |
03dfdb072c | ||
![]() |
a23c1d6d58 | ||
![]() |
6f0dfc5a81 | ||
![]() |
900952495e | ||
![]() |
994cbf8f92 | ||
![]() |
d31627d6a6 | ||
![]() |
65d08de249 | ||
![]() |
d9a2fc8fdf | ||
![]() |
e77abaea8c | ||
![]() |
a1535908ec | ||
![]() |
93935b3dfb | ||
![]() |
aa2e082dcb | ||
![]() |
8f793b7b9e | ||
![]() |
a58de530d7 | ||
![]() |
8bf5f0c4f8 | ||
![]() |
c83ebbe82c | ||
![]() |
996d26ac3a | ||
![]() |
5ee49e33e8 | ||
![]() |
b2d795d8b6 | ||
![]() |
454607953d | ||
![]() |
713c258ff8 | ||
![]() |
f97818df21 | ||
![]() |
3b77c130ee | ||
![]() |
57d785ac98 | ||
![]() |
e4bb6ec3ef | ||
![]() |
e83a31ebaf | ||
![]() |
436f23c899 | ||
![]() |
af8f1e23df | ||
![]() |
21c8865209 | ||
![]() |
b1abcd8764 | ||
![]() |
aee4d0aedd | ||
![]() |
8997e51b32 | ||
![]() |
a6c073409e | ||
![]() |
ca1d349ca5 | ||
![]() |
cc9b9ef08e | ||
![]() |
bd060315d0 | ||
![]() |
b751ff519e | ||
![]() |
41619e6e4d | ||
![]() |
a02632edcb | ||
![]() |
65f8fa87ac | ||
![]() |
0525d01394 | ||
![]() |
4c40ca0232 | ||
![]() |
fd673dac68 | ||
![]() |
019cfe8152 | ||
![]() |
84656774fd | ||
![]() |
be5ec9ed29 | ||
![]() |
ff60057e62 | ||
![]() |
72a1a13033 | ||
![]() |
1339a71969 | ||
![]() |
d28dcaef29 | ||
![]() |
0f74ad944f | ||
![]() |
2c9898e649 | ||
![]() |
e93934d1cf | ||
![]() |
1e0ff12c60 | ||
![]() |
0d6d999e62 | ||
![]() |
82bed9224c | ||
![]() |
a1a65d2e48 | ||
![]() |
5dd4d83f3f | ||
![]() |
d4c7365725 | ||
![]() |
d9a00a5f55 | ||
![]() |
5d59d6f8d2 | ||
![]() |
1c2b65814f | ||
![]() |
27e767e935 | ||
![]() |
36d91e973e | ||
![]() |
c5a6aed115 | ||
![]() |
a120ce66b0 | ||
![]() |
a7e984151b | ||
![]() |
b9ac1265f4 | ||
![]() |
8d91119371 | ||
![]() |
8b7c4862f3 | ||
![]() |
f9bd01021d | ||
![]() |
d8afb7bf42 | ||
![]() |
872ed2758f | ||
![]() |
faac8542e4 | ||
![]() |
a7fbf2205f | ||
![]() |
7854587a5f | ||
![]() |
c1c36a5780 | ||
![]() |
dd77c9930f | ||
![]() |
68e507604c | ||
![]() |
1269360946 | ||
![]() |
263a58e84f | ||
![]() |
840ec2d8f0 | ||
![]() |
8b2ab1e5d9 | ||
![]() |
9261028dcb | ||
![]() |
e4540da772 | ||
![]() |
618f5ec279 | ||
![]() |
7d67620b03 | ||
![]() |
121f580abb | ||
![]() |
b4f14ab6e8 | ||
![]() |
b87f5c4ee8 | ||
![]() |
2e63907565 | ||
![]() |
55f9b49577 | ||
![]() |
a96e581fa4 | ||
![]() |
f0a6532deb | ||
![]() |
f486167cc4 | ||
![]() |
3929cfab17 | ||
![]() |
22e6df1d4d | ||
![]() |
4bf6e07235 | ||
![]() |
376a7d8be8 | ||
![]() |
38e785ddb0 | ||
![]() |
e2c625f2d9 | ||
![]() |
11a7e58237 | ||
![]() |
13fd9a3897 | ||
![]() |
667ac8966a | ||
![]() |
01544d86c6 | ||
![]() |
32f002893c | ||
![]() |
2973cb4cba | ||
![]() |
40c5cd7212 | ||
![]() |
29baa5a152 | ||
![]() |
a18b9c7f81 | ||
![]() |
6645fcecd5 | ||
![]() |
3bfb2be6ab | ||
![]() |
9b10bba142 | ||
![]() |
0c4e5f5495 | ||
![]() |
a648f1ef51 | ||
![]() |
f60e92d9b9 | ||
![]() |
ecdd17162a | ||
![]() |
a972831441 | ||
![]() |
6459b0c067 | ||
![]() |
993466a1c9 | ||
![]() |
3acb94ef05 | ||
![]() |
493cfceedd | ||
![]() |
6980aae774 | ||
![]() |
412cd9995b | ||
![]() |
72d80c1120 | ||
![]() |
3032db29d7 | ||
![]() |
2c30602e10 | ||
![]() |
30258f3898 | ||
![]() |
d63c162ac6 | ||
![]() |
6533a40793 | ||
![]() |
25091cc6fb | ||
![]() |
52c9bd1847 | ||
![]() |
483d852823 | ||
![]() |
9840d88ea4 | ||
![]() |
9ad328b681 | ||
![]() |
505c73a27c | ||
![]() |
67ec3980b5 | ||
![]() |
c40964ec33 | ||
![]() |
17a59c4a35 | ||
![]() |
d260e3dfbb | ||
![]() |
cefc4dde7a | ||
![]() |
cbda2ffb78 | ||
![]() |
57ea8ba7fc | ||
![]() |
105a202f8c | ||
![]() |
fe457a0349 | ||
![]() |
463f112c85 | ||
![]() |
668da207aa | ||
![]() |
687c91bcf5 | ||
![]() |
9295929903 | ||
![]() |
a06530ee31 | ||
![]() |
6183f2d30d | ||
![]() |
f7d2384e16 | ||
![]() |
b3f2085443 | ||
![]() |
15443a6aaa | ||
![]() |
3ad85b4c58 | ||
![]() |
6f8a136cde | ||
![]() |
687e43137c | ||
![]() |
301fdbb1b6 | ||
![]() |
37390a521e | ||
![]() |
0d35e9377e | ||
![]() |
c8b3cf0746 | ||
![]() |
a7f9ceedea | ||
![]() |
5eec8f264e | ||
![]() |
75836f2264 | ||
![]() |
e07edcd18f | ||
![]() |
d76aa90cd1 | ||
![]() |
d4f6879a18 | ||
![]() |
30415249ac | ||
![]() |
ac09bd0334 | ||
![]() |
999da0ef9e | ||
![]() |
fa66b626de | ||
![]() |
05c9a33c57 | ||
![]() |
ddd6bdb332 | ||
![]() |
b4e34da365 | ||
![]() |
0514b2df62 | ||
![]() |
83573bf7e6 | ||
![]() |
178616bccc | ||
![]() |
deb3c66a86 | ||
![]() |
9a33f2180c | ||
![]() |
bac2666e51 | ||
![]() |
a1eb874ae7 | ||
![]() |
fc67e3ef87 | ||
![]() |
01df9ce948 | ||
![]() |
4a36f0bb34 | ||
![]() |
6d0f7de2f5 | ||
![]() |
374bc13a7b | ||
![]() |
7bff32b718 | ||
![]() |
101e519c89 | ||
![]() |
4b1110396d | ||
![]() |
6c4f7a7c3c | ||
![]() |
ffe847c9cc | ||
![]() |
054a024d2c |
|
@ -1,6 +1,10 @@
|
|||
{
|
||||
"name": "abapGit",
|
||||
"image": "mcr.microsoft.com/vscode/devcontainers/javascript-node:0-12",
|
||||
"extensions": ["larshp.vscode-abaplint"],
|
||||
"image": "mcr.microsoft.com/vscode/devcontainers/javascript-node:0-20",
|
||||
"customizations": {
|
||||
"vscode": {
|
||||
"extensions": ["larshp.vscode-abaplint"]
|
||||
}
|
||||
},
|
||||
"postCreateCommand": "npm install"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,6 +12,10 @@ trim_trailing_whitespace = true
|
|||
indent_style = space
|
||||
indent_size = 1
|
||||
|
||||
# XSLT source code must have CR LF to be deserialized correctly by SAP code
|
||||
[*.xslt.source.xml]
|
||||
end_of_line = crlf
|
||||
|
||||
# match the format used by abapGit
|
||||
[*.{abap,js,json,html,css}]
|
||||
charset = utf-8
|
||||
|
|
|
@ -1,14 +0,0 @@
|
|||
---
|
||||
parserOptions:
|
||||
ecmaVersion: 5
|
||||
env:
|
||||
browser: true
|
||||
extends:
|
||||
- eslint:recommended
|
||||
rules:
|
||||
quotes: ['error', 'double', { 'avoidEscape': true }]
|
||||
semi: ['error', 'always', { 'omitLastInOneLineBlock': true}]
|
||||
no-console: off
|
||||
indent: ['error', 2]
|
||||
no-trailing-spaces: ['error']
|
||||
no-unused-vars: ['warn']
|
7
.github/workflows/ajson_mirror.yaml
vendored
7
.github/workflows/ajson_mirror.yaml
vendored
|
@ -19,11 +19,8 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '20'
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- name: run
|
||||
run: |
|
||||
git clone https://github.com/abapGit/ajson_mirror.git
|
||||
|
|
23
.github/workflows/main-build.yml
vendored
23
.github/workflows/main-build.yml
vendored
|
@ -9,11 +9,8 @@ jobs:
|
|||
build-merged:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Use Node.js
|
||||
uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '16'
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- name: Run npm steps
|
||||
run: |
|
||||
npm install
|
||||
|
@ -44,12 +41,10 @@ jobs:
|
|||
outputs:
|
||||
pushedTag: ${{ steps.deploy-release-tag.outputs.pushedTag }}
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '16'
|
||||
- uses: actions/setup-node@v4
|
||||
- name: deploy-release-tag
|
||||
id: deploy-release-tag
|
||||
if: github.ref == 'refs/heads/main' && github.repository == 'abapGit/abapGit'
|
||||
|
@ -64,12 +59,12 @@ jobs:
|
|||
needs: [build-merged, auto-tag]
|
||||
if: github.ref == 'refs/heads/main' && github.repository == 'abapGit/abapGit' && !!needs.auto-tag.outputs.pushedTag
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
repository: abapGit/build
|
||||
path: build
|
||||
ssh-key: ${{ secrets.DEPLOY_ABAPGIT_BUILD }}
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
path: abapGit
|
||||
- name: mirror tag to the artifact
|
||||
|
@ -84,10 +79,8 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 5
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '16'
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- name: npm run unit
|
||||
run: |
|
||||
npm install
|
||||
|
|
4
.github/workflows/reuse.yml
vendored
4
.github/workflows/reuse.yml
vendored
|
@ -6,6 +6,6 @@ jobs:
|
|||
test:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/checkout@v4
|
||||
- name: REUSE Compliance Check
|
||||
uses: fsfe/reuse-action@v1
|
||||
uses: fsfe/reuse-action@v5
|
||||
|
|
36
.github/workflows/test-pr.yml
vendored
36
.github/workflows/test-pr.yml
vendored
|
@ -11,12 +11,9 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '20'
|
||||
- name: npm install
|
||||
run: |
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- run: |
|
||||
npm install
|
||||
npm run eslint
|
||||
npm run merge
|
||||
|
@ -32,30 +29,21 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '20'
|
||||
- name: npm install
|
||||
run: npm install
|
||||
- name: npm run unit
|
||||
run: npm run unit
|
||||
- name: npm run coverage
|
||||
run: npm run coverage
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- run: npm install
|
||||
- run: npm run unit
|
||||
- run: npm run coverage
|
||||
|
||||
integration:
|
||||
runs-on: ubuntu-latest
|
||||
needs: unit-tests
|
||||
timeout-minutes: 10
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '20'
|
||||
- name: npm install
|
||||
run: npm install
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-node@v4
|
||||
- run: npm install
|
||||
- name: start gitea
|
||||
working-directory: test/gitea/
|
||||
run: npm install && npm run gitea
|
||||
- name: npm run integration
|
||||
run: npm run integration
|
||||
- run: npm run integration
|
||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -13,3 +13,4 @@ list.txt
|
|||
/playwright-report/
|
||||
/blob-report/
|
||||
/playwright/.cache/
|
||||
.DS_Store
|
||||
|
|
|
@ -3,8 +3,7 @@
|
|||
[](LICENSE)
|
||||
[](https://api.reuse.software/info/github.com/abapGit/abapGit)
|
||||
[](https://communityinviter.com/apps/abapgit/abap)
|
||||
[](https://github.com/abapGit/abapGit/blob/main/src/zif_abapgit_version.intf.abap)
|
||||
|
||||
[](https://github.com/abapGit/abapGit/blob/main/src/zif_abapgit_version.intf.abap)
|
||||
|
||||
<!--
|
||||
<picture>
|
||||
|
@ -69,4 +68,5 @@ For questions/comments/bugs/feature requests/wishes please create an [issue](htt
|
|||
|
||||
- Icons used in abapGit are created from [Font Awesome](https://fontawesome.com/) free icon set ([CC-BY-4.0](LICENSES/CC-BY-4.0.txt))
|
||||
- [AJSON](https://github.com/sbcgua/ajson) and [String-Map](https://github.com/sbcgua/abap-string-map) are developed by Alexander Tsybulsky ([MIT](LICENSES/MIT.txt))
|
||||
- [AFF](https://github.com/SAP/abap-file-formats) formats are by SAP ([MIT](LICENSES/MIT.txt))
|
||||
|
||||
|
|
3
SECURITY.md
Normal file
3
SECURITY.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# Reporting Security Issues
|
||||
|
||||
To report a security issue, please use the GitHub Security Advisory ["Report a Vulnerability"](https://github.com/abapGit/abapGit/security/advisories/new) tab.
|
|
@ -1,20 +1,52 @@
|
|||
{
|
||||
"global": {
|
||||
"files": "/{test/src,src}/**/*.*",
|
||||
"skipGeneratedFunctionGroups": true,
|
||||
"skipGeneratedGatewayClasses": true,
|
||||
"skipGeneratedPersistentClasses": true
|
||||
},
|
||||
"dependencies": [
|
||||
{
|
||||
"files": "/**/*.*",
|
||||
"folder": "/deps"
|
||||
},
|
||||
{
|
||||
"url": "https://github.com/abaplint/deps",
|
||||
"files": "/src/**/*.*",
|
||||
"folder": "/lint_deps",
|
||||
"url": "https://github.com/abaplint/deps"
|
||||
"folder": "/lint_deps"
|
||||
}
|
||||
],
|
||||
"global": {
|
||||
"files": "/{test/src,src}/**/*.*",
|
||||
"skipGeneratedFunctionGroups": true,
|
||||
"skipGeneratedGatewayClasses": true,
|
||||
"skipGeneratedPersistentClasses": true
|
||||
"syntax": {
|
||||
"errorNamespace": "^(Z|Y|LT?CL_|TY_|LIF_|C_|.*ABAPGIT)",
|
||||
"globalConstants": [
|
||||
"abap_func_exporting",
|
||||
"abap_func_tables",
|
||||
"cssf_formtype_text",
|
||||
"seok_access_free",
|
||||
"seok_access_modify",
|
||||
"sews_c_vif_version",
|
||||
"skwfc_obtype_folder",
|
||||
"skwfc_obtype_loio",
|
||||
"so2_controller",
|
||||
"srext_ext_class_pool",
|
||||
"srext_ext_interface_pool",
|
||||
"ststc_c_type_dialog",
|
||||
"ststc_c_type_object",
|
||||
"ststc_c_type_parameters",
|
||||
"ststc_c_type_report",
|
||||
"swbm_c_op_delete_no_dialog",
|
||||
"swbm_c_type_ddic_db_tabxinx",
|
||||
"swbm_c_type_wdy_application",
|
||||
"swbm_version_active",
|
||||
"swbm_version_inactive",
|
||||
"swfco_org_standard_task",
|
||||
"swfco_org_workflow_template",
|
||||
"wbmr_c_skwf_folder_class",
|
||||
"wdyn_limu_component_controller",
|
||||
"wdyn_limu_component_definition",
|
||||
"wdyn_limu_component_view"
|
||||
],
|
||||
"version": "v702"
|
||||
},
|
||||
"rules": {
|
||||
"7bit_ascii": {
|
||||
|
@ -25,9 +57,15 @@
|
|||
]
|
||||
},
|
||||
"abapdoc": false,
|
||||
"align_type_expressions": true,
|
||||
"align_pseudo_comments": false,
|
||||
"invalid_table_index": true,
|
||||
"tables_declared_locally": true,
|
||||
"unused_macros": true,
|
||||
"align_parameters": false,
|
||||
"allowed_object_naming": true,
|
||||
"allowed_object_types": {
|
||||
"exclude": ["test/src/"],
|
||||
"allowed": [
|
||||
"CLAS",
|
||||
"DEVC",
|
||||
|
@ -120,8 +158,11 @@
|
|||
},
|
||||
"double_space": true,
|
||||
"downport": false,
|
||||
"add_test_attributes": true,
|
||||
"implicit_start_of_selection": true,
|
||||
"empty_event": true,
|
||||
"dynpro_checks": false,
|
||||
"easy_to_find_messages": true,
|
||||
"easy_to_find_messages": false,
|
||||
"empty_line_in_statement": {
|
||||
"allowChained": true
|
||||
},
|
||||
|
@ -130,6 +171,7 @@
|
|||
"at": true,
|
||||
"case": true,
|
||||
"do": true,
|
||||
"loopAllowIfSubrc": false,
|
||||
"if": false,
|
||||
"loop": true,
|
||||
"select": true,
|
||||
|
@ -183,8 +225,8 @@
|
|||
"^if_adt_lock_handle$",
|
||||
"^if_aff_",
|
||||
"^if_satc_ci_variant_access$",
|
||||
"^if_saunit_internal_result$",
|
||||
"^if_saunit_internal_result_type$",
|
||||
"^if_saunit_internal_result$",
|
||||
"^if_srvd_types$",
|
||||
"^if_wb_adt_plugin_resource_co$",
|
||||
"^if_wb_object_data_selection_co$",
|
||||
|
@ -192,6 +234,7 @@
|
|||
"^if_xco_",
|
||||
"^int4$",
|
||||
"^numc2$",
|
||||
"^pgmid$",
|
||||
"^sabp_t_tadir_keys$",
|
||||
"^sap_bool$",
|
||||
"^srcsystem$",
|
||||
|
@ -201,6 +244,7 @@
|
|||
"^sychar70$",
|
||||
"^sydatum$",
|
||||
"^sylangu$",
|
||||
"^syst_langu$",
|
||||
"^syst_title$",
|
||||
"^syuzeit$",
|
||||
"^xubname$"
|
||||
|
@ -249,7 +293,7 @@
|
|||
"/json/",
|
||||
"zcl_abapgit_object_pdts.clas.testclasses.abap"
|
||||
],
|
||||
"length": 120
|
||||
"length": 125
|
||||
},
|
||||
"line_only_punc": {
|
||||
"ignoreExceptions": true
|
||||
|
@ -275,6 +319,9 @@
|
|||
"message_exists": true,
|
||||
"method_implemented_twice": true,
|
||||
"method_length": {
|
||||
"exclude": [
|
||||
"zcl_abapgit_convert.clas.locals_imp.abap"
|
||||
],
|
||||
"checkForms": true,
|
||||
"errorWhenEmpty": false,
|
||||
"ignoreTestClasses": false,
|
||||
|
@ -458,37 +505,5 @@
|
|||
"when_others_last": true,
|
||||
"whitespace_end": true,
|
||||
"xml_consistency": true
|
||||
},
|
||||
"syntax": {
|
||||
"errorNamespace": "^(Z|Y|LT?CL_|TY_|LIF_|C_|.*ABAPGIT)",
|
||||
"globalConstants": [
|
||||
"abap_func_exporting",
|
||||
"abap_func_tables",
|
||||
"cssf_formtype_text",
|
||||
"seok_access_free",
|
||||
"seok_access_modify",
|
||||
"sews_c_vif_version",
|
||||
"skwfc_obtype_folder",
|
||||
"skwfc_obtype_loio",
|
||||
"so2_controller",
|
||||
"srext_ext_class_pool",
|
||||
"srext_ext_interface_pool",
|
||||
"ststc_c_type_dialog",
|
||||
"ststc_c_type_object",
|
||||
"ststc_c_type_parameters",
|
||||
"ststc_c_type_report",
|
||||
"swbm_c_op_delete_no_dialog",
|
||||
"swbm_c_type_ddic_db_tabxinx",
|
||||
"swbm_c_type_wdy_application",
|
||||
"swbm_version_active",
|
||||
"swbm_version_inactive",
|
||||
"swfco_org_standard_task",
|
||||
"swfco_org_workflow_template",
|
||||
"wbmr_c_skwf_folder_class",
|
||||
"wdyn_limu_component_controller",
|
||||
"wdyn_limu_component_definition",
|
||||
"wdyn_limu_component_view"
|
||||
],
|
||||
"version": "v702"
|
||||
}
|
||||
}
|
||||
|
|
138
changelog.txt
138
changelog.txt
|
@ -8,6 +8,138 @@ Legend
|
|||
+ : added
|
||||
- : removed
|
||||
|
||||
2025-01-01 v1.131.0
|
||||
-------------------
|
||||
|
||||
! Remove need to `parallel_generators` server group (#7119)
|
||||
+ VIEW: save `tddat` entries to transport (#7042)
|
||||
+ Support for HTTP Destination (#7100)
|
||||
+ Enhance logging with message id and number (#7111)
|
||||
* Fix language conversion for language A (#7076)
|
||||
* longtexts: workaround strange object names dump (#7077)
|
||||
* SRVB: Clear fields and fix deserialize order (#7085)
|
||||
* MSAG: Fix error handling during deletion (#7093)
|
||||
* Fix error handling in exception viewer (#7095)
|
||||
* Fix dark theme CSS whitespace (#7104)
|
||||
* MSAG: Fix deletion of message longtexts (#7109)
|
||||
* Fix RFC error handling (#7102)
|
||||
* IDOC/IEXT: Fix deserialize in background (#7113)
|
||||
* USCA: Fix missing transport entry (#7110)
|
||||
* FUGS: Fix activation error (#7115)
|
||||
* Limit number of GUI sessions (#7080)
|
||||
* Fix dump when converting `xstring` to `bintab` (#7120)
|
||||
|
||||
2024-11-04 v1.130.0
|
||||
-------------------
|
||||
|
||||
! PROG: Store flow logic as separate ABAP files (#7066)
|
||||
! WDYN: Store controller code as separate ABAP files (#7069)
|
||||
! SSFO: Store smartform code as separate ABAP files (#7071)
|
||||
+ CLIF: Add missing translations for classes and interfaces (#6963)
|
||||
+ UIAD: Add support for Launchpad App Descriptor Item (#6969)
|
||||
+ BGQC: Add support for Background Processing Context (#6974)
|
||||
+ DSFD: CDS Scalar Function Definition (#6951)
|
||||
+ DRAS: CDS Aspect (#6953)
|
||||
+ DSFI: CDS Scalar Function Implementation (#6952)
|
||||
+ Add support for Software Component Relations (#7012)
|
||||
* ENHO: Fix diff in generated comments of class enhancements (#6962)
|
||||
* SXSD: Fix check if BADI exists (#6961)
|
||||
* CDBO: Fix missing parameters in `constructor` (#6966)
|
||||
* Fix dump in activation error handling (#6967)
|
||||
* Fix deserialize SEOCLASSTX for INTF [AFF] (#6983)
|
||||
* Allow staging for empty repositories (#6981)
|
||||
* fix: syst_langu does not exist on older releases (#6999)
|
||||
* fix sticky header with browser control warning (#6997)
|
||||
* DSFI: Updated object handler to match the latest AFF definition (#7013)
|
||||
* Filenames for translation are case sensitive (#6995)
|
||||
* Enable deserialization of DSFD, DSFI and DRAS (#7029)
|
||||
* PROG: Support dynpros with splitter control (#7035, #7038)
|
||||
* Fix `CX_SY_ZERODIVIDE` dump in progress bar (#7036)
|
||||
* JOBD: Clear `changedby` field (#7039)
|
||||
* SFPF: Add syntax highlighting for `xdp` files (#7040)
|
||||
* SFPF: Fix check if object exists (#7041)
|
||||
* Add package check when creating repository (#7037)
|
||||
* FUGS: serialization (#7045)
|
||||
* Enable CDS types (#7048)
|
||||
* Don't discard includes of nonexistent FUGR (#7053)
|
||||
* Added enhanced method resolution for background exit (#7059)
|
||||
* TABU: Display transport requests (#7063)
|
||||
* Show diffs in case of trailing spaces (#7062)
|
||||
- remove 200% icon scaling (#7003)
|
||||
|
||||
2024-07-01 v1.129.0
|
||||
-------------------
|
||||
|
||||
+ DEVC,NSPC: Serialize software component for add-ons (#6891)
|
||||
+ Where-used page (#6897)
|
||||
+ CDBO: Customer Data Browser Object (#6930)
|
||||
+ VIEW: Add authorization group to serialize and deserialize (#6918)
|
||||
+ Exclude files from remote (#6942)
|
||||
+ Read-only support for SXSD - Classic BAdI definition (#6958)
|
||||
* Change message if local packages got lost (#6905)
|
||||
* SOTS: Remove from TADIR selection (#6906)
|
||||
* Fix bug in "Object to Files" Page. (#6908)
|
||||
* DEVC: Fix "Package must be assigned to the software component LOCAL" (#6912)
|
||||
* Improve error message for SUSH objects not being supported. (#6916)
|
||||
* Use bcp47 language code for AFF (#6915)
|
||||
* Suppress popup when using background API (#6926)
|
||||
* Fix Issue Encountered on "Data Config" Page. (#6913)
|
||||
* Bugfix, new pull page: decide package warnings (#6932)
|
||||
* Set Character Limit for "Table" Field in Data Config page (#6934)
|
||||
* ENHO: workaround dump during serialization (#6935)
|
||||
* HOOK: catch exception (#6937)
|
||||
* Sync UI theme in dark mode (#6940)
|
||||
* Set Default Git User Details (#6920)
|
||||
* Small performance improvement in folder logic (#6941)
|
||||
* Fix folder logic buffer (#6945)
|
||||
* Fix yank mode - copy to clipboad (#6946)
|
||||
* Data serializer: fix carriage return problem (#6957)
|
||||
* TABL: Clear DBINCLEXCL and DBSYSSELx fields (#6960)
|
||||
|
||||
2024-04-05 v1.128.0
|
||||
-------------------
|
||||
|
||||
! Make HTTP/1.1 new default in abapGit (#6902)
|
||||
! Distinguish between "Global Settings" and "Repository Settings" (#6759)
|
||||
+ Add support for DRTY - CDS Type (#6767)
|
||||
+ Add support for DTEB - CDS Entity Buffer (#6769)
|
||||
+ Add "ignore sub-packages" option to package export (#6815)
|
||||
+ HTTP connection check and improved error messages (#6806)
|
||||
+ UIPG, UIST: Add support for Launchpad Page and Space Templates (#6873)
|
||||
+ ENHO/ENHS: Add missing longtexts (#6890)
|
||||
* Fix typos and adjust comments (#6778, #6779, #6780, #6783, #6785, #6786m #6858, #6864)
|
||||
* User exit: include settings parameters in change_tadir() (#6775)
|
||||
* Remove Duplicate Entries in Command Palette (#6763)
|
||||
* Ignore macOS "Desktop Services Store" files (#6787)
|
||||
* Fix ABAP Language Version Handling for Repository Setting "Any" for AFF Object Types (#6793)
|
||||
* Fix bug in Command Palette (#6799)
|
||||
* DIAL: Prefill package popup (#6805)
|
||||
* XSLT: Add check for correct EOL separator (#6803)
|
||||
* Update the text "Submit Query" in the Command Palette. (#6810)
|
||||
* CLAS/INTF-SYNTAX_CHECK: Suppress status message (#6812)
|
||||
* Improve error messages when checking branches/tags (#6814)
|
||||
* Improve form validation of text fields (#6813)
|
||||
* Fix bug in Personal settings page (#6818)
|
||||
* Fix Navigation Issue in "Config Display" and "Config Edit" pages. (#6820)
|
||||
* Fix Filter Application Bug (#6824)
|
||||
* Change transport type when setting original system (#6816)
|
||||
* FORM: Fix existence check (#6832)
|
||||
* Apack: fix namespace problem (#6841)
|
||||
* Remove duplicate labels from Command Palette. (#6821)
|
||||
* IDOC: Fix MOVE_TO_LIT_NOTALLOWED_NODATA (#6852)
|
||||
* SICF: Include alternate service name (#6853)
|
||||
* Apack: additional namespace case (#6851)
|
||||
* SFPI: exists() also look for inactive objects (#6867)
|
||||
* Code inspector pages improvements (#6862)
|
||||
* AFF: deserialize translation files (#6830)
|
||||
* Fix Unexpected Functionality for "Maximum Length of Comment" Field (#6871)
|
||||
* Avoid popup on exit after saving remote settings (#6875)
|
||||
* Fix Hint for "Maximum Length of Comment" Field (#6877)
|
||||
* Fix changing transport type when setting original system (#6870)
|
||||
* Limit Package Name to 30 characters (#6889)
|
||||
* Item graph: performance (#6885)
|
||||
* Add specific error message for 426 http error (#6901)
|
||||
|
||||
2024-01-24 v1.127.0
|
||||
-------------------
|
||||
|
||||
|
@ -123,10 +255,10 @@ Legend
|
|||
+ APIS: API Release State (#6403)
|
||||
+ IWOM/IWPR/TRAN: Implement changed_by (#6411)
|
||||
+ Add online/offline filter option for repo list (#6449)
|
||||
* Dont dump for unknown frontend (#6302)
|
||||
* Don't dump for unknown frontend (#6302)
|
||||
* IDOC, TABL: Set released and closed status (#6306)
|
||||
* Fix is_dirty check for Repo Settings (#6309)
|
||||
* Unit test page: dont show SAUNIT_NO_TEST_CLASS err (#6310)
|
||||
* Unit test page: don't show SAUNIT_NO_TEST_CLASS err (#6310)
|
||||
* Fixed links to new documentation (#6319)
|
||||
* Fix "Data" page: On back go back (#6322)
|
||||
* OO serializer: skip includes not found (#6324)
|
||||
|
@ -1571,7 +1703,7 @@ Legend
|
|||
------------------
|
||||
* minor fixes for tags
|
||||
* downport
|
||||
* fix serilization of SXCI in background mode
|
||||
* fix serialization of SXCI in background mode
|
||||
|
||||
2018-01-03 v1.51.0
|
||||
------------------
|
||||
|
|
61
deps/cdnames.tabl.xml
vendored
Normal file
61
deps/cdnames.tabl.xml
vendored
Normal file
|
@ -0,0 +1,61 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DD02V>
|
||||
<TABNAME>CDNAMES</TABNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<TABCLASS>INTTAB</TABCLASS>
|
||||
<DDTEXT>CDNAMES</DDTEXT>
|
||||
<EXCLASS>1</EXCLASS>
|
||||
</DD02V>
|
||||
<DD03P_TABLE>
|
||||
<DD03P>
|
||||
<FIELDNAME>REPNAMEC</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>REPNAMET</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>REPNAMEFIX</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>REPNAMEVAR</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>FGRP</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
</DD03P_TABLE>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
24
deps/cdobjectcl.dtel.xml
vendored
Normal file
24
deps/cdobjectcl.dtel.xml
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DTEL" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DD04V>
|
||||
<ROLLNAME>CDOBJECTCL</ROLLNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<HEADLEN>15</HEADLEN>
|
||||
<SCRLEN1>10</SCRLEN1>
|
||||
<SCRLEN2>20</SCRLEN2>
|
||||
<SCRLEN3>40</SCRLEN3>
|
||||
<DDTEXT>CDOBJECTCL</DDTEXT>
|
||||
<REPTEXT>CDOBJECTCL</REPTEXT>
|
||||
<SCRTEXT_S>CDOBJECTCL</SCRTEXT_S>
|
||||
<SCRTEXT_M>CDOBJECTCL</SCRTEXT_M>
|
||||
<SCRTEXT_L>CDOBJECTCL</SCRTEXT_L>
|
||||
<DTELMASTER>E</DTELMASTER>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000015</LENG>
|
||||
<OUTPUTLEN>000015</OUTPUTLEN>
|
||||
</DD04V>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
8
deps/cl_package_factory.clas.abap
vendored
8
deps/cl_package_factory.clas.abap
vendored
|
@ -2,10 +2,10 @@ CLASS cl_package_factory DEFINITION PUBLIC.
|
|||
PUBLIC SECTION.
|
||||
CLASS-METHODS load_package
|
||||
IMPORTING
|
||||
i_package_name TYPE devclass
|
||||
i_package_name TYPE devclass
|
||||
VALUE(i_force_reload) TYPE abap_bool OPTIONAL
|
||||
EXPORTING
|
||||
VALUE(e_package) TYPE REF TO if_package
|
||||
VALUE(e_package) TYPE REF TO if_package
|
||||
EXCEPTIONS
|
||||
object_not_existing
|
||||
unexpected_error
|
||||
|
@ -19,9 +19,9 @@ CLASS cl_package_factory DEFINITION PUBLIC.
|
|||
!i_suppress_dialog TYPE abap_bool DEFAULT abap_false
|
||||
!i_suppress_access_permission TYPE abap_bool DEFAULT abap_false
|
||||
EXPORTING
|
||||
VALUE(e_package) TYPE REF TO if_package
|
||||
VALUE(e_package) TYPE REF TO if_package
|
||||
CHANGING
|
||||
c_package_data TYPE any.
|
||||
c_package_data TYPE any.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS cl_package_factory IMPLEMENTATION.
|
||||
|
|
25
deps/cl_package_helper.clas.abap
vendored
Normal file
25
deps/cl_package_helper.clas.abap
vendored
Normal file
|
@ -0,0 +1,25 @@
|
|||
CLASS cl_package_helper DEFINITION PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS check_package_name
|
||||
IMPORTING
|
||||
i_package_name TYPE any.
|
||||
|
||||
CLASS-METHODS check_package_existence
|
||||
IMPORTING
|
||||
i_package_name TYPE any
|
||||
EXPORTING
|
||||
e_package_exists TYPE abap_bool.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS cl_package_helper IMPLEMENTATION.
|
||||
|
||||
METHOD check_package_name.
|
||||
ASSERT i_package_name IS NOT INITIAL.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_package_existence.
|
||||
ASSERT i_package_name IS NOT INITIAL.
|
||||
e_package_exists = abap_true.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
105
deps/e070.tabl.xml
vendored
Normal file
105
deps/e070.tabl.xml
vendored
Normal file
|
@ -0,0 +1,105 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DD02V>
|
||||
<TABNAME>E070</TABNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<TABCLASS>TRANSP</TABCLASS>
|
||||
<DDTEXT>E070</DDTEXT>
|
||||
<CONTFLAG>A</CONTFLAG>
|
||||
<EXCLASS>1</EXCLASS>
|
||||
</DD02V>
|
||||
<DD09L>
|
||||
<TABNAME>ZE070</TABNAME>
|
||||
<AS4LOCAL>A</AS4LOCAL>
|
||||
<TABKAT>0</TABKAT>
|
||||
<TABART>APPL0</TABART>
|
||||
<BUFALLOW>N</BUFALLOW>
|
||||
</DD09L>
|
||||
<DD03P_TABLE>
|
||||
<DD03P>
|
||||
<FIELDNAME>TRKORR</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ROLLNAME>TRKORR</ROLLNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<COMPTYPE>E</COMPTYPE>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>TRFUNCTION</FIELDNAME>
|
||||
<ROLLNAME>TRFUNCTION</ROLLNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<VALEXI>X</VALEXI>
|
||||
<SHLPORIGIN>F</SHLPORIGIN>
|
||||
<COMPTYPE>E</COMPTYPE>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>TRSTATUS</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>TARSYSTEM</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000020</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000010</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>KORRDEV</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000008</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000004</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>AS4USER</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000024</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000012</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>AS4DATE</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>D</INTTYPE>
|
||||
<INTLEN>000016</INTLEN>
|
||||
<DATATYPE>DATS</DATATYPE>
|
||||
<LENG>000008</LENG>
|
||||
<MASK> DATS</MASK>
|
||||
<SHLPORIGIN>T</SHLPORIGIN>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>AS4TIME</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>T</INTTYPE>
|
||||
<INTLEN>000012</INTLEN>
|
||||
<DATATYPE>TIMS</DATATYPE>
|
||||
<LENG>000006</LENG>
|
||||
<MASK> TIMS</MASK>
|
||||
<SHLPORIGIN>T</SHLPORIGIN>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>STRKORR</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000040</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000020</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
</DD03P_TABLE>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
116
deps/e071.tabl.xml
vendored
Normal file
116
deps/e071.tabl.xml
vendored
Normal file
|
@ -0,0 +1,116 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DD02V>
|
||||
<TABNAME>E071</TABNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<TABCLASS>TRANSP</TABCLASS>
|
||||
<DDTEXT>E071</DDTEXT>
|
||||
<CONTFLAG>A</CONTFLAG>
|
||||
<EXCLASS>1</EXCLASS>
|
||||
</DD02V>
|
||||
<DD09L>
|
||||
<TABNAME>ZE071</TABNAME>
|
||||
<AS4LOCAL>A</AS4LOCAL>
|
||||
<TABKAT>0</TABKAT>
|
||||
<TABART>APPL0</TABART>
|
||||
<BUFALLOW>N</BUFALLOW>
|
||||
</DD09L>
|
||||
<DD03P_TABLE>
|
||||
<DD03P>
|
||||
<FIELDNAME>TRKORR</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ROLLNAME>TRKORR</ROLLNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<COMPTYPE>E</COMPTYPE>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>AS4POS</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>N</INTTYPE>
|
||||
<INTLEN>000012</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>NUMC</DATATYPE>
|
||||
<LENG>000006</LENG>
|
||||
<MASK> NUMC</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>PGMID</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000008</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000004</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>OBJECT</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000008</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000004</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>OBJ_NAME</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000240</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000120</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>OBJFUNC</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>LOCKFLAG</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>GENNUM</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000006</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000003</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>LANG</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<DATATYPE>LANG</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> LANG</MASK>
|
||||
<LANGUFLAG>X</LANGUFLAG>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>ACTIVITY</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000040</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000020</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
</DD03P_TABLE>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
158
deps/e071k.tabl.xml
vendored
Normal file
158
deps/e071k.tabl.xml
vendored
Normal file
|
@ -0,0 +1,158 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DD02V>
|
||||
<TABNAME>E071K</TABNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<TABCLASS>TRANSP</TABCLASS>
|
||||
<DDTEXT>E071K</DDTEXT>
|
||||
<CONTFLAG>A</CONTFLAG>
|
||||
<EXCLASS>1</EXCLASS>
|
||||
</DD02V>
|
||||
<DD09L>
|
||||
<TABNAME>ZE071K</TABNAME>
|
||||
<AS4LOCAL>A</AS4LOCAL>
|
||||
<TABKAT>0</TABKAT>
|
||||
<TABART>APPL0</TABART>
|
||||
<BUFALLOW>N</BUFALLOW>
|
||||
</DD09L>
|
||||
<DD03P_TABLE>
|
||||
<DD03P>
|
||||
<FIELDNAME>TRKORR</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ROLLNAME>TRKORR</ROLLNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<COMPTYPE>E</COMPTYPE>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>PGMID</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000008</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000004</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>OBJECT</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000008</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000004</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>OBJNAME</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000060</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000030</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>AS4POS</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>N</INTTYPE>
|
||||
<INTLEN>000012</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>NUMC</DATATYPE>
|
||||
<LENG>000006</LENG>
|
||||
<MASK> NUMC</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>MASTERTYPE</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000008</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000004</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>MASTERNAME</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000080</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000040</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>VIEWNAME</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000060</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000030</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>OBJFUNC</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>TABKEY</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000240</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000120</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>SORTFLAG</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>FLAG</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>LANG</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<DATATYPE>LANG</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> LANG</MASK>
|
||||
<LANGUFLAG>X</LANGUFLAG>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>ACTIVITY</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000040</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000020</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
</DD03P_TABLE>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
54
deps/e07t.tabl.xml
vendored
Normal file
54
deps/e07t.tabl.xml
vendored
Normal file
|
@ -0,0 +1,54 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DD02V>
|
||||
<TABNAME>E07T</TABNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<TABCLASS>TRANSP</TABCLASS>
|
||||
<DDTEXT>E07T</DDTEXT>
|
||||
<CONTFLAG>A</CONTFLAG>
|
||||
<EXCLASS>1</EXCLASS>
|
||||
</DD02V>
|
||||
<DD09L>
|
||||
<TABNAME>ZE07T</TABNAME>
|
||||
<AS4LOCAL>A</AS4LOCAL>
|
||||
<TABKAT>0</TABKAT>
|
||||
<TABART>APPL0</TABART>
|
||||
<UEBERSETZ>N</UEBERSETZ>
|
||||
<BUFALLOW>N</BUFALLOW>
|
||||
</DD09L>
|
||||
<DD03P_TABLE>
|
||||
<DD03P>
|
||||
<FIELDNAME>TRKORR</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ROLLNAME>TRKORR</ROLLNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<COMPTYPE>E</COMPTYPE>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>LANGU</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>LANG</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> LANG</MASK>
|
||||
<LANGUFLAG>X</LANGUFLAG>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>AS4TEXT</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000120</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000060</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
</DD03P_TABLE>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
24
deps/enqmode.dtel.xml
vendored
Normal file
24
deps/enqmode.dtel.xml
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_DTEL" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DD04V>
|
||||
<ROLLNAME>ENQMODE</ROLLNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<HEADLEN>55</HEADLEN>
|
||||
<SCRLEN1>10</SCRLEN1>
|
||||
<SCRLEN2>20</SCRLEN2>
|
||||
<SCRLEN3>40</SCRLEN3>
|
||||
<DDTEXT>ENQMODE</DDTEXT>
|
||||
<REPTEXT>ENQMODE</REPTEXT>
|
||||
<SCRTEXT_S>ENQMODE</SCRTEXT_S>
|
||||
<SCRTEXT_M>ENQMODE</SCRTEXT_M>
|
||||
<SCRTEXT_L>ENQMODE</SCRTEXT_L>
|
||||
<DTELMASTER>E</DTELMASTER>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<OUTPUTLEN>000001</OUTPUTLEN>
|
||||
</DD04V>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
3
deps/if_package.intf.abap
vendored
3
deps/if_package.intf.abap
vendored
|
@ -1,5 +1,8 @@
|
|||
INTERFACE if_package PUBLIC.
|
||||
DATA wbo_korr_flag TYPE c LENGTH 1 READ-ONLY.
|
||||
DATA package_name TYPE string READ-ONLY.
|
||||
DATA short_text TYPE string READ-ONLY.
|
||||
DATA super_package_name TYPE string READ-ONLY.
|
||||
DATA software_component TYPE string READ-ONLY.
|
||||
DATA application_component TYPE string READ-ONLY.
|
||||
DATA transport_layer TYPE string READ-ONLY.
|
||||
|
|
43
deps/ko100.tabl.xml
vendored
Normal file
43
deps/ko100.tabl.xml
vendored
Normal file
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DD02V>
|
||||
<TABNAME>KO100</TABNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<TABCLASS>INTTAB</TABCLASS>
|
||||
<DDTEXT>KO100</DDTEXT>
|
||||
<EXCLASS>1</EXCLASS>
|
||||
</DD02V>
|
||||
<DD03P_TABLE>
|
||||
<DD03P>
|
||||
<FIELDNAME>PGMID</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000008</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000004</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>OBJECT</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000008</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000004</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>TEXT</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000120</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000060</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
</DD03P_TABLE>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
48
deps/seoclasstx.tabl.xml
vendored
Normal file
48
deps/seoclasstx.tabl.xml
vendored
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DD02V>
|
||||
<TABNAME>SEOCLASSTX</TABNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<TABCLASS>TRANSP</TABCLASS>
|
||||
<DDTEXT>SEOCLASSTX</DDTEXT>
|
||||
<CONTFLAG>A</CONTFLAG>
|
||||
<EXCLASS>1</EXCLASS>
|
||||
</DD02V>
|
||||
<DD09L>
|
||||
<TABNAME>SEOCLASSTX</TABNAME>
|
||||
<AS4LOCAL>A</AS4LOCAL>
|
||||
<TABKAT>0</TABKAT>
|
||||
<TABART>APPL0</TABART>
|
||||
<UEBERSETZ>N</UEBERSETZ>
|
||||
<BUFALLOW>N</BUFALLOW>
|
||||
</DD09L>
|
||||
<DD03P_TABLE>
|
||||
<DD03P>
|
||||
<FIELDNAME>CLSNAME</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ROLLNAME>SEOCLSNAME</ROLLNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<COMPTYPE>E</COMPTYPE>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>LANGU</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ROLLNAME>LANGU</ROLLNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<COMPTYPE>E</COMPTYPE>
|
||||
<LANGUFLAG>X</LANGUFLAG>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>DESCRIPT</FIELDNAME>
|
||||
<ROLLNAME>SEODESCR</ROLLNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<COMPTYPE>E</COMPTYPE>
|
||||
</DD03P>
|
||||
</DD03P_TABLE>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
57
deps/seometarel.tabl.xml
vendored
Normal file
57
deps/seometarel.tabl.xml
vendored
Normal file
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DD02V>
|
||||
<TABNAME>SEOMETAREL</TABNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<TABCLASS>TRANSP</TABCLASS>
|
||||
<DDTEXT>SEOMETAREL</DDTEXT>
|
||||
<CONTFLAG>A</CONTFLAG>
|
||||
<EXCLASS>1</EXCLASS>
|
||||
</DD02V>
|
||||
<DD09L>
|
||||
<TABNAME>SEOMETAREL</TABNAME>
|
||||
<AS4LOCAL>A</AS4LOCAL>
|
||||
<TABKAT>0</TABKAT>
|
||||
<TABART>APPL0</TABART>
|
||||
<BUFALLOW>N</BUFALLOW>
|
||||
</DD09L>
|
||||
<DD03P_TABLE>
|
||||
<DD03P>
|
||||
<FIELDNAME>CLSNAME</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000060</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000030</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>REFCLSNAME</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000060</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000030</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>VERSION</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000002</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000001</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
</DD03P_TABLE>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
25
deps/tcdrs.tabl.xml
vendored
Normal file
25
deps/tcdrs.tabl.xml
vendored
Normal file
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DD02V>
|
||||
<TABNAME>TCDRS</TABNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<TABCLASS>INTTAB</TABCLASS>
|
||||
<DDTEXT>TCDRS</DDTEXT>
|
||||
<EXCLASS>1</EXCLASS>
|
||||
</DD02V>
|
||||
<DD03P_TABLE>
|
||||
<DD03P>
|
||||
<FIELDNAME>TABNAME</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000060</INTLEN>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000030</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
</DD03P_TABLE>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
54
deps/zabapgit.tabl.xml
vendored
Normal file
54
deps/zabapgit.tabl.xml
vendored
Normal file
|
@ -0,0 +1,54 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_TABL" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<DD02V>
|
||||
<TABNAME>ZABAPGIT</TABNAME>
|
||||
<DDLANGUAGE>E</DDLANGUAGE>
|
||||
<TABCLASS>TRANSP</TABCLASS>
|
||||
<DDTEXT>Generated by abapGit</DDTEXT>
|
||||
<CONTFLAG>L</CONTFLAG>
|
||||
<EXCLASS>1</EXCLASS>
|
||||
</DD02V>
|
||||
<DD09L>
|
||||
<TABNAME>ZABAPGIT</TABNAME>
|
||||
<AS4LOCAL>A</AS4LOCAL>
|
||||
<TABKAT>1</TABKAT>
|
||||
<TABART>APPL1</TABART>
|
||||
<BUFALLOW>N</BUFALLOW>
|
||||
</DD09L>
|
||||
<DD03P_TABLE>
|
||||
<DD03P>
|
||||
<FIELDNAME>TYPE</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000024</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000012</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>VALUE</FIELDNAME>
|
||||
<KEYFLAG>X</KEYFLAG>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>C</INTTYPE>
|
||||
<INTLEN>000024</INTLEN>
|
||||
<NOTNULL>X</NOTNULL>
|
||||
<DATATYPE>CHAR</DATATYPE>
|
||||
<LENG>000012</LENG>
|
||||
<MASK> CHAR</MASK>
|
||||
</DD03P>
|
||||
<DD03P>
|
||||
<FIELDNAME>DATA_STR</FIELDNAME>
|
||||
<ADMINFIELD>0</ADMINFIELD>
|
||||
<INTTYPE>g</INTTYPE>
|
||||
<INTLEN>000008</INTLEN>
|
||||
<DATATYPE>STRG</DATATYPE>
|
||||
<MASK> STRG</MASK>
|
||||
</DD03P>
|
||||
</DD03P_TABLE>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
42
eslint.config.mjs
Normal file
42
eslint.config.mjs
Normal file
|
@ -0,0 +1,42 @@
|
|||
import js from "@eslint/js";
|
||||
import globals from "globals";
|
||||
|
||||
export default [
|
||||
js.configs.recommended,
|
||||
{
|
||||
"languageOptions": {
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2015
|
||||
},
|
||||
"sourceType": "script",
|
||||
"globals": globals.browser,
|
||||
},
|
||||
"rules": {
|
||||
"quotes": [
|
||||
"error",
|
||||
"double",
|
||||
{
|
||||
"avoidEscape": true
|
||||
}
|
||||
],
|
||||
"semi": [
|
||||
"error",
|
||||
"always",
|
||||
{
|
||||
"omitLastInOneLineBlock": true
|
||||
}
|
||||
],
|
||||
"no-console": "off",
|
||||
"indent": [
|
||||
"error",
|
||||
2
|
||||
],
|
||||
"no-trailing-spaces": [
|
||||
"error"
|
||||
],
|
||||
"no-unused-vars": [
|
||||
"warn"
|
||||
]
|
||||
}
|
||||
}
|
||||
];
|
24
package.json
24
package.json
|
@ -5,10 +5,10 @@
|
|||
"test": "npm run eslint && npm run abaplint",
|
||||
"merge": "abapmerge -f src/zabapgit.prog.abap -c zabapgit_standalone -o zabapgit.abap",
|
||||
"merge.ci": "cp zabapgit.abap ci/zabapgit_standalone.prog.abap && cd ci && abaplint --format codeframe && cd ..",
|
||||
"build": "rm -rf output && abap_transpile test/abap_transpile.json",
|
||||
"unit": "npm run build && echo RUNNING && node output/index.mjs",
|
||||
"coverage": "npm run unit && c8 node output/index.mjs && c8 report --reporter=html",
|
||||
"integration": "rm -rf output && cp test/abap_transpile.json test/abap_transpile_int.json && sed -i 's/src,deps/test\\\/src,src,deps/g' test/abap_transpile_int.json && abap_transpile test/abap_transpile_int.json && echo RUNNING && node output/index.mjs",
|
||||
"build": "rm -rf output && abap_transpile test/abap_transpile.json && cp -f src/ui/zabapgit_icon_font.w3mi.data.woff output/",
|
||||
"unit": "npm run build && echo RUNNING && node output/index.mjs --skip-critical",
|
||||
"coverage": "npm run unit && c8 node output/index.mjs --skip-critical && c8 report --reporter=html",
|
||||
"integration": "npm run build && echo RUNNING && node output/index.mjs --only-critical",
|
||||
"abaplint": "abaplint --format codeframe",
|
||||
"eslint": "eslint src"
|
||||
},
|
||||
|
@ -23,12 +23,14 @@
|
|||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
"@abaplint/cli": "^2.105.8",
|
||||
"@abaplint/database-sqlite": "^2.7.119",
|
||||
"@abaplint/runtime": "^2.7.140",
|
||||
"@abaplint/transpiler-cli": "^2.7.140",
|
||||
"abapmerge": "^0.16.0",
|
||||
"c8": "^9.0.0",
|
||||
"eslint": "^8.56.0"
|
||||
"@abaplint/cli": "^2.113.110",
|
||||
"@abaplint/database-sqlite": "^2.10.24",
|
||||
"@abaplint/runtime": "^2.10.44",
|
||||
"express": "^4.21.2",
|
||||
"@abaplint/transpiler-cli": "^2.10.44",
|
||||
"globals": "^16.0.0",
|
||||
"abapmerge": "^0.16.6",
|
||||
"c8": "^10.1.3",
|
||||
"eslint": "^9.25.1"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -178,7 +178,7 @@ CLASS zcl_abapgit_apack_migration IMPLEMENTATION.
|
|||
component_error = 4
|
||||
no_access = 5
|
||||
other = 6
|
||||
OTHERS = 7.
|
||||
OTHERS = 7 ##FM_SUBRC_OK.
|
||||
CATCH cx_sy_dyn_call_param_not_found.
|
||||
CALL FUNCTION 'SEO_INTERFACE_CREATE_COMPLETE'
|
||||
EXPORTING
|
||||
|
|
|
@ -89,7 +89,11 @@ CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
|
|||
ls_my_dependency TYPE zif_abapgit_apack_definitions=>ty_dependency,
|
||||
ls_descriptor TYPE zif_abapgit_apack_definitions=>ty_descriptor,
|
||||
lv_descriptor_cust TYPE string,
|
||||
lv_descriptor_sap TYPE string.
|
||||
lv_descriptor_sap TYPE string,
|
||||
lv_descriptor_nspc TYPE string,
|
||||
lv_class_name TYPE abap_abstypename,
|
||||
lv_empty TYPE string,
|
||||
ls_namespace TYPE zif_abapgit_definitions=>ty_obj_namespace.
|
||||
|
||||
FIELD-SYMBOLS: <lg_descriptor> TYPE any,
|
||||
<lt_dependencies> TYPE ANY TABLE,
|
||||
|
@ -98,9 +102,20 @@ CLASS zcl_abapgit_apack_reader IMPLEMENTATION.
|
|||
lv_descriptor_cust = zif_abapgit_apack_definitions=>c_apack_interface_cust && '~DESCRIPTOR'.
|
||||
lv_descriptor_sap = zif_abapgit_apack_definitions=>c_apack_interface_sap && '~DESCRIPTOR'.
|
||||
|
||||
lv_class_name = cl_abap_classdescr=>get_class_name( io_manifest_provider ).
|
||||
SPLIT lv_class_name AT '\CLASS=' INTO lv_empty lv_class_name.
|
||||
ls_namespace = zcl_abapgit_factory=>get_sap_namespace( )->split_by_name( lv_class_name ).
|
||||
|
||||
IF ls_namespace-namespace IS NOT INITIAL.
|
||||
lv_descriptor_nspc = |{ ls_namespace-namespace }{ lv_descriptor_sap }|.
|
||||
ENDIF.
|
||||
|
||||
ASSIGN io_manifest_provider->(lv_descriptor_cust) TO <lg_descriptor>.
|
||||
IF <lg_descriptor> IS NOT ASSIGNED.
|
||||
ASSIGN io_manifest_provider->(lv_descriptor_sap) TO <lg_descriptor>.
|
||||
IF <lg_descriptor> IS NOT ASSIGNED AND lv_descriptor_nspc IS NOT INITIAL.
|
||||
ASSIGN io_manifest_provider->(lv_descriptor_nspc) TO <lg_descriptor>.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
IF <lg_descriptor> IS ASSIGNED.
|
||||
" A little more complex than a normal MOVE-CORRSPONDING
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
*"* use this source file for your ABAP unit test classes
|
||||
CLASS ltcl_apack_manifest_reader DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
|
||||
PRIVATE SECTION.
|
||||
METHODS:
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
*"* use this source file for your ABAP unit test classes
|
||||
CLASS ltcl_apack_manifest_writer DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
|
||||
PRIVATE SECTION.
|
||||
METHODS: the_serializator FOR TESTING RAISING cx_static_check.
|
||||
|
|
|
@ -26,6 +26,7 @@ CLASS zcl_abapgit_background DEFINITION
|
|||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS c_enq_type TYPE c LENGTH 12 VALUE 'BACKGROUND'.
|
||||
CONSTANTS c_interface TYPE seoclskey VALUE 'ZIF_ABAPGIT_BACKGROUND'.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -59,36 +60,69 @@ CLASS zcl_abapgit_background IMPLEMENTATION.
|
|||
|
||||
METHOD list_methods.
|
||||
|
||||
DATA: ls_method LIKE LINE OF rt_methods,
|
||||
ls_key TYPE seoclskey,
|
||||
lt_implementing TYPE seor_implementing_keys,
|
||||
ls_implementing LIKE LINE OF lt_implementing.
|
||||
DATA: ls_method LIKE LINE OF rt_methods,
|
||||
lt_implementing TYPE seor_implementing_keys,
|
||||
ls_implementing LIKE LINE OF lt_implementing,
|
||||
lt_interf TYPE abap_intfdescr_tab,
|
||||
lt_local_classes TYPE STANDARD TABLE OF scompo,
|
||||
lv_classname TYPE string,
|
||||
lr_typedescr TYPE REF TO cl_abap_typedescr,
|
||||
lr_typedescr_class TYPE REF TO cl_abap_classdescr.
|
||||
|
||||
FIELD-SYMBOLS: <ls_method> LIKE LINE OF rt_methods.
|
||||
FIELD-SYMBOLS: <ls_local_class> LIKE LINE OF lt_local_classes,
|
||||
<ls_method> LIKE LINE OF rt_methods.
|
||||
|
||||
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_true.
|
||||
" Assume the standalone version runs.
|
||||
CALL FUNCTION 'WB_TREE_GET_OBJECTS'
|
||||
EXPORTING
|
||||
include = ' '
|
||||
otype = 'L'
|
||||
program = sy-repid
|
||||
TABLES
|
||||
olist = lt_local_classes.
|
||||
|
||||
* in order to handle local classes in the compiled report
|
||||
ls_method-class = 'ZCL_ABAPGIT_BACKGROUND_PULL'.
|
||||
INSERT ls_method INTO TABLE rt_methods.
|
||||
ls_method-class = 'ZCL_ABAPGIT_BACKGROUND_PUSH_AU'.
|
||||
INSERT ls_method INTO TABLE rt_methods.
|
||||
ls_method-class = 'ZCL_ABAPGIT_BACKGROUND_PUSH_FI'.
|
||||
INSERT ls_method INTO TABLE rt_methods.
|
||||
LOOP AT lt_local_classes ASSIGNING <ls_local_class>.
|
||||
lv_classname = |\\PROGRAM={ sy-repid }\\CLASS={ <ls_local_class>-name }|.
|
||||
cl_abap_typedescr=>describe_by_name(
|
||||
EXPORTING
|
||||
p_name = lv_classname
|
||||
RECEIVING
|
||||
p_descr_ref = lr_typedescr
|
||||
EXCEPTIONS
|
||||
type_not_found = 1
|
||||
OTHERS = 2 ).
|
||||
|
||||
ls_key-clsname = 'ZIF_ABAPGIT_BACKGROUND'.
|
||||
IF sy-subrc = 0 AND lr_typedescr IS BOUND.
|
||||
lr_typedescr_class ?= lr_typedescr.
|
||||
IF lr_typedescr_class IS BOUND.
|
||||
lt_interf = lr_typedescr_class->interfaces.
|
||||
READ TABLE lt_interf WITH TABLE KEY name = c_interface TRANSPORTING NO FIELDS.
|
||||
IF sy-subrc = 0.
|
||||
ls_method-class = <ls_local_class>-name.
|
||||
INSERT ls_method INTO TABLE rt_methods.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
CALL FUNCTION 'SEO_INTERFACE_IMPLEM_GET_ALL'
|
||||
EXPORTING
|
||||
intkey = ls_key
|
||||
IMPORTING
|
||||
impkeys = lt_implementing
|
||||
EXCEPTIONS
|
||||
not_existing = 1
|
||||
OTHERS = 2 ##FM_SUBRC_OK.
|
||||
LOOP AT lt_implementing INTO ls_implementing.
|
||||
ls_method-class = ls_implementing-clsname.
|
||||
INSERT ls_method INTO TABLE rt_methods.
|
||||
ENDLOOP.
|
||||
ELSE.
|
||||
" Assume the developer version runs.
|
||||
CALL FUNCTION 'SEO_INTERFACE_IMPLEM_GET_ALL'
|
||||
EXPORTING
|
||||
intkey = c_interface
|
||||
IMPORTING
|
||||
impkeys = lt_implementing
|
||||
EXCEPTIONS
|
||||
not_existing = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 0.
|
||||
LOOP AT lt_implementing INTO ls_implementing.
|
||||
ls_method-class = ls_implementing-clsname.
|
||||
INSERT ls_method INTO TABLE rt_methods.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
LOOP AT rt_methods ASSIGNING <ls_method>.
|
||||
CALL METHOD (<ls_method>-class)=>zif_abapgit_background~get_description
|
||||
|
@ -101,13 +135,14 @@ CLASS zcl_abapgit_background IMPLEMENTATION.
|
|||
|
||||
METHOD run.
|
||||
|
||||
DATA: lo_per TYPE REF TO zcl_abapgit_persist_background,
|
||||
lo_repo TYPE REF TO zcl_abapgit_repo_online,
|
||||
lt_list TYPE zcl_abapgit_persist_background=>ty_background_keys,
|
||||
li_background TYPE REF TO zif_abapgit_background,
|
||||
li_log TYPE REF TO zif_abapgit_log,
|
||||
lx_error TYPE REF TO zcx_abapgit_exception,
|
||||
lv_repo_name TYPE string.
|
||||
DATA:
|
||||
li_repo TYPE REF TO zif_abapgit_repo,
|
||||
li_repo_online TYPE REF TO zif_abapgit_repo_online,
|
||||
lt_list TYPE zif_abapgit_persist_background=>ty_background_keys,
|
||||
li_background TYPE REF TO zif_abapgit_background,
|
||||
li_log TYPE REF TO zif_abapgit_log,
|
||||
lx_error TYPE REF TO zcx_abapgit_exception,
|
||||
lv_repo_name TYPE string.
|
||||
|
||||
FIELD-SYMBOLS: <ls_list> LIKE LINE OF lt_list.
|
||||
|
||||
|
@ -118,8 +153,7 @@ CLASS zcl_abapgit_background IMPLEMENTATION.
|
|||
RETURN.
|
||||
ENDTRY.
|
||||
|
||||
CREATE OBJECT lo_per.
|
||||
lt_list = lo_per->list( ).
|
||||
lt_list = zcl_abapgit_persist_factory=>get_background( )->list( ).
|
||||
|
||||
WRITE: / 'Background mode'.
|
||||
|
||||
|
@ -127,24 +161,30 @@ CLASS zcl_abapgit_background IMPLEMENTATION.
|
|||
CREATE OBJECT li_log TYPE zcl_abapgit_log.
|
||||
|
||||
TRY.
|
||||
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( <ls_list>-key ).
|
||||
lv_repo_name = lo_repo->get_name( ).
|
||||
li_repo = zcl_abapgit_repo_srv=>get_instance( )->get( <ls_list>-key ).
|
||||
li_repo_online ?= li_repo.
|
||||
lv_repo_name = li_repo->get_name( ).
|
||||
WRITE: / <ls_list>-method, lv_repo_name.
|
||||
|
||||
zcl_abapgit_login_manager=>set(
|
||||
iv_uri = lo_repo->get_url( )
|
||||
iv_uri = li_repo_online->get_url( )
|
||||
iv_username = <ls_list>-username
|
||||
iv_password = <ls_list>-password ).
|
||||
|
||||
CREATE OBJECT li_background TYPE (<ls_list>-method).
|
||||
TRY.
|
||||
CREATE OBJECT li_background TYPE (<ls_list>-method).
|
||||
|
||||
li_background->run(
|
||||
io_repo = lo_repo
|
||||
ii_log = li_log
|
||||
it_settings = <ls_list>-settings ).
|
||||
li_background->run(
|
||||
ii_repo_online = li_repo_online
|
||||
ii_log = li_log
|
||||
it_settings = <ls_list>-settings ).
|
||||
CATCH cx_sy_create_object_error.
|
||||
li_log->add_warning( |{ <ls_list>-method } could not be executed,|
|
||||
& | as it is not accessible (local/global class).| ).
|
||||
ENDTRY.
|
||||
|
||||
" Decrease memory usage for repository already processed (but keep log)
|
||||
lo_repo->refresh(
|
||||
li_repo->refresh(
|
||||
iv_drop_cache = abap_true
|
||||
iv_drop_log = abap_false ).
|
||||
CATCH zcx_abapgit_exception INTO lx_error.
|
||||
|
|
|
@ -28,19 +28,37 @@ CLASS zcl_abapgit_background_pull IMPLEMENTATION.
|
|||
|
||||
METHOD zif_abapgit_background~run.
|
||||
|
||||
DATA: ls_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks.
|
||||
DATA: ls_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks,
|
||||
lo_settings TYPE REF TO zcl_abapgit_settings,
|
||||
li_repo TYPE REF TO zif_abapgit_repo,
|
||||
lv_activation_setting TYPE zif_abapgit_definitions=>ty_s_user_settings-activate_wo_popup.
|
||||
|
||||
FIELD-SYMBOLS: <ls_overwrite> LIKE LINE OF ls_checks-overwrite.
|
||||
|
||||
li_repo = ii_repo_online.
|
||||
|
||||
ls_checks = io_repo->deserialize_checks( ).
|
||||
ls_checks = li_repo->deserialize_checks( ).
|
||||
|
||||
LOOP AT ls_checks-overwrite ASSIGNING <ls_overwrite>.
|
||||
<ls_overwrite>-decision = zif_abapgit_definitions=>c_yes.
|
||||
ENDLOOP.
|
||||
|
||||
io_repo->deserialize( is_checks = ls_checks
|
||||
lo_settings = zcl_abapgit_persist_factory=>get_settings( )->read( ).
|
||||
lv_activation_setting = lo_settings->get_activate_wo_popup( ).
|
||||
|
||||
lo_settings->set_activate_wo_popup( abap_true ).
|
||||
|
||||
|
||||
" pass decisions to delete
|
||||
zcl_abapgit_services_repo=>delete_unnecessary_objects(
|
||||
ii_repo = li_repo
|
||||
is_checks = ls_checks
|
||||
ii_log = ii_log ).
|
||||
|
||||
li_repo->deserialize( is_checks = ls_checks
|
||||
ii_log = ii_log ).
|
||||
|
||||
lo_settings->set_activate_wo_popup( lv_activation_setting ).
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
|
@ -17,7 +17,7 @@ CLASS zcl_abapgit_background_push_au DEFINITION
|
|||
VALUE(rv_comment) TYPE string .
|
||||
METHODS push_auto
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo_online
|
||||
!ii_repo_online TYPE REF TO zif_abapgit_repo_online
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS determine_user_details
|
||||
|
@ -27,8 +27,8 @@ CLASS zcl_abapgit_background_push_au DEFINITION
|
|||
VALUE(rs_user) TYPE zif_abapgit_git_definitions=>ty_git_user .
|
||||
METHODS push_deletions
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo_online
|
||||
!is_files TYPE zif_abapgit_definitions=>ty_stage_files
|
||||
!ii_repo_online TYPE REF TO zif_abapgit_repo_online
|
||||
!is_files TYPE zif_abapgit_definitions=>ty_stage_files
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
PRIVATE SECTION.
|
||||
|
@ -69,12 +69,12 @@ CLASS zcl_abapgit_background_push_au IMPLEMENTATION.
|
|||
|
||||
METHOD determine_user_details.
|
||||
|
||||
DATA: lo_user_record TYPE REF TO zcl_abapgit_user_record.
|
||||
DATA li_user_record TYPE REF TO zif_abapgit_user_record.
|
||||
|
||||
|
||||
lo_user_record = zcl_abapgit_user_record=>get_instance( iv_changed_by ).
|
||||
rs_user-name = lo_user_record->get_name( ).
|
||||
rs_user-email = lo_user_record->get_email( ).
|
||||
li_user_record = zcl_abapgit_env_factory=>get_user_record( ).
|
||||
rs_user-name = li_user_record->get_name( iv_changed_by ).
|
||||
rs_user-email = li_user_record->get_email( iv_changed_by ).
|
||||
|
||||
* If no email, fall back to localhost/default email
|
||||
IF rs_user-email IS INITIAL.
|
||||
|
@ -110,7 +110,7 @@ CLASS zcl_abapgit_background_push_au IMPLEMENTATION.
|
|||
<ls_local> LIKE LINE OF ls_files-local.
|
||||
|
||||
|
||||
ls_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo ).
|
||||
ls_files = zcl_abapgit_stage_logic=>get_stage_logic( )->get( ii_repo_online ).
|
||||
|
||||
LOOP AT ls_files-local ASSIGNING <ls_local>.
|
||||
lv_changed_by = zcl_abapgit_objects=>changed_by(
|
||||
|
@ -172,13 +172,13 @@ CLASS zcl_abapgit_background_push_au IMPLEMENTATION.
|
|||
|
||||
ls_comment-comment = build_comment( ls_user_files ).
|
||||
|
||||
io_repo->push( is_comment = ls_comment
|
||||
io_stage = lo_stage ).
|
||||
ii_repo_online->push( is_comment = ls_comment
|
||||
io_stage = lo_stage ).
|
||||
ENDLOOP.
|
||||
|
||||
IF lines( ls_files-remote ) > 0.
|
||||
push_deletions( io_repo = io_repo
|
||||
is_files = ls_files ).
|
||||
push_deletions( ii_repo_online = ii_repo_online
|
||||
is_files = ls_files ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
@ -212,8 +212,8 @@ CLASS zcl_abapgit_background_push_au IMPLEMENTATION.
|
|||
ls_comment-committer-name = 'Deletion'.
|
||||
ls_comment-committer-email = 'deletion@localhost'.
|
||||
|
||||
io_repo->push( is_comment = ls_comment
|
||||
io_stage = lo_stage ).
|
||||
ii_repo_online->push( is_comment = ls_comment
|
||||
io_stage = lo_stage ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -237,14 +237,14 @@ CLASS zcl_abapgit_background_push_au IMPLEMENTATION.
|
|||
DATA: ls_files TYPE zif_abapgit_definitions=>ty_stage_files.
|
||||
|
||||
mi_log = ii_log.
|
||||
ls_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo ).
|
||||
ls_files = zcl_abapgit_stage_logic=>get_stage_logic( )->get( ii_repo_online ).
|
||||
|
||||
IF lines( ls_files-local ) = 0 AND lines( ls_files-remote ) = 0.
|
||||
ii_log->add_info( 'Nothing to stage' ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
push_auto( io_repo ).
|
||||
push_auto( ii_repo_online ).
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
|
@ -22,9 +22,9 @@ CLASS zcl_abapgit_background_push_fi DEFINITION
|
|||
VALUE(rv_comment) TYPE string .
|
||||
METHODS push_fixed
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo_online
|
||||
!iv_name TYPE string
|
||||
!iv_email TYPE string
|
||||
!ii_repo_online TYPE REF TO zif_abapgit_repo_online
|
||||
!iv_name TYPE string
|
||||
!iv_email TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
PRIVATE SECTION.
|
||||
|
@ -73,7 +73,7 @@ CLASS zcl_abapgit_background_push_fi IMPLEMENTATION.
|
|||
<ls_remote> LIKE LINE OF ls_files-remote.
|
||||
|
||||
|
||||
ls_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo ).
|
||||
ls_files = zcl_abapgit_stage_logic=>get_stage_logic( )->get( ii_repo_online ).
|
||||
ASSERT lines( ls_files-local ) > 0
|
||||
OR lines( ls_files-remote ) > 0.
|
||||
|
||||
|
@ -99,8 +99,8 @@ CLASS zcl_abapgit_background_push_fi IMPLEMENTATION.
|
|||
ls_comment-committer-email = iv_email.
|
||||
ls_comment-comment = build_comment( ls_files ).
|
||||
|
||||
io_repo->push( is_comment = ls_comment
|
||||
io_stage = lo_stage ).
|
||||
ii_repo_online->push( is_comment = ls_comment
|
||||
io_stage = lo_stage ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -142,7 +142,7 @@ CLASS zcl_abapgit_background_push_fi IMPLEMENTATION.
|
|||
lv_email TYPE string.
|
||||
|
||||
mi_log = ii_log.
|
||||
ls_files = zcl_abapgit_factory=>get_stage_logic( )->get( io_repo ).
|
||||
ls_files = zcl_abapgit_stage_logic=>get_stage_logic( )->get( ii_repo_online ).
|
||||
|
||||
IF lines( ls_files-local ) = 0 AND lines( ls_files-remote ) = 0.
|
||||
ii_log->add_info( 'Nothing to stage' ).
|
||||
|
@ -156,9 +156,9 @@ CLASS zcl_abapgit_background_push_fi IMPLEMENTATION.
|
|||
lv_email = ls_setting-value.
|
||||
|
||||
push_fixed(
|
||||
io_repo = io_repo
|
||||
iv_name = lv_name
|
||||
iv_email = lv_email ).
|
||||
ii_repo_online = ii_repo_online
|
||||
iv_name = lv_name
|
||||
iv_email = lv_email ).
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
|
@ -18,9 +18,9 @@ INTERFACE zif_abapgit_background
|
|||
ct_settings TYPE ty_settings_tt .
|
||||
METHODS run
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo_online
|
||||
!ii_log TYPE REF TO zif_abapgit_log
|
||||
!it_settings TYPE ty_settings_tt OPTIONAL
|
||||
!ii_repo_online TYPE REF TO zif_abapgit_repo_online
|
||||
!ii_log TYPE REF TO zif_abapgit_log
|
||||
!it_settings TYPE ty_settings_tt OPTIONAL
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
ENDINTERFACE.
|
||||
|
|
|
@ -21,7 +21,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
|
|||
"! @raising zcx_abapgit_exception | Object is not locked in a transport
|
||||
METHODS get_current_transport_for_obj
|
||||
IMPORTING
|
||||
!iv_program_id TYPE pgmid DEFAULT 'R3TR'
|
||||
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
|
||||
!iv_object_type TYPE trobjtype
|
||||
!iv_object_name TYPE sobj_name
|
||||
RETURNING
|
||||
|
@ -36,7 +36,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
|
|||
"! @raising zcx_abapgit_exception | Object is not locked in a transport
|
||||
METHODS get_current_transport_from_db
|
||||
IMPORTING
|
||||
!iv_program_id TYPE pgmid DEFAULT 'R3TR'
|
||||
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
|
||||
!iv_object_type TYPE trobjtype
|
||||
!iv_object_name TYPE sobj_name
|
||||
RETURNING
|
||||
|
@ -51,7 +51,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
|
|||
"! @raising zcx_abapgit_exception | Object type is not lockable
|
||||
METHODS is_object_locked_in_transport
|
||||
IMPORTING
|
||||
!iv_program_id TYPE pgmid DEFAULT 'R3TR'
|
||||
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
|
||||
!iv_object_type TYPE trobjtype
|
||||
!iv_object_name TYPE sobj_name
|
||||
RETURNING
|
||||
|
@ -64,7 +64,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
|
|||
"! @parameter rv_lockable | Lockable
|
||||
METHODS is_object_type_lockable
|
||||
IMPORTING
|
||||
!iv_program_id TYPE pgmid DEFAULT 'R3TR'
|
||||
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
|
||||
!iv_object_type TYPE trobjtype
|
||||
RETURNING
|
||||
VALUE(rv_lockable) TYPE abap_bool .
|
||||
|
@ -74,7 +74,7 @@ CLASS zcl_abapgit_cts_api DEFINITION
|
|||
"! @parameter rv_transportable | Transportable
|
||||
METHODS is_object_type_transportable
|
||||
IMPORTING
|
||||
!iv_program_id TYPE pgmid DEFAULT 'R3TR'
|
||||
!iv_program_id TYPE tadir-pgmid DEFAULT 'R3TR'
|
||||
!iv_object_type TYPE trobjtype
|
||||
RETURNING
|
||||
VALUE(rv_transportable) TYPE abap_bool .
|
||||
|
@ -82,13 +82,16 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_cts_api IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD get_current_transport_for_obj.
|
||||
DATA: lv_object_lockable TYPE abap_bool,
|
||||
lv_locked TYPE abap_bool,
|
||||
lv_transport_request TYPE trkorr,
|
||||
ls_tlock TYPE tlock,
|
||||
lt_tlock TYPE STANDARD TABLE OF tlock WITH DEFAULT KEY,
|
||||
lt_transports TYPE STANDARD TABLE OF trkorr WITH DEFAULT KEY,
|
||||
lv_task TYPE trkorr,
|
||||
lv_tr_object_name TYPE trobj_name.
|
||||
|
||||
|
@ -104,6 +107,8 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
|
|||
we_locked = lv_locked
|
||||
we_lock_order = lv_transport_request
|
||||
we_lock_task = lv_task
|
||||
TABLES
|
||||
wt_tlock = lt_tlock
|
||||
EXCEPTIONS
|
||||
empty_key = 1
|
||||
no_systemname = 2
|
||||
|
@ -122,7 +127,15 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
|
|||
zcx_abapgit_exception=>raise( |Object type { iv_program_id }-{ iv_object_type } not lockable| ).
|
||||
ENDIF.
|
||||
|
||||
rv_transport = lv_transport_request.
|
||||
LOOP AT lt_tlock INTO ls_tlock.
|
||||
COLLECT ls_tlock-trkorr INTO lt_transports.
|
||||
ENDLOOP.
|
||||
|
||||
IF lines( lt_transports ) = 1.
|
||||
rv_transport = lv_transport_request.
|
||||
ELSE.
|
||||
rv_transport = zif_abapgit_definitions=>c_multiple_transports.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -209,7 +222,75 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
|
|||
IMPORTING
|
||||
pe_result = lv_type_check_result.
|
||||
|
||||
rv_transportable = boolc( lv_type_check_result CA 'RTL' ).
|
||||
rv_transportable = boolc( lv_type_check_result CA 'RTL' OR iv_object_type = 'TABU' ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_cts_api~change_transport_type.
|
||||
|
||||
DATA:
|
||||
ls_request_header TYPE trwbo_request_header,
|
||||
lt_request_headers TYPE trwbo_request_headers.
|
||||
|
||||
CALL FUNCTION 'ENQUEUE_E_TRKORR'
|
||||
EXPORTING
|
||||
trkorr = iv_transport_request
|
||||
EXCEPTIONS
|
||||
foreign_lock = 1
|
||||
system_failure = 2
|
||||
OTHERS = 3.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise_t100( ).
|
||||
ENDIF.
|
||||
|
||||
CALL FUNCTION 'TR_READ_REQUEST_WITH_TASKS'
|
||||
EXPORTING
|
||||
iv_trkorr = iv_transport_request
|
||||
IMPORTING
|
||||
et_request_headers = lt_request_headers
|
||||
EXCEPTIONS
|
||||
invalid_input = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise_t100( ).
|
||||
ENDIF.
|
||||
|
||||
LOOP AT lt_request_headers INTO ls_request_header WHERE trfunction = iv_transport_type_from.
|
||||
|
||||
CALL FUNCTION 'TRINT_READ_REQUEST_HEADER'
|
||||
EXPORTING
|
||||
iv_read_e070 = abap_true
|
||||
iv_read_e070c = abap_true
|
||||
CHANGING
|
||||
cs_request = ls_request_header
|
||||
EXCEPTIONS
|
||||
empty_trkorr = 1
|
||||
not_exist_e070 = 2
|
||||
OTHERS = 3.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise_t100( ).
|
||||
ENDIF.
|
||||
|
||||
CALL FUNCTION 'TRINT_CHANGE_TRFUNCTION'
|
||||
EXPORTING
|
||||
iv_new_trfunction = iv_transport_type_to
|
||||
CHANGING
|
||||
cs_request_header = ls_request_header
|
||||
EXCEPTIONS
|
||||
action_aborted_by_user = 1
|
||||
change_not_allowed = 2
|
||||
db_access_error = 3
|
||||
OTHERS = 4.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise_t100( ).
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
CALL FUNCTION 'DEQUEUE_E_TRKORR'
|
||||
EXPORTING
|
||||
trkorr = iv_transport_request.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
@ -277,6 +358,9 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
|
|||
DATA lt_table_keys TYPE STANDARD TABLE OF e071k.
|
||||
DATA lv_with_dialog TYPE abap_bool.
|
||||
|
||||
FIELD-SYMBOLS <ls_table> LIKE LINE OF lt_tables.
|
||||
FIELD-SYMBOLS <ls_table_key> LIKE LINE OF lt_table_keys.
|
||||
|
||||
cl_table_utilities_brf=>create_transport_entries(
|
||||
EXPORTING
|
||||
it_table_ins = it_table_ins
|
||||
|
@ -292,6 +376,7 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
|
|||
CALL FUNCTION 'TR_OBJECTS_CHECK'
|
||||
TABLES
|
||||
wt_ko200 = lt_tables
|
||||
wt_e071k = lt_table_keys
|
||||
EXCEPTIONS
|
||||
cancel_edit_other_error = 1
|
||||
show_only_other_error = 2
|
||||
|
@ -304,15 +389,24 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
|
|||
lv_with_dialog = abap_true.
|
||||
ENDIF.
|
||||
|
||||
CALL FUNCTION 'TRINT_OBJECTS_CHECK_AND_INSERT'
|
||||
READ TABLE lt_tables ASSIGNING <ls_table> INDEX 1.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
LOOP AT lt_table_keys ASSIGNING <ls_table_key>.
|
||||
<ls_table_key>-objfunc = <ls_table>-objfunc.
|
||||
ENDLOOP.
|
||||
|
||||
CALL FUNCTION 'TR_OBJECT_INSERT'
|
||||
EXPORTING
|
||||
iv_order = iv_transport
|
||||
iv_with_dialog = lv_with_dialog
|
||||
CHANGING
|
||||
ct_ko200 = lt_tables
|
||||
ct_e071k = lt_table_keys
|
||||
wi_order = iv_transport
|
||||
wi_ko200 = <ls_table>
|
||||
iv_no_show_option = abap_true
|
||||
TABLES
|
||||
wt_e071k = lt_table_keys
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
cancel_edit_other_error = 1
|
||||
show_only_other_error = 2
|
||||
OTHERS = 3.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise_t100( ).
|
||||
ENDIF.
|
||||
|
@ -389,8 +483,12 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
|
|||
WHERE object = ls_lock_key-obj
|
||||
AND hikey >= ls_lock_key-low
|
||||
AND lokey <= ls_lock_key-hi. "#EC PORTABLE
|
||||
lv_request = <ls_tlock>-trkorr.
|
||||
EXIT.
|
||||
IF lv_request IS INITIAL.
|
||||
lv_request = <ls_tlock>-trkorr.
|
||||
ELSE.
|
||||
lv_request = zif_abapgit_definitions=>c_multiple_transports.
|
||||
EXIT.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ELSEIF is_object_type_transportable( <ls_item>-obj_type ) = abap_true.
|
||||
lv_request = get_current_transport_from_db(
|
||||
|
@ -542,7 +640,7 @@ CLASS ZCL_ABAPGIT_CTS_API IMPLEMENTATION.
|
|||
ev_object = ls_list-object
|
||||
ev_obj_name = ls_list-obj_name ).
|
||||
INSERT ls_list INTO TABLE rt_list.
|
||||
CATCH zcx_abapgit_exception.
|
||||
CATCH zcx_abapgit_exception ##NO_HANDLER.
|
||||
ENDTRY.
|
||||
ENDCASE.
|
||||
ENDLOOP.
|
||||
|
|
|
@ -5,19 +5,14 @@ CLASS zcl_abapgit_default_transport DEFINITION
|
|||
PUBLIC SECTION.
|
||||
INTERFACES zif_abapgit_default_transport.
|
||||
|
||||
METHODS
|
||||
constructor
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
METHODS constructor.
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
DATA mv_is_set_by_abapgit TYPE abap_bool .
|
||||
DATA ms_save TYPE e070use .
|
||||
|
||||
METHODS store
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
METHODS store.
|
||||
METHODS restore
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
@ -35,7 +30,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_DEFAULT_TRANSPORT IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_default_transport IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD clear.
|
||||
|
@ -116,7 +111,11 @@ CLASS ZCL_ABAPGIT_DEFAULT_TRANSPORT IMPLEMENTATION.
|
|||
|
||||
METHOD store.
|
||||
|
||||
ms_save = zif_abapgit_default_transport~get( ).
|
||||
TRY.
|
||||
ms_save = zif_abapgit_default_transport~get( ).
|
||||
CATCH zcx_abapgit_exception.
|
||||
CLEAR ms_save.
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -173,7 +172,7 @@ CLASS ZCL_ABAPGIT_DEFAULT_TRANSPORT IMPLEMENTATION.
|
|||
|
||||
METHOD zif_abapgit_default_transport~set.
|
||||
|
||||
" checks whether object changes of the package are rerorded in transport
|
||||
" checks whether object changes of the package are reordered in transport
|
||||
" requests. If true then we set the default task, so that no annoying
|
||||
" transport request popups are shown while deserializing.
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_transport IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD add_all_objects_to_trans_req.
|
||||
|
@ -103,7 +103,7 @@ CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION.
|
|||
" We used TR_REQUEST_CHOICE before, but it issues its error log with
|
||||
" write lists which are not compatible with abapGit.
|
||||
" There we user TRINT_REQUEST_CHOICE which returns the error log
|
||||
" and display the log ourselve.
|
||||
" and display the log ourselves.
|
||||
CALL FUNCTION 'TRINT_REQUEST_CHOICE'
|
||||
EXPORTING
|
||||
iv_request_types = 'FTCOK'
|
||||
|
@ -146,7 +146,7 @@ CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION.
|
|||
lt_objects TYPE scts_tadir,
|
||||
lt_objects_all LIKE lt_objects,
|
||||
ls_e071 LIKE LINE OF rt_objects,
|
||||
lo_repo TYPE REF TO zcl_abapgit_repo,
|
||||
li_repo TYPE REF TO zif_abapgit_repo,
|
||||
lv_package TYPE zif_abapgit_persistence=>ty_repo-package,
|
||||
lt_packages TYPE zif_abapgit_sap_package=>ty_devclass_tt.
|
||||
|
||||
|
@ -154,8 +154,8 @@ CLASS ZCL_ABAPGIT_TRANSPORT IMPLEMENTATION.
|
|||
<lv_package> TYPE devclass,
|
||||
<ls_object> TYPE tadir.
|
||||
|
||||
lo_repo ?= zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
|
||||
lv_package = lo_repo->get_package( ).
|
||||
li_repo = zcl_abapgit_repo_srv=>get_instance( )->get( iv_key ).
|
||||
lv_package = li_repo->get_package( ).
|
||||
lt_packages = zcl_abapgit_factory=>get_sap_package( lv_package )->list_subpackages( ).
|
||||
INSERT lv_package INTO TABLE lt_packages.
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ CLASS zcl_abapgit_transport_2_branch DEFINITION
|
|||
|
||||
METHODS create
|
||||
IMPORTING
|
||||
!io_repository TYPE REF TO zcl_abapgit_repo_online
|
||||
!ii_repo_online TYPE REF TO zif_abapgit_repo_online
|
||||
!is_transport_to_branch TYPE zif_abapgit_definitions=>ty_transport_to_branch
|
||||
!it_transport_objects TYPE zif_abapgit_definitions=>ty_tadir_tt
|
||||
RAISING
|
||||
|
@ -46,13 +46,13 @@ CLASS zcl_abapgit_transport_2_branch IMPLEMENTATION.
|
|||
lv_branch_name = zcl_abapgit_git_branch_list=>complete_heads_branch_name(
|
||||
zcl_abapgit_git_branch_list=>normalize_branch_name( is_transport_to_branch-branch_name ) ).
|
||||
|
||||
io_repository->create_branch( lv_branch_name ).
|
||||
ii_repo_online->create_branch( lv_branch_name ).
|
||||
|
||||
CREATE OBJECT lo_stage.
|
||||
|
||||
ls_stage_objects = zcl_abapgit_factory=>get_stage_logic( )->get( io_repository ).
|
||||
ls_stage_objects = zcl_abapgit_stage_logic=>get_stage_logic( )->get( ii_repo_online ).
|
||||
|
||||
lt_object_statuses = zcl_abapgit_repo_status=>calculate( io_repository ).
|
||||
lt_object_statuses = zcl_abapgit_repo_status=>calculate( ii_repo_online ).
|
||||
|
||||
stage_transport_objects(
|
||||
it_transport_objects = it_transport_objects
|
||||
|
@ -62,8 +62,8 @@ CLASS zcl_abapgit_transport_2_branch IMPLEMENTATION.
|
|||
|
||||
ls_comment = generate_commit_message( is_transport_to_branch ).
|
||||
|
||||
io_repository->push( is_comment = ls_comment
|
||||
io_stage = lo_stage ).
|
||||
ii_repo_online->push( is_comment = ls_comment
|
||||
io_stage = lo_stage ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
|
@ -53,7 +53,7 @@ CLASS zcl_abapgit_transport_mass IMPLEMENTATION.
|
|||
lcl_gui=>open_folder_frontend( lo_transport_zipper->get_folder( ) ).
|
||||
|
||||
ELSE.
|
||||
* No data found for the provided selection criterias
|
||||
* No data found for the provided selection criteria
|
||||
zcx_abapgit_exception=>raise( 'No transport requests selected' ).
|
||||
ENDIF.
|
||||
|
||||
|
|
|
@ -63,7 +63,7 @@ CLASS lcl_gui IMPLEMENTATION.
|
|||
iv_via_selscreen = 'X'
|
||||
is_selection = ls_selection
|
||||
iv_complete_projects = space
|
||||
iv_title = 'ABAPGit Transport Mass Downloader'
|
||||
iv_title = 'abapGit Transport Mass Downloader'
|
||||
is_popup = ls_popup
|
||||
IMPORTING
|
||||
et_requests = rt_trkorr
|
||||
|
|
|
@ -38,9 +38,10 @@ CLASS zcl_abapgit_transport_objects IMPLEMENTATION.
|
|||
|
||||
LOOP AT mt_transport_objects INTO ls_transport_object.
|
||||
LOOP AT it_object_statuses INTO ls_object_status
|
||||
" USING KEY sec_key " syntax error in 754
|
||||
WHERE obj_name = ls_transport_object-obj_name
|
||||
AND obj_type = ls_transport_object-object
|
||||
AND NOT lstate IS INITIAL.
|
||||
AND NOT lstate IS INITIAL ##PRIMKEY[SEC_KEY].
|
||||
|
||||
CASE ls_object_status-lstate.
|
||||
WHEN zif_abapgit_definitions=>c_state-added OR zif_abapgit_definitions=>c_state-modified.
|
||||
|
@ -74,7 +75,7 @@ CLASS zcl_abapgit_transport_objects IMPLEMENTATION.
|
|||
ENDLOOP.
|
||||
IF sy-subrc <> 0.
|
||||
" Since not all objects in a transport might be in the local repo
|
||||
" i.e generated SADL objects, we don't add these objects to
|
||||
" i.e. generated SADL objects, we don't add these objects to
|
||||
" the stage.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
|
|
@ -60,9 +60,9 @@ INTERFACE zif_abapgit_cts_api
|
|||
METHODS create_transport_entries
|
||||
IMPORTING
|
||||
!iv_transport TYPE trkorr
|
||||
!it_table_ins TYPE ANY TABLE
|
||||
!it_table_upd TYPE ANY TABLE
|
||||
!it_table_del TYPE ANY TABLE
|
||||
!it_table_ins TYPE ANY TABLE OPTIONAL
|
||||
!it_table_upd TYPE ANY TABLE OPTIONAL
|
||||
!it_table_del TYPE ANY TABLE OPTIONAL
|
||||
!iv_tabname TYPE tabname
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
@ -153,4 +153,12 @@ INTERFACE zif_abapgit_cts_api
|
|||
!iv_transport_request TYPE trkorr
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
METHODS change_transport_type
|
||||
IMPORTING
|
||||
!iv_transport_request TYPE trkorr
|
||||
!iv_transport_type_from TYPE trfunction
|
||||
!iv_transport_type_to TYPE trfunction
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
ENDINTERFACE.
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<VSEOINTERF>
|
||||
<CLSNAME>ZIF_ABAPGIT_DEFAULT_TRANSPORT</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>ZIF_ABAPGIT_DEFAULT_TRANSPORT</DESCRIPT>
|
||||
<DESCRIPT>abapGit - Default Transport</DESCRIPT>
|
||||
<EXPOSURE>2</EXPOSURE>
|
||||
<STATE>1</STATE>
|
||||
<UNICODE>X</UNICODE>
|
||||
|
|
|
@ -44,7 +44,7 @@ CLASS zcl_abapgit_data_deserializer DEFINITION
|
|||
zcx_abapgit_exception .
|
||||
METHODS determine_transport_request
|
||||
IMPORTING
|
||||
io_repo TYPE REF TO zcl_abapgit_repo
|
||||
ii_repo TYPE REF TO zif_abapgit_repo
|
||||
iv_transport_type TYPE zif_abapgit_definitions=>ty_transport_type
|
||||
RETURNING
|
||||
VALUE(rv_transport_request) TYPE trkorr.
|
||||
|
@ -88,11 +88,11 @@ CLASS zcl_abapgit_data_deserializer IMPLEMENTATION.
|
|||
|
||||
" Use transport from repo settings if maintained, or determine via user exit.
|
||||
" If transport keeps empty here, it'll requested later via popup.
|
||||
rv_transport_request = io_repo->get_local_settings( )-customizing_request.
|
||||
rv_transport_request = ii_repo->get_local_settings( )-customizing_request.
|
||||
|
||||
li_exit->determine_transport_request(
|
||||
EXPORTING
|
||||
io_repo = io_repo
|
||||
ii_repo = ii_repo
|
||||
iv_transport_type = iv_transport_type
|
||||
CHANGING
|
||||
cv_transport_request = rv_transport_request ).
|
||||
|
@ -337,7 +337,7 @@ CLASS zcl_abapgit_data_deserializer IMPLEMENTATION.
|
|||
rs_checks-type-request = zif_abapgit_cts_api=>c_transport_type-cust_request.
|
||||
rs_checks-type-task = zif_abapgit_cts_api=>c_transport_type-cust_task.
|
||||
rs_checks-transport = determine_transport_request(
|
||||
io_repo = io_repo
|
||||
ii_repo = ii_repo
|
||||
iv_transport_type = rs_checks-type ).
|
||||
ENDIF.
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@ CLASS zcl_abapgit_data_utils DEFINITION
|
|||
VALUE(rv_filename) TYPE string.
|
||||
CLASS-METHODS jump
|
||||
IMPORTING
|
||||
!is_item TYPE zif_abapgit_definitions=>ty_item
|
||||
!is_item TYPE zif_abapgit_definitions=>ty_item
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
CLASS-METHODS does_table_exist
|
||||
|
@ -49,7 +49,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_DATA_UTILS IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_data_utils IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD build_config_filename.
|
||||
|
@ -196,7 +196,7 @@ CLASS ZCL_ABAPGIT_DATA_UTILS IMPLEMENTATION.
|
|||
db_not_exists = 3
|
||||
no_permission = 4
|
||||
no_change_allowed = 5
|
||||
table_is_gtt = 6
|
||||
* table_is_gtt = 6 " not in lower releases
|
||||
OTHERS = 7.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise( |Table { is_item-obj_name } cannot be displayed| ).
|
||||
|
|
|
@ -15,7 +15,7 @@ INTERFACE zif_abapgit_data_deserializer
|
|||
|
||||
METHODS deserialize_check
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
!ii_repo TYPE REF TO zif_abapgit_repo
|
||||
!ii_config TYPE REF TO zif_abapgit_data_config
|
||||
RETURNING
|
||||
VALUE(rs_checks) TYPE zif_abapgit_definitions=>ty_deserialize_checks-customizing
|
||||
|
|
|
@ -26,6 +26,8 @@ CLASS lcl_environment IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
METHOD zif_abapgit_environment~get_basis_release.
|
||||
ENDMETHOD.
|
||||
METHOD zif_abapgit_environment~get_available_user_sessions.
|
||||
ENDMETHOD.
|
||||
METHOD zif_abapgit_environment~get_system_language_filter.
|
||||
ENDMETHOD.
|
||||
METHOD zif_abapgit_environment~is_merged.
|
||||
|
@ -40,6 +42,8 @@ CLASS lcl_environment IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
METHOD zif_abapgit_environment~init_parallel_processing.
|
||||
ENDMETHOD.
|
||||
METHOD zif_abapgit_environment~check_parallel_processing.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
@ -77,10 +81,12 @@ CLASS ltcl_abap_language_version DEFINITION FOR TESTING RISK LEVEL HARMLESS
|
|||
PRIVATE SECTION.
|
||||
" Cloud package hardcoded in cl_abap_language_version
|
||||
CONSTANTS c_cloud_package TYPE devclass VALUE 'TEST_LANGUAGE_VERSION_SCP'.
|
||||
CONSTANTS c_language_cfg TYPE seoclsname VALUE 'CL_ABAP_LANGUAGE_VERSION_CFG'.
|
||||
|
||||
DATA:
|
||||
mt_versions TYPE string_table,
|
||||
mv_has_cloud_package TYPE abap_bool,
|
||||
mv_has_language_cfg TYPE abap_bool,
|
||||
mo_environment TYPE REF TO lcl_environment,
|
||||
mi_persistency TYPE REF TO zif_abapgit_persist_settings,
|
||||
mo_dot_abapgit TYPE REF TO zcl_abapgit_dot_abapgit,
|
||||
|
@ -364,9 +370,11 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
|
|||
" Assume on-prem (no cloud)
|
||||
set_environment( abap_false ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
|
||||
exp = iv_standard ).
|
||||
IF mv_has_language_cfg = abap_true.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
|
||||
exp = iv_standard ).
|
||||
ENDIF.
|
||||
|
||||
IF mv_has_cloud_package = abap_true.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
|
@ -381,9 +389,11 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
|
|||
" Assume cloud platform
|
||||
set_environment( abap_true ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
|
||||
exp = iv_standard ).
|
||||
IF mv_has_language_cfg = abap_true.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_cut->is_import_allowed( '$TMP' ) " existing standard package
|
||||
exp = iv_standard ).
|
||||
ENDIF.
|
||||
|
||||
IF mv_has_cloud_package = abap_true.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
|
@ -402,6 +412,11 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
|
|||
|
||||
DATA lv_version TYPE string.
|
||||
|
||||
" Tests using ABAP language version "standard" only work if the required
|
||||
" SAP class is available. In older releases, all packages will have
|
||||
" ABAP language version "undefined" and are handled like a new package
|
||||
mv_has_language_cfg = zcl_abapgit_oo_factory=>get_by_type( 'CLAS' )->exists( c_language_cfg ).
|
||||
|
||||
LOOP AT mt_versions INTO lv_version.
|
||||
|
||||
CASE lv_version.
|
||||
|
|
21
src/env/zcl_abapgit_env_factory.clas.abap
vendored
Normal file
21
src/env/zcl_abapgit_env_factory.clas.abap
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
CLASS zcl_abapgit_env_factory DEFINITION PUBLIC GLOBAL FRIENDS zcl_abapgit_env_injector.
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS get_user_record
|
||||
RETURNING
|
||||
VALUE(ri_user_record) TYPE REF TO zif_abapgit_user_record.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CLASS-DATA gi_user_record TYPE REF TO zif_abapgit_user_record.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS zcl_abapgit_env_factory IMPLEMENTATION.
|
||||
|
||||
METHOD get_user_record.
|
||||
IF gi_user_record IS NOT BOUND.
|
||||
CREATE OBJECT gi_user_record TYPE zcl_abapgit_user_record.
|
||||
ENDIF.
|
||||
|
||||
ri_user_record = gi_user_record.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
16
src/env/zcl_abapgit_env_factory.clas.xml
vendored
Normal file
16
src/env/zcl_abapgit_env_factory.clas.xml
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_ENV_FACTORY</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit - Environment Factory</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
14
src/env/zcl_abapgit_env_injector.clas.abap
vendored
Normal file
14
src/env/zcl_abapgit_env_injector.clas.abap
vendored
Normal file
|
@ -0,0 +1,14 @@
|
|||
CLASS zcl_abapgit_env_injector DEFINITION PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS set_user_record
|
||||
IMPORTING
|
||||
!ii_user_record TYPE REF TO zif_abapgit_user_record.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS zcl_abapgit_env_injector IMPLEMENTATION.
|
||||
|
||||
METHOD set_user_record.
|
||||
zcl_abapgit_env_factory=>gi_user_record = ii_user_record.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
16
src/env/zcl_abapgit_env_injector.clas.xml
vendored
Normal file
16
src/env/zcl_abapgit_env_injector.clas.xml
vendored
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_ENV_INJECTOR</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit - Environment Injector</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
211
src/env/zcl_abapgit_environment.clas.abap
vendored
211
src/env/zcl_abapgit_environment.clas.abap
vendored
|
@ -2,11 +2,11 @@ CLASS zcl_abapgit_environment DEFINITION
|
|||
PUBLIC
|
||||
FINAL
|
||||
CREATE PRIVATE
|
||||
GLOBAL FRIENDS zcl_abapgit_factory .
|
||||
GLOBAL FRIENDS zcl_abapgit_factory.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
INTERFACES zif_abapgit_environment .
|
||||
INTERFACES zif_abapgit_environment.
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
|
@ -16,7 +16,7 @@ CLASS zcl_abapgit_environment DEFINITION
|
|||
|
||||
METHODS is_system_changes_allowed
|
||||
RETURNING
|
||||
VALUE(rv_result) TYPE abap_bool .
|
||||
VALUE(rv_result) TYPE abap_bool.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -76,11 +76,74 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_environment~check_parallel_processing.
|
||||
|
||||
" If check fails, see transactions RZ12
|
||||
DATA:
|
||||
lt_setup TYPE STANDARD TABLE OF rzllitab,
|
||||
ls_setup LIKE LINE OF lt_setup,
|
||||
lt_erfc_setup TYPE STANDARD TABLE OF rzlliclass,
|
||||
lt_instances TYPE STANDARD TABLE OF msxxlist WITH DEFAULT KEY.
|
||||
|
||||
" Check if server group for parallel processing exists
|
||||
CALL FUNCTION 'SMLG_GET_SETUP'
|
||||
EXPORTING
|
||||
grouptype = 'S'
|
||||
TABLES
|
||||
setup = lt_setup
|
||||
erfc_setup = lt_erfc_setup
|
||||
EXCEPTIONS
|
||||
foreign_lock = 1
|
||||
system_failure = 2
|
||||
invalid_group_type = 3
|
||||
OTHERS = 4.
|
||||
IF sy-subrc <> 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_setup INTO ls_setup WITH KEY classname = iv_group.
|
||||
IF sy-subrc = 0 AND ls_setup-applserver IS NOT INITIAL.
|
||||
|
||||
" Check if assigned server instance exists
|
||||
CALL FUNCTION 'TH_SERVER_LIST'
|
||||
TABLES
|
||||
list = lt_instances.
|
||||
|
||||
READ TABLE lt_instances TRANSPORTING NO FIELDS WITH KEY name = ls_setup-applserver.
|
||||
IF sy-subrc = 0.
|
||||
rv_checked = abap_true.
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_environment~compare_with_inactive.
|
||||
rv_result = zif_abapgit_environment~is_sap_cloud_platform( ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_environment~get_available_user_sessions.
|
||||
|
||||
DATA:
|
||||
lv_act_sessions TYPE i,
|
||||
lv_max_sessions TYPE i,
|
||||
lv_subrc TYPE sy-subrc.
|
||||
|
||||
CALL FUNCTION 'TH_USER_INFO'
|
||||
IMPORTING
|
||||
act_sessions = lv_act_sessions
|
||||
max_sessions = lv_max_sessions
|
||||
rc = lv_subrc.
|
||||
|
||||
IF lv_subrc = 0.
|
||||
rv_sessions = lv_max_sessions - lv_act_sessions.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_environment~get_basis_release.
|
||||
|
||||
SELECT SINGLE release extrelease FROM cvers INTO (rs_result-release, rs_result-sp)
|
||||
|
@ -89,6 +152,78 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_environment~get_system_language_filter.
|
||||
DATA lv_translation_detective_lang TYPE spras.
|
||||
DATA lv_pseudo_translation_language TYPE spras.
|
||||
FIELD-SYMBOLS <ls_system_language_filter> LIKE LINE OF rt_system_language_filter.
|
||||
|
||||
" Translation Object Detective
|
||||
" https://help.sap.com/docs/ABAP_PLATFORM_NEW/ceb25152cb0d4adba664cebea2bf4670/88a3d3cbccf64601975acabaccdfde45.html
|
||||
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
|
||||
EXPORTING
|
||||
input = '1Q'
|
||||
IMPORTING
|
||||
output = lv_translation_detective_lang
|
||||
EXCEPTIONS
|
||||
unknown_language = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 1.
|
||||
" The language for Translation Object Detective was not setup
|
||||
ENDIF.
|
||||
IF NOT lv_translation_detective_lang IS INITIAL.
|
||||
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
|
||||
<ls_system_language_filter>-sign = 'E'.
|
||||
<ls_system_language_filter>-option = 'EQ'.
|
||||
<ls_system_language_filter>-low = lv_translation_detective_lang.
|
||||
ENDIF.
|
||||
" 1943470 - Using technical language key 2Q to create pseudo-translations of ABAP developments
|
||||
" https://launchpad.support.sap.com/#/notes/1943470
|
||||
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
|
||||
EXPORTING
|
||||
input = '2Q'
|
||||
IMPORTING
|
||||
output = lv_pseudo_translation_language
|
||||
EXCEPTIONS
|
||||
unknown_language = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 1.
|
||||
" The language for Pseudo Translation was not setup
|
||||
ENDIF.
|
||||
IF NOT lv_pseudo_translation_language IS INITIAL.
|
||||
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
|
||||
<ls_system_language_filter>-sign = 'E'.
|
||||
<ls_system_language_filter>-option = 'EQ'.
|
||||
<ls_system_language_filter>-low = lv_pseudo_translation_language.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_environment~init_parallel_processing.
|
||||
|
||||
DATA: lv_group TYPE rzlli_apcl.
|
||||
|
||||
lv_group = iv_group.
|
||||
|
||||
" SPBT_INITIALIZE gives error PBT_ENV_ALREADY_INITIALIZED if called
|
||||
" multiple times in same session
|
||||
CALL FUNCTION 'SPBT_INITIALIZE'
|
||||
EXPORTING
|
||||
group_name = lv_group
|
||||
IMPORTING
|
||||
free_pbt_wps = rv_free_work_processes
|
||||
EXCEPTIONS
|
||||
invalid_group_name = 1
|
||||
internal_error = 2
|
||||
pbt_env_already_initialized = 3
|
||||
currently_no_resources_avail = 4
|
||||
no_pbt_resources_found = 5
|
||||
cant_init_different_pbt_groups = 6
|
||||
OTHERS = 7 ##FM_SUBRC_OK.
|
||||
" If SPBT_INITIALIZE fails, check transactions RZ12, SM50, SM21, SARFC
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_environment~is_merged.
|
||||
DATA lr_marker TYPE REF TO data ##NEEDED.
|
||||
|
||||
|
@ -155,50 +290,6 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_environment~get_system_language_filter.
|
||||
DATA lv_translation_detective_lang TYPE spras.
|
||||
DATA lv_pseudo_translation_language TYPE spras.
|
||||
FIELD-SYMBOLS <ls_system_language_filter> LIKE LINE OF rt_system_language_filter.
|
||||
|
||||
" Translation Object Detective
|
||||
" https://help.sap.com/docs/ABAP_PLATFORM_NEW/ceb25152cb0d4adba664cebea2bf4670/88a3d3cbccf64601975acabaccdfde45.html
|
||||
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
|
||||
EXPORTING
|
||||
input = '1Q'
|
||||
IMPORTING
|
||||
output = lv_translation_detective_lang
|
||||
EXCEPTIONS
|
||||
unknown_language = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 1.
|
||||
" The language for Translation Object Detective was not setup
|
||||
ENDIF.
|
||||
IF NOT lv_translation_detective_lang IS INITIAL.
|
||||
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
|
||||
<ls_system_language_filter>-sign = 'E'.
|
||||
<ls_system_language_filter>-option = 'EQ'.
|
||||
<ls_system_language_filter>-low = lv_translation_detective_lang.
|
||||
ENDIF.
|
||||
" 1943470 - Using technical language key 2Q to create pseudo-translations of ABAP developments
|
||||
" https://launchpad.support.sap.com/#/notes/1943470
|
||||
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
|
||||
EXPORTING
|
||||
input = '2Q'
|
||||
IMPORTING
|
||||
output = lv_pseudo_translation_language
|
||||
EXCEPTIONS
|
||||
unknown_language = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 1.
|
||||
" The language for Pseudo Translation was not setup
|
||||
ENDIF.
|
||||
IF NOT lv_pseudo_translation_language IS INITIAL.
|
||||
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
|
||||
<ls_system_language_filter>-sign = 'E'.
|
||||
<ls_system_language_filter>-option = 'EQ'.
|
||||
<ls_system_language_filter>-low = lv_pseudo_translation_language.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_environment~is_variant_maintenance.
|
||||
|
||||
|
@ -212,30 +303,4 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
|
|||
rv_is_variant_maintenance = boolc( lines( lt_variscreens ) > 0 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_environment~init_parallel_processing.
|
||||
|
||||
DATA: lv_group TYPE rzlli_apcl.
|
||||
|
||||
lv_group = iv_group.
|
||||
|
||||
" SPBT_INITIALIZE gives error PBT_ENV_ALREADY_INITIALIZED if called
|
||||
" multiple times in same session
|
||||
CALL FUNCTION 'SPBT_INITIALIZE'
|
||||
EXPORTING
|
||||
group_name = lv_group
|
||||
IMPORTING
|
||||
free_pbt_wps = rv_free_work_processes
|
||||
EXCEPTIONS
|
||||
invalid_group_name = 1
|
||||
internal_error = 2
|
||||
pbt_env_already_initialized = 3
|
||||
currently_no_resources_avail = 4
|
||||
no_pbt_resources_found = 5
|
||||
cant_init_different_pbt_groups = 6
|
||||
OTHERS = 7.
|
||||
" If SPBT_INITIALIZE fails, check transactions RZ12, SM50, SM21, SARFC
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
|
38
src/env/zcl_abapgit_settings.clas.abap
vendored
38
src/env/zcl_abapgit_settings.clas.abap
vendored
|
@ -156,6 +156,18 @@ CLASS zcl_abapgit_settings DEFINITION
|
|||
METHODS set_activate_wo_popup
|
||||
IMPORTING
|
||||
!iv_act_wo_popup TYPE zif_abapgit_definitions=>ty_s_user_settings-activate_wo_popup .
|
||||
METHODS set_default_git_uname
|
||||
IMPORTING
|
||||
!iv_default_git_uname TYPE string.
|
||||
METHODS get_default_git_uname
|
||||
RETURNING
|
||||
VALUE(rv_default_git_uname) TYPE string.
|
||||
METHODS set_default_git_email
|
||||
IMPORTING
|
||||
!iv_default_git_email TYPE string.
|
||||
METHODS get_default_git_email
|
||||
RETURNING
|
||||
VALUE(rv_default_git_email) TYPE string.
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
TYPES: BEGIN OF ty_s_settings,
|
||||
|
@ -322,7 +334,11 @@ CLASS zcl_abapgit_settings IMPLEMENTATION.
|
|||
WHEN 'Belize'.
|
||||
rv_ui_theme = c_ui_theme-belize.
|
||||
WHEN OTHERS.
|
||||
rv_ui_theme = c_ui_theme-default.
|
||||
IF lv_frontend_theme CS 'dark'.
|
||||
rv_ui_theme = c_ui_theme-dark.
|
||||
ELSE.
|
||||
rv_ui_theme = c_ui_theme-default.
|
||||
ENDIF.
|
||||
ENDCASE.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
@ -487,4 +503,24 @@ CLASS zcl_abapgit_settings IMPLEMENTATION.
|
|||
cg_data = ms_settings ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_default_git_uname.
|
||||
rv_default_git_uname = ms_user_settings-default_git_uname.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD set_default_git_uname.
|
||||
ms_user_settings-default_git_uname = iv_default_git_uname.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_default_git_email.
|
||||
rv_default_git_email = ms_user_settings-default_git_email.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD set_default_git_email.
|
||||
ms_user_settings-default_git_email = iv_default_git_email.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
200
src/env/zcl_abapgit_user_record.clas.abap
vendored
200
src/env/zcl_abapgit_user_record.clas.abap
vendored
|
@ -1,45 +1,26 @@
|
|||
CLASS zcl_abapgit_user_record DEFINITION
|
||||
PUBLIC
|
||||
FINAL
|
||||
CREATE PRIVATE.
|
||||
CREATE PRIVATE
|
||||
GLOBAL FRIENDS zcl_abapgit_env_factory.
|
||||
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS reset.
|
||||
CLASS-METHODS get_instance
|
||||
IMPORTING
|
||||
!iv_user TYPE sy-uname
|
||||
RETURNING
|
||||
VALUE(ro_user) TYPE REF TO zcl_abapgit_user_record.
|
||||
METHODS constructor
|
||||
IMPORTING
|
||||
!iv_user TYPE sy-uname.
|
||||
METHODS get_name
|
||||
RETURNING
|
||||
VALUE(rv_name) TYPE string.
|
||||
METHODS get_email
|
||||
RETURNING
|
||||
VALUE(rv_email) TYPE string.
|
||||
CLASS-METHODS get_title
|
||||
IMPORTING
|
||||
iv_username TYPE sy-uname
|
||||
RETURNING
|
||||
VALUE(rv_title) TYPE string.
|
||||
|
||||
INTERFACES zif_abapgit_user_record.
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
TYPES:
|
||||
BEGIN OF ty_user,
|
||||
user TYPE sy-uname,
|
||||
o_user TYPE REF TO zcl_abapgit_user_record,
|
||||
user TYPE sy-uname,
|
||||
name TYPE string,
|
||||
email TYPE string,
|
||||
END OF ty_user.
|
||||
|
||||
CLASS-DATA gt_user TYPE HASHED TABLE OF ty_user WITH UNIQUE KEY user.
|
||||
|
||||
DATA: BEGIN OF ms_user,
|
||||
name TYPE string,
|
||||
email TYPE string,
|
||||
END OF ms_user .
|
||||
|
||||
METHODS check_user_exists
|
||||
CLASS-METHODS check_user_exists
|
||||
IMPORTING
|
||||
iv_user TYPE sy-uname
|
||||
EXPORTING
|
||||
|
@ -48,35 +29,51 @@ CLASS zcl_abapgit_user_record DEFINITION
|
|||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
METHODS get_user_dtls_from_other_clnt
|
||||
CLASS-METHODS get_user_dtls_from_other_clnt
|
||||
IMPORTING
|
||||
iv_user TYPE sy-uname.
|
||||
iv_user TYPE sy-uname
|
||||
RETURNING
|
||||
VALUE(rs_user) TYPE ty_user.
|
||||
|
||||
CLASS-METHODS build_cache
|
||||
IMPORTING
|
||||
iv_user TYPE sy-uname
|
||||
RETURNING
|
||||
VALUE(rs_user) TYPE ty_user.
|
||||
|
||||
CLASS-METHODS read_cache
|
||||
IMPORTING
|
||||
iv_user TYPE sy-uname
|
||||
RETURNING
|
||||
VALUE(rs_user) TYPE ty_user.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_user_record IMPLEMENTATION.
|
||||
CLASS ZCL_ABAPGIT_USER_RECORD IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD get_title.
|
||||
* the queried username might not exist, so this method is static
|
||||
METHOD build_cache.
|
||||
|
||||
DATA ls_user_address TYPE addr3_val.
|
||||
" Get user details
|
||||
TRY.
|
||||
check_user_exists(
|
||||
EXPORTING
|
||||
iv_user = iv_user
|
||||
IMPORTING
|
||||
ev_fullname = rs_user-name
|
||||
ev_email = rs_user-email ).
|
||||
CATCH zcx_abapgit_exception.
|
||||
" Could not find user, try to get from other clients
|
||||
rs_user = get_user_dtls_from_other_clnt( iv_user ).
|
||||
ENDTRY.
|
||||
|
||||
CALL FUNCTION 'SUSR_USER_ADDRESS_READ'
|
||||
EXPORTING
|
||||
user_name = iv_username
|
||||
IMPORTING
|
||||
user_address = ls_user_address
|
||||
EXCEPTIONS
|
||||
user_address_not_found = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 0.
|
||||
rv_title = ls_user_address-name_text.
|
||||
ENDIF.
|
||||
rs_user-user = iv_user.
|
||||
INSERT rs_user INTO TABLE gt_user.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD check_user_exists.
|
||||
|
||||
DATA lt_return TYPE STANDARD TABLE OF bapiret2 WITH DEFAULT KEY.
|
||||
|
@ -109,63 +106,6 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
|
||||
DATA ls_user TYPE ty_user.
|
||||
|
||||
" Get user details
|
||||
TRY.
|
||||
check_user_exists(
|
||||
EXPORTING
|
||||
iv_user = iv_user
|
||||
IMPORTING
|
||||
ev_fullname = ms_user-name
|
||||
ev_email = ms_user-email ).
|
||||
CATCH zcx_abapgit_exception.
|
||||
" Could not find user, try to get from other clients
|
||||
get_user_dtls_from_other_clnt( iv_user ).
|
||||
ENDTRY.
|
||||
|
||||
" If the user has been found add it to the list
|
||||
IF ms_user-name IS NOT INITIAL AND ms_user-email IS NOT INITIAL.
|
||||
ls_user-user = iv_user.
|
||||
ls_user-o_user = me.
|
||||
INSERT ls_user INTO TABLE gt_user.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_email.
|
||||
|
||||
rv_email = ms_user-email.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_instance.
|
||||
|
||||
FIELD-SYMBOLS <ls_user> TYPE ty_user.
|
||||
|
||||
READ TABLE gt_user ASSIGNING <ls_user> WITH TABLE KEY user = iv_user.
|
||||
IF sy-subrc = 0.
|
||||
ro_user = <ls_user>-o_user.
|
||||
ELSE.
|
||||
CREATE OBJECT ro_user
|
||||
EXPORTING
|
||||
iv_user = iv_user.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_name.
|
||||
|
||||
rv_name = ms_user-name.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_user_dtls_from_other_clnt.
|
||||
|
||||
CONSTANTS lc_cc_category TYPE string VALUE 'C'.
|
||||
|
@ -179,7 +119,7 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION.
|
|||
ORDER BY PRIMARY KEY.
|
||||
|
||||
LOOP AT lt_dev_clients ASSIGNING <lv_dev_client>.
|
||||
SELECT SINGLE p~name_text a~smtp_addr INTO (ms_user-name, ms_user-email)
|
||||
SELECT SINGLE u~bname p~name_text a~smtp_addr INTO (rs_user-user, rs_user-name, rs_user-email)
|
||||
FROM usr21 AS u
|
||||
INNER JOIN adrp AS p ON p~persnumber = u~persnumber
|
||||
AND p~client = u~mandt
|
||||
|
@ -200,7 +140,61 @@ CLASS zcl_abapgit_user_record IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD read_cache.
|
||||
|
||||
READ TABLE gt_user INTO rs_user WITH TABLE KEY user = iv_user.
|
||||
IF sy-subrc <> 0.
|
||||
rs_user = build_cache( iv_user ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD reset.
|
||||
CLEAR gt_user.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_user_record~get_email.
|
||||
|
||||
rv_email = read_cache( iv_username )-email.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_user_record~get_name.
|
||||
|
||||
rv_name = read_cache( iv_username )-name.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_user_record~get_title.
|
||||
* the queried username might not exist, refactored for open-abap compatibility
|
||||
|
||||
DATA lr_addr3 TYPE REF TO data.
|
||||
FIELD-SYMBOLS <ls_addr3> TYPE any.
|
||||
FIELD-SYMBOLS <lv_simple> TYPE simple.
|
||||
|
||||
TRY.
|
||||
CREATE DATA lr_addr3 TYPE ('ADDR3_VAL').
|
||||
CATCH cx_sy_create_data_error.
|
||||
RETURN.
|
||||
ENDTRY.
|
||||
ASSIGN lr_addr3->* TO <ls_addr3>.
|
||||
|
||||
CALL FUNCTION 'SUSR_USER_ADDRESS_READ'
|
||||
EXPORTING
|
||||
user_name = iv_username
|
||||
IMPORTING
|
||||
user_address = <ls_addr3>
|
||||
EXCEPTIONS
|
||||
user_address_not_found = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 0.
|
||||
ASSIGN COMPONENT 'NAME_TEXT' OF STRUCTURE <ls_addr3> TO <lv_simple>.
|
||||
rv_title = <lv_simple>.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
|
@ -16,10 +16,10 @@ ENDCLASS.
|
|||
CLASS ltcl_user_record IMPLEMENTATION.
|
||||
|
||||
METHOD test_invalid_user.
|
||||
DATA: lo_user_record TYPE REF TO zcl_abapgit_user_record.
|
||||
DATA li_user_record TYPE REF TO zif_abapgit_user_record.
|
||||
|
||||
zcl_abapgit_user_record=>reset( ).
|
||||
lo_user_record = zcl_abapgit_user_record=>get_instance( c_wrong_user ).
|
||||
li_user_record = zcl_abapgit_env_factory=>get_user_record( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = 0
|
||||
|
|
8
src/env/zif_abapgit_environment.intf.abap
vendored
8
src/env/zif_abapgit_environment.intf.abap
vendored
|
@ -39,5 +39,13 @@ INTERFACE zif_abapgit_environment
|
|||
iv_group TYPE clike
|
||||
RETURNING
|
||||
VALUE(rv_free_work_processes) TYPE i.
|
||||
METHODS check_parallel_processing
|
||||
IMPORTING
|
||||
iv_group TYPE clike
|
||||
RETURNING
|
||||
VALUE(rv_checked) TYPE abap_bool.
|
||||
METHODS get_available_user_sessions
|
||||
RETURNING
|
||||
VALUE(rv_sessions) TYPE i.
|
||||
|
||||
ENDINTERFACE.
|
||||
|
|
21
src/env/zif_abapgit_user_record.intf.abap
vendored
Normal file
21
src/env/zif_abapgit_user_record.intf.abap
vendored
Normal file
|
@ -0,0 +1,21 @@
|
|||
INTERFACE zif_abapgit_user_record PUBLIC.
|
||||
|
||||
METHODS get_name
|
||||
IMPORTING
|
||||
iv_username TYPE sy-uname
|
||||
RETURNING
|
||||
VALUE(rv_name) TYPE string.
|
||||
|
||||
METHODS get_email
|
||||
IMPORTING
|
||||
iv_username TYPE sy-uname
|
||||
RETURNING
|
||||
VALUE(rv_email) TYPE string.
|
||||
|
||||
METHODS get_title
|
||||
IMPORTING
|
||||
iv_username TYPE sy-uname
|
||||
RETURNING
|
||||
VALUE(rv_title) TYPE string.
|
||||
|
||||
ENDINTERFACE.
|
15
src/env/zif_abapgit_user_record.intf.xml
vendored
Normal file
15
src/env/zif_abapgit_user_record.intf.xml
vendored
Normal file
|
@ -0,0 +1,15 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_INTF" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOINTERF>
|
||||
<CLSNAME>ZIF_ABAPGIT_USER_RECORD</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit - User Record</DESCRIPT>
|
||||
<EXPOSURE>2</EXPOSURE>
|
||||
<STATE>1</STATE>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOINTERF>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -248,10 +248,13 @@ CLASS zcl_abapgit_exit IMPLEMENTATION.
|
|||
TRY.
|
||||
gi_exit->change_tadir(
|
||||
EXPORTING
|
||||
iv_package = iv_package
|
||||
ii_log = ii_log
|
||||
iv_package = iv_package
|
||||
ii_log = ii_log
|
||||
is_dot_abapgit = is_dot_abapgit
|
||||
iv_ignore_subpackages = iv_ignore_subpackages
|
||||
iv_only_local_objects = iv_only_local_objects
|
||||
CHANGING
|
||||
ct_tadir = ct_tadir ).
|
||||
ct_tadir = ct_tadir ).
|
||||
CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER.
|
||||
ENDTRY.
|
||||
ENDIF.
|
||||
|
@ -314,8 +317,8 @@ CLASS zcl_abapgit_exit IMPLEMENTATION.
|
|||
TRY.
|
||||
gi_exit->determine_transport_request(
|
||||
EXPORTING
|
||||
io_repo = io_repo
|
||||
iv_transport_type = iv_transport_type
|
||||
ii_repo = ii_repo
|
||||
iv_transport_type = iv_transport_type
|
||||
CHANGING
|
||||
cv_transport_request = cv_transport_request ).
|
||||
CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER.
|
||||
|
@ -325,6 +328,18 @@ CLASS zcl_abapgit_exit IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_exit~enhance_any_toolbar.
|
||||
|
||||
IF gi_exit IS NOT INITIAL.
|
||||
TRY.
|
||||
gi_exit->enhance_any_toolbar( io_menu ).
|
||||
CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER.
|
||||
ENDTRY.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_exit~enhance_repo_toolbar.
|
||||
|
||||
IF gi_exit IS NOT INITIAL.
|
||||
|
@ -437,9 +452,9 @@ CLASS zcl_abapgit_exit IMPLEMENTATION.
|
|||
IF gi_exit IS NOT INITIAL.
|
||||
TRY.
|
||||
gi_exit->validate_before_push(
|
||||
is_comment = is_comment
|
||||
io_stage = io_stage
|
||||
io_repo = io_repo ).
|
||||
is_comment = is_comment
|
||||
io_stage = io_stage
|
||||
ii_repo_online = ii_repo_online ).
|
||||
CATCH cx_sy_ref_is_initial cx_sy_dyn_call_illegal_method ##NO_HANDLER.
|
||||
ENDTRY.
|
||||
ENDIF.
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
*"* use this source file for your ABAP unit test classes
|
||||
|
||||
CLASS ltcl_test DEFINITION DEFERRED.
|
||||
CLASS zcl_abapgit_exit DEFINITION LOCAL FRIENDS ltcl_test.
|
||||
|
||||
|
|
|
@ -5,10 +5,11 @@ INTERFACE zif_abapgit_exit PUBLIC.
|
|||
name TYPE string,
|
||||
clone_url TYPE string,
|
||||
END OF ty_ci_repo.
|
||||
TYPES:
|
||||
ty_ci_repos TYPE TABLE OF ty_ci_repo.
|
||||
TYPES:
|
||||
ty_object_types TYPE STANDARD TABLE OF tadir-object WITH DEFAULT KEY.
|
||||
|
||||
TYPES ty_ci_repos TYPE STANDARD TABLE OF ty_ci_repo WITH DEFAULT KEY.
|
||||
|
||||
TYPES ty_object_types TYPE HASHED TABLE OF tadir-object WITH UNIQUE KEY table_line.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_class_key,
|
||||
clsname TYPE abap_classname,
|
||||
|
@ -42,9 +43,9 @@ INTERFACE zif_abapgit_exit PUBLIC.
|
|||
|
||||
METHODS change_max_parallel_processes
|
||||
IMPORTING
|
||||
iv_package TYPE devclass
|
||||
!iv_package TYPE devclass
|
||||
CHANGING
|
||||
cv_max_processes TYPE i.
|
||||
!cv_max_processes TYPE i.
|
||||
|
||||
METHODS change_proxy_authentication
|
||||
IMPORTING
|
||||
|
@ -66,7 +67,7 @@ INTERFACE zif_abapgit_exit PUBLIC.
|
|||
|
||||
METHODS change_rfc_server_group
|
||||
CHANGING
|
||||
cv_group TYPE rzlli_apcl.
|
||||
!cv_group TYPE rzlli_apcl.
|
||||
|
||||
METHODS change_supported_data_objects
|
||||
CHANGING
|
||||
|
@ -78,10 +79,13 @@ INTERFACE zif_abapgit_exit PUBLIC.
|
|||
|
||||
METHODS change_tadir
|
||||
IMPORTING
|
||||
!iv_package TYPE devclass
|
||||
!ii_log TYPE REF TO zif_abapgit_log
|
||||
!iv_package TYPE devclass
|
||||
!ii_log TYPE REF TO zif_abapgit_log
|
||||
!is_dot_abapgit TYPE zif_abapgit_dot_abapgit=>ty_dot_abapgit
|
||||
!iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
|
||||
!iv_only_local_objects TYPE abap_bool DEFAULT abap_false
|
||||
CHANGING
|
||||
!ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
||||
!ct_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
||||
|
||||
METHODS create_http_client
|
||||
IMPORTING
|
||||
|
@ -107,11 +111,15 @@ INTERFACE zif_abapgit_exit PUBLIC.
|
|||
|
||||
METHODS determine_transport_request
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo
|
||||
!ii_repo TYPE REF TO zif_abapgit_repo
|
||||
!iv_transport_type TYPE zif_abapgit_definitions=>ty_transport_type
|
||||
CHANGING
|
||||
!cv_transport_request TYPE trkorr.
|
||||
|
||||
METHODS enhance_any_toolbar
|
||||
IMPORTING
|
||||
!io_menu TYPE REF TO zcl_abapgit_html_toolbar.
|
||||
|
||||
METHODS enhance_repo_toolbar
|
||||
IMPORTING
|
||||
!io_menu TYPE REF TO zcl_abapgit_html_toolbar
|
||||
|
@ -159,9 +167,9 @@ INTERFACE zif_abapgit_exit PUBLIC.
|
|||
|
||||
METHODS validate_before_push
|
||||
IMPORTING
|
||||
!is_comment TYPE zif_abapgit_git_definitions=>ty_comment
|
||||
!io_stage TYPE REF TO zcl_abapgit_stage
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo_online
|
||||
!is_comment TYPE zif_abapgit_git_definitions=>ty_comment
|
||||
!io_stage TYPE REF TO zcl_abapgit_stage
|
||||
!ii_repo_online TYPE REF TO zif_abapgit_repo_online
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
|
@ -173,5 +181,4 @@ INTERFACE zif_abapgit_exit PUBLIC.
|
|||
IMPORTING
|
||||
!is_repo_meta TYPE zif_abapgit_persistence=>ty_repo
|
||||
!ii_html TYPE REF TO zif_abapgit_html.
|
||||
|
||||
ENDINTERFACE.
|
||||
|
|
|
@ -148,7 +148,7 @@ CLASS ZCL_ABAPGIT_GITV2_PORCELAIN IMPLEMENTATION.
|
|||
lv_argument = |want { lv_sha1 }|.
|
||||
APPEND lv_argument TO lt_arguments.
|
||||
ENDLOOP.
|
||||
* 'filter object:type=commit' doesnt work on github
|
||||
* 'filter object:type=commit' doesn't work on github
|
||||
APPEND 'filter blob:none' TO lt_arguments.
|
||||
APPEND 'no-progress' TO lt_arguments.
|
||||
APPEND 'done' TO lt_arguments.
|
||||
|
|
|
@ -1,5 +1,3 @@
|
|||
*"* use this source file for your ABAP unit test classes
|
||||
|
||||
CLASS ltcl_calculate_patch DEFINITION FINAL FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
|
|
@ -45,6 +45,11 @@ CLASS zcl_abapgit_git_branch_list DEFINITION
|
|||
!iv_current_row_index TYPE sy-tabix OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rv_type) TYPE zif_abapgit_git_definitions=>ty_git_branch_type .
|
||||
CLASS-METHODS get_description
|
||||
IMPORTING
|
||||
!iv_branch_name TYPE clike
|
||||
RETURNING
|
||||
VALUE(rv_description) TYPE string.
|
||||
CLASS-METHODS complete_heads_branch_name
|
||||
IMPORTING
|
||||
!iv_branch_name TYPE clike
|
||||
|
@ -130,8 +135,7 @@ CLASS zcl_abapgit_git_branch_list IMPLEMENTATION.
|
|||
WITH TABLE KEY name_key
|
||||
COMPONENTS name = iv_branch_name.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise( |Branch { get_display_name( iv_branch_name )
|
||||
} not found. Use 'Branch' > 'Switch' to select a different branch| ).
|
||||
zcx_abapgit_exception=>raise( |{ get_description( iv_branch_name ) } not found| ).
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
@ -150,7 +154,7 @@ CLASS zcl_abapgit_git_branch_list IMPLEMENTATION.
|
|||
WITH TABLE KEY name_key
|
||||
COMPONENTS name = iv_branch_name.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_exception=>raise( 'Branch not found' ).
|
||||
zcx_abapgit_exception=>raise( |{ get_description( iv_branch_name ) } not found| ).
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
@ -176,6 +180,24 @@ CLASS zcl_abapgit_git_branch_list IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_description.
|
||||
|
||||
CASE get_type( iv_branch_name ).
|
||||
WHEN zif_abapgit_git_definitions=>c_git_branch_type-branch.
|
||||
rv_description = 'Branch'.
|
||||
WHEN zif_abapgit_git_definitions=>c_git_branch_type-lightweight_tag.
|
||||
rv_description = 'Tag'.
|
||||
WHEN zif_abapgit_git_definitions=>c_git_branch_type-annotated_tag.
|
||||
rv_description = 'Annotated Tag'.
|
||||
WHEN OTHERS.
|
||||
rv_description = 'Branch'.
|
||||
ENDCASE.
|
||||
|
||||
rv_description = |{ rv_description } "{ get_display_name( iv_branch_name ) }"|.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_display_name.
|
||||
rv_display_name = iv_branch_name.
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ CLASS zcl_abapgit_git_commit IMPLEMENTATION.
|
|||
|
||||
METHOD extract_author_data.
|
||||
|
||||
" unix time stamps are in same time zone, so ignore the zone
|
||||
" Unix time stamps are in same time zone, so ignore the zone
|
||||
FIND REGEX zif_abapgit_definitions=>c_author_regex IN iv_author
|
||||
SUBMATCHES
|
||||
ev_author
|
||||
|
|
|
@ -178,14 +178,18 @@ CLASS zcl_abapgit_git_pack IMPLEMENTATION.
|
|||
lv_data = iv_data.
|
||||
|
||||
* header
|
||||
IF NOT xstrlen( lv_data ) > 4 OR lv_data(4) <> c_pack_start.
|
||||
zcx_abapgit_exception=>raise( |Unexpected pack header| ).
|
||||
IF xstrlen( lv_data ) < 4.
|
||||
zcx_abapgit_exception=>raise( |Unexpected pack header, short reply| ).
|
||||
ENDIF.
|
||||
|
||||
IF lv_data(4) <> c_pack_start.
|
||||
zcx_abapgit_exception=>raise( |Unexpected pack header, { lv_data(4) }| ).
|
||||
ENDIF.
|
||||
lv_data = lv_data+4.
|
||||
|
||||
* version
|
||||
IF lv_data(4) <> c_version.
|
||||
zcx_abapgit_exception=>raise( |Version not supported| ).
|
||||
zcx_abapgit_exception=>raise( |Version not supported, { lv_data(4) }| ).
|
||||
ENDIF.
|
||||
lv_data = lv_data+4.
|
||||
|
||||
|
@ -228,7 +232,7 @@ CLASS zcl_abapgit_git_pack IMPLEMENTATION.
|
|||
raw_out_len = lv_decompress_len ).
|
||||
|
||||
IF lv_expected <> lv_decompress_len.
|
||||
zcx_abapgit_exception=>raise( |Decompression falied| ).
|
||||
zcx_abapgit_exception=>raise( |Decompression failed| ).
|
||||
ENDIF.
|
||||
|
||||
cl_abap_gzip=>compress_binary(
|
||||
|
@ -280,7 +284,7 @@ CLASS zcl_abapgit_git_pack IMPLEMENTATION.
|
|||
lv_xstring = iv_data(lv_len).
|
||||
lv_sha1 = zcl_abapgit_hash=>sha1_raw( lv_xstring ).
|
||||
IF to_upper( lv_sha1 ) <> lv_data.
|
||||
zcx_abapgit_exception=>raise( |SHA1 at end of pack doesnt match| ).
|
||||
zcx_abapgit_exception=>raise( |SHA1 at end of pack doesn't match| ).
|
||||
ENDIF.
|
||||
|
||||
decode_deltas( CHANGING ct_objects = rt_objects ).
|
||||
|
@ -481,9 +485,10 @@ CLASS zcl_abapgit_git_pack IMPLEMENTATION.
|
|||
ls_node-chmod = lv_chmod.
|
||||
IF ls_node-chmod <> zif_abapgit_git_definitions=>c_chmod-dir
|
||||
AND ls_node-chmod <> zif_abapgit_git_definitions=>c_chmod-file
|
||||
AND ls_node-chmod <> zif_abapgit_git_definitions=>c_chmod-symbolic_link
|
||||
AND ls_node-chmod <> zif_abapgit_git_definitions=>c_chmod-executable
|
||||
AND ls_node-chmod <> zif_abapgit_git_definitions=>c_chmod-submodule.
|
||||
zcx_abapgit_exception=>raise( |Unknown chmod| ).
|
||||
zcx_abapgit_exception=>raise( |Unknown chmod { ls_node-chmod }| ).
|
||||
ENDIF.
|
||||
|
||||
lv_offset = lv_match + 1.
|
||||
|
@ -934,7 +939,7 @@ CLASS zcl_abapgit_git_pack IMPLEMENTATION.
|
|||
cv_decompressed = ls_data-raw.
|
||||
|
||||
IF lv_compressed_len IS INITIAL.
|
||||
zcx_abapgit_exception=>raise( |Decompression falied :o/| ).
|
||||
zcx_abapgit_exception=>raise( |Decompression failed :o/| ).
|
||||
ENDIF.
|
||||
|
||||
cv_data = cv_data+lv_compressed_len.
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
*"* use this source file for any type of declarations (class
|
||||
*"* definitions, interfaces or type declarations) you need for
|
||||
*"* components in the private section
|
||||
|
||||
CLASS lcl_stream DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
TYPES: ty_hex TYPE x LENGTH 1.
|
||||
|
|
|
@ -1,7 +1,3 @@
|
|||
*"* use this source file for the definition and implementation of
|
||||
*"* local helper classes, interface definitions and type
|
||||
*"* declarations
|
||||
|
||||
CLASS lcl_stream IMPLEMENTATION.
|
||||
|
||||
METHOD constructor.
|
||||
|
|
|
@ -809,6 +809,7 @@ CLASS zcl_abapgit_git_porcelain IMPLEMENTATION.
|
|||
CASE <ls_node>-chmod.
|
||||
WHEN zif_abapgit_git_definitions=>c_chmod-file
|
||||
OR zif_abapgit_git_definitions=>c_chmod-executable
|
||||
OR zif_abapgit_git_definitions=>c_chmod-symbolic_link
|
||||
OR zif_abapgit_git_definitions=>c_chmod-submodule.
|
||||
APPEND INITIAL LINE TO rt_expanded ASSIGNING <ls_exp>.
|
||||
<ls_exp>-path = iv_base.
|
||||
|
@ -822,7 +823,7 @@ CLASS zcl_abapgit_git_porcelain IMPLEMENTATION.
|
|||
iv_base = iv_base && <ls_node>-name && '/' ).
|
||||
APPEND LINES OF lt_expanded TO rt_expanded.
|
||||
WHEN OTHERS.
|
||||
zcx_abapgit_exception=>raise( 'walk_tree: unknown chmod' ).
|
||||
zcx_abapgit_exception=>raise( |walk_tree: unknown chmod { <ls_node>-chmod }| ).
|
||||
ENDCASE.
|
||||
ENDLOOP.
|
||||
|
||||
|
|
|
@ -51,7 +51,7 @@ CLASS zcl_abapgit_git_time IMPLEMENTATION.
|
|||
|
||||
|
||||
METHOD get_unix.
|
||||
* returns seconds since unix epoch, including timezone indicator
|
||||
* returns seconds since Unix epoch, including timezone indicator
|
||||
|
||||
CONSTANTS lc_epoch TYPE timestamp VALUE '19700101000000'.
|
||||
DATA lv_time TYPE timestamp.
|
||||
|
|
|
@ -78,10 +78,11 @@ INTERFACE zif_abapgit_git_definitions
|
|||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_chmod,
|
||||
file TYPE ty_chmod VALUE '100644',
|
||||
executable TYPE ty_chmod VALUE '100755',
|
||||
dir TYPE ty_chmod VALUE '40000 ',
|
||||
submodule TYPE ty_chmod VALUE '160000',
|
||||
file TYPE ty_chmod VALUE '100644',
|
||||
executable TYPE ty_chmod VALUE '100755',
|
||||
dir TYPE ty_chmod VALUE '40000 ',
|
||||
submodule TYPE ty_chmod VALUE '160000',
|
||||
symbolic_link TYPE ty_chmod VALUE '120000',
|
||||
END OF c_chmod .
|
||||
|
||||
TYPES:
|
||||
|
|
|
@ -7,9 +7,9 @@ CLASS zcl_abapgit_git_url DEFINITION
|
|||
|
||||
METHODS get_commit_display_url
|
||||
IMPORTING
|
||||
!io_repo TYPE REF TO zcl_abapgit_repo_online
|
||||
!ii_repo_online TYPE REF TO zif_abapgit_repo_online
|
||||
RETURNING
|
||||
VALUE(rv_url) TYPE string
|
||||
VALUE(rv_url) TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
|
@ -40,18 +40,21 @@ CLASS zcl_abapgit_git_url IMPLEMENTATION.
|
|||
METHOD get_commit_display_url.
|
||||
|
||||
DATA li_exit TYPE REF TO zif_abapgit_exit.
|
||||
DATA li_repo TYPE REF TO zif_abapgit_repo.
|
||||
|
||||
li_repo = ii_repo_online.
|
||||
|
||||
rv_url = get_default_commit_display_url(
|
||||
iv_repo_url = io_repo->get_url( )
|
||||
iv_hash = io_repo->get_current_remote( ) ).
|
||||
iv_repo_url = ii_repo_online->get_url( )
|
||||
iv_hash = ii_repo_online->get_current_remote( ) ).
|
||||
|
||||
li_exit = zcl_abapgit_exit=>get_instance( ).
|
||||
li_exit->adjust_display_commit_url(
|
||||
EXPORTING
|
||||
iv_repo_url = io_repo->get_url( )
|
||||
iv_repo_name = io_repo->get_name( )
|
||||
iv_repo_key = io_repo->get_key( )
|
||||
iv_commit_hash = io_repo->get_current_remote( )
|
||||
iv_repo_url = ii_repo_online->get_url( )
|
||||
iv_repo_name = li_repo->get_name( )
|
||||
iv_repo_key = li_repo->get_key( )
|
||||
iv_commit_hash = ii_repo_online->get_current_remote( )
|
||||
CHANGING
|
||||
cv_display_url = rv_url ).
|
||||
|
||||
|
|
|
@ -50,7 +50,7 @@ CLASS zcl_abapgit_pr_enumerator IMPLEMENTATION.
|
|||
mv_repo_url = to_lower( iv_url ).
|
||||
TRY.
|
||||
mi_enum_provider = create_provider( mv_repo_url ).
|
||||
CATCH zcx_abapgit_exception.
|
||||
CATCH zcx_abapgit_exception ##NO_HANDLER.
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
@ -62,7 +62,7 @@ CLASS zcl_abapgit_pr_enumerator IMPLEMENTATION.
|
|||
DATA lv_user TYPE string.
|
||||
DATA lv_repo TYPE string.
|
||||
|
||||
li_agent = zcl_abapgit_factory=>get_http_agent( ).
|
||||
li_agent = zcl_abapgit_http_agent=>create( ).
|
||||
|
||||
FIND ALL OCCURRENCES OF REGEX 'github\.com\/([^\/]+)\/([^\/]+)'
|
||||
IN iv_repo_url
|
||||
|
|
|
@ -28,6 +28,12 @@ CLASS zcl_abapgit_http DEFINITION
|
|||
VALUE(ro_client) TYPE REF TO zcl_abapgit_http_client
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
CLASS-METHODS check_connection
|
||||
IMPORTING
|
||||
!iv_url TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
PROTECTED SECTION.
|
||||
|
||||
CLASS-METHODS check_auth_requested
|
||||
|
@ -51,6 +57,24 @@ CLASS zcl_abapgit_http DEFINITION
|
|||
VALUE(rv_scheme) TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
CLASS-METHODS get_http_client
|
||||
IMPORTING
|
||||
!iv_url TYPE string
|
||||
RETURNING
|
||||
VALUE(ri_client) TYPE REF TO if_http_client
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
CLASS-METHODS get_connection_longtext
|
||||
IMPORTING
|
||||
!iv_host TYPE string
|
||||
!iv_ssl_id TYPE ssfapplssl
|
||||
!iv_proxy_host TYPE string
|
||||
!iv_proxy_service TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_longtext) TYPE string.
|
||||
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
@ -123,54 +147,22 @@ CLASS zcl_abapgit_http IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD check_connection.
|
||||
" Check if a connection from this system to the git host is possible
|
||||
" This will validate the general HTTP/HTTPS/SSL configuration and certificates
|
||||
get_http_client( iv_url ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD create_by_url.
|
||||
|
||||
DATA: lv_uri TYPE string,
|
||||
lv_scheme TYPE string,
|
||||
lv_authorization TYPE string,
|
||||
li_client TYPE REF TO if_http_client,
|
||||
ls_header LIKE LINE OF it_headers,
|
||||
lo_proxy_configuration TYPE REF TO zcl_abapgit_proxy_config,
|
||||
lv_text TYPE string.
|
||||
DATA: lv_uri TYPE string,
|
||||
lv_scheme TYPE string,
|
||||
lv_authorization TYPE string,
|
||||
li_client TYPE REF TO if_http_client,
|
||||
ls_header LIKE LINE OF it_headers.
|
||||
|
||||
|
||||
CREATE OBJECT lo_proxy_configuration.
|
||||
|
||||
li_client = zcl_abapgit_exit=>get_instance( )->create_http_client( iv_url ).
|
||||
|
||||
IF li_client IS NOT BOUND.
|
||||
|
||||
cl_http_client=>create_by_url(
|
||||
EXPORTING
|
||||
url = zcl_abapgit_url=>host( iv_url )
|
||||
ssl_id = zcl_abapgit_exit=>get_instance( )->get_ssl_id( )
|
||||
proxy_host = lo_proxy_configuration->get_proxy_url( iv_url )
|
||||
proxy_service = lo_proxy_configuration->get_proxy_port( iv_url )
|
||||
IMPORTING
|
||||
client = li_client
|
||||
EXCEPTIONS
|
||||
argument_not_found = 1
|
||||
plugin_not_active = 2
|
||||
internal_error = 3
|
||||
OTHERS = 4 ).
|
||||
IF sy-subrc <> 0.
|
||||
CASE sy-subrc.
|
||||
WHEN 1.
|
||||
" make sure:
|
||||
" a) SSL is setup properly in STRUST
|
||||
lv_text = 'HTTPS ARGUMENT_NOT_FOUND | STRUST/SSL Setup correct?'.
|
||||
WHEN OTHERS.
|
||||
lv_text = 'While creating HTTP Client'.
|
||||
|
||||
ENDCASE.
|
||||
zcx_abapgit_exception=>raise( lv_text ).
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
IF lo_proxy_configuration->get_proxy_authentication( iv_url ) = abap_true.
|
||||
zcl_abapgit_proxy_auth=>run( li_client ).
|
||||
ENDIF.
|
||||
li_client = get_http_client( iv_url ).
|
||||
|
||||
CREATE OBJECT ro_client
|
||||
EXPORTING
|
||||
|
@ -212,6 +204,8 @@ CLASS zcl_abapgit_http IMPLEMENTATION.
|
|||
li_client->propertytype_logon_popup = li_client->co_disabled.
|
||||
ENDIF.
|
||||
|
||||
li_client->request->set_version( if_http_request=>co_protocol_version_1_1 ).
|
||||
|
||||
zcl_abapgit_exit=>get_instance( )->http_client(
|
||||
iv_url = iv_url
|
||||
ii_client = li_client ).
|
||||
|
@ -243,6 +237,123 @@ CLASS zcl_abapgit_http IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_connection_longtext.
|
||||
|
||||
CONSTANTS lc_docs TYPE string VALUE 'https://docs.abapgit.org/user-guide/setup/ssl-setup.html'.
|
||||
|
||||
DATA lv_proxy TYPE string.
|
||||
|
||||
IF iv_proxy_host IS NOT INITIAL.
|
||||
lv_proxy = | via proxy <b>{ iv_proxy_host }:{ iv_proxy_service }</b>|.
|
||||
ENDIF.
|
||||
|
||||
rv_longtext = |abapGit is trying to connect to <b>{ iv_host }</b> |
|
||||
&& |using SSL certificates under <b>{ iv_ssl_id }</b>{ lv_proxy }. |
|
||||
&& |Check system parameters (transaction |
|
||||
&& zcl_abapgit_html=>create( )->a(
|
||||
iv_txt = 'RZ10'
|
||||
iv_act = |{ zif_abapgit_definitions=>c_action-jump_transaction }?transaction=RZ10|
|
||||
iv_class = 'no-pad' )
|
||||
&& |), SSL setup (transaction |
|
||||
&& zcl_abapgit_html=>create( )->a(
|
||||
iv_txt = 'STRUST'
|
||||
iv_act = |{ zif_abapgit_definitions=>c_action-jump_transaction }?transaction=STRUST|
|
||||
iv_class = 'no-pad' )
|
||||
&& |), Internet connection monitor (transaction |
|
||||
&& zcl_abapgit_html=>create( )->a(
|
||||
iv_txt = 'SMICM'
|
||||
iv_act = |{ zif_abapgit_definitions=>c_action-jump_transaction }?transaction=SMICM|
|
||||
iv_class = 'no-pad' )
|
||||
&& |)|.
|
||||
|
||||
IF lv_proxy IS NOT INITIAL.
|
||||
rv_longtext = rv_longtext
|
||||
&& |, and proxy configuration (|
|
||||
&& zcl_abapgit_html=>create( )->a(
|
||||
iv_txt = 'global settings'
|
||||
iv_act = |{ zif_abapgit_definitions=>c_action-go_settings }|
|
||||
iv_class = 'no-pad' )
|
||||
&& |)|.
|
||||
ENDIF.
|
||||
|
||||
rv_longtext = rv_longtext
|
||||
&& |. It's recommended to get your SAP Basis and network teams involved. |
|
||||
&& |For more information and troubleshooting, see the |
|
||||
&& zcl_abapgit_html=>create( )->a(
|
||||
iv_txt = 'abapGit documentation'
|
||||
iv_act = |{ zif_abapgit_definitions=>c_action-url }?url={ lc_docs }|
|
||||
iv_class = 'no-pad' )
|
||||
&& |.|.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_http_client.
|
||||
|
||||
DATA:
|
||||
lv_error TYPE string,
|
||||
lv_longtext TYPE string,
|
||||
lv_host TYPE string,
|
||||
lv_ssl_id TYPE ssfapplssl,
|
||||
lv_proxy_host TYPE string,
|
||||
lv_proxy_service TYPE string,
|
||||
lo_proxy_configuration TYPE REF TO zcl_abapgit_proxy_config.
|
||||
|
||||
CREATE OBJECT lo_proxy_configuration.
|
||||
|
||||
ri_client = zcl_abapgit_exit=>get_instance( )->create_http_client( iv_url ).
|
||||
|
||||
IF ri_client IS INITIAL.
|
||||
|
||||
lv_host = zcl_abapgit_url=>host( iv_url ).
|
||||
lv_ssl_id = zcl_abapgit_exit=>get_instance( )->get_ssl_id( ).
|
||||
lv_proxy_host = lo_proxy_configuration->get_proxy_url( iv_url ).
|
||||
lv_proxy_service = lo_proxy_configuration->get_proxy_port( iv_url ).
|
||||
|
||||
lv_longtext = get_connection_longtext(
|
||||
iv_host = lv_host
|
||||
iv_ssl_id = lv_ssl_id
|
||||
iv_proxy_host = lv_proxy_host
|
||||
iv_proxy_service = lv_proxy_service ).
|
||||
|
||||
cl_http_client=>create_by_url(
|
||||
EXPORTING
|
||||
url = lv_host
|
||||
ssl_id = lv_ssl_id
|
||||
proxy_host = lv_proxy_host
|
||||
proxy_service = lv_proxy_service
|
||||
IMPORTING
|
||||
client = ri_client
|
||||
EXCEPTIONS
|
||||
argument_not_found = 1
|
||||
plugin_not_active = 2
|
||||
internal_error = 3
|
||||
OTHERS = 4 ).
|
||||
IF sy-subrc <> 0.
|
||||
CASE sy-subrc.
|
||||
WHEN 1.
|
||||
lv_error = 'ARGUMENT_NOT_FOUND'.
|
||||
WHEN 2.
|
||||
lv_error = 'PLUGIN_NOT_ACTIVE'.
|
||||
WHEN 3.
|
||||
lv_error = 'INTERNAL_ERROR'.
|
||||
WHEN OTHERS.
|
||||
lv_error = |OTHER_ERROR_{ sy-subrc }|.
|
||||
ENDCASE.
|
||||
zcx_abapgit_exception=>raise(
|
||||
iv_text = |Error { lv_error } creating HTTP connection. Check the configuration|
|
||||
iv_longtext = lv_longtext ).
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
IF lo_proxy_configuration->get_proxy_authentication( iv_url ) = abap_true.
|
||||
zcl_abapgit_proxy_auth=>run( ri_client ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD is_local_system.
|
||||
|
||||
DATA: lv_host TYPE string,
|
||||
|
|
|
@ -71,6 +71,12 @@ CLASS zcl_abapgit_http_client IMPLEMENTATION.
|
|||
zcx_abapgit_exception=>raise( 'Unsupported media type (HTTP 415)' ).
|
||||
WHEN 422.
|
||||
zcx_abapgit_exception=>raise( 'Unprocessable entity (HTTP 422). Check, if URL has to end with ".git"' ).
|
||||
WHEN 426.
|
||||
zcx_abapgit_exception=>raise(
|
||||
iv_text = 'Upgrade Required (HTTP 426)'
|
||||
iv_longtext = |The git server requires a different HTTP-protocol than which is sent. |
|
||||
&& |abapGit uses HTTP/1.1 as default. |
|
||||
&& |See more details in the abapGit online documentation.| ).
|
||||
WHEN OTHERS.
|
||||
lv_text = mi_client->response->get_cdata( ).
|
||||
zcx_abapgit_exception=>raise( |(HTTP { lv_code }) { lv_text }| ).
|
||||
|
@ -152,7 +158,7 @@ CLASS zcl_abapgit_http_client IMPLEMENTATION.
|
|||
code = lv_code
|
||||
message = lv_message ).
|
||||
|
||||
lv_text = |HTTP error { lv_code } occured: { lv_message }|.
|
||||
lv_text = |HTTP error { lv_code } occurred: { lv_message }|.
|
||||
|
||||
zcx_abapgit_exception=>raise( lv_text ).
|
||||
ENDIF.
|
||||
|
|
|
@ -1,7 +1,6 @@
|
|||
CLASS zcl_abapgit_code_inspector DEFINITION
|
||||
PUBLIC
|
||||
CREATE PROTECTED
|
||||
GLOBAL FRIENDS zcl_abapgit_factory .
|
||||
CREATE PROTECTED.
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
|
@ -13,6 +12,19 @@ CLASS zcl_abapgit_code_inspector DEFINITION
|
|||
RAISING
|
||||
zcx_abapgit_exception .
|
||||
|
||||
CLASS-METHODS get_code_inspector
|
||||
IMPORTING
|
||||
!iv_package TYPE devclass
|
||||
RETURNING
|
||||
VALUE(ri_code_inspector) TYPE REF TO zif_abapgit_code_inspector
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
CLASS-METHODS set_code_inspector
|
||||
IMPORTING
|
||||
!iv_package TYPE devclass
|
||||
!ii_code_inspector TYPE REF TO zif_abapgit_code_inspector.
|
||||
|
||||
PROTECTED SECTION.
|
||||
DATA mv_package TYPE devclass .
|
||||
|
||||
|
@ -35,6 +47,15 @@ CLASS zcl_abapgit_code_inspector DEFINITION
|
|||
VALUE(rv_skip) TYPE abap_bool.
|
||||
PRIVATE SECTION.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_code_inspector_pack,
|
||||
package TYPE devclass,
|
||||
instance TYPE REF TO zif_abapgit_code_inspector,
|
||||
END OF ty_code_inspector_pack,
|
||||
ty_code_inspector_packs TYPE HASHED TABLE OF ty_code_inspector_pack WITH UNIQUE KEY package.
|
||||
|
||||
CLASS-DATA gt_code_inspector TYPE ty_code_inspector_packs.
|
||||
|
||||
DATA mv_success TYPE abap_bool .
|
||||
DATA mv_summary TYPE string.
|
||||
|
||||
|
@ -266,6 +287,28 @@ CLASS zcl_abapgit_code_inspector IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_code_inspector.
|
||||
|
||||
DATA ls_code_inspector LIKE LINE OF gt_code_inspector.
|
||||
|
||||
FIELD-SYMBOLS <ls_code_inspector> TYPE ty_code_inspector_pack.
|
||||
|
||||
READ TABLE gt_code_inspector ASSIGNING <ls_code_inspector> WITH TABLE KEY package = iv_package.
|
||||
IF sy-subrc <> 0.
|
||||
ls_code_inspector-package = iv_package.
|
||||
|
||||
CREATE OBJECT ls_code_inspector-instance TYPE zcl_abapgit_code_inspector
|
||||
EXPORTING
|
||||
iv_package = iv_package.
|
||||
|
||||
INSERT ls_code_inspector INTO TABLE gt_code_inspector ASSIGNING <ls_code_inspector>.
|
||||
ENDIF.
|
||||
|
||||
ri_code_inspector = <ls_code_inspector>-instance.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD run_inspection.
|
||||
|
||||
io_inspection->run(
|
||||
|
@ -290,6 +333,24 @@ CLASS zcl_abapgit_code_inspector IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD set_code_inspector.
|
||||
|
||||
DATA ls_code_inspector LIKE LINE OF gt_code_inspector.
|
||||
|
||||
FIELD-SYMBOLS <ls_code_inspector> LIKE LINE OF gt_code_inspector.
|
||||
|
||||
READ TABLE gt_code_inspector ASSIGNING <ls_code_inspector> WITH TABLE KEY package = iv_package.
|
||||
IF sy-subrc <> 0.
|
||||
ls_code_inspector-package = iv_package.
|
||||
|
||||
INSERT ls_code_inspector INTO TABLE gt_code_inspector ASSIGNING <ls_code_inspector>.
|
||||
ENDIF.
|
||||
|
||||
<ls_code_inspector>-instance = ii_code_inspector.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD skip_object.
|
||||
|
||||
DATA ls_program_type TYPE subc.
|
||||
|
|
442
src/inspect/zcl_abapgit_where_used_tools.clas.abap
Normal file
442
src/inspect/zcl_abapgit_where_used_tools.clas.abap
Normal file
|
@ -0,0 +1,442 @@
|
|||
CLASS zcl_abapgit_where_used_tools DEFINITION
|
||||
PUBLIC
|
||||
FINAL
|
||||
CREATE PUBLIC .
|
||||
|
||||
PUBLIC SECTION.
|
||||
|
||||
TYPES ty_devc_range TYPE RANGE OF tadir-devclass.
|
||||
TYPES:
|
||||
BEGIN OF ty_dependency,
|
||||
package TYPE devclass,
|
||||
obj_type TYPE tadir-object,
|
||||
obj_prog_type TYPE trdir-subc,
|
||||
obj_name TYPE tadir-obj_name,
|
||||
obj_cls TYPE string,
|
||||
dep_package TYPE devclass,
|
||||
dep_obj_type TYPE tadir-object,
|
||||
dep_obj_name TYPE tadir-obj_name,
|
||||
dep_used_cls TYPE string,
|
||||
dep_used_obj TYPE string,
|
||||
END OF ty_dependency.
|
||||
TYPES:
|
||||
ty_dependency_tt TYPE STANDARD TABLE OF ty_dependency WITH DEFAULT KEY.
|
||||
|
||||
CLASS-METHODS new
|
||||
RETURNING
|
||||
VALUE(ro_instance) TYPE REF TO zcl_abapgit_where_used_tools.
|
||||
|
||||
" the initial version of this utility is also available as a standalone tool
|
||||
" here: https://github.com/sbcgua/crossdeps
|
||||
METHODS select_external_usages
|
||||
IMPORTING
|
||||
iv_package TYPE tadir-devclass
|
||||
iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
|
||||
ir_package_scope TYPE ty_devc_range OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rt_objs) TYPE ty_dependency_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_obj_signature,
|
||||
package TYPE devclass,
|
||||
obj_type TYPE tadir-object,
|
||||
obj_name TYPE tadir-obj_name,
|
||||
END OF ty_obj_signature.
|
||||
|
||||
TYPES ty_where_used_tt TYPE STANDARD TABLE OF rsfindlst WITH DEFAULT KEY.
|
||||
TYPES ty_seu_obj TYPE STANDARD TABLE OF seu_obj WITH DEFAULT KEY.
|
||||
TYPES:
|
||||
BEGIN OF ty_dev_object,
|
||||
type TYPE seu_stype,
|
||||
tadir TYPE trobjtype,
|
||||
END OF ty_dev_object.
|
||||
|
||||
DATA mt_object_packages TYPE HASHED TABLE OF ty_obj_signature WITH UNIQUE KEY obj_type obj_name.
|
||||
DATA mt_dev_obj_cache TYPE HASHED TABLE OF ty_dev_object WITH UNIQUE KEY type.
|
||||
|
||||
METHODS get_where_used
|
||||
IMPORTING
|
||||
iv_obj_type TYPE euobj-id
|
||||
iv_obj_name TYPE tadir-obj_name
|
||||
it_scope TYPE ty_seu_obj OPTIONAL
|
||||
ir_package_scope TYPE ty_devc_range OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rt_findings) TYPE ty_where_used_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
METHODS get_obj_package
|
||||
IMPORTING
|
||||
iv_obj_type TYPE tadir-object
|
||||
iv_obj_name TYPE tadir-obj_name
|
||||
RETURNING
|
||||
VALUE(rv_package) TYPE tadir-devclass.
|
||||
|
||||
METHODS get_func_package
|
||||
IMPORTING
|
||||
iv_func_name TYPE tadir-obj_name
|
||||
RETURNING
|
||||
VALUE(rv_package) TYPE tadir-devclass.
|
||||
|
||||
METHODS get_incl_package
|
||||
IMPORTING
|
||||
iv_prog_name TYPE tadir-obj_name
|
||||
RETURNING
|
||||
VALUE(rv_package) TYPE tadir-devclass.
|
||||
|
||||
METHODS build_package_scope
|
||||
IMPORTING
|
||||
it_tadir TYPE STANDARD TABLE
|
||||
ir_package_scope TYPE ty_devc_range
|
||||
RETURNING
|
||||
VALUE(rt_package_scope) TYPE ty_devc_range.
|
||||
|
||||
METHODS collect_where_used
|
||||
IMPORTING
|
||||
it_tadir TYPE STANDARD TABLE
|
||||
ir_package_scope TYPE ty_devc_range
|
||||
RETURNING
|
||||
VALUE(rt_objs) TYPE ty_dependency_tt
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
METHODS convert_list
|
||||
IMPORTING
|
||||
iv_package TYPE ty_dependency-dep_package
|
||||
iv_obj_type TYPE ty_dependency-dep_obj_type
|
||||
iv_obj_name TYPE ty_dependency-dep_obj_name
|
||||
it_where_used TYPE ty_where_used_tt
|
||||
RETURNING
|
||||
VALUE(rt_objs) TYPE ty_dependency_tt.
|
||||
|
||||
METHODS decode_obj_type
|
||||
IMPORTING
|
||||
iv_type TYPE rsfindlst-object_cls
|
||||
RETURNING
|
||||
VALUE(rv_type) TYPE ty_dev_object-tadir.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_where_used_tools IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD build_package_scope.
|
||||
|
||||
FIELD-SYMBOLS <ls_tadir> TYPE zif_abapgit_definitions=>ty_tadir.
|
||||
FIELD-SYMBOLS <ls_pkg> LIKE LINE OF rt_package_scope.
|
||||
|
||||
rt_package_scope = ir_package_scope.
|
||||
LOOP AT it_tadir ASSIGNING <ls_tadir>.
|
||||
CHECK <ls_tadir>-object = 'DEVC'.
|
||||
APPEND INITIAL LINE TO rt_package_scope ASSIGNING <ls_pkg>.
|
||||
<ls_pkg>-sign = 'E'.
|
||||
<ls_pkg>-option = 'EQ'.
|
||||
<ls_pkg>-low = <ls_tadir>-obj_name.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD collect_where_used.
|
||||
|
||||
DATA li_progress TYPE REF TO zif_abapgit_progress.
|
||||
DATA lt_where_used TYPE ty_where_used_tt.
|
||||
DATA lt_objs_portion LIKE rt_objs.
|
||||
|
||||
FIELD-SYMBOLS <ls_tadir> TYPE zif_abapgit_definitions=>ty_tadir.
|
||||
|
||||
li_progress = zcl_abapgit_progress=>get_instance( lines( it_tadir ) ).
|
||||
|
||||
LOOP AT it_tadir ASSIGNING <ls_tadir>.
|
||||
CHECK <ls_tadir>-object <> 'DEVC'.
|
||||
|
||||
li_progress->show(
|
||||
iv_current = sy-tabix
|
||||
iv_text = |{ <ls_tadir>-object } { <ls_tadir>-obj_name }| ).
|
||||
|
||||
lt_where_used = get_where_used(
|
||||
iv_obj_type = |{ <ls_tadir>-object }|
|
||||
iv_obj_name = <ls_tadir>-obj_name
|
||||
ir_package_scope = ir_package_scope ).
|
||||
|
||||
lt_objs_portion = convert_list(
|
||||
iv_package = <ls_tadir>-devclass
|
||||
iv_obj_type = <ls_tadir>-object
|
||||
iv_obj_name = <ls_tadir>-obj_name
|
||||
it_where_used = lt_where_used ).
|
||||
|
||||
APPEND LINES OF lt_objs_portion TO rt_objs.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
li_progress->off( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD convert_list.
|
||||
|
||||
" See also CL_FINB_GN_BBI=>GET_CROSSREF
|
||||
|
||||
FIELD-SYMBOLS <ls_dep> LIKE LINE OF rt_objs.
|
||||
FIELD-SYMBOLS <ls_use> LIKE LINE OF it_where_used.
|
||||
|
||||
LOOP AT it_where_used ASSIGNING <ls_use>.
|
||||
|
||||
APPEND INITIAL LINE TO rt_objs ASSIGNING <ls_dep>.
|
||||
<ls_dep>-dep_package = iv_package.
|
||||
<ls_dep>-dep_obj_type = iv_obj_type.
|
||||
<ls_dep>-dep_obj_name = iv_obj_name.
|
||||
|
||||
<ls_dep>-dep_used_obj = <ls_use>-used_obj.
|
||||
<ls_dep>-dep_used_cls = <ls_use>-used_cls.
|
||||
|
||||
<ls_dep>-obj_cls = <ls_use>-object_cls.
|
||||
<ls_dep>-obj_name = <ls_use>-encl_objec.
|
||||
IF <ls_dep>-obj_name IS INITIAL.
|
||||
<ls_dep>-obj_name = <ls_use>-object.
|
||||
ENDIF.
|
||||
|
||||
IF <ls_use>-object_cls = 'FF'. " Function module
|
||||
<ls_dep>-obj_type = 'FUNC'.
|
||||
<ls_dep>-package = get_func_package( <ls_dep>-obj_name ).
|
||||
|
||||
ELSE.
|
||||
<ls_dep>-obj_type = decode_obj_type( <ls_use>-object_cls ).
|
||||
|
||||
<ls_dep>-package = get_obj_package(
|
||||
iv_obj_type = <ls_dep>-obj_type
|
||||
iv_obj_name = <ls_dep>-obj_name ).
|
||||
|
||||
IF <ls_dep>-package IS INITIAL AND <ls_dep>-obj_type = 'CLAS'.
|
||||
<ls_dep>-package = get_obj_package(
|
||||
iv_obj_type = 'INTF'
|
||||
iv_obj_name = <ls_dep>-obj_name ).
|
||||
IF <ls_dep>-package IS NOT INITIAL.
|
||||
<ls_dep>-obj_type = 'INTF'.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
IF <ls_dep>-package IS INITIAL.
|
||||
IF <ls_dep>-obj_type = 'PROG'. " Maybe it is an include
|
||||
|
||||
<ls_dep>-package = get_incl_package( <ls_dep>-obj_name ).
|
||||
IF <ls_dep>-package IS INITIAL.
|
||||
SELECT SINGLE subc INTO <ls_dep>-obj_prog_type FROM trdir WHERE name = <ls_dep>-obj_name.
|
||||
IF <ls_dep>-obj_prog_type IS NOT INITIAL AND <ls_dep>-obj_prog_type <> '1'. " Exec. prog
|
||||
<ls_dep>-obj_type = 'INCL'.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
ENDIF.
|
||||
|
||||
IF <ls_dep>-package IS INITIAL.
|
||||
<ls_dep>-package = '????'.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
" some includes are ENHO ...
|
||||
" include detection TRDIR, D010INC ???
|
||||
" how to find connection with ENHO ?
|
||||
" Useful: https://github.com/abaplint/abaplint-sci-client/blob/main/src/deps/zcl_abaplint_deps_find.clas.abap
|
||||
" And cl_wb_manager->if_wb_manager~request_tool_access
|
||||
" And discussions in https://github.com/abapGit/abapGit/pull/6897
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD decode_obj_type.
|
||||
|
||||
FIELD-SYMBOLS <ls_devobj> LIKE LINE OF mt_dev_obj_cache.
|
||||
|
||||
IF mt_dev_obj_cache IS INITIAL.
|
||||
SELECT type tadir INTO TABLE mt_dev_obj_cache
|
||||
FROM euobjedit.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE mt_dev_obj_cache ASSIGNING <ls_devobj> WITH KEY type = iv_type.
|
||||
IF sy-subrc = 0.
|
||||
rv_type = <ls_devobj>-tadir.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_func_package.
|
||||
|
||||
" See also: FUNCTION_INCLUDE_INFO, TFDIR, find main program -> get its pkg
|
||||
|
||||
DATA ls_obj_sig LIKE LINE OF mt_object_packages.
|
||||
|
||||
READ TABLE mt_object_packages INTO ls_obj_sig WITH KEY obj_type = 'FUNC' obj_name = iv_func_name.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
SELECT SINGLE devclass INTO ls_obj_sig-package
|
||||
FROM info_func
|
||||
WHERE funcname = iv_func_name.
|
||||
IF ls_obj_sig-package IS NOT INITIAL.
|
||||
ls_obj_sig-obj_type = 'FUNC'.
|
||||
ls_obj_sig-obj_name = iv_func_name.
|
||||
INSERT ls_obj_sig INTO TABLE mt_object_packages.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
rv_package = ls_obj_sig-package.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_incl_package.
|
||||
|
||||
DATA lv_program TYPE progname.
|
||||
DATA lv_area TYPE rs38l_area.
|
||||
|
||||
lv_program = iv_prog_name.
|
||||
|
||||
CALL FUNCTION 'FUNCTION_INCLUDE_CONCATENATE'
|
||||
CHANGING
|
||||
program = lv_program
|
||||
complete_area = lv_area
|
||||
EXCEPTIONS
|
||||
not_enough_input = 1
|
||||
no_function_pool = 2
|
||||
delimiter_wrong_position = 3
|
||||
OTHERS = 4 ##FM_SUBRC_OK.
|
||||
|
||||
IF lv_area IS INITIAL.
|
||||
SELECT SINGLE master FROM d010inc INTO lv_program
|
||||
WHERE include = iv_prog_name.
|
||||
|
||||
CALL FUNCTION 'FUNCTION_INCLUDE_CONCATENATE'
|
||||
CHANGING
|
||||
program = lv_program
|
||||
complete_area = lv_area
|
||||
EXCEPTIONS
|
||||
not_enough_input = 1
|
||||
no_function_pool = 2
|
||||
delimiter_wrong_position = 3
|
||||
OTHERS = 4 ##FM_SUBRC_OK.
|
||||
ENDIF.
|
||||
|
||||
IF lv_area IS NOT INITIAL.
|
||||
rv_package = get_obj_package(
|
||||
iv_obj_type = 'FUGR'
|
||||
iv_obj_name = |{ lv_area }| ).
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
" TODO more ...
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_obj_package.
|
||||
|
||||
" see also zcl_abapgit_tadir->get_object_package for checks
|
||||
|
||||
DATA ls_obj_sig LIKE LINE OF mt_object_packages.
|
||||
|
||||
READ TABLE mt_object_packages INTO ls_obj_sig WITH KEY obj_type = iv_obj_type obj_name = iv_obj_name.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
ls_obj_sig-package = zcl_abapgit_factory=>get_tadir( )->read_single(
|
||||
iv_object = iv_obj_type
|
||||
iv_obj_name = iv_obj_name )-devclass.
|
||||
IF ls_obj_sig-package IS NOT INITIAL.
|
||||
ls_obj_sig-obj_type = iv_obj_type.
|
||||
ls_obj_sig-obj_name = iv_obj_name.
|
||||
INSERT ls_obj_sig INTO TABLE mt_object_packages.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
rv_package = ls_obj_sig-package.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_where_used.
|
||||
|
||||
DATA lt_findstrings TYPE string_table.
|
||||
DATA lt_scope LIKE it_scope.
|
||||
DATA lv_findstring LIKE LINE OF lt_findstrings.
|
||||
|
||||
IF iv_obj_name IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
lt_scope = it_scope.
|
||||
|
||||
lv_findstring = iv_obj_name.
|
||||
INSERT lv_findstring INTO TABLE lt_findstrings.
|
||||
|
||||
CALL FUNCTION 'RS_EU_CROSSREF'
|
||||
EXPORTING
|
||||
i_find_obj_cls = iv_obj_type
|
||||
no_dialog = abap_true
|
||||
without_text = abap_true
|
||||
TABLES
|
||||
i_findstrings = lt_findstrings
|
||||
o_founds = rt_findings
|
||||
i_scope_object_cls = lt_scope
|
||||
i_scope_devclass = ir_package_scope
|
||||
EXCEPTIONS
|
||||
not_executed = 1
|
||||
not_found = 2
|
||||
illegal_object = 3
|
||||
no_cross_for_this_object = 4
|
||||
batch = 5
|
||||
batchjob_error = 6
|
||||
wrong_type = 7
|
||||
object_not_exist = 8
|
||||
OTHERS = 9.
|
||||
|
||||
IF sy-subrc = 1 OR sy-subrc = 2 OR lines( rt_findings ) = 0.
|
||||
RETURN.
|
||||
ELSEIF sy-subrc > 2.
|
||||
zcx_abapgit_exception=>raise( |RS_EU_CROSSREF({ sy-subrc }) for { iv_obj_type } { iv_obj_name }| ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD new.
|
||||
CREATE OBJECT ro_instance.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD select_external_usages.
|
||||
|
||||
DATA lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
||||
DATA lt_package_scope LIKE ir_package_scope.
|
||||
|
||||
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read(
|
||||
iv_package = iv_package
|
||||
iv_ignore_subpackages = iv_ignore_subpackages ).
|
||||
|
||||
lt_package_scope = build_package_scope(
|
||||
ir_package_scope = ir_package_scope
|
||||
it_tadir = lt_tadir ).
|
||||
|
||||
rt_objs = collect_where_used(
|
||||
ir_package_scope = lt_package_scope
|
||||
it_tadir = lt_tadir ).
|
||||
|
||||
SORT rt_objs.
|
||||
DELETE ADJACENT DUPLICATES FROM rt_objs.
|
||||
" Duplicates happen e.g. because where-used is found by method.
|
||||
" However here this functionality aggregates them to the object
|
||||
" These are not true duplicates, so if ever the method name (or any other duplicate cause)
|
||||
" will be extracted, this sort can be removed
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
16
src/inspect/zcl_abapgit_where_used_tools.clas.xml
Normal file
16
src/inspect/zcl_abapgit_where_used_tools.clas.xml
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_WHERE_USED_TOOLS</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>abapGit - Where-used Utilities</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -50,30 +50,30 @@ CLASS zcl_abapgit_ajson DEFINITION
|
|||
|
||||
CLASS-METHODS parse
|
||||
IMPORTING
|
||||
!iv_json TYPE string
|
||||
!iv_json TYPE any
|
||||
!iv_freeze TYPE abap_bool DEFAULT abap_false
|
||||
!ii_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
|
||||
!iv_keep_item_order TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING
|
||||
VALUE(ro_instance) TYPE REF TO zcl_abapgit_ajson
|
||||
VALUE(ro_instance) TYPE REF TO zcl_abapgit_ajson
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error .
|
||||
|
||||
CLASS-METHODS create_empty " Might be deprecated, prefer using new( ) or create object
|
||||
IMPORTING
|
||||
!ii_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
|
||||
iv_keep_item_order TYPE abap_bool DEFAULT abap_false
|
||||
iv_format_datetime TYPE abap_bool DEFAULT abap_true
|
||||
!ii_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
|
||||
iv_keep_item_order TYPE abap_bool DEFAULT abap_false
|
||||
iv_format_datetime TYPE abap_bool DEFAULT abap_true
|
||||
iv_to_abap_corresponding_only TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING
|
||||
VALUE(ro_instance) TYPE REF TO zcl_abapgit_ajson.
|
||||
VALUE(ro_instance) TYPE REF TO zcl_abapgit_ajson.
|
||||
|
||||
" Experimental ! May change
|
||||
CLASS-METHODS create_from " TODO, rename to 'from' ?
|
||||
IMPORTING
|
||||
!ii_source_json TYPE REF TO zif_abapgit_ajson
|
||||
!ii_filter TYPE REF TO zif_abapgit_ajson_filter OPTIONAL " Might be deprecated, use filter() instead
|
||||
!ii_mapper TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL " Might be deprecated, use map() instead
|
||||
!ii_source_json TYPE REF TO zif_abapgit_ajson
|
||||
!ii_filter TYPE REF TO zif_abapgit_ajson_filter OPTIONAL " Might be deprecated, use filter() instead
|
||||
!ii_mapper TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL " Might be deprecated, use map() instead
|
||||
RETURNING
|
||||
VALUE(ro_instance) TYPE REF TO zcl_abapgit_ajson
|
||||
RAISING
|
||||
|
@ -81,16 +81,16 @@ CLASS zcl_abapgit_ajson DEFINITION
|
|||
|
||||
METHODS constructor
|
||||
IMPORTING
|
||||
iv_keep_item_order TYPE abap_bool DEFAULT abap_false
|
||||
iv_format_datetime TYPE abap_bool DEFAULT abap_true
|
||||
iv_keep_item_order TYPE abap_bool DEFAULT abap_false
|
||||
iv_format_datetime TYPE abap_bool DEFAULT abap_true
|
||||
iv_to_abap_corresponding_only TYPE abap_bool DEFAULT abap_false.
|
||||
CLASS-METHODS new
|
||||
IMPORTING
|
||||
iv_keep_item_order TYPE abap_bool DEFAULT abap_false
|
||||
iv_format_datetime TYPE abap_bool DEFAULT abap_true
|
||||
iv_keep_item_order TYPE abap_bool DEFAULT abap_false
|
||||
iv_format_datetime TYPE abap_bool DEFAULT abap_true
|
||||
iv_to_abap_corresponding_only TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING
|
||||
VALUE(ro_instance) TYPE REF TO zcl_abapgit_ajson.
|
||||
VALUE(ro_instance) TYPE REF TO zcl_abapgit_ajson.
|
||||
|
||||
PROTECTED SECTION.
|
||||
|
||||
|
@ -108,16 +108,16 @@ CLASS zcl_abapgit_ajson DEFINITION
|
|||
VALUE(rv_item) TYPE REF TO zif_abapgit_ajson_types=>ty_node.
|
||||
METHODS prove_path_exists
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rr_end_node) TYPE REF TO zif_abapgit_ajson_types=>ty_node
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
METHODS delete_subtree
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_name TYPE string
|
||||
ir_parent TYPE REF TO zif_abapgit_ajson_types=>ty_node OPTIONAL
|
||||
iv_path TYPE string
|
||||
iv_name TYPE string
|
||||
ir_parent TYPE REF TO zif_abapgit_ajson_types=>ty_node OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rs_top_node) TYPE zif_abapgit_ajson_types=>ty_node.
|
||||
METHODS read_only_watchdog
|
||||
|
@ -848,6 +848,8 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
|
|||
DATA lv_path_pattern TYPE string.
|
||||
|
||||
CREATE OBJECT lo_section.
|
||||
lo_section->mi_custom_mapping = mi_custom_mapping.
|
||||
|
||||
lv_normalized_path = lcl_utils=>normalize_path( iv_path ).
|
||||
lv_path_len = strlen( lv_normalized_path ).
|
||||
ls_path_parts = lcl_utils=>split_path( lv_normalized_path ).
|
||||
|
@ -924,8 +926,12 @@ CLASS zcl_abapgit_ajson IMPLEMENTATION.
|
|||
ls_new_node-name = ls_split_path-name.
|
||||
ls_new_node-type = zif_abapgit_ajson_types=>node_type-array.
|
||||
|
||||
IF ms_opts-keep_item_order = abap_true AND ls_deleted_node IS NOT INITIAL.
|
||||
ls_new_node-order = ls_deleted_node-order.
|
||||
IF ms_opts-keep_item_order = abap_true.
|
||||
IF ls_deleted_node IS NOT INITIAL.
|
||||
ls_new_node-order = ls_deleted_node-order.
|
||||
ELSE.
|
||||
ls_new_node-order = lr_parent->children.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
INSERT ls_new_node INTO TABLE mt_json_tree.
|
||||
|
|
|
@ -20,27 +20,27 @@ INTERFACE lif_kind.
|
|||
|
||||
CONSTANTS:
|
||||
BEGIN OF numeric,
|
||||
int1 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_int1,
|
||||
int2 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_int2,
|
||||
int4 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_int,
|
||||
int8 TYPE ty_kind VALUE '8', " cl_abap_tabledescr=>typekind_int8 not in lower releases
|
||||
float TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_float,
|
||||
packed TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_packed,
|
||||
decfloat16 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_decfloat16,
|
||||
decfloat34 TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_decfloat34,
|
||||
int1 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_int1,
|
||||
int2 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_int2,
|
||||
int4 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_int,
|
||||
int8 TYPE ty_kind VALUE '8', " cl_abap_typedescr=>typekind_int8 not in lower releases
|
||||
float TYPE ty_kind VALUE cl_abap_typedescr=>typekind_float,
|
||||
packed TYPE ty_kind VALUE cl_abap_typedescr=>typekind_packed,
|
||||
decfloat16 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_decfloat16,
|
||||
decfloat34 TYPE ty_kind VALUE cl_abap_typedescr=>typekind_decfloat34,
|
||||
END OF numeric.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF texts,
|
||||
char TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_char,
|
||||
numc TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_num,
|
||||
string TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_string,
|
||||
char TYPE ty_kind VALUE cl_abap_typedescr=>typekind_char,
|
||||
numc TYPE ty_kind VALUE cl_abap_typedescr=>typekind_num,
|
||||
string TYPE ty_kind VALUE cl_abap_typedescr=>typekind_string,
|
||||
END OF texts.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF binary,
|
||||
hex TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_hex,
|
||||
xstring TYPE ty_kind VALUE cl_abap_tabledescr=>typekind_xstring,
|
||||
hex TYPE ty_kind VALUE cl_abap_typedescr=>typekind_hex,
|
||||
xstring TYPE ty_kind VALUE cl_abap_typedescr=>typekind_xstring,
|
||||
END OF binary.
|
||||
|
||||
CONSTANTS:
|
||||
|
@ -59,27 +59,46 @@ CLASS lcl_utils DEFINITION FINAL.
|
|||
|
||||
CLASS-METHODS normalize_path
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_path) TYPE string.
|
||||
CLASS-METHODS split_path
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_path_name) TYPE zif_abapgit_ajson_types=>ty_path_name.
|
||||
CLASS-METHODS validate_array_index
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_index TYPE string
|
||||
iv_path TYPE string
|
||||
iv_index TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_index) TYPE i
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
CLASS-METHODS string_to_xstring_utf8
|
||||
IMPORTING
|
||||
iv_str TYPE string
|
||||
iv_str TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_xstr) TYPE xstring.
|
||||
CLASS-METHODS xstring_to_string_utf8
|
||||
IMPORTING
|
||||
iv_xstr TYPE xstring
|
||||
RETURNING
|
||||
VALUE(rv_str) TYPE string.
|
||||
CLASS-METHODS any_to_xstring
|
||||
IMPORTING
|
||||
iv_data TYPE any
|
||||
RETURNING
|
||||
VALUE(rv_xstr) TYPE xstring
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
CLASS-METHODS any_to_string
|
||||
IMPORTING
|
||||
iv_data TYPE any
|
||||
RETURNING
|
||||
VALUE(rv_str) TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
@ -116,6 +135,37 @@ CLASS lcl_utils IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD xstring_to_string_utf8.
|
||||
|
||||
DATA lo_conv TYPE REF TO object.
|
||||
DATA lv_in_ce TYPE string.
|
||||
|
||||
lv_in_ce = 'CL_ABAP_CONV_IN_CE'.
|
||||
|
||||
TRY.
|
||||
CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in
|
||||
RECEIVING
|
||||
instance = lo_conv.
|
||||
CALL METHOD lo_conv->('IF_ABAP_CONV_IN~CONVERT')
|
||||
EXPORTING
|
||||
source = iv_xstr
|
||||
RECEIVING
|
||||
result = rv_str.
|
||||
CATCH cx_sy_dyn_call_illegal_class.
|
||||
CALL METHOD (lv_in_ce)=>create
|
||||
EXPORTING
|
||||
encoding = 'UTF-8'
|
||||
RECEIVING
|
||||
conv = lo_conv.
|
||||
CALL METHOD lo_conv->('CONVERT')
|
||||
EXPORTING
|
||||
data = iv_xstr
|
||||
IMPORTING
|
||||
buffer = rv_str.
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD validate_array_index.
|
||||
|
||||
IF NOT iv_index CO '0123456789'.
|
||||
|
@ -176,6 +226,74 @@ CLASS lcl_utils IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD any_to_xstring.
|
||||
" supports xstring, char, string, or string_table as input
|
||||
|
||||
DATA lo_type TYPE REF TO cl_abap_typedescr.
|
||||
DATA lo_table_type TYPE REF TO cl_abap_tabledescr.
|
||||
DATA lv_str TYPE string.
|
||||
|
||||
FIELD-SYMBOLS: <data> TYPE STANDARD TABLE.
|
||||
|
||||
lo_type = cl_abap_typedescr=>describe_by_data( iv_data ).
|
||||
|
||||
CASE lo_type->type_kind.
|
||||
WHEN lif_kind=>binary-xstring.
|
||||
rv_xstr = iv_data.
|
||||
WHEN lif_kind=>texts-string OR lif_kind=>texts-char.
|
||||
rv_xstr = string_to_xstring_utf8( iv_data ).
|
||||
WHEN lif_kind=>table.
|
||||
lo_table_type ?= lo_type.
|
||||
IF lo_table_type->table_kind <> cl_abap_tabledescr=>tablekind_std.
|
||||
zcx_abapgit_ajson_error=>raise( 'Unsupported type of input table (must be standard table)' ).
|
||||
ENDIF.
|
||||
TRY.
|
||||
ASSIGN iv_data TO <data>.
|
||||
lv_str = concat_lines_of( table = <data>
|
||||
sep = cl_abap_char_utilities=>newline ).
|
||||
rv_xstr = string_to_xstring_utf8( lv_str ).
|
||||
CATCH cx_root.
|
||||
zcx_abapgit_ajson_error=>raise( 'Error converting input table (should be string_table)' ).
|
||||
ENDTRY.
|
||||
WHEN OTHERS.
|
||||
zcx_abapgit_ajson_error=>raise( 'Unsupported type of input (must be char, string, string_table, or xstring)' ).
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD any_to_string.
|
||||
" supports xstring, char, string, or string_table as input
|
||||
|
||||
DATA lo_type TYPE REF TO cl_abap_typedescr.
|
||||
DATA lo_table_type TYPE REF TO cl_abap_tabledescr.
|
||||
|
||||
FIELD-SYMBOLS: <data> TYPE STANDARD TABLE.
|
||||
|
||||
lo_type = cl_abap_typedescr=>describe_by_data( iv_data ).
|
||||
|
||||
CASE lo_type->type_kind.
|
||||
WHEN lif_kind=>binary-xstring.
|
||||
rv_str = xstring_to_string_utf8( iv_data ).
|
||||
WHEN lif_kind=>texts-string OR lif_kind=>texts-char.
|
||||
rv_str = iv_data.
|
||||
WHEN lif_kind=>table.
|
||||
lo_table_type ?= lo_type.
|
||||
IF lo_table_type->table_kind <> cl_abap_tabledescr=>tablekind_std.
|
||||
zcx_abapgit_ajson_error=>raise( 'Unsupported type of input table (must be standard table)' ).
|
||||
ENDIF.
|
||||
TRY.
|
||||
ASSIGN iv_data TO <data>.
|
||||
rv_str = concat_lines_of( table = <data>
|
||||
sep = cl_abap_char_utilities=>newline ).
|
||||
CATCH cx_root.
|
||||
zcx_abapgit_ajson_error=>raise( 'Error converting input table (should be string_table)' ).
|
||||
ENDTRY.
|
||||
WHEN OTHERS.
|
||||
zcx_abapgit_ajson_error=>raise( 'Unsupported type of input (must be char, string, string_table, or xstring)' ).
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -188,8 +306,8 @@ CLASS lcl_json_parser DEFINITION FINAL.
|
|||
|
||||
METHODS parse
|
||||
IMPORTING
|
||||
iv_json TYPE string
|
||||
iv_keep_item_order TYPE abap_bool DEFAULT abap_false
|
||||
iv_json TYPE any
|
||||
iv_keep_item_order TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING
|
||||
VALUE(rt_json_tree) TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
RAISING
|
||||
|
@ -212,7 +330,7 @@ CLASS lcl_json_parser DEFINITION FINAL.
|
|||
|
||||
METHODS _parse
|
||||
IMPORTING
|
||||
iv_json TYPE string
|
||||
iv_json TYPE xstring
|
||||
RETURNING
|
||||
VALUE(rt_json_tree) TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
RAISING
|
||||
|
@ -233,17 +351,20 @@ CLASS lcl_json_parser IMPLEMENTATION.
|
|||
DATA lx_sxml_parse TYPE REF TO cx_sxml_parse_error.
|
||||
DATA lx_sxml TYPE REF TO cx_dynamic_check.
|
||||
DATA lv_location TYPE string.
|
||||
DATA lv_json TYPE xstring.
|
||||
|
||||
mv_keep_item_order = iv_keep_item_order.
|
||||
|
||||
lv_json = lcl_utils=>any_to_xstring( iv_json ).
|
||||
|
||||
TRY.
|
||||
" TODO sane JSON check:
|
||||
" JSON can be true,false,null,(-)digits
|
||||
" or start from " or from {
|
||||
rt_json_tree = _parse( iv_json ).
|
||||
rt_json_tree = _parse( lv_json ).
|
||||
CATCH cx_sxml_parse_error INTO lx_sxml_parse.
|
||||
lv_location = _get_location(
|
||||
iv_json = iv_json
|
||||
iv_json = lcl_utils=>any_to_string( iv_json )
|
||||
iv_offset = lx_sxml_parse->xml_offset ).
|
||||
zcx_abapgit_ajson_error=>raise(
|
||||
iv_msg = |Json parsing error (SXML): { lx_sxml_parse->get_text( ) }|
|
||||
|
@ -305,7 +426,7 @@ CLASS lcl_json_parser IMPLEMENTATION.
|
|||
IF iv_json IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
lo_reader = cl_sxml_string_reader=>create( lcl_utils=>string_to_xstring_utf8( iv_json ) ).
|
||||
lo_reader = cl_sxml_string_reader=>create( iv_json ).
|
||||
|
||||
" TODO: self protection, check non-empty, check starting from object ...
|
||||
|
||||
|
@ -406,9 +527,9 @@ CLASS lcl_json_serializer DEFINITION FINAL CREATE PRIVATE.
|
|||
|
||||
CLASS-METHODS stringify
|
||||
IMPORTING
|
||||
it_json_tree TYPE zif_abapgit_ajson_types=>ty_nodes_ts
|
||||
iv_indent TYPE i DEFAULT 0
|
||||
iv_keep_item_order TYPE abap_bool DEFAULT abap_false
|
||||
it_json_tree TYPE zif_abapgit_ajson_types=>ty_nodes_ts
|
||||
iv_indent TYPE i DEFAULT 0
|
||||
iv_keep_item_order TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING
|
||||
VALUE(rv_json_string) TYPE string
|
||||
RAISING
|
||||
|
@ -428,7 +549,7 @@ CLASS lcl_json_serializer DEFINITION FINAL CREATE PRIVATE.
|
|||
|
||||
CLASS-METHODS escape_string
|
||||
IMPORTING
|
||||
iv_unescaped TYPE string
|
||||
iv_unescaped TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_escaped) TYPE string.
|
||||
|
||||
|
@ -447,7 +568,7 @@ CLASS lcl_json_serializer DEFINITION FINAL CREATE PRIVATE.
|
|||
METHODS stringify_set
|
||||
IMPORTING
|
||||
iv_parent_path TYPE string
|
||||
iv_array TYPE abap_bool
|
||||
iv_array TYPE abap_bool
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
|
@ -650,7 +771,7 @@ CLASS lcl_json_to_abap DEFINITION FINAL.
|
|||
|
||||
METHODS to_abap
|
||||
IMPORTING
|
||||
it_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_ts
|
||||
it_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_ts
|
||||
CHANGING
|
||||
c_container TYPE any
|
||||
RAISING
|
||||
|
@ -672,6 +793,14 @@ CLASS lcl_json_to_abap DEFINITION FINAL.
|
|||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
METHODS to_time
|
||||
IMPORTING
|
||||
iv_value TYPE zif_abapgit_ajson_types=>ty_node-value
|
||||
RETURNING
|
||||
VALUE(rv_result) TYPE t
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
TYPES:
|
||||
|
@ -690,16 +819,16 @@ CLASS lcl_json_to_abap DEFINITION FINAL.
|
|||
|
||||
METHODS any_to_abap
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
is_parent_type TYPE ty_type_cache OPTIONAL
|
||||
iv_path TYPE string
|
||||
is_parent_type TYPE ty_type_cache OPTIONAL
|
||||
i_container_ref TYPE REF TO data
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
METHODS value_to_abap
|
||||
IMPORTING
|
||||
is_node TYPE zif_abapgit_ajson_types=>ty_node
|
||||
is_node_type TYPE ty_type_cache
|
||||
is_node TYPE zif_abapgit_ajson_types=>ty_node
|
||||
is_node_type TYPE ty_type_cache
|
||||
i_container_ref TYPE REF TO data
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error
|
||||
|
@ -707,9 +836,9 @@ CLASS lcl_json_to_abap DEFINITION FINAL.
|
|||
|
||||
METHODS get_node_type
|
||||
IMPORTING
|
||||
is_node TYPE zif_abapgit_ajson_types=>ty_node OPTIONAL " Empty for root
|
||||
is_parent_type TYPE ty_type_cache OPTIONAL
|
||||
i_container_ref TYPE REF TO data OPTIONAL
|
||||
is_node TYPE zif_abapgit_ajson_types=>ty_node OPTIONAL " Empty for root
|
||||
is_parent_type TYPE ty_type_cache OPTIONAL
|
||||
i_container_ref TYPE REF TO data OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rs_node_type) TYPE ty_type_cache
|
||||
RAISING
|
||||
|
@ -803,7 +932,7 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
|
|||
zcx_abapgit_ajson_error=>raise( |Unexpected parent type| ).
|
||||
ENDCASE.
|
||||
|
||||
rs_node_type-type_kind = rs_node_type-dd->type_kind. " for caching and cleaner unintialized access
|
||||
rs_node_type-type_kind = rs_node_type-dd->type_kind. " for caching and cleaner uninitialized access
|
||||
IF rs_node_type-type_kind = lif_kind=>table.
|
||||
lo_tdescr ?= rs_node_type-dd.
|
||||
IF lo_tdescr->table_kind <> cl_abap_tabledescr=>tablekind_std.
|
||||
|
@ -888,6 +1017,8 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
|
|||
IF is_parent_type-tab_item_buf IS NOT BOUND. " Indirect hint that table was srt/hsh, see get_node_type
|
||||
APPEND INITIAL LINE TO <parent_stdtab> REFERENCE INTO lr_target_field.
|
||||
ASSERT sy-subrc = 0.
|
||||
ELSE.
|
||||
CLEAR <tab_item>.
|
||||
ENDIF.
|
||||
|
||||
WHEN lif_kind=>struct_flat OR lif_kind=>struct_deep.
|
||||
|
@ -984,10 +1115,19 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
|
|||
|
||||
WHEN zif_abapgit_ajson_types=>node_type-string.
|
||||
" TODO: check type ?
|
||||
IF is_node_type-type_kind = lif_kind=>date AND is_node-value IS NOT INITIAL.
|
||||
<container> = to_date( is_node-value ).
|
||||
ELSEIF is_node_type-type_kind = lif_kind=>packed AND is_node-value IS NOT INITIAL.
|
||||
<container> = to_timestamp( is_node-value ).
|
||||
IF is_node-value IS NOT INITIAL.
|
||||
IF is_node_type-type_kind = lif_kind=>date.
|
||||
<container> = to_date( is_node-value ).
|
||||
ELSEIF is_node_type-type_kind = lif_kind=>time.
|
||||
<container> = to_time( is_node-value ).
|
||||
ELSEIF is_node_type-dd->absolute_name = '\TYPE=TIMESTAMP'
|
||||
OR is_node_type-dd->absolute_name = '\TYPE=TIMESTAMPL'.
|
||||
<container> = to_timestamp( is_node-value ).
|
||||
ELSEIF is_node_type-type_kind = lif_kind=>packed. " Number as a string, but not a timestamp
|
||||
<container> = is_node-value.
|
||||
ELSE.
|
||||
<container> = is_node-value.
|
||||
ENDIF.
|
||||
ELSE.
|
||||
<container> = is_node-value.
|
||||
ENDIF.
|
||||
|
@ -1095,6 +1235,22 @@ CLASS lcl_json_to_abap IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_time.
|
||||
|
||||
DATA lv_h TYPE c LENGTH 2.
|
||||
DATA lv_m TYPE c LENGTH 2.
|
||||
DATA lv_s TYPE c LENGTH 2.
|
||||
|
||||
FIND FIRST OCCURRENCE OF REGEX '^(\d{2}):(\d{2}):(\d{2})(T|$)'
|
||||
IN iv_value
|
||||
SUBMATCHES lv_h lv_m lv_s.
|
||||
IF sy-subrc <> 0.
|
||||
zcx_abapgit_ajson_error=>raise( 'Unexpected time format' ).
|
||||
ENDIF.
|
||||
CONCATENATE lv_h lv_m lv_s INTO rv_result.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
**********************************************************************
|
||||
|
@ -1106,12 +1262,12 @@ CLASS lcl_abap_to_json DEFINITION FINAL.
|
|||
|
||||
CLASS-METHODS convert
|
||||
IMPORTING
|
||||
iv_data TYPE any
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name OPTIONAL
|
||||
iv_array_index TYPE i DEFAULT 0
|
||||
ii_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
|
||||
is_opts TYPE zif_abapgit_ajson=>ty_opts OPTIONAL
|
||||
iv_item_order TYPE i DEFAULT 0
|
||||
iv_data TYPE any
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name OPTIONAL
|
||||
iv_array_index TYPE i DEFAULT 0
|
||||
ii_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
|
||||
is_opts TYPE zif_abapgit_ajson=>ty_opts OPTIONAL
|
||||
iv_item_order TYPE i DEFAULT 0
|
||||
RETURNING
|
||||
VALUE(rt_nodes) TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
RAISING
|
||||
|
@ -1119,13 +1275,13 @@ CLASS lcl_abap_to_json DEFINITION FINAL.
|
|||
|
||||
CLASS-METHODS insert_with_type
|
||||
IMPORTING
|
||||
iv_data TYPE any
|
||||
iv_type TYPE zif_abapgit_ajson_types=>ty_node_type
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name OPTIONAL
|
||||
iv_array_index TYPE i DEFAULT 0
|
||||
ii_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
|
||||
is_opts TYPE zif_abapgit_ajson=>ty_opts OPTIONAL
|
||||
iv_item_order TYPE i DEFAULT 0
|
||||
iv_data TYPE any
|
||||
iv_type TYPE zif_abapgit_ajson_types=>ty_node_type
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name OPTIONAL
|
||||
iv_array_index TYPE i DEFAULT 0
|
||||
ii_custom_mapping TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
|
||||
is_opts TYPE zif_abapgit_ajson=>ty_opts OPTIONAL
|
||||
iv_item_order TYPE i DEFAULT 0
|
||||
RETURNING
|
||||
VALUE(rt_nodes) TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
RAISING
|
||||
|
@ -1133,17 +1289,17 @@ CLASS lcl_abap_to_json DEFINITION FINAL.
|
|||
|
||||
CLASS-METHODS format_date
|
||||
IMPORTING
|
||||
iv_date TYPE d
|
||||
iv_date TYPE d
|
||||
RETURNING
|
||||
VALUE(rv_str) TYPE string.
|
||||
CLASS-METHODS format_time
|
||||
IMPORTING
|
||||
iv_time TYPE t
|
||||
iv_time TYPE t
|
||||
RETURNING
|
||||
VALUE(rv_str) TYPE string.
|
||||
CLASS-METHODS format_timestamp
|
||||
IMPORTING
|
||||
iv_ts TYPE timestamp
|
||||
iv_ts TYPE timestamp
|
||||
RETURNING
|
||||
VALUE(rv_str) TYPE string.
|
||||
|
||||
|
@ -1158,84 +1314,84 @@ CLASS lcl_abap_to_json DEFINITION FINAL.
|
|||
|
||||
METHODS convert_any
|
||||
IMPORTING
|
||||
iv_data TYPE any
|
||||
io_type TYPE REF TO cl_abap_typedescr
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
|
||||
iv_index TYPE i DEFAULT 0
|
||||
iv_data TYPE any
|
||||
io_type TYPE REF TO cl_abap_typedescr
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
|
||||
iv_index TYPE i DEFAULT 0
|
||||
iv_item_order TYPE i DEFAULT 0
|
||||
CHANGING
|
||||
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
METHODS convert_ajson
|
||||
IMPORTING
|
||||
io_json TYPE REF TO zif_abapgit_ajson
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
|
||||
iv_index TYPE i DEFAULT 0
|
||||
io_json TYPE REF TO zif_abapgit_ajson
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
|
||||
iv_index TYPE i DEFAULT 0
|
||||
iv_item_order TYPE i DEFAULT 0
|
||||
CHANGING
|
||||
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
METHODS convert_value
|
||||
IMPORTING
|
||||
iv_data TYPE any
|
||||
io_type TYPE REF TO cl_abap_typedescr
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
|
||||
iv_index TYPE i DEFAULT 0
|
||||
iv_data TYPE any
|
||||
io_type TYPE REF TO cl_abap_typedescr
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
|
||||
iv_index TYPE i DEFAULT 0
|
||||
iv_item_order TYPE i DEFAULT 0
|
||||
CHANGING
|
||||
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
METHODS convert_ref
|
||||
IMPORTING
|
||||
iv_data TYPE any
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
|
||||
iv_index TYPE i DEFAULT 0
|
||||
iv_data TYPE any
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
|
||||
iv_index TYPE i DEFAULT 0
|
||||
iv_item_order TYPE i DEFAULT 0
|
||||
CHANGING
|
||||
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
METHODS convert_struc
|
||||
IMPORTING
|
||||
iv_data TYPE any
|
||||
io_type TYPE REF TO cl_abap_typedescr
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
|
||||
iv_index TYPE i DEFAULT 0
|
||||
iv_data TYPE any
|
||||
io_type TYPE REF TO cl_abap_typedescr
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
|
||||
iv_index TYPE i DEFAULT 0
|
||||
iv_item_order TYPE i DEFAULT 0
|
||||
CHANGING
|
||||
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
METHODS convert_table
|
||||
IMPORTING
|
||||
iv_data TYPE any
|
||||
io_type TYPE REF TO cl_abap_typedescr
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
|
||||
iv_index TYPE i DEFAULT 0
|
||||
iv_data TYPE any
|
||||
io_type TYPE REF TO cl_abap_typedescr
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
|
||||
iv_index TYPE i DEFAULT 0
|
||||
iv_item_order TYPE i DEFAULT 0
|
||||
CHANGING
|
||||
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
METHODS insert_value_with_type
|
||||
IMPORTING
|
||||
iv_data TYPE any
|
||||
iv_type TYPE zif_abapgit_ajson_types=>ty_node_type
|
||||
io_type TYPE REF TO cl_abap_typedescr
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
|
||||
iv_index TYPE i DEFAULT 0
|
||||
iv_data TYPE any
|
||||
iv_type TYPE zif_abapgit_ajson_types=>ty_node_type
|
||||
io_type TYPE REF TO cl_abap_typedescr
|
||||
is_prefix TYPE zif_abapgit_ajson_types=>ty_path_name
|
||||
iv_index TYPE i DEFAULT 0
|
||||
iv_item_order TYPE i DEFAULT 0
|
||||
CHANGING
|
||||
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
ct_nodes TYPE zif_abapgit_ajson_types=>ty_nodes_tt
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
|
@ -1716,7 +1872,7 @@ INTERFACE lif_mutator_runner.
|
|||
IMPORTING
|
||||
it_source_tree TYPE zif_abapgit_ajson_types=>ty_nodes_ts
|
||||
EXPORTING
|
||||
et_dest_tree TYPE zif_abapgit_ajson_types=>ty_nodes_ts
|
||||
et_dest_tree TYPE zif_abapgit_ajson_types=>ty_nodes_ts
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
ENDINTERFACE.
|
||||
|
@ -1730,7 +1886,7 @@ CLASS lcl_filter_runner DEFINITION FINAL.
|
|||
INTERFACES lif_mutator_runner.
|
||||
CLASS-METHODS new
|
||||
IMPORTING
|
||||
ii_filter TYPE REF TO zif_abapgit_ajson_filter
|
||||
ii_filter TYPE REF TO zif_abapgit_ajson_filter
|
||||
RETURNING
|
||||
VALUE(ro_instance) TYPE REF TO lcl_filter_runner.
|
||||
METHODS constructor
|
||||
|
@ -1744,7 +1900,7 @@ CLASS lcl_filter_runner DEFINITION FINAL.
|
|||
|
||||
METHODS walk
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
CHANGING
|
||||
cs_parent TYPE zif_abapgit_ajson_types=>ty_node OPTIONAL
|
||||
RAISING
|
||||
|
@ -1776,8 +1932,13 @@ CLASS lcl_filter_runner IMPLEMENTATION.
|
|||
METHOD walk.
|
||||
|
||||
DATA ls_node TYPE zif_abapgit_ajson_types=>ty_node.
|
||||
DATA lv_tab_key TYPE string.
|
||||
|
||||
LOOP AT mr_source_tree->* INTO ls_node WHERE path = iv_path.
|
||||
IF cs_parent-type = zif_abapgit_ajson_types=>node_type-array.
|
||||
lv_tab_key = 'array_index'. " path + index
|
||||
ENDIF.
|
||||
|
||||
LOOP AT mr_source_tree->* INTO ls_node USING KEY (lv_tab_key) WHERE path = iv_path.
|
||||
CASE ls_node-type.
|
||||
WHEN zif_abapgit_ajson_types=>node_type-boolean OR zif_abapgit_ajson_types=>node_type-null
|
||||
OR zif_abapgit_ajson_types=>node_type-number OR zif_abapgit_ajson_types=>node_type-string.
|
||||
|
@ -1837,7 +1998,7 @@ CLASS lcl_mapper_runner DEFINITION FINAL.
|
|||
INTERFACES lif_mutator_runner.
|
||||
CLASS-METHODS new
|
||||
IMPORTING
|
||||
ii_mapper TYPE REF TO zif_abapgit_ajson_mapping
|
||||
ii_mapper TYPE REF TO zif_abapgit_ajson_mapping
|
||||
RETURNING
|
||||
VALUE(ro_instance) TYPE REF TO lcl_mapper_runner.
|
||||
METHODS constructor
|
||||
|
@ -1951,7 +2112,7 @@ CLASS lcl_mutator_queue DEFINITION FINAL.
|
|||
VALUE(ro_instance) TYPE REF TO lcl_mutator_queue.
|
||||
METHODS add
|
||||
IMPORTING
|
||||
ii_mutator TYPE REF TO lif_mutator_runner
|
||||
ii_mutator TYPE REF TO lif_mutator_runner
|
||||
RETURNING
|
||||
VALUE(ro_self) TYPE REF TO lcl_mutator_queue.
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ CLASS ltcl_parser_test DEFINITION FINAL
|
|||
|
||||
CLASS-METHODS sample_json
|
||||
IMPORTING
|
||||
iv_separator TYPE string OPTIONAL
|
||||
iv_separator TYPE string OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rv_json) TYPE string.
|
||||
|
||||
|
@ -85,6 +85,10 @@ CLASS ltcl_parser_test DEFINITION FINAL
|
|||
METHODS parse_date FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS parse_bare_values FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS parse_error FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS parse_input_xstring FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS parse_input_string FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS parse_input_string_table FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS parse_input_error FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS duplicate_key FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS non_json FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
|
||||
|
@ -248,6 +252,78 @@ CLASS ltcl_parser_test IMPLEMENTATION.
|
|||
exp = mo_nodes->mt_nodes ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD parse_input_xstring.
|
||||
mo_nodes->add( ' | |object | | |1' ).
|
||||
mo_nodes->add( '/ |string |str |abc | |0' ).
|
||||
|
||||
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
|
||||
DATA lv_xstr TYPE xstring.
|
||||
|
||||
lv_xstr = '7B22737472696E67223A2022616263227D0A'.
|
||||
lt_act = mo_cut->parse( lv_xstr ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lt_act
|
||||
exp = mo_nodes->mt_nodes ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD parse_input_string.
|
||||
mo_nodes->add( ' | |object | | |1' ).
|
||||
mo_nodes->add( '/ |string |str |abc | |0' ).
|
||||
|
||||
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
|
||||
DATA lv_str TYPE string.
|
||||
|
||||
lv_str = `{"string": "abc"}`.
|
||||
lt_act = mo_cut->parse( lv_str ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lt_act
|
||||
exp = mo_nodes->mt_nodes ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD parse_input_string_table.
|
||||
mo_nodes->add( ' | |object | | |2' ).
|
||||
mo_nodes->add( '/ |string |str |abc | |0' ).
|
||||
mo_nodes->add( '/ |number |num |123 | |0' ).
|
||||
|
||||
DATA lt_act TYPE zif_abapgit_ajson_types=>ty_nodes_tt.
|
||||
DATA lt_json TYPE string_table.
|
||||
|
||||
INSERT `{` INTO TABLE lt_json.
|
||||
INSERT `"string": "abc",` INTO TABLE lt_json.
|
||||
INSERT `"number": 123` INTO TABLE lt_json.
|
||||
INSERT `}` INTO TABLE lt_json.
|
||||
|
||||
lt_act = mo_cut->parse( lt_json ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lt_act
|
||||
exp = mo_nodes->mt_nodes ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD parse_input_error.
|
||||
|
||||
DATA lo_cut TYPE REF TO lcl_json_parser.
|
||||
DATA lx TYPE REF TO zcx_abapgit_ajson_error.
|
||||
DATA lv_numc TYPE n LENGTH 10.
|
||||
DATA lt_hashed TYPE HASHED TABLE OF string WITH UNIQUE DEFAULT KEY.
|
||||
|
||||
CREATE OBJECT lo_cut.
|
||||
|
||||
TRY.
|
||||
lo_cut->parse( lv_numc ).
|
||||
cl_abap_unit_assert=>fail( ).
|
||||
CATCH zcx_abapgit_ajson_error INTO lx.
|
||||
cl_abap_unit_assert=>assert_not_initial( lx ).
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lo_cut->parse( lt_hashed ).
|
||||
cl_abap_unit_assert=>fail( ).
|
||||
CATCH zcx_abapgit_ajson_error INTO lx.
|
||||
cl_abap_unit_assert=>assert_not_initial( lx ).
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD sample_json.
|
||||
|
||||
rv_json =
|
||||
|
@ -1395,20 +1471,21 @@ CLASS ltcl_json_to_abap DEFINITION
|
|||
tty_struc_sorted TYPE SORTED TABLE OF ty_struc WITH UNIQUE KEY a,
|
||||
tty_struc_hashed TYPE HASHED TABLE OF ty_struc WITH UNIQUE KEY a,
|
||||
BEGIN OF ty_complex,
|
||||
str TYPE string,
|
||||
int TYPE i,
|
||||
float TYPE f,
|
||||
bool TYPE abap_bool,
|
||||
obj TYPE ty_struc,
|
||||
tab TYPE tty_struc,
|
||||
str TYPE string,
|
||||
int TYPE i,
|
||||
float TYPE f,
|
||||
bool TYPE abap_bool,
|
||||
obj TYPE ty_struc,
|
||||
tab TYPE tty_struc,
|
||||
tab_plain TYPE string_table,
|
||||
tab_hashed TYPE tty_struc_hashed,
|
||||
oref TYPE REF TO object,
|
||||
date1 TYPE d,
|
||||
date2 TYPE d,
|
||||
oref TYPE REF TO object,
|
||||
date1 TYPE d,
|
||||
date2 TYPE d,
|
||||
timestamp1 TYPE timestamp,
|
||||
timestamp2 TYPE timestamp,
|
||||
timestamp3 TYPE timestamp,
|
||||
timestamp4 TYPE timestampl,
|
||||
END OF ty_complex.
|
||||
|
||||
METHODS to_abap_struc
|
||||
|
@ -1459,7 +1536,27 @@ CLASS ltcl_json_to_abap DEFINITION
|
|||
METHODS to_abap_corresponding_pub_neg
|
||||
FOR TESTING
|
||||
RAISING zcx_abapgit_ajson_error.
|
||||
|
||||
METHODS to_abap_time
|
||||
FOR TESTING
|
||||
RAISING cx_static_check.
|
||||
METHODS to_abap_str_to_packed
|
||||
FOR TESTING
|
||||
RAISING cx_static_check.
|
||||
METHODS to_abap_compressed_stdrd
|
||||
FOR TESTING
|
||||
RAISING cx_static_check.
|
||||
METHODS to_abap_compressed_stdrd_key
|
||||
FOR TESTING
|
||||
RAISING cx_static_check.
|
||||
METHODS to_abap_compressed_sort
|
||||
FOR TESTING
|
||||
RAISING cx_static_check.
|
||||
METHODS to_abap_compressed_sort_unique
|
||||
FOR TESTING
|
||||
RAISING cx_static_check.
|
||||
METHODS to_abap_compressed_hash
|
||||
FOR TESTING
|
||||
RAISING cx_static_check.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS zcl_abapgit_ajson DEFINITION LOCAL FRIENDS ltcl_json_to_abap.
|
||||
|
@ -1489,6 +1586,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
|
|||
lo_nodes->add( '/ |timestamp1 |str |2020-07-28T00:00:00 | ' ).
|
||||
lo_nodes->add( '/ |timestamp2 |str |2020-07-28T00:00:00Z | ' ).
|
||||
lo_nodes->add( '/ |timestamp3 |str |2020-07-28T01:00:00+01:00 | ' ).
|
||||
lo_nodes->add( '/ |timestamp4 |str |2020-07-28T01:00:00+01:00 | ' ).
|
||||
|
||||
CREATE OBJECT lo_cut.
|
||||
lo_cut->to_abap(
|
||||
|
@ -1507,6 +1605,7 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
|
|||
ls_exp-timestamp1 = lv_exp_timestamp.
|
||||
ls_exp-timestamp2 = lv_exp_timestamp.
|
||||
ls_exp-timestamp3 = lv_exp_timestamp.
|
||||
ls_exp-timestamp4 = lv_exp_timestamp.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ls_mock
|
||||
|
@ -1536,6 +1635,66 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_abap_time.
|
||||
|
||||
DATA lo_cut TYPE REF TO lcl_json_to_abap.
|
||||
DATA lv_mock TYPE t.
|
||||
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
|
||||
|
||||
CREATE OBJECT lo_nodes.
|
||||
lo_nodes->add( ' | |str |11:11:11| ' ).
|
||||
|
||||
CREATE OBJECT lo_cut.
|
||||
lo_cut->to_abap(
|
||||
EXPORTING
|
||||
it_nodes = lo_nodes->sorted( )
|
||||
CHANGING
|
||||
c_container = lv_mock ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lv_mock
|
||||
exp = '111111' ).
|
||||
|
||||
DATA lv_mock_init TYPE t.
|
||||
|
||||
CREATE OBJECT lo_nodes.
|
||||
lo_nodes->add( ' | |str || ' ).
|
||||
|
||||
CREATE OBJECT lo_cut.
|
||||
lo_cut->to_abap(
|
||||
EXPORTING
|
||||
it_nodes = lo_nodes->sorted( )
|
||||
CHANGING
|
||||
c_container = lv_mock_init ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lv_mock_init
|
||||
exp = '000000' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_abap_str_to_packed.
|
||||
|
||||
DATA lo_cut TYPE REF TO lcl_json_to_abap.
|
||||
DATA lv_act TYPE p LENGTH 10 DECIMALS 3.
|
||||
DATA lo_nodes TYPE REF TO lcl_nodes_helper.
|
||||
|
||||
CREATE OBJECT lo_nodes.
|
||||
lo_nodes->add( ' | |str |1.3333 | ' ).
|
||||
|
||||
CREATE OBJECT lo_cut.
|
||||
lo_cut->to_abap(
|
||||
EXPORTING
|
||||
it_nodes = lo_nodes->sorted( )
|
||||
CHANGING
|
||||
c_container = lv_act ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lv_act
|
||||
exp = '1.333' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_abap_value.
|
||||
|
||||
DATA lo_cut TYPE REF TO lcl_json_to_abap.
|
||||
|
@ -2121,6 +2280,171 @@ CLASS ltcl_json_to_abap IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_abap_compressed_stdrd.
|
||||
|
||||
TYPES: BEGIN OF ty_foo_bar,
|
||||
foo TYPE string,
|
||||
bar TYPE string,
|
||||
END OF ty_foo_bar.
|
||||
|
||||
DATA lt_foo_bar TYPE STANDARD TABLE OF ty_foo_bar.
|
||||
DATA ls_foo_bar LIKE LINE OF lt_foo_bar.
|
||||
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
||||
DATA lv_json TYPE string.
|
||||
|
||||
lv_json =
|
||||
'[' &&
|
||||
' {' &&
|
||||
' "foo": "abc",' &&
|
||||
' "bar": "123"' &&
|
||||
' },' &&
|
||||
' {' &&
|
||||
' "foo": "cde"' &&
|
||||
' }' &&
|
||||
']'.
|
||||
|
||||
lo_ajson = zcl_abapgit_ajson=>parse( lv_json ).
|
||||
|
||||
lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ).
|
||||
|
||||
READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar.
|
||||
|
||||
cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_abap_compressed_stdrd_key.
|
||||
|
||||
TYPES: BEGIN OF ty_foo_bar,
|
||||
foo TYPE string,
|
||||
bar TYPE string,
|
||||
END OF ty_foo_bar.
|
||||
|
||||
DATA lt_foo_bar TYPE STANDARD TABLE OF ty_foo_bar WITH NON-UNIQUE KEY foo.
|
||||
DATA ls_foo_bar LIKE LINE OF lt_foo_bar.
|
||||
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
||||
DATA lv_json TYPE string.
|
||||
|
||||
lv_json =
|
||||
'[' &&
|
||||
' {' &&
|
||||
' "foo": "abc",' &&
|
||||
' "bar": "123"' &&
|
||||
' },' &&
|
||||
' {' &&
|
||||
' "foo": "cde"' &&
|
||||
' }' &&
|
||||
']'.
|
||||
|
||||
lo_ajson = zcl_abapgit_ajson=>parse( lv_json ).
|
||||
|
||||
lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ).
|
||||
|
||||
READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar.
|
||||
|
||||
cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_abap_compressed_sort.
|
||||
|
||||
TYPES: BEGIN OF ty_foo_bar,
|
||||
foo TYPE string,
|
||||
bar TYPE string,
|
||||
END OF ty_foo_bar.
|
||||
|
||||
DATA lt_foo_bar TYPE SORTED TABLE OF ty_foo_bar WITH NON-UNIQUE KEY foo.
|
||||
DATA ls_foo_bar LIKE LINE OF lt_foo_bar.
|
||||
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
||||
DATA lv_json TYPE string.
|
||||
|
||||
lv_json =
|
||||
'[' &&
|
||||
' {' &&
|
||||
' "foo": "abc",' &&
|
||||
' "bar": "123"' &&
|
||||
' },' &&
|
||||
' {' &&
|
||||
' "foo": "cde"' &&
|
||||
' }' &&
|
||||
']'.
|
||||
|
||||
lo_ajson = zcl_abapgit_ajson=>parse( lv_json ).
|
||||
|
||||
lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ).
|
||||
|
||||
READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar.
|
||||
|
||||
cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_abap_compressed_sort_unique.
|
||||
|
||||
TYPES: BEGIN OF ty_foo_bar,
|
||||
foo TYPE string,
|
||||
bar TYPE string,
|
||||
END OF ty_foo_bar.
|
||||
|
||||
DATA lt_foo_bar TYPE SORTED TABLE OF ty_foo_bar WITH UNIQUE KEY foo.
|
||||
DATA ls_foo_bar LIKE LINE OF lt_foo_bar.
|
||||
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
||||
DATA lv_json TYPE string.
|
||||
|
||||
lv_json =
|
||||
'[' &&
|
||||
' {' &&
|
||||
' "foo": "abc",' &&
|
||||
' "bar": "123"' &&
|
||||
' },' &&
|
||||
' {' &&
|
||||
' "foo": "cde"' &&
|
||||
' }' &&
|
||||
']'.
|
||||
|
||||
lo_ajson = zcl_abapgit_ajson=>parse( lv_json ).
|
||||
|
||||
lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ).
|
||||
|
||||
READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar.
|
||||
|
||||
cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_abap_compressed_hash.
|
||||
|
||||
TYPES: BEGIN OF ty_foo_bar,
|
||||
foo TYPE string,
|
||||
bar TYPE string,
|
||||
END OF ty_foo_bar.
|
||||
|
||||
DATA lt_foo_bar TYPE HASHED TABLE OF ty_foo_bar WITH UNIQUE KEY foo.
|
||||
DATA ls_foo_bar LIKE LINE OF lt_foo_bar.
|
||||
DATA lo_ajson TYPE REF TO zcl_abapgit_ajson.
|
||||
DATA lv_json TYPE string.
|
||||
|
||||
lv_json =
|
||||
'[' &&
|
||||
' {' &&
|
||||
' "foo": "abc",' &&
|
||||
' "bar": "123"' &&
|
||||
' },' &&
|
||||
' {' &&
|
||||
' "foo": "cde"' &&
|
||||
' }' &&
|
||||
']'.
|
||||
|
||||
lo_ajson = zcl_abapgit_ajson=>parse( lv_json ).
|
||||
|
||||
lo_ajson->to_abap( IMPORTING ev_container = lt_foo_bar ).
|
||||
|
||||
READ TABLE lt_foo_bar WITH KEY foo = 'cde' INTO ls_foo_bar.
|
||||
|
||||
cl_abap_unit_assert=>assert_initial( act = ls_foo_bar-bar ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
**********************************************************************
|
||||
|
@ -2153,11 +2477,13 @@ CLASS ltcl_writer_test DEFINITION FINAL
|
|||
METHODS set_bool_tab FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS set_str FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS set_int FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS set_number FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS set_date FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS set_timestamp FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS read_only FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS set_array_obj FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS set_with_type FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS new_array_w_keep_order_touch FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS overwrite_w_keep_order_touch FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS overwrite_w_keep_order_set FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS setx FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
|
@ -2167,9 +2493,9 @@ CLASS ltcl_writer_test DEFINITION FINAL
|
|||
|
||||
METHODS set_with_type_slice
|
||||
IMPORTING
|
||||
io_json_in TYPE REF TO zcl_abapgit_ajson
|
||||
io_json_in TYPE REF TO zcl_abapgit_ajson
|
||||
io_json_out TYPE REF TO zif_abapgit_ajson
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
|
@ -2992,6 +3318,27 @@ CLASS ltcl_writer_test IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_number.
|
||||
|
||||
DATA lo_nodes_exp TYPE REF TO lcl_nodes_helper.
|
||||
DATA li_json TYPE REF TO zif_abapgit_ajson.
|
||||
DATA lv_p TYPE p LENGTH 5 DECIMALS 2 VALUE '123.45'.
|
||||
|
||||
li_json = zcl_abapgit_ajson=>create_empty( ).
|
||||
CREATE OBJECT lo_nodes_exp.
|
||||
lo_nodes_exp->add( ' | |object | ||1' ).
|
||||
lo_nodes_exp->add( '/ |a |num |123.45 ||0' ).
|
||||
|
||||
li_json->set(
|
||||
iv_path = '/a'
|
||||
iv_val = lv_p ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = li_json->mt_json_tree
|
||||
exp = lo_nodes_exp->sorted( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_date.
|
||||
|
||||
DATA lo_cut TYPE REF TO zcl_abapgit_ajson.
|
||||
|
@ -3231,6 +3578,37 @@ CLASS ltcl_writer_test IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD new_array_w_keep_order_touch.
|
||||
|
||||
DATA li_cut TYPE REF TO zif_abapgit_ajson.
|
||||
|
||||
" default order adds new arrays at beginning of node (pos 0)
|
||||
li_cut = zcl_abapgit_ajson=>create_empty(
|
||||
)->set(
|
||||
iv_path = '/b'
|
||||
iv_val = 1 ).
|
||||
|
||||
li_cut->touch_array( '/a' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = li_cut->stringify( )
|
||||
exp = '{"a":[],"b":1}' ).
|
||||
|
||||
" with keep order, new array is created at end of node
|
||||
li_cut = zcl_abapgit_ajson=>create_empty(
|
||||
)->keep_item_order(
|
||||
)->set(
|
||||
iv_path = '/b'
|
||||
iv_val = 1 ).
|
||||
|
||||
li_cut->touch_array( '/a' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = li_cut->stringify( )
|
||||
exp = '{"b":1,"a":[]}' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD overwrite_w_keep_order_touch.
|
||||
|
||||
DATA li_cut TYPE REF TO zif_abapgit_ajson.
|
||||
|
@ -3444,22 +3822,22 @@ CLASS ltcl_integrated DEFINITION
|
|||
col TYPE i,
|
||||
END OF ty_loc,
|
||||
BEGIN OF ty_issue,
|
||||
message TYPE string,
|
||||
key TYPE string,
|
||||
message TYPE string,
|
||||
key TYPE string,
|
||||
filename TYPE string,
|
||||
start TYPE ty_loc,
|
||||
end TYPE ty_loc,
|
||||
start TYPE ty_loc,
|
||||
end TYPE ty_loc,
|
||||
END OF ty_issue,
|
||||
tt_issues TYPE STANDARD TABLE OF ty_issue WITH KEY message key,
|
||||
BEGIN OF ty_target,
|
||||
string TYPE string,
|
||||
number TYPE i,
|
||||
float TYPE f,
|
||||
string TYPE string,
|
||||
number TYPE i,
|
||||
float TYPE f,
|
||||
boolean TYPE abap_bool,
|
||||
false TYPE abap_bool,
|
||||
null TYPE string,
|
||||
date TYPE string, " ??? TODO
|
||||
issues TYPE tt_issues,
|
||||
false TYPE abap_bool,
|
||||
null TYPE string,
|
||||
date TYPE string, " ??? TODO
|
||||
issues TYPE tt_issues,
|
||||
END OF ty_target.
|
||||
|
||||
METHODS reader FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
|
@ -4308,15 +4686,47 @@ CLASS ltcl_filter_test IMPLEMENTATION.
|
|||
lo_json->push(
|
||||
iv_path = '/'
|
||||
iv_val = 'b' ).
|
||||
lo_json->push(
|
||||
iv_path = '/'
|
||||
iv_val = 'c' ).
|
||||
lo_json->push(
|
||||
iv_path = '/'
|
||||
iv_val = 'd' ).
|
||||
lo_json->push(
|
||||
iv_path = '/'
|
||||
iv_val = 'e' ).
|
||||
lo_json->push(
|
||||
iv_path = '/'
|
||||
iv_val = 'f' ).
|
||||
lo_json->push(
|
||||
iv_path = '/'
|
||||
iv_val = 'g' ).
|
||||
lo_json->push(
|
||||
iv_path = '/'
|
||||
iv_val = 'h' ).
|
||||
lo_json->push(
|
||||
iv_path = '/'
|
||||
iv_val = 'i' ).
|
||||
lo_json->push(
|
||||
iv_path = '/'
|
||||
iv_val = 'j' ).
|
||||
|
||||
lo_json_filtered = zcl_abapgit_ajson=>create_from(
|
||||
ii_source_json = lo_json
|
||||
ii_filter = me ).
|
||||
|
||||
CREATE OBJECT lo_nodes_exp.
|
||||
lo_nodes_exp->add( ' | |array | | |2' ).
|
||||
lo_nodes_exp->add( ' | |array | | |10' ).
|
||||
lo_nodes_exp->add( '/ |1 |str |a |1|0' ).
|
||||
lo_nodes_exp->add( '/ |2 |str |b |2|0' ).
|
||||
lo_nodes_exp->add( '/ |3 |str |c |3|0' ).
|
||||
lo_nodes_exp->add( '/ |4 |str |d |4|0' ).
|
||||
lo_nodes_exp->add( '/ |5 |str |e |5|0' ).
|
||||
lo_nodes_exp->add( '/ |6 |str |f |6|0' ).
|
||||
lo_nodes_exp->add( '/ |7 |str |g |7|0' ).
|
||||
lo_nodes_exp->add( '/ |8 |str |h |8|0' ).
|
||||
lo_nodes_exp->add( '/ |9 |str |i |9|0' ).
|
||||
lo_nodes_exp->add( '/ |10 |str |j |10|0' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_json_filtered->mt_json_tree
|
||||
|
|
|
@ -12,16 +12,16 @@ CLASS zcl_abapgit_ajson_filter_lib DEFINITION
|
|||
zcx_abapgit_ajson_error .
|
||||
CLASS-METHODS create_path_filter
|
||||
IMPORTING
|
||||
!it_skip_paths TYPE string_table OPTIONAL
|
||||
!iv_skip_paths TYPE string OPTIONAL
|
||||
!it_skip_paths TYPE string_table OPTIONAL
|
||||
!iv_skip_paths TYPE string OPTIONAL
|
||||
!iv_pattern_search TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING
|
||||
VALUE(ri_filter) TYPE REF TO zif_abapgit_ajson_filter
|
||||
VALUE(ri_filter) TYPE REF TO zif_abapgit_ajson_filter
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error .
|
||||
CLASS-METHODS create_and_filter
|
||||
IMPORTING
|
||||
!it_filters TYPE zif_abapgit_ajson_filter=>ty_filter_tab
|
||||
!it_filters TYPE zif_abapgit_ajson_filter=>ty_filter_tab
|
||||
RETURNING
|
||||
VALUE(ri_filter) TYPE REF TO zif_abapgit_ajson_filter
|
||||
RAISING
|
||||
|
|
|
@ -27,8 +27,8 @@ CLASS lcl_paths_filter DEFINITION FINAL.
|
|||
INTERFACES zif_abapgit_ajson_filter.
|
||||
METHODS constructor
|
||||
IMPORTING
|
||||
it_skip_paths TYPE string_table OPTIONAL
|
||||
iv_skip_paths TYPE string OPTIONAL
|
||||
it_skip_paths TYPE string_table OPTIONAL
|
||||
iv_skip_paths TYPE string OPTIONAL
|
||||
iv_pattern_search TYPE abap_bool
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
@ -72,7 +72,7 @@ CLASS lcl_paths_filter IMPLEMENTATION.
|
|||
ENDIF.
|
||||
|
||||
LOOP AT it_skip_paths INTO lv_s.
|
||||
lv_s = to_lower( lv_s ).
|
||||
lv_s = condense( lv_s ).
|
||||
APPEND lv_s TO lt_tab.
|
||||
ENDLOOP.
|
||||
|
||||
|
@ -83,7 +83,7 @@ CLASS lcl_paths_filter IMPLEMENTATION.
|
|||
DELETE lt_tab INDEX sy-tabix.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
<s> = condense( to_lower( <s> ) ).
|
||||
<s> = condense( <s> ).
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
|
|
|
@ -10,6 +10,7 @@ CLASS ltcl_filters_test DEFINITION FINAL
|
|||
METHODS path_filter_w_patterns FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS path_filter_deep FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS and_filter FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
METHODS mixed_case_filter FOR TESTING RAISING zcx_abapgit_ajson_error.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
@ -227,4 +228,36 @@ CLASS ltcl_filters_test IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD mixed_case_filter.
|
||||
|
||||
DATA li_json TYPE REF TO zif_abapgit_ajson.
|
||||
DATA li_json_filtered TYPE REF TO zif_abapgit_ajson.
|
||||
|
||||
li_json = zcl_abapgit_ajson=>create_empty( ).
|
||||
li_json->set(
|
||||
iv_path = '/a'
|
||||
iv_val = '1' ).
|
||||
li_json->set(
|
||||
iv_path = '/bB'
|
||||
iv_val = '2' ).
|
||||
li_json->set(
|
||||
iv_path = '/CC'
|
||||
iv_val = '3' ).
|
||||
li_json->set(
|
||||
iv_path = '/cc'
|
||||
iv_val = '4' ).
|
||||
li_json->set(
|
||||
iv_path = '/d'
|
||||
iv_val = 5 ).
|
||||
|
||||
li_json_filtered = zcl_abapgit_ajson=>create_from(
|
||||
ii_source_json = li_json
|
||||
ii_filter = zcl_abapgit_ajson_filter_lib=>create_path_filter( iv_skip_paths = '/bB,/CC' ) ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = li_json_filtered->stringify( )
|
||||
exp = '{"a":"1","cc":"4","d":5}' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
|
|
@ -40,17 +40,17 @@ CLASS zcl_abapgit_ajson_mapping DEFINITION
|
|||
|
||||
CLASS-METHODS create_rename
|
||||
IMPORTING
|
||||
it_rename_map TYPE zif_abapgit_ajson_mapping=>tty_rename_map
|
||||
iv_rename_by TYPE i DEFAULT rename_by-attr_name
|
||||
it_rename_map TYPE zif_abapgit_ajson_mapping=>tty_rename_map
|
||||
iv_rename_by TYPE i DEFAULT rename_by-attr_name
|
||||
RETURNING
|
||||
VALUE(ri_mapping) TYPE REF TO zif_abapgit_ajson_mapping.
|
||||
|
||||
CLASS-METHODS create_compound_mapper
|
||||
IMPORTING
|
||||
ii_mapper1 TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
|
||||
ii_mapper2 TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
|
||||
ii_mapper3 TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
|
||||
it_more TYPE zif_abapgit_ajson_mapping=>ty_table_of OPTIONAL
|
||||
ii_mapper1 TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
|
||||
ii_mapper2 TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
|
||||
ii_mapper3 TYPE REF TO zif_abapgit_ajson_mapping OPTIONAL
|
||||
it_more TYPE zif_abapgit_ajson_mapping=>ty_table_of OPTIONAL
|
||||
RETURNING
|
||||
VALUE(ri_mapping) TYPE REF TO zif_abapgit_ajson_mapping.
|
||||
|
||||
|
@ -62,7 +62,7 @@ CLASS zcl_abapgit_ajson_mapping DEFINITION
|
|||
IMPORTING
|
||||
iv_first_json_upper TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING
|
||||
VALUE(ri_mapping) TYPE REF TO zif_abapgit_ajson_mapping.
|
||||
VALUE(ri_mapping) TYPE REF TO zif_abapgit_ajson_mapping.
|
||||
|
||||
PROTECTED SECTION.
|
||||
|
||||
|
|
|
@ -22,7 +22,7 @@ CLASS lcl_rename DEFINITION.
|
|||
METHODS constructor
|
||||
IMPORTING
|
||||
it_rename_map TYPE zif_abapgit_ajson_mapping~tty_rename_map
|
||||
iv_rename_by TYPE i.
|
||||
iv_rename_by TYPE i.
|
||||
|
||||
PROTECTED SECTION.
|
||||
|
||||
|
|
|
@ -358,6 +358,7 @@ CLASS ltcl_fields DEFINITION FINAL FOR TESTING
|
|||
to_json_without_path FOR TESTING RAISING zcx_abapgit_ajson_error,
|
||||
to_json_with_path FOR TESTING RAISING zcx_abapgit_ajson_error,
|
||||
to_abap FOR TESTING RAISING zcx_abapgit_ajson_error,
|
||||
to_abap_with_slice FOR TESTING RAISING zcx_abapgit_ajson_error,
|
||||
to_json IMPORTING iv_path TYPE string RETURNING VALUE(rv_result) TYPE string RAISING zcx_abapgit_ajson_error.
|
||||
|
||||
|
||||
|
@ -403,6 +404,33 @@ CLASS ltcl_fields IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD to_abap_with_slice.
|
||||
|
||||
DATA: BEGIN OF ls_act,
|
||||
y TYPE i,
|
||||
END OF ls_act.
|
||||
|
||||
DATA lo_cut TYPE REF TO zif_abapgit_ajson.
|
||||
DATA lt_mapping_fields TYPE zif_abapgit_ajson_mapping=>ty_mapping_fields.
|
||||
DATA ls_mapping_field LIKE LINE OF lt_mapping_fields.
|
||||
|
||||
CLEAR ls_mapping_field.
|
||||
ls_mapping_field-abap = 'Y'.
|
||||
ls_mapping_field-json = 'c'.
|
||||
INSERT ls_mapping_field INTO TABLE lt_mapping_fields.
|
||||
|
||||
lo_cut = zcl_abapgit_ajson=>parse( iv_json = '{"a":1,"b":{"c":2},"d":{"e":3}}'
|
||||
ii_custom_mapping = zcl_abapgit_ajson_mapping=>create_field_mapping( lt_mapping_fields )
|
||||
)->slice( `/b` ).
|
||||
|
||||
lo_cut->to_abap( IMPORTING ev_container = ls_act ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = ls_act-y
|
||||
exp = 2 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD to_json_without_path.
|
||||
|
||||
|
|
|
@ -41,10 +41,10 @@ CLASS zcl_abapgit_ajson_utilities DEFINITION
|
|||
zcx_abapgit_ajson_error .
|
||||
METHODS is_equal
|
||||
IMPORTING
|
||||
!iv_json_a TYPE string OPTIONAL
|
||||
!iv_json_b TYPE string OPTIONAL
|
||||
!ii_json_a TYPE REF TO zif_abapgit_ajson OPTIONAL
|
||||
!ii_json_b TYPE REF TO zif_abapgit_ajson OPTIONAL
|
||||
!iv_json_a TYPE string OPTIONAL
|
||||
!iv_json_b TYPE string OPTIONAL
|
||||
!ii_json_a TYPE REF TO zif_abapgit_ajson OPTIONAL
|
||||
!ii_json_b TYPE REF TO zif_abapgit_ajson OPTIONAL
|
||||
RETURNING
|
||||
VALUE(rv_yes) TYPE abap_bool
|
||||
RAISING
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
INTERFACE zif_abapgit_ajson
|
||||
PUBLIC.
|
||||
|
||||
CONSTANTS version TYPE string VALUE 'v1.1.9'. "#EC NOTEXT
|
||||
CONSTANTS version TYPE string VALUE 'v1.1.11'. "#EC NOTEXT
|
||||
CONSTANTS origin TYPE string VALUE 'https://github.com/sbcgua/ajson'. "#EC NOTEXT
|
||||
CONSTANTS license TYPE string VALUE 'MIT'. "#EC NOTEXT
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_opts,
|
||||
read_only TYPE abap_bool,
|
||||
keep_item_order TYPE abap_bool,
|
||||
format_datetime TYPE abap_bool,
|
||||
read_only TYPE abap_bool,
|
||||
keep_item_order TYPE abap_bool,
|
||||
format_datetime TYPE abap_bool,
|
||||
to_abap_corresponding_only TYPE abap_bool,
|
||||
END OF ty_opts.
|
||||
|
||||
|
@ -26,14 +26,14 @@ INTERFACE zif_abapgit_ajson
|
|||
zcx_abapgit_ajson_error.
|
||||
METHODS filter
|
||||
IMPORTING
|
||||
ii_filter TYPE REF TO zif_abapgit_ajson_filter
|
||||
ii_filter TYPE REF TO zif_abapgit_ajson_filter
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
METHODS map
|
||||
IMPORTING
|
||||
ii_mapper TYPE REF TO zif_abapgit_ajson_mapping
|
||||
ii_mapper TYPE REF TO zif_abapgit_ajson_mapping
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
|
||||
RAISING
|
||||
|
@ -47,12 +47,12 @@ INTERFACE zif_abapgit_ajson
|
|||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson.
|
||||
METHODS format_datetime
|
||||
IMPORTING
|
||||
iv_use_iso TYPE abap_bool DEFAULT abap_true
|
||||
iv_use_iso TYPE abap_bool DEFAULT abap_true
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson.
|
||||
METHODS to_abap_corresponding_only
|
||||
IMPORTING
|
||||
iv_enable TYPE abap_bool DEFAULT abap_true
|
||||
iv_enable TYPE abap_bool DEFAULT abap_true
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson.
|
||||
METHODS opts
|
||||
|
@ -67,67 +67,67 @@ INTERFACE zif_abapgit_ajson
|
|||
|
||||
METHODS exists
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_exists) TYPE abap_bool.
|
||||
|
||||
METHODS members
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rt_members) TYPE string_table.
|
||||
|
||||
METHODS get
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_value) TYPE string.
|
||||
|
||||
METHODS get_node_type
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_node_type) TYPE zif_abapgit_ajson_types=>ty_node_type.
|
||||
|
||||
METHODS get_boolean
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_value) TYPE abap_bool.
|
||||
|
||||
METHODS get_integer
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_value) TYPE i.
|
||||
|
||||
METHODS get_number
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_value) TYPE f.
|
||||
|
||||
METHODS get_date
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_value) TYPE d.
|
||||
|
||||
METHODS get_timestamp
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_value) TYPE timestamp.
|
||||
|
||||
METHODS get_string
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_value) TYPE string.
|
||||
|
||||
METHODS slice
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson.
|
||||
|
||||
|
@ -135,13 +135,13 @@ INTERFACE zif_abapgit_ajson
|
|||
IMPORTING
|
||||
iv_corresponding TYPE abap_bool DEFAULT abap_false
|
||||
EXPORTING
|
||||
ev_container TYPE any
|
||||
ev_container TYPE any
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
METHODS array_to_string_table
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(rt_string_table) TYPE string_table
|
||||
RAISING
|
||||
|
@ -155,18 +155,18 @@ INTERFACE zif_abapgit_ajson
|
|||
|
||||
METHODS set
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_val TYPE any
|
||||
iv_path TYPE string
|
||||
iv_val TYPE any
|
||||
iv_ignore_empty TYPE abap_bool DEFAULT abap_true
|
||||
iv_node_type TYPE zif_abapgit_ajson_types=>ty_node_type OPTIONAL
|
||||
iv_node_type TYPE zif_abapgit_ajson_types=>ty_node_type OPTIONAL
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
|
||||
RAISING
|
||||
zcx_abapgit_ajson_error.
|
||||
|
||||
METHODS setx
|
||||
IMPORTING
|
||||
iv_param TYPE string
|
||||
iv_param TYPE string
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
|
||||
RAISING
|
||||
|
@ -174,8 +174,8 @@ INTERFACE zif_abapgit_ajson
|
|||
|
||||
METHODS set_boolean
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_val TYPE any
|
||||
iv_path TYPE string
|
||||
iv_val TYPE any
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
|
||||
RAISING
|
||||
|
@ -183,8 +183,8 @@ INTERFACE zif_abapgit_ajson
|
|||
|
||||
METHODS set_string
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_val TYPE clike
|
||||
iv_path TYPE string
|
||||
iv_val TYPE clike
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
|
||||
RAISING
|
||||
|
@ -192,8 +192,8 @@ INTERFACE zif_abapgit_ajson
|
|||
|
||||
METHODS set_integer
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_val TYPE i
|
||||
iv_path TYPE string
|
||||
iv_val TYPE i
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
|
||||
RAISING
|
||||
|
@ -201,8 +201,8 @@ INTERFACE zif_abapgit_ajson
|
|||
|
||||
METHODS set_date
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_val TYPE d
|
||||
iv_path TYPE string
|
||||
iv_val TYPE d
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
|
||||
RAISING
|
||||
|
@ -210,8 +210,8 @@ INTERFACE zif_abapgit_ajson
|
|||
|
||||
METHODS set_timestamp
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_val TYPE timestamp
|
||||
iv_path TYPE string
|
||||
iv_val TYPE timestamp
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
|
||||
RAISING
|
||||
|
@ -219,7 +219,7 @@ INTERFACE zif_abapgit_ajson
|
|||
|
||||
METHODS set_null
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
|
||||
RAISING
|
||||
|
@ -227,7 +227,7 @@ INTERFACE zif_abapgit_ajson
|
|||
|
||||
METHODS delete
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_path TYPE string
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
|
||||
RAISING
|
||||
|
@ -235,8 +235,8 @@ INTERFACE zif_abapgit_ajson
|
|||
|
||||
METHODS touch_array
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_clear TYPE abap_bool DEFAULT abap_false
|
||||
iv_path TYPE string
|
||||
iv_clear TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
|
||||
RAISING
|
||||
|
@ -244,8 +244,8 @@ INTERFACE zif_abapgit_ajson
|
|||
|
||||
METHODS push
|
||||
IMPORTING
|
||||
iv_path TYPE string
|
||||
iv_val TYPE any
|
||||
iv_path TYPE string
|
||||
iv_val TYPE any
|
||||
RETURNING
|
||||
VALUE(ri_json) TYPE REF TO zif_abapgit_ajson
|
||||
RAISING
|
||||
|
@ -253,7 +253,7 @@ INTERFACE zif_abapgit_ajson
|
|||
|
||||
METHODS stringify
|
||||
IMPORTING
|
||||
iv_indent TYPE i DEFAULT 0
|
||||
iv_indent TYPE i DEFAULT 0
|
||||
RETURNING
|
||||
VALUE(rv_json) TYPE string
|
||||
RAISING
|
||||
|
|
|
@ -13,8 +13,8 @@ INTERFACE zif_abapgit_ajson_filter
|
|||
|
||||
METHODS keep_node
|
||||
IMPORTING
|
||||
is_node TYPE zif_abapgit_ajson_types=>ty_node
|
||||
iv_visit TYPE ty_visit_type DEFAULT visit_type-value
|
||||
is_node TYPE zif_abapgit_ajson_types=>ty_node
|
||||
iv_visit TYPE ty_visit_type DEFAULT visit_type-value
|
||||
RETURNING
|
||||
VALUE(rv_keep) TYPE abap_bool
|
||||
RAISING
|
||||
|
|
|
@ -13,7 +13,7 @@ INTERFACE zif_abapgit_ajson_mapping
|
|||
TYPES:
|
||||
BEGIN OF ty_rename,
|
||||
from TYPE string,
|
||||
to TYPE string,
|
||||
to TYPE string,
|
||||
END OF ty_rename,
|
||||
tty_rename_map TYPE STANDARD TABLE OF ty_rename
|
||||
WITH UNIQUE SORTED KEY by_name COMPONENTS from.
|
||||
|
|
|
@ -16,12 +16,12 @@ INTERFACE zif_abapgit_ajson_types
|
|||
|
||||
TYPES:
|
||||
BEGIN OF ty_node,
|
||||
path TYPE string,
|
||||
name TYPE string,
|
||||
type TYPE ty_node_type,
|
||||
value TYPE string,
|
||||
index TYPE i,
|
||||
order TYPE i,
|
||||
path TYPE string,
|
||||
name TYPE string,
|
||||
type TYPE ty_node_type,
|
||||
value TYPE string,
|
||||
index TYPE i,
|
||||
order TYPE i,
|
||||
children TYPE i,
|
||||
END OF ty_node.
|
||||
TYPES:
|
||||
|
|
|
@ -37,7 +37,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_aff_registry IMPLEMENTATION.
|
||||
CLASS ZCL_ABAPGIT_AFF_REGISTRY IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD constructor.
|
||||
|
@ -46,17 +46,32 @@ CLASS zcl_abapgit_aff_registry IMPLEMENTATION.
|
|||
|
||||
|
||||
METHOD initialize_registry_table.
|
||||
register( 'APLO' ).
|
||||
register( 'BGQC' ).
|
||||
register( 'CDBO' ).
|
||||
register( 'CHKC' ).
|
||||
register( 'CHKO' ).
|
||||
register( 'CHKV' ).
|
||||
register( 'COTA' ).
|
||||
register( 'DRTY' ).
|
||||
register( 'DTEB' ).
|
||||
register( 'DSFI' ).
|
||||
register( 'DRAS' ).
|
||||
register( 'DSFD' ).
|
||||
register( 'EVTB' ).
|
||||
register( 'EEEC' ).
|
||||
register( 'GSMP' ).
|
||||
register( iv_obj_type = 'INTF'
|
||||
iv_experimental = abap_true ).
|
||||
register( 'SAJT' ).
|
||||
register( 'SAJC' ).
|
||||
register( 'SMBC' ).
|
||||
register( 'SWCR' ).
|
||||
register( 'NONT' ).
|
||||
register( 'RONT' ).
|
||||
register( 'UIAD' ).
|
||||
register( 'UIPG' ).
|
||||
register( 'UIST' ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ CLASS zcl_abapgit_json_handler DEFINITION
|
|||
mappings TYPE ty_json_abap_mappings,
|
||||
END OF ty_enum_mapping .
|
||||
TYPES:
|
||||
ty_enum_mappings TYPE TABLE OF ty_enum_mapping WITH DEFAULT KEY .
|
||||
ty_enum_mappings TYPE STANDARD TABLE OF ty_enum_mapping WITH DEFAULT KEY .
|
||||
TYPES:
|
||||
BEGIN OF ty_path_value_pair,
|
||||
path TYPE string,
|
||||
|
@ -51,7 +51,7 @@ CLASS zcl_abapgit_json_handler DEFINITION
|
|||
"! @parameter ev_data | data of the xstring
|
||||
METHODS deserialize
|
||||
IMPORTING
|
||||
!iv_content TYPE xstring
|
||||
!iv_content TYPE string
|
||||
!iv_defaults TYPE ty_skip_paths OPTIONAL
|
||||
!iv_enum_mappings TYPE ty_enum_mappings OPTIONAL
|
||||
EXPORTING
|
||||
|
@ -99,14 +99,11 @@ CLASS zcl_abapgit_json_handler IMPLEMENTATION.
|
|||
|
||||
|
||||
METHOD deserialize.
|
||||
DATA lv_json TYPE string.
|
||||
DATA lo_ajson TYPE REF TO zif_abapgit_ajson.
|
||||
DATA lo_ajson TYPE REF TO zif_abapgit_ajson.
|
||||
|
||||
CLEAR ev_data.
|
||||
|
||||
lv_json = zcl_abapgit_convert=>xstring_to_string_utf8( iv_content ).
|
||||
|
||||
lo_ajson = zcl_abapgit_ajson=>parse( lv_json
|
||||
lo_ajson = zcl_abapgit_ajson=>parse( iv_content
|
||||
)->map( zcl_abapgit_ajson_mapping=>create_to_snake_case( ) ).
|
||||
|
||||
map2abap_original_language( CHANGING co_ajson = lo_ajson ).
|
||||
|
@ -161,17 +158,13 @@ CLASS zcl_abapgit_json_handler IMPLEMENTATION.
|
|||
|
||||
METHOD map2abap_original_language.
|
||||
DATA:
|
||||
lv_iso_language TYPE laiso,
|
||||
lv_bcp47_language TYPE string,
|
||||
lv_original_language TYPE sy-langu.
|
||||
|
||||
|
||||
lv_iso_language = co_ajson->get_string( '/header/original_language' ).
|
||||
lv_bcp47_language = co_ajson->get_string( '/header/original_language' ).
|
||||
|
||||
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
|
||||
EXPORTING
|
||||
input = lv_iso_language
|
||||
IMPORTING
|
||||
output = lv_original_language.
|
||||
lv_original_language = zcl_abapgit_convert=>language_bcp47_to_sap1( lv_bcp47_language ).
|
||||
|
||||
co_ajson->set_string( iv_path = '/header/original_language'
|
||||
iv_val = lv_original_language ).
|
||||
|
@ -219,17 +212,16 @@ CLASS zcl_abapgit_json_handler IMPLEMENTATION.
|
|||
|
||||
METHOD map2json_original_language.
|
||||
DATA:
|
||||
lv_iso_language TYPE laiso,
|
||||
lv_bcp47_language TYPE string,
|
||||
lv_original_language TYPE sy-langu.
|
||||
|
||||
|
||||
lv_original_language = co_ajson->get_string( '/header/originalLanguage' ).
|
||||
|
||||
lv_iso_language = zcl_abapgit_convert=>conversion_exit_isola_output( lv_original_language ).
|
||||
lv_bcp47_language = zcl_abapgit_convert=>language_sap1_to_bcp47( lv_original_language ).
|
||||
|
||||
TRANSLATE lv_iso_language TO LOWER CASE.
|
||||
co_ajson->set_string( iv_path = '/header/originalLanguage'
|
||||
iv_val = lv_iso_language ).
|
||||
iv_val = lv_bcp47_language ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
52
src/objects/aff/zcl_abapgit_json_path.clas.abap
Normal file
52
src/objects/aff/zcl_abapgit_json_path.clas.abap
Normal file
|
@ -0,0 +1,52 @@
|
|||
CLASS zcl_abapgit_json_path DEFINITION PUBLIC CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
METHODS: serialize
|
||||
IMPORTING iv_json TYPE string
|
||||
RETURNING VALUE(rt_result) TYPE string_table
|
||||
RAISING zcx_abapgit_exception.
|
||||
METHODS: deserialize
|
||||
IMPORTING it_json_path TYPE string_table
|
||||
RETURNING VALUE(rv_result) TYPE string
|
||||
RAISING zcx_abapgit_exception.
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS zcl_abapgit_json_path IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD deserialize.
|
||||
|
||||
rv_result = lcl_json_path=>deserialize( it_json_path ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD serialize.
|
||||
DATA: lo_json_path TYPE REF TO lcl_json_path,
|
||||
lv_json_xstring TYPE xstring,
|
||||
lt_root_path TYPE string_table,
|
||||
lo_reader TYPE REF TO if_sxml_reader,
|
||||
lx_parse_error TYPE REF TO cx_sxml_parse_error.
|
||||
|
||||
lv_json_xstring = zcl_abapgit_convert=>string_to_xstring_utf8( iv_json ).
|
||||
lo_reader = cl_sxml_string_reader=>create( input = lv_json_xstring ).
|
||||
|
||||
TRY.
|
||||
IF lo_reader->read_next_node( ) IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
CATCH cx_sxml_parse_error INTO lx_parse_error.
|
||||
zcx_abapgit_exception=>raise_with_text( lx_parse_error ).
|
||||
ENDTRY.
|
||||
|
||||
APPEND `$` TO lt_root_path.
|
||||
|
||||
CREATE OBJECT lo_json_path.
|
||||
lo_json_path->serialize_rec( EXPORTING io_reader = lo_reader
|
||||
it_path = lt_root_path
|
||||
CHANGING ct_json_paths = rt_result ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
404
src/objects/aff/zcl_abapgit_json_path.clas.locals_imp.abap
Normal file
404
src/objects/aff/zcl_abapgit_json_path.clas.locals_imp.abap
Normal file
|
@ -0,0 +1,404 @@
|
|||
*"* use this source file for the definition and implementation of
|
||||
*"* local helper classes, interface definitions and type
|
||||
*"* declarations
|
||||
|
||||
CLASS lcl_json_path DEFINITION CREATE PUBLIC.
|
||||
|
||||
PUBLIC SECTION.
|
||||
METHODS:
|
||||
serialize_rec
|
||||
IMPORTING io_reader TYPE REF TO if_sxml_reader
|
||||
it_path TYPE string_table
|
||||
CHANGING ct_json_paths TYPE string_table.
|
||||
|
||||
CLASS-METHODS: deserialize
|
||||
IMPORTING it_json_path TYPE string_table
|
||||
RETURNING VALUE(rv_result) TYPE string
|
||||
RAISING zcx_abapgit_exception.
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
|
||||
METHODS:
|
||||
is_array
|
||||
IMPORTING io_reader TYPE REF TO if_sxml_reader
|
||||
RETURNING VALUE(rv_result) TYPE abap_bool.
|
||||
METHODS:
|
||||
is_string_open
|
||||
IMPORTING io_reader TYPE REF TO if_sxml_reader
|
||||
RETURNING VALUE(rv_result) TYPE abap_bool.
|
||||
METHODS:
|
||||
is_object
|
||||
IMPORTING io_reader TYPE REF TO if_sxml_reader
|
||||
RETURNING VALUE(rv_result) TYPE abap_bool.
|
||||
METHODS:
|
||||
serialize_rec_array
|
||||
IMPORTING io_reader TYPE REF TO if_sxml_reader
|
||||
it_path TYPE string_table
|
||||
CHANGING ct_json_paths TYPE string_table.
|
||||
METHODS:
|
||||
get_json_path
|
||||
IMPORTING it_path TYPE string_table
|
||||
RETURNING VALUE(rv_result) TYPE string.
|
||||
CLASS-METHODS get_path_elements
|
||||
IMPORTING iv_path TYPE string
|
||||
RETURNING VALUE(rt_result) TYPE string_table
|
||||
RAISING zcx_abapgit_exception.
|
||||
CLASS-METHODS build_json
|
||||
IMPORTING it_path_elements TYPE string_table
|
||||
iv_value TYPE string
|
||||
CHANGING cv_json_string TYPE string.
|
||||
CLASS-METHODS path_contains_array
|
||||
IMPORTING iv_path TYPE string
|
||||
RETURNING VALUE(rv_result) TYPE abap_bool.
|
||||
CLASS-METHODS: to_json
|
||||
IMPORTING iv_json_path TYPE string
|
||||
RETURNING VALUE(ro_result) TYPE REF TO zcl_abapgit_ajson
|
||||
RAISING zcx_abapgit_ajson_error
|
||||
zcx_abapgit_exception.
|
||||
CLASS-METHODS: is_primitiv
|
||||
IMPORTING iv_string TYPE string
|
||||
RETURNING VALUE(rv_result) TYPE abap_bool.
|
||||
CLASS-METHODS: is_comment_or_empty_line
|
||||
IMPORTING iv_line TYPE string
|
||||
RETURNING VALUE(rv_result) TYPE abap_bool.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_json_path IMPLEMENTATION.
|
||||
|
||||
METHOD to_json.
|
||||
DATA: lv_path TYPE string,
|
||||
lv_value TYPE string,
|
||||
lt_path_elements TYPE string_table,
|
||||
lv_json TYPE string.
|
||||
|
||||
FIND REGEX `(.*)=(.*$)` IN iv_json_path SUBMATCHES lv_path lv_value.
|
||||
|
||||
IF path_contains_array( lv_path ) = abap_true.
|
||||
|
||||
lt_path_elements = get_path_elements( lv_path ).
|
||||
|
||||
build_json( EXPORTING it_path_elements = lt_path_elements
|
||||
iv_value = lv_value
|
||||
CHANGING cv_json_string = lv_json ).
|
||||
|
||||
ro_result = zcl_abapgit_ajson=>parse( lv_json ).
|
||||
ELSE.
|
||||
|
||||
REPLACE FIRST OCCURRENCE OF '$.' IN lv_path WITH ''.
|
||||
REPLACE '.' IN lv_path WITH '/'.
|
||||
ro_result = zcl_abapgit_ajson=>create_empty( iv_keep_item_order = abap_true ).
|
||||
ro_result->set( iv_path = lv_path
|
||||
iv_val = lv_value ).
|
||||
ENDIF.
|
||||
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD path_contains_array.
|
||||
DATA lv_array_pattern TYPE string VALUE `.*\[.*\].*`.
|
||||
rv_result = boolc( matches( val = iv_path
|
||||
regex = lv_array_pattern ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD build_json.
|
||||
DATA: lt_new_path_element TYPE string_table,
|
||||
lv_sub_match TYPE string,
|
||||
lv_key_name TYPE string,
|
||||
lv_key_value TYPE string,
|
||||
lv_name TYPE string,
|
||||
lv_first_elem TYPE string.
|
||||
|
||||
lt_new_path_element = it_path_elements.
|
||||
|
||||
IF lines( lt_new_path_element ) = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_new_path_element INTO lv_first_elem INDEX 1.
|
||||
|
||||
IF lv_first_elem = `$`. " is root level
|
||||
|
||||
DELETE lt_new_path_element INDEX 1.
|
||||
build_json( EXPORTING it_path_elements = lt_new_path_element
|
||||
iv_value = iv_value
|
||||
CHANGING cv_json_string = cv_json_string ).
|
||||
|
||||
ELSEIF is_primitiv( lv_first_elem ) = abap_true.
|
||||
|
||||
cv_json_string = cv_json_string && | \{"{ lv_first_elem+1 }": |.
|
||||
|
||||
DELETE lt_new_path_element INDEX 1.
|
||||
|
||||
build_json( EXPORTING it_path_elements = lt_new_path_element
|
||||
iv_value = iv_value
|
||||
CHANGING cv_json_string = cv_json_string ).
|
||||
|
||||
cv_json_string = cv_json_string && ` }`.
|
||||
|
||||
ELSE. " is array
|
||||
|
||||
FIND REGEX `\[(.*)\]` IN lv_first_elem SUBMATCHES lv_sub_match.
|
||||
FIND REGEX `(\w+)(?==='([^']*)')` IN lv_sub_match SUBMATCHES lv_key_name lv_key_value.
|
||||
READ TABLE lt_new_path_element INTO lv_name INDEX 2.
|
||||
|
||||
|
||||
DELETE lt_new_path_element INDEX 1.
|
||||
DELETE lt_new_path_element INDEX 1.
|
||||
|
||||
IF lines( lt_new_path_element ) = 0.
|
||||
|
||||
cv_json_string = cv_json_string &&
|
||||
|[ \{ "{ lv_key_name }": "{ lv_key_value }", "{ lv_name+1 }": "{ iv_value }"\} ]|.
|
||||
|
||||
ELSE.
|
||||
|
||||
cv_json_string = cv_json_string && |[ \{ "{ lv_key_name }": "{ lv_key_value }", "{ lv_name+1 }":|.
|
||||
|
||||
build_json( EXPORTING it_path_elements = lt_new_path_element
|
||||
iv_value = iv_value
|
||||
CHANGING cv_json_string = cv_json_string ).
|
||||
|
||||
cv_json_string = cv_json_string && `} ] `.
|
||||
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_primitiv.
|
||||
|
||||
FIND REGEX `^.\w+` IN iv_string. " string start with .
|
||||
rv_result = boolc( sy-subrc = 0 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
||||
METHOD get_path_elements.
|
||||
DATA: lv_pcre_pattern TYPE string,
|
||||
lt_match_result TYPE match_result_tab,
|
||||
lv_match TYPE match_result,
|
||||
lv_hit TYPE string,
|
||||
lx_find TYPE REF TO cx_root.
|
||||
|
||||
lv_pcre_pattern = `(^\$)|(\.\w+)|(\[[^\]]*\])`.
|
||||
|
||||
TRY.
|
||||
FIND ALL OCCURRENCES OF REGEX lv_pcre_pattern IN iv_path RESULTS lt_match_result.
|
||||
CATCH cx_sy_find_infinite_loop cx_sy_range_out_of_bounds cx_sy_invalid_regex cx_sy_regex_too_complex INTO lx_find.
|
||||
zcx_abapgit_exception=>raise_with_text( lx_find ).
|
||||
ENDTRY.
|
||||
LOOP AT lt_match_result INTO lv_match.
|
||||
lv_hit = substring( val = iv_path
|
||||
off = lv_match-offset
|
||||
len = lv_match-length ).
|
||||
APPEND lv_hit TO rt_result.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_array.
|
||||
rv_result = boolc( io_reader->name = 'array' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_string_open.
|
||||
rv_result = boolc( io_reader->name = 'str' AND io_reader->node_type = if_sxml_node=>co_nt_element_open ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_object.
|
||||
rv_result = boolc( io_reader->name = 'object' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD serialize_rec.
|
||||
DATA: lt_new_path TYPE string_table,
|
||||
lv_key TYPE string.
|
||||
|
||||
lt_new_path = it_path.
|
||||
|
||||
IF io_reader->read_next_node( ) IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
IF is_string_open( io_reader ) = abap_true.
|
||||
|
||||
APPEND io_reader->value TO lt_new_path.
|
||||
lv_key = get_json_path( lt_new_path ).
|
||||
|
||||
io_reader->read_next_node( ).
|
||||
lv_key = |{ lv_key }={ io_reader->value }|.
|
||||
APPEND lv_key TO ct_json_paths.
|
||||
|
||||
io_reader->read_next_node( ).
|
||||
DELETE lt_new_path INDEX lines( lt_new_path ).
|
||||
|
||||
serialize_rec( EXPORTING io_reader = io_reader
|
||||
it_path = lt_new_path
|
||||
CHANGING ct_json_paths = ct_json_paths ).
|
||||
|
||||
ELSEIF is_object( io_reader ) = abap_true AND io_reader->node_type = if_sxml_node=>co_nt_element_open.
|
||||
|
||||
APPEND io_reader->value TO lt_new_path.
|
||||
serialize_rec( EXPORTING io_reader = io_reader
|
||||
it_path = lt_new_path
|
||||
CHANGING ct_json_paths = ct_json_paths ).
|
||||
|
||||
ELSEIF is_array( io_reader ) = abap_true AND io_reader->node_type = if_sxml_node=>co_nt_element_open.
|
||||
|
||||
APPEND io_reader->value TO lt_new_path.
|
||||
serialize_rec_array( EXPORTING io_reader = io_reader
|
||||
it_path = lt_new_path
|
||||
CHANGING ct_json_paths = ct_json_paths ).
|
||||
|
||||
ELSEIF ( is_object( io_reader ) = abap_true OR is_array( io_reader ) = abap_true )
|
||||
AND io_reader->node_type = if_sxml_node=>co_nt_element_close.
|
||||
|
||||
DELETE lt_new_path INDEX lines( lt_new_path ).
|
||||
serialize_rec( EXPORTING io_reader = io_reader
|
||||
it_path = lt_new_path
|
||||
CHANGING ct_json_paths = ct_json_paths ).
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD serialize_rec_array.
|
||||
DATA: lt_new_path TYPE string_table,
|
||||
lv_json_path TYPE string,
|
||||
lv_array_key TYPE string.
|
||||
|
||||
lt_new_path = it_path.
|
||||
|
||||
IF io_reader->read_next_node( ) IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
IF is_string_open( io_reader ) = abap_true.
|
||||
|
||||
APPEND io_reader->value TO lt_new_path.
|
||||
lv_json_path = get_json_path( lt_new_path ).
|
||||
|
||||
io_reader->read_next_node( ).
|
||||
lv_json_path = |{ lv_json_path }={ io_reader->value }|.
|
||||
APPEND lv_json_path TO ct_json_paths.
|
||||
io_reader->read_next_node( ).
|
||||
|
||||
serialize_rec( EXPORTING io_reader = io_reader
|
||||
it_path = lt_new_path
|
||||
CHANGING ct_json_paths = ct_json_paths ).
|
||||
|
||||
ELSEIF is_object( io_reader ) = abap_true AND io_reader->node_type = if_sxml_node=>co_nt_element_open.
|
||||
|
||||
io_reader->read_next_node( ).
|
||||
lv_array_key = io_reader->value.
|
||||
io_reader->read_next_node( ).
|
||||
lv_array_key = |[?(@.{ lv_array_key }=='{ io_reader->value }')]|.
|
||||
APPEND lv_array_key TO lt_new_path.
|
||||
io_reader->read_next_node( ).
|
||||
|
||||
io_reader->read_next_node( ).
|
||||
APPEND io_reader->value TO lt_new_path.
|
||||
lv_json_path = get_json_path( lt_new_path ).
|
||||
|
||||
io_reader->read_next_node( ).
|
||||
lv_json_path = |{ lv_json_path }={ io_reader->value }|.
|
||||
APPEND lv_json_path TO ct_json_paths.
|
||||
io_reader->read_next_node( ).
|
||||
|
||||
DELETE lt_new_path INDEX lines( lt_new_path ).
|
||||
serialize_rec_array( EXPORTING io_reader = io_reader
|
||||
it_path = lt_new_path
|
||||
CHANGING ct_json_paths = ct_json_paths ).
|
||||
|
||||
ELSEIF is_array( io_reader ) = abap_true AND io_reader->node_type = if_sxml_node=>co_nt_element_open.
|
||||
|
||||
APPEND io_reader->value TO lt_new_path.
|
||||
serialize_rec_array( EXPORTING io_reader = io_reader
|
||||
it_path = lt_new_path
|
||||
CHANGING ct_json_paths = ct_json_paths ).
|
||||
|
||||
ELSEIF ( is_object( io_reader ) = abap_true OR is_array( io_reader ) = abap_true )
|
||||
AND io_reader->node_type = if_sxml_node=>co_nt_element_close.
|
||||
|
||||
DELETE lt_new_path INDEX lines( lt_new_path ).
|
||||
serialize_rec_array( EXPORTING io_reader = io_reader
|
||||
it_path = lt_new_path
|
||||
CHANGING ct_json_paths = ct_json_paths ).
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_json_path.
|
||||
rv_result = concat_lines_of( table = it_path
|
||||
sep = `.` ).
|
||||
REPLACE ALL OCCURRENCES OF `.[` IN rv_result WITH `[`.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD deserialize.
|
||||
|
||||
DATA: lo_merged TYPE REF TO zif_abapgit_ajson,
|
||||
lv_json_path TYPE string,
|
||||
lo_deserialization_result TYPE REF TO zif_abapgit_ajson,
|
||||
lx_ajson TYPE REF TO zcx_abapgit_ajson_error.
|
||||
|
||||
TRY.
|
||||
lo_merged = zcl_abapgit_ajson=>parse( `` ).
|
||||
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
|
||||
zcx_abapgit_exception=>raise_with_text( lx_ajson ).
|
||||
ENDTRY.
|
||||
|
||||
LOOP AT it_json_path INTO lv_json_path.
|
||||
IF is_comment_or_empty_line( lv_json_path ) = abap_true.
|
||||
CONTINUE.
|
||||
ENDIF.
|
||||
|
||||
|
||||
TRY.
|
||||
lo_deserialization_result = to_json( lv_json_path ).
|
||||
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
|
||||
zcx_abapgit_exception=>raise_with_text( lx_ajson ).
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lo_merged = zcl_abapgit_ajson_utilities=>new( )->merge( io_json_a = lo_merged
|
||||
io_json_b = lo_deserialization_result ).
|
||||
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
|
||||
zcx_abapgit_exception=>raise_with_text( lx_ajson ).
|
||||
ENDTRY.
|
||||
|
||||
ENDLOOP.
|
||||
|
||||
TRY.
|
||||
rv_result = lo_merged->stringify( 2 ).
|
||||
CATCH zcx_abapgit_ajson_error INTO lx_ajson.
|
||||
zcx_abapgit_exception=>raise_with_text( lx_ajson ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD is_comment_or_empty_line.
|
||||
|
||||
IF iv_line IS INITIAL.
|
||||
rv_result = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
FIND REGEX `^!` IN iv_line.
|
||||
IF sy-subrc = 0.
|
||||
rv_result = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
FIND REGEX `^#` IN iv_line.
|
||||
IF sy-subrc = 0.
|
||||
rv_result = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user